From 2a4f5d0f67fcd1412968ef967ed3009469a46b90 Mon Sep 17 00:00:00 2001 From: Jaakko Keränen Date: Sat, 27 Mar 2021 14:17:33 +0200 Subject: 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. --- src/ui/documentwidget.c | 3 --- src/ui/inputwidget.c | 8 ++++---- src/ui/labelwidget.c | 3 +-- src/ui/listwidget.c | 4 ++-- src/ui/util.c | 9 ++------- src/ui/util.h | 2 +- 6 files changed, 10 insertions(+), 19 deletions(-) (limited to 'src') 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 } } return iTrue; - case double_ClickResult: - printf("double_ClickResult\n"); fflush(stdout); - return iTrue; case aborted_ClickResult: if (d->grabbedPlayer) { 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) { iZap(d->mark); d->inFlags &= ~isMarking_InputWidgetFlag; return iTrue; - case double_ClickResult: - selectAll_InputWidget(d); - d->inFlags &= ~isMarking_InputWidgetFlag; - return iTrue; case aborted_ClickResult: d->inFlags &= ~isMarking_InputWidgetFlag; return iTrue; @@ -753,6 +749,10 @@ static iBool processEvent_InputWidget_(iInputWidget *d, const SDL_Event *ev) { refresh_Widget(w); return iTrue; case finished_ClickResult: + if (d->click.count == 2) { + selectAll_InputWidget(d); + d->inFlags &= ~isMarking_InputWidgetFlag; + } return iTrue; } 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) { setFlags_Widget(w, pressed_WidgetFlag, iFalse); refresh_Widget(w); return iTrue; +// case double_ClickResult: case finished_ClickResult: setFlags_Widget(w, pressed_WidgetFlag, iFalse); trigger_LabelWidget_(d); refresh_Widget(w); return iTrue; - case double_ClickResult: - return iTrue; default: break; } 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) { static iBool processEvent_ListWidget_(iListWidget *d, const SDL_Event *ev) { iWidget *w = as_Widget(d); if (isMetricsChange_UserEvent(ev)) { - invalidate_ListWidget(d); + invalidate_ListWidget(d); } else if (isCommand_SDLEvent(ev)) { const char *cmd = command_UserEvent(ev); @@ -317,7 +317,7 @@ static iBool processEvent_ListWidget_(iListWidget *d, const SDL_Event *ev) { redrawHoverItem_ListWidget_(d); break; case finished_ClickResult: - case double_ClickResult: +// case double_ClickResult: redrawHoverItem_ListWidget_(d); if (contains_Rect(innerBounds_Widget(w), pos_Click(&d->click)) && 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) { return none_ClickResult; } const iInt2 pos = init_I2(mb->x, mb->y); - if (event->type == SDL_MOUSEBUTTONDOWN && mb->clicks == 2) { - if (contains_Widget(d->bounds, pos)) { - d->pos = pos; - setMouseGrab_Widget(NULL); - return double_ClickResult; - } + if (event->type == SDL_MOUSEBUTTONDOWN) { + d->count = mb->clicks; } if (!d->isActive) { if (mb->state == SDL_PRESSED) { if (contains_Widget(d->bounds, pos)) { d->isActive = iTrue; d->startPos = d->pos = pos; - //setFlags_Widget(d->bounds, hover_WidgetFlag, iFalse); setMouseGrab_Widget(d->bounds); return started_ClickResult; } 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 { drag_ClickResult, finished_ClickResult, aborted_ClickResult, - double_ClickResult, }; struct Impl_Click { iBool isActive; int button; + int count; iWidget *bounds; iInt2 startPos; iInt2 pos; -- cgit v1.2.3