1
0
mirror of https://github.com/gryf/wmaker.git synced 2025-12-29 01:42:32 +01:00

patch from Vitaly Ovtchinnikov <ov@rbcmail.ru> for

double/triple-click selection in textfield
This commit is contained in:
kojima
2003-05-06 03:36:21 +00:00
parent 669d542408
commit bc3ab27364
2 changed files with 28 additions and 3 deletions

View File

@@ -58,7 +58,8 @@ Changes since wmaker 0.80.1:
- Fixed small memory leak in the font panel code. - Fixed small memory leak in the font panel code.
- Fixed call to qsort in WMSortArray. - Fixed call to qsort in WMSortArray.
- Fixed a memleak in the file panel. - Fixed a memleak in the file panel.
- Double/triple-click selection in text widgets (Vitaly Ovtchinnikov
<ov@rbcmail.ru>)
Changes since wmaker 0.80.0: Changes since wmaker 0.80.0:
............................ ............................

View File

@@ -1396,6 +1396,7 @@ handleTextFieldActionEvents(XEvent *event, void *data)
TextField *tPtr = (TextField*)data; TextField *tPtr = (TextField*)data;
static int move = 0; static int move = 0;
static Time lastButtonReleasedEvent = 0; static Time lastButtonReleasedEvent = 0;
static Time lastButtonReleasedEvent2 = 0;
Display *dpy = event->xany.display; Display *dpy = event->xany.display;
CHECK_CLASS(data, WC_TextField); CHECK_CLASS(data, WC_TextField);
@@ -1554,8 +1555,30 @@ handleTextFieldActionEvents(XEvent *event, void *data)
if (!tPtr->flags.secure && if (!tPtr->flags.secure &&
event->xbutton.time - lastButtonReleasedEvent event->xbutton.time - lastButtonReleasedEvent
<= WINGsConfiguration.doubleClickDelay) { <= WINGsConfiguration.doubleClickDelay) {
tPtr->selection.position = 0;
tPtr->selection.count = tPtr->textLen; if (event->xbutton.time - lastButtonReleasedEvent2 <= 2*WINGsConfiguration.doubleClickDelay) {
tPtr->selection.position = 0;
tPtr->selection.count = tPtr->textLen;
} else {
int pos, cnt;
char *txt;
pos = tPtr->selection.position;
cnt = tPtr->selection.count;
txt = tPtr->text;
while(pos >= 0) {
if (txt[pos] == ' ' || txt[pos] == '\t') break;
pos--;
}
pos++;
while(pos + cnt < tPtr->textLen) {
if (txt[pos + cnt] == ' ' || txt[pos + cnt] == '\t')
break;
cnt++;
}
tPtr->selection.position = pos;
tPtr->selection.count = cnt;
}
paintTextField(tPtr); paintTextField(tPtr);
if (!tPtr->flags.ownsSelection) { if (!tPtr->flags.ownsSelection) {
@@ -1574,6 +1597,7 @@ handleTextFieldActionEvents(XEvent *event, void *data)
&selectionHandler, NULL); &selectionHandler, NULL);
} }
lastButtonReleasedEvent2 = lastButtonReleasedEvent;
lastButtonReleasedEvent = event->xbutton.time; lastButtonReleasedEvent = event->xbutton.time;
break; break;