summaryrefslogtreecommitdiff
path: root/src/ui
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/documentwidget.c44
-rw-r--r--src/ui/sidebarwidget.c30
-rw-r--r--src/ui/util.c25
-rw-r--r--src/ui/window.c23
4 files changed, 84 insertions, 38 deletions
diff --git a/src/ui/documentwidget.c b/src/ui/documentwidget.c
index 6a44fd5f..8d519865 100644
--- a/src/ui/documentwidget.c
+++ b/src/ui/documentwidget.c
@@ -221,6 +221,7 @@ enum iDocumentWidgetFlag {
221 pinchZoom_DocumentWidgetFlag = iBit(9), 221 pinchZoom_DocumentWidgetFlag = iBit(9),
222 movingSelectMarkStart_DocumentWidgetFlag = iBit(10), 222 movingSelectMarkStart_DocumentWidgetFlag = iBit(10),
223 movingSelectMarkEnd_DocumentWidgetFlag = iBit(11), 223 movingSelectMarkEnd_DocumentWidgetFlag = iBit(11),
224 otherRootByDefault_DocumentWidgetFlag = iBit(12), /* links open to other root by default */
224}; 225};
225 226
226enum iDocumentLinkOrdinalMode { 227enum iDocumentLinkOrdinalMode {
@@ -956,6 +957,20 @@ static void documentRunsInvalidated_DocumentWidget_(iDocumentWidget *d) {
956 iZap(d->renderRuns); 957 iZap(d->renderRuns);
957} 958}
958 959
960iBool isPinned_DocumentWidget_(const iDocumentWidget *d) {
961 if (d->flags & otherRootByDefault_DocumentWidgetFlag) {
962 return iTrue;
963 }
964 const iWidget *w = constAs_Widget(d);
965 const iWindow *win = get_Window();
966 if (numRoots_Window(win) == 1) {
967 return iFalse;
968 }
969 const iPrefs *prefs = prefs_App();
970 return (prefs->pinSplit == 1 && w->root == win->roots[0]) ||
971 (prefs->pinSplit == 2 && w->root == win->roots[1]);
972}
973
959void setSource_DocumentWidget(iDocumentWidget *d, const iString *source) { 974void setSource_DocumentWidget(iDocumentWidget *d, const iString *source) {
960 setUrl_GmDocument(d->doc, d->mod.url); 975 setUrl_GmDocument(d->doc, d->mod.url);
961 setSource_GmDocument(d->doc, source, documentWidth_DocumentWidget_(d)); 976 setSource_GmDocument(d->doc, source, documentWidth_DocumentWidget_(d));
@@ -965,6 +980,15 @@ void setSource_DocumentWidget(iDocumentWidget *d, const iString *source) {
965 d->drawBufs->flags |= updateSideBuf_DrawBufsFlag; 980 d->drawBufs->flags |= updateSideBuf_DrawBufsFlag;
966 invalidate_DocumentWidget_(d); 981 invalidate_DocumentWidget_(d);
967 refresh_Widget(as_Widget(d)); 982 refresh_Widget(as_Widget(d));
983 /* Check for special bookmark tags. */
984 d->flags &= ~otherRootByDefault_DocumentWidgetFlag;
985 const uint16_t bmid = findUrl_Bookmarks(bookmarks_App(), d->mod.url);
986 if (bmid) {
987 const iBookmark *bm = get_Bookmarks(bookmarks_App(), bmid);
988 if (hasTag_Bookmark(bm, linkSplit_BookmarkTag)) {
989 d->flags |= otherRootByDefault_DocumentWidgetFlag;
990 }
991 }
968} 992}
969 993
970static void updateTheme_DocumentWidget_(iDocumentWidget *d) { 994static void updateTheme_DocumentWidget_(iDocumentWidget *d) {
@@ -2455,7 +2479,7 @@ static iBool handleCommand_DocumentWidget_(iDocumentWidget *d, const char *cmd)
2455 linkUrl_GmDocument(d->doc, run->linkId))) != 0) { 2479 linkUrl_GmDocument(d->doc, run->linkId))) != 0) {
2456 const iBookmark *bm = get_Bookmarks(bookmarks_App(), bmid); 2480 const iBookmark *bm = get_Bookmarks(bookmarks_App(), bmid);
2457 /* We can import local copies of remote bookmarks. */ 2481 /* We can import local copies of remote bookmarks. */
2458 if (!hasTag_Bookmark(bm, "remote")) { 2482 if (!hasTag_Bookmark(bm, remote_BookmarkTag)) {
2459 remove_PtrArrayIterator(&i); 2483 remove_PtrArrayIterator(&i);
2460 } 2484 }
2461 } 2485 }
@@ -2740,11 +2764,12 @@ static iBool processEvent_DocumentWidget_(iDocumentWidget *d, const SDL_Event *e
2740 else { 2764 else {
2741 postCommandf_Root(w->root, 2765 postCommandf_Root(w->root,
2742 "open newtab:%d url:%s", 2766 "open newtab:%d url:%s",
2743 d->ordinalMode == 2767 (isPinned_DocumentWidget_(d) ? otherRoot_OpenTabFlag : 0) ^
2768 (d->ordinalMode ==
2744 numbersAndAlphabet_DocumentLinkOrdinalMode 2769 numbersAndAlphabet_DocumentLinkOrdinalMode
2745 ? openTabMode_Sym(modState_Keys()) 2770 ? openTabMode_Sym(modState_Keys())
2746 : (d->flags & newTabViaHomeKeys_DocumentWidgetFlag ? 1 : 0), 2771 : (d->flags & newTabViaHomeKeys_DocumentWidgetFlag ? 1 : 0)),
2747 cstr_String(absoluteUrl_String( 2772 cstr_String(absoluteUrl_String(
2748 d->mod.url, linkUrl_GmDocument(d->doc, run->linkId)))); 2773 d->mod.url, linkUrl_GmDocument(d->doc, run->linkId))));
2749 } 2774 }
2750 setLinkNumberMode_DocumentWidget_(d, iFalse); 2775 setLinkNumberMode_DocumentWidget_(d, iFalse);
@@ -2862,8 +2887,9 @@ static iBool processEvent_DocumentWidget_(iDocumentWidget *d, const SDL_Event *e
2862 } 2887 }
2863 if (ev->button.button == SDL_BUTTON_MIDDLE && d->hoverLink) { 2888 if (ev->button.button == SDL_BUTTON_MIDDLE && d->hoverLink) {
2864 postCommandf_Root(w->root, "open newtab:%d url:%s", 2889 postCommandf_Root(w->root, "open newtab:%d url:%s",
2865 modState_Keys() & KMOD_SHIFT ? 1 : 2, 2890 (isPinned_DocumentWidget_(d) ? otherRoot_OpenTabFlag : 0) |
2866 cstr_String(linkUrl_GmDocument(d->doc, d->hoverLink->linkId))); 2891 (modState_Keys() & KMOD_SHIFT ? new_OpenTabFlag : newBackground_OpenTabFlag),
2892 cstr_String(linkUrl_GmDocument(d->doc, d->hoverLink->linkId)));
2867 return iTrue; 2893 return iTrue;
2868 } 2894 }
2869 if (ev->button.button == SDL_BUTTON_RIGHT && 2895 if (ev->button.button == SDL_BUTTON_RIGHT &&
@@ -3237,8 +3263,12 @@ static iBool processEvent_DocumentWidget_(iDocumentWidget *d, const SDL_Event *e
3237 refresh_Widget(w); 3263 refresh_Widget(w);
3238 } 3264 }
3239 else if (linkFlags & supportedProtocol_GmLinkFlag) { 3265 else if (linkFlags & supportedProtocol_GmLinkFlag) {
3266 int tabMode = openTabMode_Sym(modState_Keys());
3267 if (isPinned_DocumentWidget_(d)) {
3268 tabMode ^= otherRoot_OpenTabFlag;
3269 }
3240 postCommandf_Root(w->root, "open newtab:%d url:%s", 3270 postCommandf_Root(w->root, "open newtab:%d url:%s",
3241 openTabMode_Sym(modState_Keys()), 3271 tabMode,
3242 cstr_String(absoluteUrl_String( 3272 cstr_String(absoluteUrl_String(
3243 d->mod.url, linkUrl_GmDocument(d->doc, linkId)))); 3273 d->mod.url, linkUrl_GmDocument(d->doc, linkId))));
3244 } 3274 }
diff --git a/src/ui/sidebarwidget.c b/src/ui/sidebarwidget.c
index 7d08b83a..245b76a3 100644
--- a/src/ui/sidebarwidget.c
+++ b/src/ui/sidebarwidget.c
@@ -824,12 +824,12 @@ iBool handleBookmarkEditorCommands_SidebarWidget_(iWidget *editor, const char *c
824 set_String(&bm->url, url); 824 set_String(&bm->url, url);
825 set_String(&bm->tags, tags); 825 set_String(&bm->tags, tags);
826 if (isEmpty_String(icon)) { 826 if (isEmpty_String(icon)) {
827 removeTag_Bookmark(bm, "usericon"); 827 removeTag_Bookmark(bm, userIcon_BookmarkTag);
828 bm->icon = 0; 828 bm->icon = 0;
829 } 829 }
830 else { 830 else {
831 if (!hasTag_Bookmark(bm, "usericon")) { 831 if (!hasTag_Bookmark(bm, userIcon_BookmarkTag)) {
832 addTag_Bookmark(bm, "usericon"); 832 addTag_Bookmark(bm, userIcon_BookmarkTag);
833 } 833 }
834 bm->icon = first_String(icon); 834 bm->icon = first_String(icon);
835 } 835 }
@@ -1008,7 +1008,7 @@ static iBool processEvent_SidebarWidget_(iSidebarWidget *d, const SDL_Event *ev)
1008 setText_InputWidget(findChild_Widget(dlg, "bmed.title"), &bm->title); 1008 setText_InputWidget(findChild_Widget(dlg, "bmed.title"), &bm->title);
1009 setText_InputWidget(findChild_Widget(dlg, "bmed.url"), &bm->url); 1009 setText_InputWidget(findChild_Widget(dlg, "bmed.url"), &bm->url);
1010 setText_InputWidget(findChild_Widget(dlg, "bmed.tags"), &bm->tags); 1010 setText_InputWidget(findChild_Widget(dlg, "bmed.tags"), &bm->tags);
1011 if (hasTag_Bookmark(bm, "usericon")) { 1011 if (hasTag_Bookmark(bm, userIcon_BookmarkTag)) {
1012 setText_InputWidget(findChild_Widget(dlg, "bmed.icon"), 1012 setText_InputWidget(findChild_Widget(dlg, "bmed.icon"),
1013 collect_String(newUnicodeN_String(&bm->icon, 1))); 1013 collect_String(newUnicodeN_String(&bm->icon, 1)));
1014 } 1014 }
@@ -1022,7 +1022,7 @@ static iBool processEvent_SidebarWidget_(iSidebarWidget *d, const SDL_Event *ev)
1022 if (d->mode == bookmarks_SidebarMode && item) { 1022 if (d->mode == bookmarks_SidebarMode && item) {
1023 setFlags_Widget(w, disabled_WidgetFlag, iTrue); 1023 setFlags_Widget(w, disabled_WidgetFlag, iTrue);
1024 iBookmark *bm = get_Bookmarks(bookmarks_App(), item->id); 1024 iBookmark *bm = get_Bookmarks(bookmarks_App(), item->id);
1025 const iBool isRemote = hasTag_Bookmark(bm, "remote"); 1025 const iBool isRemote = hasTag_Bookmark(bm, remote_BookmarkTag);
1026 iChar icon = isRemote ? 0x1f588 : bm->icon; 1026 iChar icon = isRemote ? 0x1f588 : bm->icon;
1027 iWidget *dlg = makeBookmarkCreation_Widget(&bm->url, &bm->title, icon); 1027 iWidget *dlg = makeBookmarkCreation_Widget(&bm->url, &bm->title, icon);
1028 setId_Widget(dlg, format_CStr("bmed.%s", cstr_String(id_Widget(w)))); 1028 setId_Widget(dlg, format_CStr("bmed.%s", cstr_String(id_Widget(w))));
@@ -1040,7 +1040,7 @@ static iBool processEvent_SidebarWidget_(iSidebarWidget *d, const SDL_Event *ev)
1040 iBookmark *bm = get_Bookmarks(bookmarks_App(), item->id); 1040 iBookmark *bm = get_Bookmarks(bookmarks_App(), item->id);
1041 if (hasTag_Bookmark(bm, tag)) { 1041 if (hasTag_Bookmark(bm, tag)) {
1042 removeTag_Bookmark(bm, tag); 1042 removeTag_Bookmark(bm, tag);
1043 if (!iCmpStr(tag, "subscribed")) { 1043 if (!iCmpStr(tag, subscribed_BookmarkTag)) {
1044 removeEntries_Feeds(item->id); 1044 removeEntries_Feeds(item->id);
1045 } 1045 }
1046 } 1046 }
@@ -1119,7 +1119,7 @@ static iBool processEvent_SidebarWidget_(iSidebarWidget *d, const SDL_Event *ev)
1119 } 1119 }
1120 if (isCommand_Widget(w, ev, "feed.entry.unsubscribe")) { 1120 if (isCommand_Widget(w, ev, "feed.entry.unsubscribe")) {
1121 if (arg_Command(cmd)) { 1121 if (arg_Command(cmd)) {
1122 removeTag_Bookmark(feedBookmark, "subscribed"); 1122 removeTag_Bookmark(feedBookmark, subscribed_BookmarkTag);
1123 removeEntries_Feeds(id_Bookmark(feedBookmark)); 1123 removeEntries_Feeds(id_Bookmark(feedBookmark));
1124 updateItems_SidebarWidget_(d); 1124 updateItems_SidebarWidget_(d);
1125 } 1125 }
@@ -1308,7 +1308,7 @@ static iBool processEvent_SidebarWidget_(iSidebarWidget *d, const SDL_Event *ev)
1308 "bookmark.tag tag:homepage"); 1308 "bookmark.tag tag:homepage");
1309 if (menuItem) { 1309 if (menuItem) {
1310 setTextCStr_LabelWidget(menuItem, 1310 setTextCStr_LabelWidget(menuItem,
1311 hasTag_Bookmark(bm, "homepage") 1311 hasTag_Bookmark(bm, homepage_BookmarkTag)
1312 ? home_Icon " ${bookmark.untag.home}" 1312 ? home_Icon " ${bookmark.untag.home}"
1313 : home_Icon " ${bookmark.tag.home}"); 1313 : home_Icon " ${bookmark.tag.home}");
1314 checkIcon_LabelWidget(menuItem); 1314 checkIcon_LabelWidget(menuItem);
@@ -1316,7 +1316,7 @@ static iBool processEvent_SidebarWidget_(iSidebarWidget *d, const SDL_Event *ev)
1316 menuItem = findMenuItem_Widget(d->menu, "bookmark.tag tag:subscribed"); 1316 menuItem = findMenuItem_Widget(d->menu, "bookmark.tag tag:subscribed");
1317 if (menuItem) { 1317 if (menuItem) {
1318 setTextCStr_LabelWidget(menuItem, 1318 setTextCStr_LabelWidget(menuItem,
1319 hasTag_Bookmark(bm, "subscribed") 1319 hasTag_Bookmark(bm, subscribed_BookmarkTag)
1320 ? star_Icon " ${bookmark.untag.sub}" 1320 ? star_Icon " ${bookmark.untag.sub}"
1321 : star_Icon " ${bookmark.tag.sub}"); 1321 : star_Icon " ${bookmark.tag.sub}");
1322 checkIcon_LabelWidget(menuItem); 1322 checkIcon_LabelWidget(menuItem);
@@ -1324,7 +1324,7 @@ static iBool processEvent_SidebarWidget_(iSidebarWidget *d, const SDL_Event *ev)
1324 menuItem = findMenuItem_Widget(d->menu, "bookmark.tag tag:remotesource"); 1324 menuItem = findMenuItem_Widget(d->menu, "bookmark.tag tag:remotesource");
1325 if (menuItem) { 1325 if (menuItem) {
1326 setTextCStr_LabelWidget(menuItem, 1326 setTextCStr_LabelWidget(menuItem,
1327 hasTag_Bookmark(bm, "remotesource") 1327 hasTag_Bookmark(bm, remoteSource_BookmarkTag)
1328 ? downArrowBar_Icon " ${bookmark.untag.remote}" 1328 ? downArrowBar_Icon " ${bookmark.untag.remote}"
1329 : downArrowBar_Icon " ${bookmark.tag.remote}"); 1329 : downArrowBar_Icon " ${bookmark.tag.remote}");
1330 checkIcon_LabelWidget(menuItem); 1330 checkIcon_LabelWidget(menuItem);
@@ -1386,13 +1386,13 @@ static iBool processEvent_SidebarWidget_(iSidebarWidget *d, const SDL_Event *ev)
1386 const iSidebarItem *hoverItem = hoverItem_ListWidget(d->list); 1386 const iSidebarItem *hoverItem = hoverItem_ListWidget(d->list);
1387 iAssert(hoverItem); 1387 iAssert(hoverItem);
1388 const iBookmark * bm = get_Bookmarks(bookmarks_App(), hoverItem->id); 1388 const iBookmark * bm = get_Bookmarks(bookmarks_App(), hoverItem->id);
1389 const iBool isRemote = hasTag_Bookmark(bm, "remote"); 1389 const iBool isRemote = hasTag_Bookmark(bm, remote_BookmarkTag);
1390 static const char *localOnlyCmds[] = { "bookmark.edit", 1390 static const char *localOnlyCmds[] = { "bookmark.edit",
1391 "bookmark.delete", 1391 "bookmark.delete",
1392 "bookmark.tag tag:subscribed", 1392 "bookmark.tag tag:" subscribed_BookmarkTag,
1393 "bookmark.tag tag:homepage", 1393 "bookmark.tag tag:" homepage_BookmarkTag,
1394 "bookmark.tag tag:remotesource", 1394 "bookmark.tag tag:" remoteSource_BookmarkTag,
1395 "bookmark.tag tag:subscribed" }; 1395 "bookmark.tag tag:" subscribed_BookmarkTag };
1396 iForIndices(i, localOnlyCmds) { 1396 iForIndices(i, localOnlyCmds) {
1397 setFlags_Widget(as_Widget(findMenuItem_Widget(d->menu, localOnlyCmds[i])), 1397 setFlags_Widget(as_Widget(findMenuItem_Widget(d->menu, localOnlyCmds[i])),
1398 disabled_WidgetFlag, 1398 disabled_WidgetFlag,
diff --git a/src/ui/util.c b/src/ui/util.c
index 5995f6a0..8c058ac3 100644
--- a/src/ui/util.c
+++ b/src/ui/util.c
@@ -2218,6 +2218,14 @@ iWidget *makePreferences_Widget(void) {
2218 addChild_Widget(values, iClob(makeToggle_Widget("prefs.hoverlink"))); 2218 addChild_Widget(values, iClob(makeToggle_Widget("prefs.hoverlink")));
2219 addChild_Widget(headings, iClob(makeHeading_Widget("${prefs.archive.openindex}"))); 2219 addChild_Widget(headings, iClob(makeHeading_Widget("${prefs.archive.openindex}")));
2220 addChild_Widget(values, iClob(makeToggle_Widget("prefs.archive.openindex"))); 2220 addChild_Widget(values, iClob(makeToggle_Widget("prefs.archive.openindex")));
2221 addChild_Widget(headings, iClob(makeHeading_Widget("${prefs.pinsplit}")));
2222 iWidget *pinSplit = new_Widget();
2223 /* Split mode document pinning. */ {
2224 addRadioButton_(pinSplit, "prefs.pinsplit.0", "${prefs.pinsplit.none}", "pinsplit.set arg:0");
2225 addRadioButton_(pinSplit, "prefs.pinsplit.1", "${prefs.pinsplit.left}", "pinsplit.set arg:1");
2226 addRadioButton_(pinSplit, "prefs.pinsplit.2", "${prefs.pinsplit.right}", "pinsplit.set arg:2");
2227 }
2228 addChildFlags_Widget(values, iClob(pinSplit), arrangeHorizontal_WidgetFlag | arrangeSize_WidgetFlag);
2221 addChild_Widget(headings, iClob(makePadding_Widget(bigGap))); 2229 addChild_Widget(headings, iClob(makePadding_Widget(bigGap)));
2222 addChild_Widget(values, iClob(makePadding_Widget(bigGap))); 2230 addChild_Widget(values, iClob(makePadding_Widget(bigGap)));
2223 /* UI languages. */ { 2231 /* UI languages. */ {
@@ -2457,10 +2465,21 @@ iWidget *makeBookmarkEditor_Widget(void) {
2457 setUrlContent_InputWidget(inputs[1], iTrue); 2465 setUrlContent_InputWidget(inputs[1], iTrue);
2458 addDialogInputWithHeading_(headings, values, "${dlg.bookmark.tags}", "bmed.tags", iClob(inputs[2] = new_InputWidget(0))); 2466 addDialogInputWithHeading_(headings, values, "${dlg.bookmark.tags}", "bmed.tags", iClob(inputs[2] = new_InputWidget(0)));
2459 addDialogInputWithHeading_(headings, values, "${dlg.bookmark.icon}", "bmed.icon", iClob(inputs[3] = new_InputWidget(1))); 2467 addDialogInputWithHeading_(headings, values, "${dlg.bookmark.icon}", "bmed.icon", iClob(inputs[3] = new_InputWidget(1)));
2468 /* Buttons for special tags. */
2469 addChild_Widget(dlg, iClob(makePadding_Widget(gap_UI)));
2470 addChild_Widget(dlg, iClob(makeTwoColumnWidget_(&headings, &values)));
2471 makeTwoColumnHeading_("SPECIAL TAGS", headings, values);
2472 addChild_Widget(headings, iClob(makeHeading_Widget("${bookmark.tag.home}")));
2473 addChild_Widget(values, iClob(makeToggle_Widget("bmed.tag.home")));
2474 addChild_Widget(headings, iClob(makeHeading_Widget("${bookmark.tag.remote}")));
2475 addChild_Widget(values, iClob(makeToggle_Widget("bmed.tag.remote")));
2476 addChild_Widget(headings, iClob(makeHeading_Widget("${bookmark.tag.sub}")));
2477 addChild_Widget(values, iClob(makeToggle_Widget("bmed.tag.sub")));
2460 arrange_Widget(dlg); 2478 arrange_Widget(dlg);
2461 for (int i = 0; i < 3; ++i) { 2479 for (int i = 0; i < 3; ++i) {
2462 as_Widget(inputs[i])->rect.size.x = 100 * gap_UI - headings->rect.size.x; 2480 as_Widget(inputs[i])->rect.size.x = 100 * gap_UI - headings->rect.size.x;
2463 } 2481 }
2482 addChild_Widget(dlg, iClob(makePadding_Widget(gap_UI)));
2464 addChild_Widget( 2483 addChild_Widget(
2465 dlg, 2484 dlg,
2466 iClob(makeDialogButtons_Widget((iMenuItem[]){ { "${cancel}", 0, 0, NULL }, 2485 iClob(makeDialogButtons_Widget((iMenuItem[]){ { "${cancel}", 0, 0, NULL },
@@ -2489,8 +2508,8 @@ static iBool handleBookmarkCreationCommands_SidebarWidget_(iWidget *editor, cons
2489 const uint32_t id = add_Bookmarks(bookmarks_App(), url, title, tags, first_String(icon)); 2508 const uint32_t id = add_Bookmarks(bookmarks_App(), url, title, tags, first_String(icon));
2490 if (!isEmpty_String(icon)) { 2509 if (!isEmpty_String(icon)) {
2491 iBookmark *bm = get_Bookmarks(bookmarks_App(), id); 2510 iBookmark *bm = get_Bookmarks(bookmarks_App(), id);
2492 if (!hasTag_Bookmark(bm, "usericon")) { 2511 if (!hasTag_Bookmark(bm, userIcon_BookmarkTag)) {
2493 addTag_Bookmark(bm, "usericon"); 2512 addTag_Bookmark(bm, userIcon_BookmarkTag);
2494 } 2513 }
2495 } 2514 }
2496 postCommand_App("bookmarks.changed"); 2515 postCommand_App("bookmarks.changed");
@@ -2609,7 +2628,7 @@ iWidget *makeFeedSettings_Widget(uint32_t bookmarkId) {
2609 setText_InputWidget(findChild_Widget(dlg, "feedcfg.title"), 2628 setText_InputWidget(findChild_Widget(dlg, "feedcfg.title"),
2610 bm ? &bm->title : feedTitle_DocumentWidget(document_App())); 2629 bm ? &bm->title : feedTitle_DocumentWidget(document_App()));
2611 setFlags_Widget(findChild_Widget(dlg, 2630 setFlags_Widget(findChild_Widget(dlg,
2612 hasTag_Bookmark(bm, "headings") ? "feedcfg.type.headings" 2631 hasTag_Bookmark(bm, headings_BookmarkTag) ? "feedcfg.type.headings"
2613 : "feedcfg.type.gemini"), 2632 : "feedcfg.type.gemini"),
2614 selected_WidgetFlag, 2633 selected_WidgetFlag,
2615 iTrue); 2634 iTrue);
diff --git a/src/ui/window.c b/src/ui/window.c
index 5a8a1e26..c4d06d75 100644
--- a/src/ui/window.c
+++ b/src/ui/window.c
@@ -1218,9 +1218,15 @@ void setSplitMode_Window(iWindow *d, int splitFlags) {
1218 setCurrent_Root(d->roots[1]); 1218 setCurrent_Root(d->roots[1]);
1219 d->keyRoot = d->roots[1]; 1219 d->keyRoot = d->roots[1];
1220 createUserInterface_Root(d->roots[1]); 1220 createUserInterface_Root(d->roots[1]);
1221 /* If the old root has multiple tabs, move the current one to the new split. */ { 1221 if (!isEmpty_String(d->pendingSplitUrl)) {
1222 postCommandf_Root(d->roots[1], "open url:%s",
1223 cstr_String(d->pendingSplitUrl));
1224 clear_String(d->pendingSplitUrl);
1225 }
1226 else if (~splitFlags & noEvents_WindowSplit) {
1222 iWidget *docTabs0 = findChild_Widget(d->roots[0]->widget, "doctabs"); 1227 iWidget *docTabs0 = findChild_Widget(d->roots[0]->widget, "doctabs");
1223 iWidget *docTabs1 = findChild_Widget(d->roots[1]->widget, "doctabs"); 1228 iWidget *docTabs1 = findChild_Widget(d->roots[1]->widget, "doctabs");
1229 /* If the old root has multiple tabs, move the current one to the new split. */
1224 if (tabCount_Widget(docTabs0) >= 2) { 1230 if (tabCount_Widget(docTabs0) >= 2) {
1225 int movedIndex = tabPageIndex_Widget(docTabs0, moved); 1231 int movedIndex = tabPageIndex_Widget(docTabs0, moved);
1226 removeTabPage_Widget(docTabs0, movedIndex); 1232 removeTabPage_Widget(docTabs0, movedIndex);
@@ -1228,19 +1234,10 @@ void setSplitMode_Window(iWindow *d, int splitFlags) {
1228 iRelease(removeTabPage_Widget(docTabs1, 0)); /* delete the default tab */ 1234 iRelease(removeTabPage_Widget(docTabs1, 0)); /* delete the default tab */
1229 setRoot_Widget(as_Widget(moved), d->roots[1]); 1235 setRoot_Widget(as_Widget(moved), d->roots[1]);
1230 prependTabPage_Widget(docTabs1, iClob(moved), "", 0, 0); 1236 prependTabPage_Widget(docTabs1, iClob(moved), "", 0, 0);
1231 if (~splitFlags & noEvents_WindowSplit) { 1237 postCommandf_App("tabs.switch page:%p", moved);
1232 postCommandf_App("tabs.switch page:%p", moved);
1233 }
1234 } 1238 }
1235 else if (~splitFlags & noEvents_WindowSplit) { 1239 else {
1236 if (isEmpty_String(d->pendingSplitUrl)) { 1240 postCommand_Root(d->roots[1], "navigate.home");
1237 postCommand_Root(d->roots[1], "navigate.home");
1238 }
1239 else {
1240 postCommandf_Root(d->roots[1], "open url:%s",
1241 cstr_String(d->pendingSplitUrl));
1242 clear_String(d->pendingSplitUrl);
1243 }
1244 } 1241 }
1245 } 1242 }
1246 setCurrent_Root(NULL); 1243 setCurrent_Root(NULL);