1
0
mirror of https://github.com/gryf/wmaker.git synced 2026-01-08 14:54:13 +01:00

started Appearance update in WPrefs

added tabbed view
changed some callbacks to delegate like stuff (textfield and browser)
This commit is contained in:
kojima
1999-05-15 17:38:05 +00:00
parent 70a363de7b
commit dd2d71fc9b
43 changed files with 1831 additions and 500 deletions

View File

@@ -13,6 +13,27 @@
#define CURSOR_BLINK_OFF_DELAY 300
typedef struct WMTextFieldDelegate {
void *data;
void (*didBeginEditing)(struct WMTextFieldDelegate *self,
WMNotification *notif);
void (*didChange)(struct WMTextFieldDelegate *self,
WMNotification *notif);
void (*didEndEditing)(struct WMTextFieldDelegate *self,
WMNotification *notif);
Bool (*shouldBeginEditing)(struct WMTextFieldDelegate *self,
WMTextField *tPtr);
Bool (*shouldEndEditing)(struct WMTextFieldDelegate *self,
WMTextField *tPtr);
} WMTextFieldDelegate;
char *WMTextDidChangeNotification = "WMTextDidChangeNotification";
char *WMTextDidBeginEditingNotification = "WMTextDidBeginEditingNotification";
char *WMTextDidEndEditingNotification = "WMTextDidEndEditingNotification";
@@ -43,6 +64,8 @@ typedef struct W_TextField {
WMFont *font;
WMTextFieldDelegate *delegate;
#if 0
WMHandlerID timerID; /* for cursor blinking */
#endif
@@ -69,6 +92,13 @@ typedef struct W_TextField {
} TextField;
#define NOTIFY(T,C,N,A) { WMNotification *notif = WMCreateNotification(N,T,A);\
if ((T)->delegate && (T)->delegate->C)\
(*(T)->delegate->C)((T)->delegate,notif);\
WMPostNotification(notif);\
WMReleaseNotification(notif);}
#define MIN_TEXT_BUFFER 2
#define TEXT_BUFFER_INCR 8
@@ -218,6 +248,13 @@ WMCreateTextField(WMWidget *parent)
}
void
WMSetTextFieldDelegate(WMTextField *tPtr, WMTextFieldDelegate *delegate)
{
tPtr->delegate = delegate;
}
void
WMInsertTextFieldText(WMTextField *tPtr, char *text, int position)
{
@@ -248,9 +285,9 @@ WMInsertTextFieldText(WMTextField *tPtr, char *text, int position)
/* insert text at position */
memmv(&(tPtr->text[position+len]), &(tPtr->text[position]),
tPtr->textLen-position+1);
memcpy(&(tPtr->text[position]), text, len);
tPtr->textLen += len;
if (position >= tPtr->cursorPosition) {
tPtr->cursorPosition += len;
@@ -259,11 +296,11 @@ WMInsertTextFieldText(WMTextField *tPtr, char *text, int position)
incrToFit(tPtr);
}
}
paintTextField(tPtr);
WMPostNotificationName(WMTextDidChangeNotification, tPtr,
(void*)WMInsertTextEvent);
NOTIFY(tPtr, didChange, WMTextDidChangeNotification,
(void*)WMInsertTextEvent);
}
@@ -304,8 +341,8 @@ void
WMDeleteTextFieldRange(WMTextField *tPtr, WMRange range)
{
deleteTextFieldRange(tPtr, range);
WMPostNotificationName(WMTextDidChangeNotification, tPtr,
(void*)WMDeleteTextEvent);
NOTIFY(tPtr, didChange, WMTextDidChangeNotification,
(void*)WMDeleteTextEvent);
}
@@ -349,8 +386,8 @@ WMSetTextFieldText(WMTextField *tPtr, char *text)
if (tPtr->view->flags.realized)
paintTextField(tPtr);
WMPostNotificationName(WMTextDidChangeNotification, tPtr,
(void*)WMSetTextEvent);
NOTIFY(tPtr, didChange, WMTextDidChangeNotification,
(void*)WMSetTextEvent);
}
@@ -362,6 +399,7 @@ WMSetTextFieldFont(WMTextField *tPtr, WMFont *font)
tPtr->font = WMRetainFont(font);
}
void
WMSetTextFieldAlignment(WMTextField *tPtr, WMAlignment alignment)
{
@@ -679,12 +717,12 @@ paintTextField(TextField *tPtr)
ty = tPtr->offsetWidth;
switch (tPtr->flags.alignment) {
case WALeft:
case WALeft:
tx = tPtr->offsetWidth + 1;
if (tw < tPtr->usableWidth)
XFillRectangle(screen->display, drawbuffer,
WMColorGC(screen->white),
bd+tw,bd, totalWidth-tw,view->size.height-2*bd);
XFillRectangle(screen->display, drawbuffer,
WMColorGC(screen->white),
bd+tw,bd, totalWidth-tw,view->size.height-2*bd);
break;
case WACenter:
@@ -742,8 +780,8 @@ paintTextField(TextField *tPtr)
WMSetColorInGC(screen->black, screen->textFieldGC);
} else {
XFillRectangle(screen->display, drawbuffer,
WMColorGC(screen->white),
bd,bd, totalWidth,view->size.height-2*bd);
WMColorGC(screen->white),
bd,bd, totalWidth,view->size.height-2*bd);
}
/* draw relief */
@@ -754,8 +792,8 @@ paintTextField(TextField *tPtr)
if (tPtr->flags.secure)
free(text);
XCopyArea(screen->display, drawbuffer, view->window,
screen->copyGC, 0,0, view->size.width,
view->size.height,0,0);
screen->copyGC, 0,0, view->size.width,
view->size.height,0,0);
XFreePixmap(screen->display, drawbuffer);
/* draw cursor */
@@ -805,11 +843,11 @@ handleEvents(XEvent *event, void *data)
#endif
paintTextField(tPtr);
WMPostNotificationName(WMTextDidBeginEditingNotification, tPtr, NULL);
NOTIFY(tPtr, didBeginEditing, WMTextDidBeginEditingNotification, NULL);
tPtr->flags.notIllegalMovement = 0;
break;
case FocusOut:
tPtr->flags.focused = 0;
#if 0
@@ -820,8 +858,8 @@ handleEvents(XEvent *event, void *data)
paintTextField(tPtr);
if (!tPtr->flags.notIllegalMovement) {
WMPostNotificationName(WMTextDidEndEditingNotification, tPtr,
(void*)WMIllegalTextMovement);
NOTIFY(tPtr, didEndEditing, WMTextDidEndEditingNotification,
(void*)WMIllegalTextMovement);
}
break;
@@ -878,22 +916,22 @@ handleTextFieldKeyPress(TextField *tPtr, XEvent *event)
tPtr->view->prevFocusChain);
tPtr->flags.notIllegalMovement = 1;
}
WMPostNotificationName(WMTextDidEndEditingNotification, tPtr,
(void*)WMBacktabTextMovement);
NOTIFY(tPtr, didEndEditing, WMTextDidEndEditingNotification,
(void*)WMBacktabTextMovement);
} else {
if (tPtr->view->nextFocusChain) {
W_SetFocusOfTopLevel(W_TopLevelOfView(tPtr->view),
tPtr->view->nextFocusChain);
tPtr->view->nextFocusChain);
tPtr->flags.notIllegalMovement = 1;
}
WMPostNotificationName(WMTextDidEndEditingNotification,
tPtr, (void*)WMTabTextMovement);
NOTIFY(tPtr, didEndEditing, WMTextDidEndEditingNotification,
(void*)WMTabTextMovement);
}
break;
case XK_Return:
WMPostNotificationName(WMTextDidEndEditingNotification, tPtr,
(void*)WMReturnTextMovement);
NOTIFY(tPtr, didEndEditing, WMTextDidEndEditingNotification,
(void*)WMReturnTextMovement);
break;
case WM_EMACSKEY_LEFT:
@@ -1196,7 +1234,7 @@ handleTextFieldActionEvents(XEvent *event, void *data)
}
if(textWidth < tPtr->usableWidth){
tPtr->cursorPosition = pointToCursorPosition(tPtr,
event->xbutton.x - tPtr->usableWidth
event->xbutton.x - tPtr->usableWidth
+ textWidth);
}
else tPtr->cursorPosition = pointToCursorPosition(tPtr,
@@ -1231,12 +1269,13 @@ handleTextFieldActionEvents(XEvent *event, void *data)
text = W_GetTextSelection(tPtr->view->screen,
tPtr->view->screen->clipboardAtom);
if (!text) {
text = W_GetTextSelection(tPtr->view->screen, XA_CUT_BUFFER0);
text = W_GetTextSelection(tPtr->view->screen,
XA_CUT_BUFFER0);
}
if (text) {
WMInsertTextFieldText(tPtr, text, tPtr->cursorPosition);
XFree(text);
WMPostNotificationName(WMTextDidChangeNotification, tPtr, NULL);
WMInsertTextFieldText(tPtr, text, tPtr->cursorPosition);
XFree(text);
NOTIFY(tPtr, didChange, WMTextDidChangeNotification, NULL);
}
}
break;