summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJaakko Keränen <jaakko.keranen@iki.fi>2021-03-27 14:17:33 +0200
committerJaakko Keränen <jaakko.keranen@iki.fi>2021-03-27 14:17:33 +0200
commit2a4f5d0f67fcd1412968ef967ed3009469a46b90 (patch)
treeae18c6005ed124effeaf7d84e1bff8339f2509e0 /src
parent71c258194653ab332458fe0620d300f41213603c (diff)
Processing of double clicks
The click handling utility no longer treats double clicks as a special case. An arbitrary number of clicks is kept in a separate counter.
Diffstat (limited to 'src')
-rw-r--r--src/ui/documentwidget.c3
-rw-r--r--src/ui/inputwidget.c8
-rw-r--r--src/ui/labelwidget.c3
-rw-r--r--src/ui/listwidget.c4
-rw-r--r--src/ui/util.c9
-rw-r--r--src/ui/util.h2
6 files changed, 10 insertions, 19 deletions
diff --git a/src/ui/documentwidget.c b/src/ui/documentwidget.c
index 57f87ef9..b3508b8d 100644
--- a/src/ui/documentwidget.c
+++ b/src/ui/documentwidget.c
@@ -2746,9 +2746,6 @@ static iBool processEvent_DocumentWidget_(iDocumentWidget *d, const SDL_Event *e
2746 } 2746 }
2747 } 2747 }
2748 return iTrue; 2748 return iTrue;
2749 case double_ClickResult:
2750 printf("double_ClickResult\n"); fflush(stdout);
2751 return iTrue;
2752 case aborted_ClickResult: 2749 case aborted_ClickResult:
2753 if (d->grabbedPlayer) { 2750 if (d->grabbedPlayer) {
2754 setGrabbedPlayer_DocumentWidget_(d, NULL); 2751 setGrabbedPlayer_DocumentWidget_(d, NULL);
diff --git a/src/ui/inputwidget.c b/src/ui/inputwidget.c
index 52359732..12bef08b 100644
--- a/src/ui/inputwidget.c
+++ b/src/ui/inputwidget.c
@@ -735,10 +735,6 @@ static iBool processEvent_InputWidget_(iInputWidget *d, const SDL_Event *ev) {
735 iZap(d->mark); 735 iZap(d->mark);
736 d->inFlags &= ~isMarking_InputWidgetFlag; 736 d->inFlags &= ~isMarking_InputWidgetFlag;
737 return iTrue; 737 return iTrue;
738 case double_ClickResult:
739 selectAll_InputWidget(d);
740 d->inFlags &= ~isMarking_InputWidgetFlag;
741 return iTrue;
742 case aborted_ClickResult: 738 case aborted_ClickResult:
743 d->inFlags &= ~isMarking_InputWidgetFlag; 739 d->inFlags &= ~isMarking_InputWidgetFlag;
744 return iTrue; 740 return iTrue;
@@ -753,6 +749,10 @@ static iBool processEvent_InputWidget_(iInputWidget *d, const SDL_Event *ev) {
753 refresh_Widget(w); 749 refresh_Widget(w);
754 return iTrue; 750 return iTrue;
755 case finished_ClickResult: 751 case finished_ClickResult:
752 if (d->click.count == 2) {
753 selectAll_InputWidget(d);
754 d->inFlags &= ~isMarking_InputWidgetFlag;
755 }
756 return iTrue; 756 return iTrue;
757 } 757 }
758 if (ev->type == SDL_MOUSEBUTTONDOWN && ev->button.button == SDL_BUTTON_RIGHT && 758 if (ev->type == SDL_MOUSEBUTTONDOWN && ev->button.button == SDL_BUTTON_RIGHT &&
diff --git a/src/ui/labelwidget.c b/src/ui/labelwidget.c
index c34ae3cf..1805525c 100644
--- a/src/ui/labelwidget.c
+++ b/src/ui/labelwidget.c
@@ -120,13 +120,12 @@ static iBool processEvent_LabelWidget_(iLabelWidget *d, const SDL_Event *ev) {
120 setFlags_Widget(w, pressed_WidgetFlag, iFalse); 120 setFlags_Widget(w, pressed_WidgetFlag, iFalse);
121 refresh_Widget(w); 121 refresh_Widget(w);
122 return iTrue; 122 return iTrue;
123// case double_ClickResult:
123 case finished_ClickResult: 124 case finished_ClickResult:
124 setFlags_Widget(w, pressed_WidgetFlag, iFalse); 125 setFlags_Widget(w, pressed_WidgetFlag, iFalse);
125 trigger_LabelWidget_(d); 126 trigger_LabelWidget_(d);
126 refresh_Widget(w); 127 refresh_Widget(w);
127 return iTrue; 128 return iTrue;
128 case double_ClickResult:
129 return iTrue;
130 default: 129 default:
131 break; 130 break;
132 } 131 }
diff --git a/src/ui/listwidget.c b/src/ui/listwidget.c
index f351c3b3..ac64091f 100644
--- a/src/ui/listwidget.c
+++ b/src/ui/listwidget.c
@@ -280,7 +280,7 @@ static void sizeChanged_ListWidget_(iListWidget *d) {
280static iBool processEvent_ListWidget_(iListWidget *d, const SDL_Event *ev) { 280static iBool processEvent_ListWidget_(iListWidget *d, const SDL_Event *ev) {
281 iWidget *w = as_Widget(d); 281 iWidget *w = as_Widget(d);
282 if (isMetricsChange_UserEvent(ev)) { 282 if (isMetricsChange_UserEvent(ev)) {
283 invalidate_ListWidget(d); 283 invalidate_ListWidget(d);
284 } 284 }
285 else if (isCommand_SDLEvent(ev)) { 285 else if (isCommand_SDLEvent(ev)) {
286 const char *cmd = command_UserEvent(ev); 286 const char *cmd = command_UserEvent(ev);
@@ -317,7 +317,7 @@ static iBool processEvent_ListWidget_(iListWidget *d, const SDL_Event *ev) {
317 redrawHoverItem_ListWidget_(d); 317 redrawHoverItem_ListWidget_(d);
318 break; 318 break;
319 case finished_ClickResult: 319 case finished_ClickResult:
320 case double_ClickResult: 320// case double_ClickResult:
321 redrawHoverItem_ListWidget_(d); 321 redrawHoverItem_ListWidget_(d);
322 if (contains_Rect(innerBounds_Widget(w), pos_Click(&d->click)) && 322 if (contains_Rect(innerBounds_Widget(w), pos_Click(&d->click)) &&
323 d->hoverItem != iInvalidSize) { 323 d->hoverItem != iInvalidSize) {
diff --git a/src/ui/util.c b/src/ui/util.c
index bb274996..cb9006f6 100644
--- a/src/ui/util.c
+++ b/src/ui/util.c
@@ -295,19 +295,14 @@ enum iClickResult processEvent_Click(iClick *d, const SDL_Event *event) {
295 return none_ClickResult; 295 return none_ClickResult;
296 } 296 }
297 const iInt2 pos = init_I2(mb->x, mb->y); 297 const iInt2 pos = init_I2(mb->x, mb->y);
298 if (event->type == SDL_MOUSEBUTTONDOWN && mb->clicks == 2) { 298 if (event->type == SDL_MOUSEBUTTONDOWN) {
299 if (contains_Widget(d->bounds, pos)) { 299 d->count = mb->clicks;
300 d->pos = pos;
301 setMouseGrab_Widget(NULL);
302 return double_ClickResult;
303 }
304 } 300 }
305 if (!d->isActive) { 301 if (!d->isActive) {
306 if (mb->state == SDL_PRESSED) { 302 if (mb->state == SDL_PRESSED) {
307 if (contains_Widget(d->bounds, pos)) { 303 if (contains_Widget(d->bounds, pos)) {
308 d->isActive = iTrue; 304 d->isActive = iTrue;
309 d->startPos = d->pos = pos; 305 d->startPos = d->pos = pos;
310 //setFlags_Widget(d->bounds, hover_WidgetFlag, iFalse);
311 setMouseGrab_Widget(d->bounds); 306 setMouseGrab_Widget(d->bounds);
312 return started_ClickResult; 307 return started_ClickResult;
313 } 308 }
diff --git a/src/ui/util.h b/src/ui/util.h
index 09e52a4d..da4d3a99 100644
--- a/src/ui/util.h
+++ b/src/ui/util.h
@@ -125,12 +125,12 @@ enum iClickResult {
125 drag_ClickResult, 125 drag_ClickResult,
126 finished_ClickResult, 126 finished_ClickResult,
127 aborted_ClickResult, 127 aborted_ClickResult,
128 double_ClickResult,
129}; 128};
130 129
131struct Impl_Click { 130struct Impl_Click {
132 iBool isActive; 131 iBool isActive;
133 int button; 132 int button;
133 int count;
134 iWidget *bounds; 134 iWidget *bounds;
135 iInt2 startPos; 135 iInt2 startPos;
136 iInt2 pos; 136 iInt2 pos;