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:
@@ -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:
|
||||||
............................
|
............................
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user