1
0
mirror of https://github.com/gryf/wmaker.git synced 2025-12-22 05:48:01 +01:00

misc. oversight fixes

This commit is contained in:
nwanua
2000-11-22 04:48:40 +00:00
parent 6aafaaa63c
commit 9a4037ebf1
2 changed files with 278 additions and 152 deletions

View File

@@ -1529,6 +1529,8 @@ void WMSetTextForegroundColor(WMText *tPtr, WMColor *color);
void WMSetTextBackgroundColor(WMText *tPtr, WMColor *color); void WMSetTextBackgroundColor(WMText *tPtr, WMColor *color);
void WMSetTextBackgroundPixmap(WMText *tPtr, WMPixmap *pixmap);
void WMPrependTextStream(WMText *tPtr, char *text); void WMPrependTextStream(WMText *tPtr, char *text);
void WMAppendTextStream(WMText *tPtr, char *text); void WMAppendTextStream(WMText *tPtr, char *text);

View File

@@ -10,10 +10,10 @@
#define DO_BLINK 0 #define DO_BLINK 0
/* TODO: /* TODO:
* - FIX wrap... long lines that don't fit are not char wrapped yet.
* - hrm... something to do with already having tbs...
* - selection code... selects can be funny if it crosses over. use rect? * - selection code... selects can be funny if it crosses over. use rect?
* - also inspect behaviour for WACenter and WARight * - also inspect behaviour for WACenter and WARight
* - what if a widget grabs the click... howto say: "pressed me"?
* note that WMCreateEventHandler takes one data, but need widget & tPtr
* - FIX: graphix blocks MUST be skipped if monoFont even though they exist! * - FIX: graphix blocks MUST be skipped if monoFont even though they exist!
* - check if support for Horizontal Scroll is complete * - check if support for Horizontal Scroll is complete
* - assess danger of destroying widgets whose actions link to other pages * - assess danger of destroying widgets whose actions link to other pages
@@ -109,6 +109,7 @@ typedef struct W_Text {
GC bgGC; /* the background GC to draw with */ GC bgGC; /* the background GC to draw with */
GC fgGC; /* the foreground GC to draw with */ GC fgGC; /* the foreground GC to draw with */
Pixmap db; /* the buffer on which to draw */ Pixmap db; /* the buffer on which to draw */
WMPixmap *bgPixmap; /* the background pixmap */
myRect visible; /* the actual rectangle that can be drawn into */ myRect visible; /* the actual rectangle that can be drawn into */
myRect cursor; /* the position and (height) of cursor */ myRect cursor; /* the position and (height) of cursor */
@@ -237,6 +238,11 @@ newMargin(Text *tPtr, WMRulerMargins *margins)
if (n == -1) { if (n == -1) {
if(tPtr->nMargins >= 127) {
n = tPtr->nMargins-1;
return n;
}
tPtr->margins = wrealloc(tPtr->margins, tPtr->margins = wrealloc(tPtr->margins,
(++tPtr->nMargins)*sizeof(WMRulerMargins)); (++tPtr->nMargins)*sizeof(WMRulerMargins));
@@ -581,6 +587,12 @@ TextBlock *tb)
} }
} }
if(!tb->sections)
layOutDocument(tPtr);
if(!tb->sections)
return 0;
*dir = !(y <= tb->sections[0].y); *dir = !(y <= tb->sections[0].y);
if(*dir) { if(*dir) {
if ( ( y <= tb->sections[0]._y + tb->sections[0].h ) if ( ( y <= tb->sections[0]._y + tb->sections[0].h )
@@ -621,6 +633,12 @@ paintText(Text *tPtr)
XFillRectangle(dpy, tPtr->db, tPtr->bgGC, XFillRectangle(dpy, tPtr->db, tPtr->bgGC,
0, 0, tPtr->visible.w, tPtr->visible.h); 0, 0, tPtr->visible.w, tPtr->visible.h);
if (tPtr->bgPixmap) {
WMDrawPixmap(tPtr->bgPixmap, tPtr->db,
(tPtr->visible.w-tPtr->visible.x-tPtr->bgPixmap->width)/2,
(tPtr->visible.h-tPtr->visible.y-tPtr->bgPixmap->height)/2);
}
if (! (tb = tPtr->currentTextBlock)) { if (! (tb = tPtr->currentTextBlock)) {
if (! (tb = tPtr->firstTextBlock)) { if (! (tb = tPtr->firstTextBlock)) {
goto _copy_area; goto _copy_area;
@@ -1092,6 +1110,9 @@ _doneV:
_w = WMWidgetWidth(tb->d.widget)-5; _w = WMWidgetWidth(tb->d.widget)-5;
else else
_w = tb->d.pixmap->width-5; _w = tb->d.pixmap->width-5;
if (tb->sections[0].x + _w >= x)
break;
} else { } else {
text = &(tb->text[tb->sections[s].begin]); text = &(tb->text[tb->sections[s].begin]);
len = tb->sections[s].end - tb->sections[s].begin; len = tb->sections[s].end - tb->sections[s].begin;
@@ -1149,7 +1170,23 @@ _doneV:
} }
/* we have said TextBlock, now where within it? */ /* we have said TextBlock, now where within it? */
if (tb && !tb->graphic) { if (tb) {
if(tb->graphic) {
int gw = (tb->object ?
WMWidgetWidth(tb->d.widget) : tb->d.pixmap->width);
tPtr->cursor.x = tb->sections[0].x;
if(x > tPtr->cursor.x + gw/2) {
pos = 1;
printf("here x%d: %d\n", x, tPtr->cursor.x + gw/2);
tPtr->cursor.x += gw;
} else pos = 0;
s = 0;
goto _doneH;
} else {
WMFont *f = tb->d.font; WMFont *f = tb->d.font;
len = tb->sections[s].end - tb->sections[s].begin; len = tb->sections[s].end - tb->sections[s].begin;
text = &(tb->text[tb->sections[s].begin]); text = &(tb->text[tb->sections[s].begin]);
@@ -1164,10 +1201,11 @@ _doneV:
(pos? WMWidthOfString(f, text, pos) : 0); (pos? WMWidthOfString(f, text, pos) : 0);
pos += tb->sections[s].begin; pos += tb->sections[s].begin;
_doneH: }
tPtr->tpos = (pos<tb->used)? pos : tb->used;
} }
_doneH:
tPtr->tpos = (pos<tb->used)? pos : tb->used;
_doNothing: _doNothing:
if (!tb) if (!tb)
printf("...for this app will surely crash :-)\n"); printf("...for this app will surely crash :-)\n");
@@ -1193,83 +1231,6 @@ _doNothing:
} }
static void
autoSelectText(Text *tPtr, int clicks)
{
int x, start;
TextBlock *tb;
char *mark = NULL, behind, ahead;
if(!(tb = tPtr->currentTextBlock))
return;
if(clicks == 2) {
switch(tb->text[tPtr->tpos]) {
case ' ': return;
/*
case '<': case '>': behind = '<'; ahead = '>'; break;
case '{': case '}': behind = '{'; ahead = '}'; break;
case '[': case ']': behind = '['; ahead = ']'; break;
*/
default: behind = ahead = ' ';
}
tPtr->sel.y = tPtr->cursor.y+5;
tPtr->sel.h = 6;/*tPtr->cursor.h-10;*/
if(tb->graphic) {
tPtr->sel.x = tb->sections[0].x;
tPtr->sel.w = tb->sections[0].w;
} else {
WMFont *font = tPtr->flags.monoFont?tPtr->dFont:tb->d.font;
start = tPtr->tpos;
while(start > 0 && tb->text[start-1] != behind)
start--;
x = tPtr->cursor.x;
if(tPtr->tpos > start){
x -= WMWidthOfString(font, &tb->text[start],
tPtr->tpos - start);
}
tPtr->sel.x = (x<0?0:x)+1;
if((mark = strchr(&tb->text[start], ahead))) {
tPtr->sel.w = WMWidthOfString(font, &tb->text[start],
(int)(mark - &tb->text[start]));
} else if(tb->used > start) {
tPtr->sel.w = WMWidthOfString(font, &tb->text[start],
tb->used - start);
}
}
} else if(clicks == 3) {
TextBlock *cur = tb;
while(tb && !tb->first) {
tb = tb->prior;
}
tPtr->sel.y = tb->sections[0]._y;
tb = cur;
while(tb->next && !tb->next->first) {
tb = tb->next;
}
tPtr->sel.h = tb->sections[tb->nsections-1]._y
+ 5 - tPtr->sel.y;
tPtr->sel.x = 0;
tPtr->sel.w = tPtr->docWidth;
tPtr->clicked.x = 0; /* only for now, fix sel. code */
}
tPtr->flags.ownsSelection = True;
paintText(tPtr);
}
static void static void
updateScrollers(Text *tPtr) updateScrollers(Text *tPtr)
@@ -2117,7 +2078,6 @@ requestHandler(WMView *view, Atom selection, Atom target, void *cdata,
char *text = WMGetTextSelectedStream(tPtr); char *text = WMGetTextSelectedStream(tPtr);
if (text) { if (text) {
printf("got text [%s]\n", text);
data = WMCreateDataWithBytes(text, strlen(text)); data = WMCreateDataWithBytes(text, strlen(text));
WMSetDataFormat(data, TYPETEXT); WMSetDataFormat(data, TYPETEXT);
} }
@@ -2163,6 +2123,87 @@ ownershipObserver(void *observerData, WMNotification *notification)
lostHandler(WMWidgetView(observerData), XA_PRIMARY, NULL); lostHandler(WMWidgetView(observerData), XA_PRIMARY, NULL);
} }
static void
autoSelectText(Text *tPtr, int clicks)
{
int x, start;
TextBlock *tb;
char *mark = NULL, behind, ahead;
if(!(tb = tPtr->currentTextBlock))
return;
if(clicks == 2) {
switch(tb->text[tPtr->tpos]) {
case ' ': return;
/*
case '<': case '>': behind = '<'; ahead = '>'; break;
case '{': case '}': behind = '{'; ahead = '}'; break;
case '[': case ']': behind = '['; ahead = ']'; break;
*/
default: behind = ahead = ' ';
}
tPtr->sel.y = tPtr->cursor.y+5;
tPtr->sel.h = 6;/*tPtr->cursor.h-10;*/
if(tb->graphic) {
tPtr->sel.x = tb->sections[0].x;
tPtr->sel.w = tb->sections[0].w;
} else {
WMFont *font = tPtr->flags.monoFont?tPtr->dFont:tb->d.font;
start = tPtr->tpos;
while(start > 0 && tb->text[start-1] != behind)
start--;
x = tPtr->cursor.x;
if(tPtr->tpos > start){
x -= WMWidthOfString(font, &tb->text[start],
tPtr->tpos - start);
}
tPtr->sel.x = (x<0?0:x)+1;
if((mark = strchr(&tb->text[start], ahead))) {
tPtr->sel.w = WMWidthOfString(font, &tb->text[start],
(int)(mark - &tb->text[start]));
} else if(tb->used > start) {
tPtr->sel.w = WMWidthOfString(font, &tb->text[start],
tb->used - start);
}
}
} else if(clicks == 3) {
TextBlock *cur = tb;
while(tb && !tb->first) {
tb = tb->prior;
}
tPtr->sel.y = tb->sections[0]._y;
tb = cur;
while(tb->next && !tb->next->first) {
tb = tb->next;
}
tPtr->sel.h = tb->sections[tb->nsections-1]._y
+ 5 - tPtr->sel.y;
tPtr->sel.x = 0;
tPtr->sel.w = tPtr->docWidth;
tPtr->clicked.x = 0; /* only for now, fix sel. code */
}
if (!tPtr->flags.ownsSelection) {
WMCreateSelectionHandler(tPtr->view,
XA_PRIMARY, tPtr->lastClickTime, &selectionHandler, NULL);
tPtr->flags.ownsSelection = True;
}
paintText(tPtr);
}
static void static void
fontChanged(void *observerData, WMNotification *notification) fontChanged(void *observerData, WMNotification *notification)
@@ -2273,33 +2314,51 @@ R_imaGFX: if(tb->next) {
} }
if (!control_pressed && tPtr->flags.ownsSelection) if (!control_pressed && tPtr->flags.ownsSelection)
;//releaseSelection(tPtr); releaseSelection(tPtr);
} }
static void static void
handleWidgetPress(XEvent *event, void *data) pasteText(WMView *view, Atom selection, Atom target, Time timestamp,
void *cdata, WMData *data)
{ {
TextBlock *tb = (TextBlock *)data; Text *tPtr = (Text *)view->self;
Text *tPtr; char *text;
WMWidget *w;
if (!tb) tPtr->flags.waitingForSelection = 0;
return;
tPtr = (Text*)w; if (data) {
tPtr->currentTextBlock = tb; text = (char*)WMDataBytes(data);
tPtr->flags.isOverGraphic = 2;
tPtr->tpos = 0; if (tPtr->parser) {
output(tb->text, tb->used); (tPtr->parser) (tPtr, (void *) text);
#if 0 layOutDocument(tPtr);
if (!tPtr->flags.focused) { } else insertTextInteractively(tPtr, text, strlen(text));
WMSetFocusToWidget(tPtr); updateCursorPosition(tPtr);
tPtr->flags.focused = True; paintText(tPtr);
} else {
int n;
text = XFetchBuffer(tPtr->view->screen->display, &n, 0);
if (text) {
text[n] = 0;
if (tPtr->parser) {
(tPtr->parser) (tPtr, (void *) text);
layOutDocument(tPtr);
} else insertTextInteractively(tPtr, text, n);
updateCursorPosition(tPtr);
paintText(tPtr);
XFree(text);
} }
#endif }
} }
static void static void
handleActionEvents(XEvent *event, void *data) handleActionEvents(XEvent *event, void *data)
{ {
@@ -2347,12 +2406,29 @@ handleActionEvents(XEvent *event, void *data)
break; break;
if ((event->xmotion.state & Button1Mask)) { if ((event->xmotion.state & Button1Mask)) {
TextBlock *tb = tPtr->currentTextBlock;
if(tPtr->flags.isOverGraphic && tb && tb->graphic && !tb->object) {
WMSize offs;
WMPixmap *pixmap = tb->d.pixmap;
char *types[2] = {"application/X-image", NULL};
offs.width = 2;
offs.height = 2;
WMDragImageFromView(tPtr->view, pixmap, types,
wmkpoint(event->xmotion.x_root, event->xmotion.y_root),
offs, event, True);
} else {
if (!tPtr->flags.ownsSelection) { if (!tPtr->flags.ownsSelection) {
WMCreateSelectionHandler(tPtr->view, WMCreateSelectionHandler(tPtr->view,
XA_PRIMARY, event->xbutton.time, XA_PRIMARY, event->xbutton.time,
&selectionHandler, NULL); &selectionHandler, NULL);
tPtr->flags.ownsSelection = True; tPtr->flags.ownsSelection = True;
} }
}
selectRegion(tPtr, event->xmotion.x, event->xmotion.y); selectRegion(tPtr, event->xmotion.x, event->xmotion.y);
break; break;
} }
@@ -2377,12 +2453,16 @@ handleActionEvents(XEvent *event, void *data)
return; return;
} }
if (tPtr->flags.ownsSelection)
releaseSelection(tPtr);
if (event->xbutton.button == Button1) { if (event->xbutton.button == Button1) {
if(WMIsDoubleClick(event)) { if(WMIsDoubleClick(event)) {
TextBlock *tb = tPtr->currentTextBlock; TextBlock *tb = tPtr->currentTextBlock;
tPtr->lastClickTime = event->xbutton.time;
if(tb && tb->graphic && !tb->object) { if(tb && tb->graphic && !tb->object) {
char desc[tb->used+1]; char desc[tb->used+1];
memcpy(desc, tb->text, tb->used); memcpy(desc, tb->text, tb->used);
@@ -2395,10 +2475,10 @@ handleActionEvents(XEvent *event, void *data)
} else { } else {
autoSelectText(tPtr, 2); autoSelectText(tPtr, 2);
} }
tPtr->lastClickTime = event->xbutton.time;
break; break;
} else if(event->xbutton.time - tPtr->lastClickTime } else if(event->xbutton.time - tPtr->lastClickTime
< WINGsConfiguration.doubleClickDelay) { < WINGsConfiguration.doubleClickDelay) {
tPtr->lastClickTime = event->xbutton.time;
autoSelectText(tPtr, 3); autoSelectText(tPtr, 3);
break; break;
} }
@@ -2408,9 +2488,6 @@ handleActionEvents(XEvent *event, void *data)
tPtr->flags.focused = True; tPtr->flags.focused = True;
} }
if (tPtr->flags.ownsSelection)
releaseSelection(tPtr);
tPtr->lastClickTime = event->xbutton.time; tPtr->lastClickTime = event->xbutton.time;
cursorToTextPosition(tPtr, event->xmotion.x, event->xmotion.y); cursorToTextPosition(tPtr, event->xmotion.x, event->xmotion.y);
paintText(tPtr); paintText(tPtr);
@@ -2437,19 +2514,19 @@ handleActionEvents(XEvent *event, void *data)
break; break;
} }
#if 0
if (!WMRequestSelection(tPtr->view, XA_PRIMARY, XA_STRING, if (!WMRequestSelection(tPtr->view, XA_PRIMARY, XA_STRING,
event->xbutton.time, pasteText, NULL)) { event->xbutton.time, pasteText, NULL)) {
#endif
{
text = XFetchBuffer(tPtr->view->screen->display, &n, 0); text = XFetchBuffer(tPtr->view->screen->display, &n, 0);
tPtr->flags.waitingForSelection = 0;
if (text) { if (text) {
text[n] = 0; text[n] = 0;
if (tPtr->parser) if (tPtr->parser) {
(tPtr->parser) (tPtr, (void *) text); (tPtr->parser) (tPtr, (void *) text);
layOutDocument(tPtr);
}
else else
insertTextInteractively(tPtr, text, n); insertTextInteractively(tPtr, text, n);
@@ -2458,6 +2535,8 @@ handleActionEvents(XEvent *event, void *data)
NOTIFY(tPtr, didChange, WMTextDidChangeNotification, NOTIFY(tPtr, didChange, WMTextDidChangeNotification,
(void*)WMInsertTextEvent); (void*)WMInsertTextEvent);
#endif #endif
updateCursorPosition(tPtr);
paintText(tPtr);
} else { } else {
tPtr->flags.waitingForSelection = True; tPtr->flags.waitingForSelection = True;
@@ -2468,7 +2547,6 @@ handleActionEvents(XEvent *event, void *data)
case ButtonRelease: case ButtonRelease:
if (tPtr->flags.pointerGrabbed) { if (tPtr->flags.pointerGrabbed) {
tPtr->flags.pointerGrabbed = False; tPtr->flags.pointerGrabbed = False;
XUngrabPointer(dpy, CurrentTime); XUngrabPointer(dpy, CurrentTime);
@@ -2624,6 +2702,41 @@ rulerReleaseCallBack(WMWidget *w, void *self)
return; return;
} }
static unsigned
draggingSourceOperation(WMView *self, Bool local)
{
return WDOperationCopy;
}
static WMData*
fetchDragData(WMView *self, char *type)
{
TextBlock *tb = ((WMText *)self->self)->currentTextBlock;
char *desc;
WMData *data;
if(!tb)
return NULL;
printf("type is [%s]\n", type);
desc = wmalloc(tb->used+1);
memcpy(desc, tb->text, tb->used);
desc[tb->used] = 0;
data = WMCreateDataWithBytes(desc, strlen(desc)+1);
wfree(desc);
return data;
}
static WMDragSourceProcs _DragSourceProcs = {
draggingSourceOperation,
NULL,
NULL,
fetchDragData
};
static unsigned static unsigned
draggingEntered(WMView *self, WMDraggingInfo *info) draggingEntered(WMView *self, WMDraggingInfo *info)
@@ -2699,7 +2812,7 @@ wwarning("could not request data for dropped data");
} }
static Bool static Bool
performDragOperation(WMView *self, WMDraggingInfo *info, WMData *data) performDragOperation(WMView *self, WMDraggingInfo *info)
{ {
WMColor *color; WMColor *color;
WMText *tPtr = (WMText *)self->self; WMText *tPtr = (WMText *)self->self;
@@ -2784,8 +2897,7 @@ getStream(WMText *tPtr, int sel, int array)
} else if (sel && tb->selected) { } else if (sel && tb->selected) {
if (!tPtr->flags.ignoreNewLine && (tb->first || tb->blank) if (!tPtr->flags.ignoreNewLine && tb->blank) {
&& tb != tPtr->firstTextBlock) {
text = wrealloc(text, where+1); text = wrealloc(text, where+1);
text[where++] = '\n'; text[where++] = '\n';
} }
@@ -2862,7 +2974,6 @@ getStreamObjects(WMText *tPtr, int sel)
wfree(stream); wfree(stream);
return array; return array;
WMFreeArray(array);
} }
@@ -2923,9 +3034,12 @@ WMCreateTextForDocumentType(WMWidget *parent,
WMAddNotificationObserver(ownershipObserver, tPtr, WMAddNotificationObserver(ownershipObserver, tPtr,
"_lostOwnership", tPtr); "_lostOwnership", tPtr);
if(0){ WMSetViewDragSourceProcs(tPtr->view, &_DragSourceProcs);
char *types[2] = {"application/X-color", NULL};
WMSetViewDragDestinationProcs(tPtr->view, &_DragDestinationProcs); WMSetViewDragDestinationProcs(tPtr->view, &_DragDestinationProcs);
{
char *types[3] = {"application/X-color", "application/X-image", NULL};
WMRegisterViewForDraggedTypes(tPtr->view, types); WMRegisterViewForDraggedTypes(tPtr->view, types);
} }
@@ -2958,6 +3072,7 @@ WMCreateTextForDocumentType(WMWidget *parent,
tPtr->dBulletPix = WMCreatePixmapFromXPMData(tPtr->view->screen, tPtr->dBulletPix = WMCreatePixmapFromXPMData(tPtr->view->screen,
default_bullet); default_bullet);
tPtr->db = (Pixmap) NULL; tPtr->db = (Pixmap) NULL;
tPtr->bgPixmap = NULL;
tPtr->margins = WMGetRulerMargins(NULL); tPtr->margins = WMGetRulerMargins(NULL);
tPtr->margins->right = tPtr->visible.w; tPtr->margins->right = tPtr->visible.w;
@@ -2997,10 +3112,8 @@ WMPrependTextStream(WMText *tPtr, char *text)
if(!text) { if(!text) {
if (tPtr->flags.ownsSelection) if (tPtr->flags.ownsSelection)
releaseSelection(tPtr); releaseSelection(tPtr);
else {
clearText(tPtr); clearText(tPtr);
updateScrollers(tPtr); updateScrollers(tPtr);
}
return; return;
} }
@@ -3012,6 +3125,9 @@ WMPrependTextStream(WMText *tPtr, char *text)
tPtr->flags.needsLayOut = True; tPtr->flags.needsLayOut = True;
tPtr->tpos = 0; tPtr->tpos = 0;
if(!tPtr->flags.frozen) {
layOutDocument(tPtr);
}
} }
@@ -3023,10 +3139,8 @@ WMAppendTextStream(WMText *tPtr, char *text)
if(!text) { if(!text) {
if (tPtr->flags.ownsSelection) if (tPtr->flags.ownsSelection)
releaseSelection(tPtr); releaseSelection(tPtr);
else {
clearText(tPtr); clearText(tPtr);
updateScrollers(tPtr); updateScrollers(tPtr);
}
return; return;
} }
@@ -3040,7 +3154,9 @@ WMAppendTextStream(WMText *tPtr, char *text)
if(tPtr->currentTextBlock) if(tPtr->currentTextBlock)
tPtr->tpos = tPtr->currentTextBlock->used; tPtr->tpos = tPtr->currentTextBlock->used;
if(!tPtr->flags.frozen) {
layOutDocument(tPtr);
}
} }
@@ -3244,8 +3360,6 @@ WMPrependTextBlock(WMText *tPtr, void *vtb)
if (tb->graphic) { if (tb->graphic) {
if(tb->object) { if(tb->object) {
WMWidget *w = tb->d.widget; WMWidget *w = tb->d.widget;
WMCreateEventHandler(W_VIEW(w), ButtonPressMask,
handleWidgetPress, tb);
if (W_CLASS(w) != WC_TextField && W_CLASS(w) != WC_Text) { if (W_CLASS(w) != WC_TextField && W_CLASS(w) != WC_Text) {
(W_VIEW(w))->attribs.cursor = tPtr->view->screen->defaultCursor; (W_VIEW(w))->attribs.cursor = tPtr->view->screen->defaultCursor;
(W_VIEW(w))->attribFlags |= CWOverrideRedirect | CWCursor; (W_VIEW(w))->attribFlags |= CWOverrideRedirect | CWCursor;
@@ -3291,8 +3405,6 @@ WMAppendTextBlock(WMText *tPtr, void *vtb)
if (tb->graphic) { if (tb->graphic) {
if(tb->object) { if(tb->object) {
WMWidget *w = tb->d.widget; WMWidget *w = tb->d.widget;
WMCreateEventHandler(W_VIEW(w), ButtonPressMask,
handleWidgetPress, tb);
if (W_CLASS(w) != WC_TextField && W_CLASS(w) != WC_Text) { if (W_CLASS(w) != WC_TextField && W_CLASS(w) != WC_Text) {
(W_VIEW(w))->attribs.cursor = (W_VIEW(w))->attribs.cursor =
tPtr->view->screen->defaultCursor; tPtr->view->screen->defaultCursor;
@@ -3344,8 +3456,6 @@ WMRemoveTextBlock(WMText *tPtr)
WMRemoveFromArray(tPtr->gfxItems, (void *)tb); WMRemoveFromArray(tPtr->gfxItems, (void *)tb);
if(tb->object) { if(tb->object) {
WMDeleteEventHandler(W_VIEW(tb->d.widget), ButtonPressMask,
handleWidgetPress, tb);
WMUnmapWidget(tb->d.widget); WMUnmapWidget(tb->d.widget);
} }
} }
@@ -3436,6 +3546,20 @@ WMSetTextBackgroundColor(WMText *tPtr, WMColor *color)
paintText(tPtr); paintText(tPtr);
} }
void WMSetTextBackgroundPixmap(WMText *tPtr, WMPixmap *pixmap)
{
if (!tPtr)
return;
if (tPtr->bgPixmap)
WMReleasePixmap(tPtr->bgPixmap);
if (pixmap)
tPtr->bgPixmap = WMRetainPixmap(pixmap);
else
tPtr->bgPixmap = NULL;
}
void void
WMSetTextRelief(WMText *tPtr, WMReliefType relief) WMSetTextRelief(WMText *tPtr, WMReliefType relief)
{ {