From afe1bf47cbc2fa1d437f50e68a771eb23e8891f0 Mon Sep 17 00:00:00 2001 From: Jaakko Keränen Date: Thu, 25 Nov 2021 18:04:23 +0200 Subject: Unsplit button in toolbar IssueID #378 --- res/about/version.gmi | 5 +++-- src/app.c | 7 +++++++ src/ui/root.c | 27 +++++++++++++++++++++++---- src/ui/window.c | 6 ++++++ 4 files changed, 39 insertions(+), 6 deletions(-) diff --git a/res/about/version.gmi b/res/about/version.gmi index 3b15f567..10c1b354 100644 --- a/res/about/version.gmi +++ b/res/about/version.gmi @@ -1,4 +1,4 @@ -``` LAGRANGE +```LAGRANGE __ __ __ ___ | /\ / _` |__) /\ |\ | / _` |__ |___ /~~\ \__> | \ /~~\ | \| \__> |___ @@ -10,11 +10,12 @@ New features: * Added a toolbar button for toggling the left sidebar. +* Added an unsplit button in the toolbar when in split view mode. * Choose parent folder when creating or editing a bookmark. * Support for ANSI background color escapes (disabled by default). -* UI language for Turkish. * macOS: Automatic updates using the Sparkle framework. * Windows: Automatic updates using the WinSparkle library. +* UI language for Turkish. Changes and enhancements: * Adjusted font styles of heading levels 2 and 3. diff --git a/src/app.c b/src/app.c index d2a80561..75e37a0b 100644 --- a/src/app.c +++ b/src/app.c @@ -2204,6 +2204,13 @@ iBool handleCommand_App(const char *cmd) { swapRoots_MainWindow(d->window); return iTrue; } + if (argLabel_Command(cmd, "focusother")) { + iWindow *baseWin = &d->window->base; + if (baseWin->roots[1]) { + baseWin->keyRoot = + (baseWin->keyRoot == baseWin->roots[1] ? baseWin->roots[0] : baseWin->roots[1]); + } + } d->window->pendingSplitMode = (argLabel_Command(cmd, "axis") ? vertical_WindowSplit : 0) | (arg_Command(cmd) << 1); const char *url = suffixPtr_Command(cmd, "url"); diff --git a/src/ui/root.c b/src/ui/root.c index d98701b8..5b1167d8 100644 --- a/src/ui/root.c +++ b/src/ui/root.c @@ -635,10 +635,12 @@ static void updateNavBarSize_(iWidget *navBar) { iForIndices(k, lists) { iForEach(ObjectList, i, lists[k]) { iWidget *child = as_Widget(i.object); - setFlags_Widget(child, tight_WidgetFlag, isNarrow); - if (isInstance_Object(i.object, &Class_LabelWidget)) { - iLabelWidget *label = i.object; - updateSize_LabelWidget(label); + if (cmp_String(id_Widget(i.object), "navbar.unsplit")) { + setFlags_Widget(child, tight_WidgetFlag, isNarrow); + if (isInstance_Object(i.object, &Class_LabelWidget)) { + iLabelWidget *label = i.object; + updateSize_LabelWidget(label); + } } } } @@ -1023,6 +1025,16 @@ void updateMetrics_Root(iRoot *d) { postRefresh_App(); } +static void addUnsplitButton_(iWidget *navBar) { + iLabelWidget *unsplit = addChildFlags_Widget( + navBar, + iClob(newIcon_LabelWidget(close_Icon, 0, 0, "ui.split arg:0 focusother:1")), + collapse_WidgetFlag | frameless_WidgetFlag | tight_WidgetFlag | hidden_WidgetFlag); + setId_Widget(as_Widget(unsplit), "navbar.unsplit"); + setTextColor_LabelWidget(unsplit, uiTextAction_ColorId); + updateSize_LabelWidget(unsplit); +} + void createUserInterface_Root(iRoot *d) { iWidget *root = d->widget = new_Widget(); root->rect.size = get_Window()->size; @@ -1101,6 +1113,9 @@ void createUserInterface_Root(iRoot *d) { addChild_Widget(div, iClob(navBar)); setBackgroundColor_Widget(navBar, uiBackground_ColorId); setCommandHandler_Widget(navBar, handleNavBarCommands_); +#if defined (iPlatformApple) + addUnsplitButton_(navBar); +#endif iWidget *navBack; setId_Widget(navBack = addChildFlags_Widget(navBar, iClob(newIcon_LabelWidget(backArrow_Icon, 0, 0, "navigate.back")), collapse_WidgetFlag), "navbar.back"); setId_Widget(addChildFlags_Widget(navBar, iClob(newIcon_LabelWidget(forwardArrow_Icon, 0, 0, "navigate.forward")), collapse_WidgetFlag), "navbar.forward"); @@ -1278,6 +1293,10 @@ void createUserInterface_Root(iRoot *d) { # endif setAlignVisually_LabelWidget(navMenu, iTrue); setId_Widget(addChildFlags_Widget(navBar, iClob(navMenu), collapse_WidgetFlag), "navbar.menu"); +#endif +#if !defined (iPlatformApple) + /* On PC platforms, the close buttons are generally on the top right. */ + addUnsplitButton_(navBar); #endif } /* Tab bar. */ { diff --git a/src/ui/window.c b/src/ui/window.c index b8ce413b..4b39383c 100644 --- a/src/ui/window.c +++ b/src/ui/window.c @@ -1491,6 +1491,7 @@ void setSplitMode_MainWindow(iMainWindow *d, int splitFlags) { } /* The last child is the [+] button for adding a tab. */ moveTabButtonToEnd_Widget(findChild_Widget(docTabs, "newtab")); + setFlags_Widget(findWidget_Root("navbar.unsplit"), hidden_WidgetFlag, iTrue); iRelease(tabs); postCommandf_App("tabs.switch id:%s", cstr_String(id_Widget(constAs_Widget(curPage)))); } @@ -1540,6 +1541,11 @@ void setSplitMode_MainWindow(iMainWindow *d, int splitFlags) { postCommand_Root(w->roots[newRootIndex], "navigate.home"); } } + /* Show unsplit buttons. */ + for (int i = 0; i < 2; i++) { + setFlags_Widget(findChild_Widget(w->roots[i]->widget, "navbar.unsplit"), + hidden_WidgetFlag, iFalse); + } setCurrent_Root(NULL); } d->splitMode = splitMode; -- cgit v1.2.3