зеркало из https://github.com/mozilla/pjs.git
added more functionality
This commit is contained in:
Родитель
af230ce95c
Коммит
dbf9f01061
|
@ -23,93 +23,121 @@
|
|||
#include "nsString.h"
|
||||
#include "nsStringUtil.h"
|
||||
|
||||
#include <Xm/Text.h>
|
||||
|
||||
void nsTextHelper::PreCreateWidget(nsWidgetInitData *aInitData)
|
||||
#define DBG 0
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
void nsTextHelper::SetMaxTextLength(PRUint32 aChars)
|
||||
{
|
||||
if (nsnull != aInitData) {
|
||||
nsTextWidgetInitData* data = (nsTextWidgetInitData *) aInitData;
|
||||
mIsPassword = data->mIsPassword;
|
||||
XmTextSetMaxLength(mWidget, (int)aChars);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
PRUint32 nsTextHelper::GetText(nsString& aTextBuffer, PRUint32 aBufferSize)
|
||||
{
|
||||
char * str = XmTextGetString(mWidget);
|
||||
aTextBuffer.SetLength(0);
|
||||
aTextBuffer.Append(str);
|
||||
PRUint32 len = (PRUint32)strlen(str);
|
||||
XtFree(str);
|
||||
return len;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
PRUint32 nsTextHelper::SetText(const nsString& aText)
|
||||
{
|
||||
if (!mIsReadOnly) {
|
||||
NS_ALLOC_STR_BUF(buf, aText, 512);
|
||||
XmTextSetString(mWidget, buf);
|
||||
NS_FREE_STR_BUF(buf);
|
||||
return(aText.Length());
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
PRUint32 nsTextHelper::InsertText(const nsString &aText, PRUint32 aStartPos, PRUint32 aEndPos)
|
||||
{
|
||||
if (!mIsReadOnly) {
|
||||
NS_ALLOC_STR_BUF(buf, aText, 512);
|
||||
XmTextInsert(mWidget, aStartPosbuf);
|
||||
NS_FREE_STR_BUF(buf);
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
void nsTextHelper::RemoveText()
|
||||
{
|
||||
char blank[2];
|
||||
blank[0] = 0;
|
||||
|
||||
if (!mIsReadOnly) {
|
||||
XmTextSetString(mWidget, buf);
|
||||
}
|
||||
}
|
||||
|
||||
void nsTextHelper::SetMaxTextLength(PRUint32 aChars)
|
||||
{
|
||||
//::SendMessage(mWnd, EM_SETLIMITTEXT, (WPARAM) (INT)aChars, 0);
|
||||
}
|
||||
|
||||
PRUint32 nsTextHelper::GetText(nsString& aTextBuffer, PRUint32 aBufferSize) {
|
||||
|
||||
/*int length = GetWindowTextLength(mWnd);
|
||||
int bufLength = length + 1;
|
||||
NS_ALLOC_CHAR_BUF(buf, 512, bufLength);
|
||||
int charsCopied = GetWindowText(mWnd, buf, bufLength);
|
||||
aTextBuffer.SetLength(0);
|
||||
aTextBuffer.Append(buf);
|
||||
NS_FREE_CHAR_BUF(buf);
|
||||
*/
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
PRUint32 nsTextHelper::SetText(const nsString& aText)
|
||||
{
|
||||
/*
|
||||
NS_ALLOC_STR_BUF(buf, aText, 512);
|
||||
SetWindowText(mWnd, buf);
|
||||
NS_FREE_STR_BUF(buf);
|
||||
return(aText.Length());
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
PRUint32 nsTextHelper::InsertText(const nsString &aText, PRUint32 aStartPos, PRUint32 aEndPos)
|
||||
{
|
||||
// NOT IMPLEMENTED
|
||||
return(0);
|
||||
}
|
||||
|
||||
void nsTextHelper::RemoveText()
|
||||
{
|
||||
//SetWindowText(mWnd, "");
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
void nsTextHelper::SetPassword(PRBool aIsPassword)
|
||||
{
|
||||
mIsPassword = aIsPassword;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
PRBool nsTextHelper::SetReadOnly(PRBool aReadOnlyFlag)
|
||||
{
|
||||
PRBool oldSetting = mIsReadOnly;
|
||||
mIsReadOnly = aReadOnlyFlag;
|
||||
XmTextSetEditable(mWidget, aReadOnlyFlag);
|
||||
return(oldSetting);
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
void nsTextHelper::SelectAll()
|
||||
{
|
||||
//::SendMessage(mWnd, EM_SETSEL, (WPARAM) 0, (LPARAM)-1);
|
||||
nsString text;
|
||||
PRUint32 numChars = GetText(text, 0);
|
||||
SetSelection(0, numChars);
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
void nsTextHelper::SetSelection(PRUint32 aStartSel, PRUint32 aEndSel)
|
||||
{
|
||||
//::SendMessage(mWnd, EM_SETSEL, (WPARAM) (INT)aStartSel, (INT) (LPDWORD)aEndSel);
|
||||
XmTextPosition left = (XmTextPosition)aStartSel;
|
||||
XmTextPosition right = (XmTextPosition)aEndSel;
|
||||
|
||||
Time time;
|
||||
|
||||
XmTextSetSelection(mWidget, left, right, time);
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
void nsTextHelper::GetSelection(PRUint32 *aStartSel, PRUint32 *aEndSel)
|
||||
{
|
||||
//::SendMessage(mWnd, EM_GETSEL, (WPARAM) (LPDWORD)aStartSel, (LPARAM) (LPDWORD)aEndSel);
|
||||
XmTextPosition left;
|
||||
XmTextPosition right;
|
||||
|
||||
XmTextGetSelectionPosition(mWidget, &left, &right);
|
||||
*aStartSel = left;
|
||||
*aEndSel = right;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
void nsTextHelper::SetCaretPosition(PRUint32 aPosition)
|
||||
{
|
||||
XmTextSetInsertionPosition(mWidget, (XmTextPosition)aPosition);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
PRUint32 nsTextHelper::GetCaretPosition()
|
||||
{
|
||||
return(0);
|
||||
return (PRUin32)XmTextGetInsertionPosition(mWidget);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
|
@ -134,11 +162,6 @@ nsTextHelper::~nsTextHelper()
|
|||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
//
|
||||
// Clear window before paint
|
||||
//
|
||||
//-------------------------------------------------------------------------
|
||||
|
||||
PRBool nsTextHelper::AutoErase()
|
||||
{
|
||||
return(PR_TRUE);
|
||||
|
|
|
@ -0,0 +1,241 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#include "nsTextWidget.h"
|
||||
#include "nsToolkit.h"
|
||||
#include "nsColor.h"
|
||||
#include "nsGUIEvent.h"
|
||||
#include "nsString.h"
|
||||
|
||||
#include <Xm/Text.h>
|
||||
|
||||
#define DBG 0
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
//
|
||||
// nsTextWidget constructor
|
||||
//
|
||||
//-------------------------------------------------------------------------
|
||||
nsTextWidget::nsTextWidget(nsISupports *aOuter) : nsTextHelper(aOuter),
|
||||
mIsPasswordCallBacksInstalled(PR_FALSE)
|
||||
{
|
||||
//mBackground = NS_RGB(124, 124, 124);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
//
|
||||
// nsTextWidget destructor
|
||||
//
|
||||
//-------------------------------------------------------------------------
|
||||
nsTextWidget::~nsTextWidget()
|
||||
{
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
void nsButton::Create(nsIWidget *aParent,
|
||||
const nsRect &aRect,
|
||||
EVENT_CALLBACK aHandleEventFunction,
|
||||
nsIDeviceContext *aContext,
|
||||
nsIToolkit *aToolkit,
|
||||
nsWidgetInitData *aInitData)
|
||||
{
|
||||
Widget parentWidget = nsnull;
|
||||
|
||||
if (DBG) fprintf(stderr, "aParent 0x%x\n", aParent);
|
||||
|
||||
if (aParent) {
|
||||
parentWidget = (Widget) aParent->GetNativeData(NS_NATIVE_WIDGET);
|
||||
} else {
|
||||
parentWidget = (Widget) aInitData ;
|
||||
}
|
||||
|
||||
if (DBG) fprintf(stderr, "Parent 0x%x\n", parentWidget);
|
||||
|
||||
mWidget = ::XtVaCreateManagedWidget("button",
|
||||
xmTextWidgetClass,
|
||||
parentWidget,
|
||||
XmNwidth, aRect.width,
|
||||
XmNheight, aRect.height,
|
||||
XmNrecomputeSize, False,
|
||||
XmNhighlightOnEnter, False,
|
||||
XmNx, aRect.x,
|
||||
XmNy, aRect.y,
|
||||
nsnull);
|
||||
|
||||
if (DBG) fprintf(stderr, "Button 0x%x this 0x%x\n", mWidget, this);
|
||||
|
||||
// save the event callback function
|
||||
mEventCallback = aHandleEventFunction;
|
||||
|
||||
InitCallbacks();
|
||||
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
void nsButton::Create(nsNativeWindow aParent,
|
||||
const nsRect &aRect,
|
||||
EVENT_CALLBACK aHandleEventFunction,
|
||||
nsIDeviceContext *aContext,
|
||||
nsIToolkit *aToolkit,
|
||||
nsWidgetInitData *aInitData)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
//
|
||||
// Query interface implementation
|
||||
//
|
||||
//-------------------------------------------------------------------------
|
||||
nsresult nsTextWidget::QueryInterface(REFNSIID aIID, void** aInstancePtr)
|
||||
{
|
||||
static NS_DEFINE_IID(kITextWidgetIID, NS_ITEXTWIDGET_IID);
|
||||
|
||||
if (aIID.Equals(kITextWidgetIID)) {
|
||||
AddRef();
|
||||
*aInstancePtr = (void**) &mAggWidget;
|
||||
return NS_OK;
|
||||
}
|
||||
return nsWindow::QueryInterface(aIID, aInstancePtr);
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
//
|
||||
// move, paint, resizes message - ignore
|
||||
//
|
||||
//-------------------------------------------------------------------------
|
||||
PRBool nsTextWidget::OnMove(PRInt32, PRInt32)
|
||||
{
|
||||
return PR_FALSE;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------
|
||||
PRBool nsTextWidget::OnPaint()
|
||||
{
|
||||
return PR_FALSE;
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
PRBool nsTextWidget::OnResize(nsRect &aWindowRect)
|
||||
{
|
||||
return PR_FALSE;
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
#define GET_OUTER() ((nsButton*) ((char*)this - nsButton::GetOuterOffset()))
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
void TextWidget::AggTextWidget::SetMaxTextLength(PRUint32 aChars)
|
||||
{
|
||||
GET_OUTER()->SetMaxTextLength(aChars);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------
|
||||
PRUint32 TextWidget::AggTextWidget::GetText(nsString& aTextBuffer, PRUint32 aBufferSize) {
|
||||
return GET_OUTER()->GetText(aTextBuffer, aBufferSize);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------
|
||||
PRUint32 TextWidget::AggTextWidget::SetText(const nsString& aText)
|
||||
{
|
||||
return GET_OUTER()->SetText(aText);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------
|
||||
PRUint32 TextWidget::AggTextWidget::InsertText(const nsString &aText, PRUint32 aStartPos, PRUint32 aEndPos)
|
||||
{
|
||||
return GET_OUTER()->InsertText(aText, aStartPos, aEndPos);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------
|
||||
void TextWidget::AggTextWidget::RemoveText()
|
||||
{
|
||||
GET_OUTER()->RemoveText();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------
|
||||
void TextWidget::AggTextWidget::SetPassword(PRBool aIsPassword)
|
||||
{
|
||||
GET_OUTER()->SetPassword(aIsPassword);
|
||||
if (aIsPassword) {
|
||||
if (!mIsPasswordCallBacksInstalled) {
|
||||
XtAddCallback(mWidget, XmNmodifyVerifyCallback, nsXtWidget_Text_Callback, NULL);
|
||||
XtAddCallback(mWidget, XmNactivateCallback, nsXtWidget_Text_Callback, NULL);
|
||||
mIsPasswordCallBacksInstalled = PR_TRUE;
|
||||
}
|
||||
} else {
|
||||
if (mIsPasswordCallBacksInstalled) {
|
||||
XtRemoveCallback(mWidget, XmNmodifyVerifyCallback, nsXtWidget_Text_Callback, NULL);
|
||||
XtRemoveCallback(mWidget, XmNactivateCallback, nsXtWidget_Text_Callback, NULL);
|
||||
mIsPasswordCallBacksInstalled = PR_FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------
|
||||
PRBool TextWidget::AggTextWidget::SetReadOnly(PRBool aReadOnlyFlag)
|
||||
{
|
||||
GET_OUTER()->SetReadOnly(aReadOnlyFlag);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------
|
||||
void TextWidget::AggTextWidget::SelectAll()
|
||||
{
|
||||
GET_OUTER()->SelectAll();
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
void TextWidget::AggTextWidget::SetSelection(PRUint32 aStartSel, PRUint32 aEndSel)
|
||||
{
|
||||
GET_OUTER()->SetSelection(aStartSel, aEndSel);
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
void TextWidget::AggTextWidget::GetSelection(PRUint32 *aStartSel, PRUint32 *aEndSel)
|
||||
{
|
||||
GET_OUTER()->GetSelection(aStartSel, aEndSel);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------
|
||||
void TextWidget::AggTextWidget::SetCaretPosition(PRUint32 aPosition)
|
||||
{
|
||||
GET_OUTER()->SetCaretPosition(aPosition);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------
|
||||
PRUint32 TextWidget::AggTextWidget::GetCaretPosition()
|
||||
{
|
||||
return GET_OUTER()->GetCaretPosition();
|
||||
}
|
||||
|
||||
PRBool TextWidget::AggTextWidget::AutoErase()
|
||||
{
|
||||
return GET_OUTER()->AutoErase();
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
BASE_IWIDGET_IMPL(nsTextWidget, AggTextWidget);
|
||||
|
|
@ -0,0 +1,117 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#ifndef nsTextWidget_h__
|
||||
#define nsTextWidget_h__
|
||||
|
||||
#include "nsWindow.h"
|
||||
#include "nsTextHelper.h"
|
||||
|
||||
#include "nsITextWidget.h"
|
||||
|
||||
/**
|
||||
* Native Motif single line edit control wrapper.
|
||||
*/
|
||||
|
||||
class nsTextWidget : public nsTextHelper
|
||||
{
|
||||
|
||||
public:
|
||||
nsTextWidget(nsISupports *aOuter);
|
||||
virtual ~nsTextWidget();
|
||||
|
||||
NS_IMETHOD QueryInterface(REFNSIID aIID, void** aInstancePtr);
|
||||
|
||||
void Create(nsIWidget *aParent,
|
||||
const nsRect &aRect,
|
||||
EVENT_CALLBACK aHandleEventFunction,
|
||||
nsIDeviceContext *aContext = nsnull,
|
||||
nsIToolkit *aToolkit = nsnull,
|
||||
nsWidgetInitData *aInitData = nsnull);
|
||||
|
||||
void Create(nsNativeWindow aParent,
|
||||
const nsRect &aRect,
|
||||
EVENT_CALLBACK aHandleEventFunction,
|
||||
nsIDeviceContext *aContext = nsnull,
|
||||
nsIToolkit *aToolkit = nsnull,
|
||||
nsWidgetInitData *aInitData = nsnull);
|
||||
|
||||
|
||||
virtual PRBool OnPaint();
|
||||
virtual PRBool OnMove(PRInt32 aX, PRInt32 aY);
|
||||
virtual PRBool OnResize(nsRect &aWindowRect);
|
||||
|
||||
// nsTextHelper Interface
|
||||
virtual void SelectAll();
|
||||
virtual void SetMaxTextLength(PRUint32 aChars);
|
||||
virtual PRUint32 GetText(nsString& aTextBuffer, PRUint32 aBufferSize);
|
||||
virtual PRUint32 SetText(const nsString& aText);
|
||||
virtual PRUint32 InsertText(const nsString &aText, PRUint32 aStartPos, PRUint32 aEndPos);
|
||||
virtual void RemoveText();
|
||||
virtual void SetPassword(PRBool aIsPassword);
|
||||
virtual PRBool SetReadOnly(PRBool aReadOnlyFlag);
|
||||
virtual void SetSelection(PRUint32 aStartSel, PRUint32 aEndSel);
|
||||
virtual void GetSelection(PRUint32 *aStartSel, PRUint32 *aEndSel);
|
||||
virtual void SetCaretPosition(PRUint32 aPosition);
|
||||
virtual PRUint32 GetCaretPosition();
|
||||
virtual void PreCreateWidget(nsWidgetInitData *aInitData);
|
||||
virtual PRBool AutoErase();
|
||||
|
||||
protected:
|
||||
PRBool mIsPasswordCallBacksInstalled;
|
||||
|
||||
private:
|
||||
|
||||
// this should not be public
|
||||
static PRInt32 GetOuterOffset() {
|
||||
return offsetof(nsTextWidget,mAggWidget);
|
||||
}
|
||||
|
||||
|
||||
// Aggregator class and instance variable used to aggregate in the
|
||||
// nsIText interface to nsText w/o using multiple
|
||||
// inheritance.
|
||||
class AggTextWidget : public nsITextWidget {
|
||||
public:
|
||||
AggTextWidget();
|
||||
virtual ~AggTextWidget();
|
||||
|
||||
AGGRRGATE_METHOD_DEF
|
||||
|
||||
virtual void SelectAll();
|
||||
virtual void SetMaxTextLength(PRUint32 aChars);
|
||||
virtual PRUint32 GetText(nsString& aTextBuffer, PRUint32 aBufferSize);
|
||||
virtual PRUint32 SetText(const nsString& aText);
|
||||
virtual PRUint32 InsertText(const nsString &aText, PRUint32 aStartPos, PRUint32 aEndPos);
|
||||
virtual void RemoveText();
|
||||
virtual void SetPassword(PRBool aIsPassword);
|
||||
virtual PRBool SetReadOnly(PRBool aReadOnlyFlag);
|
||||
virtual void SetSelection(PRUint32 aStartSel, PRUint32 aEndSel);
|
||||
virtual void GetSelection(PRUint32 *aStartSel, PRUint32 *aEndSel);
|
||||
virtual void SetCaretPosition(PRUint32 aPosition);
|
||||
virtual PRUint32 GetCaretPosition();
|
||||
virtual void PreCreateWidget(nsWidgetInitData *aInitData);
|
||||
virtual PRBool AutoErase();
|
||||
|
||||
};
|
||||
AggTextWidget mAggWidget;
|
||||
|
||||
|
||||
};
|
||||
|
||||
#endif // nsTextWidget_h__
|
|
@ -231,3 +231,43 @@ void nsXtWidget_Scrollbar_Callback(Widget w, XtPointer p, XtPointer call_data)
|
|||
|
||||
|
||||
|
||||
//==============================================================
|
||||
void nsXtWidget_Text_Callback(Widget w, XtPointer p, XtPointer call_data)
|
||||
{
|
||||
nsWindow * widgetWindow = (nsWindow *) p ;
|
||||
|
||||
char * newStr;
|
||||
int len;
|
||||
|
||||
XmTextVerifyCallbackStruct *cbs = (XmTextVerifyCallbackStruct *) call_data;
|
||||
|
||||
if (cbs->reason == XmCR_ACTIVATE) {
|
||||
printf ("Password: %s0, passwd);
|
||||
return;
|
||||
}
|
||||
|
||||
if (cbs->startPos < cbs->currInsert) { /* backspace */
|
||||
cbs->endPos = strlen (passwd); /* delete from here to end */
|
||||
passwd[cbs->startPos] = 0; /* backspace--terminate */
|
||||
return;
|
||||
}
|
||||
|
||||
if (cbs->text->length > 1) {
|
||||
cbs->doit = False; /* don't allow "paste" operations */
|
||||
return; /* make the user *type* the password! */
|
||||
}
|
||||
|
||||
newStr = XtMalloc (cbs->endPos + 2); /* new char + NULL terminator */
|
||||
if (passwd) {
|
||||
strcpy (newStr, passwd);
|
||||
XtFree (passwd);
|
||||
} else
|
||||
newStr[0] = NULL;
|
||||
passwd = newStr;
|
||||
strncat (passwd, cbs->text->ptr, cbs->text->length);
|
||||
passwd[cbs->endPos + cbs->text->length] = 0;
|
||||
|
||||
for (len = 0; len < cbs->text->length; len++)
|
||||
cbs->text->ptr[len] = '*';
|
||||
}
|
||||
|
||||
|
|
|
@ -37,6 +37,8 @@ void nsXtWidget_Toggle_Callback(Widget w, XtPointer p, XtPointer call_data);
|
|||
void nsXtWidget_Toggle_ArmCallback(Widget w, XtPointer p, XtPointer call_data);
|
||||
void nsXtWidget_Toggle_DisArmCallback(Widget w, XtPointer p, XtPointer call_data);
|
||||
|
||||
void nsXtWidget_Text_Callback(Widget w, XtPointer p, XtPointer call_data);
|
||||
|
||||
#endif // __nsXtEventHandler.h
|
||||
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче