diff options
author | Jaakko Keränen <jaakko.keranen@iki.fi> | 2021-04-30 06:46:14 +0300 |
---|---|---|
committer | Jaakko Keränen <jaakko.keranen@iki.fi> | 2021-04-30 06:46:14 +0300 |
commit | fed2b149aeb5c5cd692421602e0fe77ceffb8b28 (patch) | |
tree | 17e0c89314bd1267d10559f78a1bef78d97abdcf /src/ui | |
parent | 5039199857ed0b1644a319d3cc514d63c3e3db45 (diff) |
Window: Moving tabs between splits
Diffstat (limited to 'src/ui')
-rw-r--r-- | src/ui/root.c | 16 | ||||
-rw-r--r-- | src/ui/util.c | 4 | ||||
-rw-r--r-- | src/ui/window.c | 21 |
3 files changed, 29 insertions, 12 deletions
diff --git a/src/ui/root.c b/src/ui/root.c index 2eca982c..a97c8d49 100644 --- a/src/ui/root.c +++ b/src/ui/root.c | |||
@@ -885,7 +885,7 @@ void updateMetrics_Root(iRoot *d) { | |||
885 | } | 885 | } |
886 | 886 | ||
887 | void createUserInterface_Root(iRoot *d) { | 887 | void createUserInterface_Root(iRoot *d) { |
888 | iWidget *root = d->widget = new_Widget(); | 888 | iWidget *root = d->widget = new_Widget(); |
889 | iAssert(root->root == d); | 889 | iAssert(root->root == d); |
890 | setId_Widget(root, "root"); | 890 | setId_Widget(root, "root"); |
891 | /* Children of root cover the entire window. */ | 891 | /* Children of root cover the entire window. */ |
@@ -1238,15 +1238,15 @@ void createUserInterface_Root(iRoot *d) { | |||
1238 | }, | 1238 | }, |
1239 | 4); | 1239 | 4); |
1240 | iWidget *splitMenu = makeMenu_Widget(root, (iMenuItem[]){ | 1240 | iWidget *splitMenu = makeMenu_Widget(root, (iMenuItem[]){ |
1241 | { "Single Frame", '1', 0, "ui.frames arg:0" }, | 1241 | { "Single Frame", '1', 0, "ui.split arg:0" }, |
1242 | { "---", 0, 0, NULL }, | 1242 | { "---", 0, 0, NULL }, |
1243 | { "Horizontal", '2', 0, "ui.frames arg:3 axis:0" }, | 1243 | { "Horizontal", '2', 0, "ui.split arg:3 axis:0" }, |
1244 | { "Horizontal 1:2", SDLK_d, 0, "ui.frames arg:1 axis:0" }, | 1244 | { "Horizontal 1:2", SDLK_d, 0, "ui.split arg:1 axis:0" }, |
1245 | { "Horizontal 2:1", SDLK_e, 0, "ui.frames arg:2 axis:0" }, | 1245 | { "Horizontal 2:1", SDLK_e, 0, "ui.split arg:2 axis:0" }, |
1246 | { "---", 0, 0, NULL }, | 1246 | { "---", 0, 0, NULL }, |
1247 | { "Vertical", '3', 0, "ui.frames arg:3 axis:1" }, | 1247 | { "Vertical", '3', 0, "ui.split arg:3 axis:1" }, |
1248 | { "Vertical 1:2", SDLK_f, 0, "ui.frames arg:1 axis:1" }, | 1248 | { "Vertical 1:2", SDLK_f, 0, "ui.split arg:1 axis:1" }, |
1249 | { "Vertical 2:1", SDLK_r, 0, "ui.frames arg:2 axis:1" }, | 1249 | { "Vertical 2:1", SDLK_r, 0, "ui.split arg:2 axis:1" }, |
1250 | }, 9); | 1250 | }, 9); |
1251 | setFlags_Widget(splitMenu, disabledWhenHidden_WidgetFlag, iTrue); /* enabled when open */ | 1251 | setFlags_Widget(splitMenu, disabledWhenHidden_WidgetFlag, iTrue); /* enabled when open */ |
1252 | setId_Widget(tabsMenu, "doctabs.menu"); | 1252 | setId_Widget(tabsMenu, "doctabs.menu"); |
diff --git a/src/ui/util.c b/src/ui/util.c index fd8740b4..0a0c37a9 100644 --- a/src/ui/util.c +++ b/src/ui/util.c | |||
@@ -968,11 +968,13 @@ static void addTabPage_Widget_(iWidget *tabs, enum iWidgetAddPos addPos, iWidget | |||
968 | buttons, | 968 | buttons, |
969 | iClob(newKeyMods_LabelWidget(label, key, kmods, format_CStr("tabs.switch page:%p", page))), | 969 | iClob(newKeyMods_LabelWidget(label, key, kmods, format_CStr("tabs.switch page:%p", page))), |
970 | addPos); | 970 | addPos); |
971 | setFlags_Widget(buttons, hidden_WidgetFlag, iFalse); | ||
972 | setFlags_Widget(button, selected_WidgetFlag, isSel); | 971 | setFlags_Widget(button, selected_WidgetFlag, isSel); |
973 | setFlags_Widget( | 972 | setFlags_Widget( |
974 | button, noTopFrame_WidgetFlag | commandOnClick_WidgetFlag | expand_WidgetFlag, iTrue); | 973 | button, noTopFrame_WidgetFlag | commandOnClick_WidgetFlag | expand_WidgetFlag, iTrue); |
975 | addChildPos_Widget(pages, page, addPos); | 974 | addChildPos_Widget(pages, page, addPos); |
975 | if (tabCount_Widget(tabs) > 1) { | ||
976 | setFlags_Widget(buttons, hidden_WidgetFlag, iFalse); | ||
977 | } | ||
976 | setFlags_Widget(page, hidden_WidgetFlag | disabled_WidgetFlag, !isSel); | 978 | setFlags_Widget(page, hidden_WidgetFlag | disabled_WidgetFlag, !isSel); |
977 | } | 979 | } |
978 | 980 | ||
diff --git a/src/ui/window.c b/src/ui/window.c index da1db514..9ac9b918 100644 --- a/src/ui/window.c +++ b/src/ui/window.c | |||
@@ -29,6 +29,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ | |||
29 | #include "embedded.h" | 29 | #include "embedded.h" |
30 | #include "keys.h" | 30 | #include "keys.h" |
31 | #include "labelwidget.h" | 31 | #include "labelwidget.h" |
32 | #include "documentwidget.h" | ||
32 | #include "paint.h" | 33 | #include "paint.h" |
33 | #include "root.h" | 34 | #include "root.h" |
34 | #include "touch.h" | 35 | #include "touch.h" |
@@ -1170,13 +1171,27 @@ void setSplitMode_Window(iWindow *d, int splitMode) { | |||
1170 | } | 1171 | } |
1171 | else if ((splitMode & mask_WindowSplit) && oldCount == 1) { | 1172 | else if ((splitMode & mask_WindowSplit) && oldCount == 1) { |
1172 | /* Add a second root. */ | 1173 | /* Add a second root. */ |
1174 | iDocumentWidget *moved = document_Root(d->roots[0]); | ||
1173 | iAssert(d->roots[1] == NULL); | 1175 | iAssert(d->roots[1] == NULL); |
1174 | d->roots[1] = new_Root(); | 1176 | d->roots[1] = new_Root(); |
1175 | setCurrent_Root(d->roots[1]); | 1177 | setCurrent_Root(d->roots[1]); |
1176 | createUserInterface_Root(d->roots[1]); | 1178 | createUserInterface_Root(d->roots[1]); |
1177 | /* If the old root has multiple tabs, move the current one to the new split. */ | 1179 | /* If the old root has multiple tabs, move the current one to the new split. */ { |
1178 | 1180 | iWidget *docTabs0 = findChild_Widget(d->roots[0]->widget, "doctabs"); | |
1179 | postCommand_Root(d->roots[1], "navigate.home"); | 1181 | iWidget *docTabs1 = findChild_Widget(d->roots[1]->widget, "doctabs"); |
1182 | if (tabCount_Widget(docTabs0) >= 2) { | ||
1183 | int movedIndex = tabPageIndex_Widget(docTabs0, moved); | ||
1184 | removeTabPage_Widget(docTabs0, movedIndex); | ||
1185 | showTabPage_Widget(docTabs0, tabPage_Widget(docTabs0, iMax(movedIndex - 1, 0))); | ||
1186 | iRelease(removeTabPage_Widget(docTabs1, 0)); /* delete the default tab */ | ||
1187 | setRoot_Widget(as_Widget(moved), d->roots[1]); | ||
1188 | prependTabPage_Widget(docTabs1, iClob(moved), "", 0, 0); | ||
1189 | showTabPage_Widget(docTabs1, as_Widget(moved)); | ||
1190 | } | ||
1191 | else { | ||
1192 | postCommand_Root(d->roots[1], "navigate.home"); | ||
1193 | } | ||
1194 | } | ||
1180 | setCurrent_Root(NULL); | 1195 | setCurrent_Root(NULL); |
1181 | } | 1196 | } |
1182 | d->splitMode = splitMode; | 1197 | d->splitMode = splitMode; |