From 8070b171badbfaf15b56bcce664098f06f81b4e2 Mon Sep 17 00:00:00 2001 From: Jaakko Keränen Date: Mon, 27 Jul 2020 10:39:58 +0300 Subject: Showing and hiding the search bar --- src/ui/documentwidget.c | 2 +- src/ui/inputwidget.c | 4 ++-- src/ui/window.c | 29 +++++++++++++++++++++++++---- 3 files changed, 28 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/ui/documentwidget.c b/src/ui/documentwidget.c index f0170924..d0fa60ab 100644 --- a/src/ui/documentwidget.c +++ b/src/ui/documentwidget.c @@ -430,7 +430,7 @@ static iBool processEvent_DocumentWidget_(iDocumentWidget *d, const SDL_Event *e d->foundMark = finder( d->doc, text_InputWidget(find), dir > 0 ? d->foundMark.end : d->foundMark.start); if (!d->foundMark.start && wrap) { - /* Wrap around */ + /* Wrap around. */ d->foundMark = finder(d->doc, text_InputWidget(find), NULL); } if (d->foundMark.start) { diff --git a/src/ui/inputwidget.c b/src/ui/inputwidget.c index 19623d74..c9be1a58 100644 --- a/src/ui/inputwidget.c +++ b/src/ui/inputwidget.c @@ -160,11 +160,11 @@ static iBool processEvent_InputWidget_(iInputWidget *d, const SDL_Event *ev) { iWidget *w = as_Widget(d); if (isCommand_Widget(w, ev, "focus.gained")) { begin_InputWidget(d); - return iTrue; + return iFalse; } else if (isCommand_Widget(w, ev, "focus.lost")) { end_InputWidget(d, iTrue); - return iTrue; + return iFalse; } switch (processEvent_Click(&d->click, ev)) { case none_ClickResult: diff --git a/src/ui/window.c b/src/ui/window.c index 4c140de2..8c252e81 100644 --- a/src/ui/window.c +++ b/src/ui/window.c @@ -132,6 +132,26 @@ static iBool handleSearchBarCommands_(iWidget *searchBar, const char *cmd) { } return iTrue; } + else if (equal_Command(cmd, "focus.gained")) { + if (pointer_Command(cmd) == findChild_Widget(searchBar, "find.input")) { + if (!isVisible_Widget(searchBar)) { + setFlags_Widget(searchBar, hidden_WidgetFlag, iFalse); + arrange_Widget(get_Window()->root); + refresh_App(); + } + } + } + else if (equal_Command(cmd, "find.close")) { + if (isVisible_Widget(searchBar)) { + if (isFocused_Widget(findChild_Widget(searchBar, "find.input"))) { + setFocus_Widget(NULL); + } + setFlags_Widget(searchBar, hidden_WidgetFlag, iTrue); + arrange_Widget(searchBar->parent); + refresh_Widget(searchBar->parent); + } + return iTrue; + } return iFalse; } @@ -170,18 +190,19 @@ static void setupUserInterface_Window(iWindow *d) { addChildFlags_Widget(div, iClob(new_DocumentWidget()), expand_WidgetFlag); /* Search bar. */ { - iWidget *searchBar = new_Widget(); + iWidget *searchBar = new_Widget(); setId_Widget(searchBar, "search"); setFlags_Widget(searchBar, - arrangeHeight_WidgetFlag | resizeChildren_WidgetFlag | - arrangeHorizontal_WidgetFlag, + hidden_WidgetFlag | collapse_WidgetFlag | arrangeHeight_WidgetFlag | + resizeChildren_WidgetFlag | arrangeHorizontal_WidgetFlag, iTrue); addChild_Widget(div, iClob(searchBar)); setBackgroundColor_Widget(searchBar, gray25_ColorId); setCommandHandler_Widget(searchBar, handleSearchBarCommands_); addChild_Widget(searchBar, iClob(new_LabelWidget("\U0001f50d Text", 0, 0, NULL))); - setId_Widget(addChildFlags_Widget(searchBar, iClob(new_InputWidget(0)), expand_WidgetFlag), + iInputWidget *input = new_InputWidget(0); + setId_Widget(addChildFlags_Widget(searchBar, iClob(input), expand_WidgetFlag), "find.input"); addChild_Widget(searchBar, iClob(new_LabelWidget("Next", 'g', KMOD_PRIMARY, "find.next"))); addChild_Widget(searchBar, iClob(new_LabelWidget("Previous", 'g', KMOD_PRIMARY | KMOD_SHIFT, "find.prev"))); -- cgit v1.2.3