diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/app.c | 14 | ||||
-rw-r--r-- | src/ui/window.c | 16 |
2 files changed, 21 insertions, 9 deletions
@@ -1245,9 +1245,13 @@ iBool handleCommand_App(const char *cmd) { | |||
1245 | return iTrue; | 1245 | return iTrue; |
1246 | } | 1246 | } |
1247 | else if (equal_Command(cmd, "tabs.close")) { | 1247 | else if (equal_Command(cmd, "tabs.close")) { |
1248 | iWidget *tabs = findWidget_App("doctabs"); | 1248 | iWidget * tabs = findWidget_App("doctabs"); |
1249 | size_t index = tabPageIndex_Widget(tabs, document_App()); | 1249 | const iRangecc tabId = range_Command(cmd, "id"); |
1250 | iBool wasClosed = iFalse; | 1250 | iWidget * doc = !isEmpty_Range(&tabId) ? findWidget_App(cstr_Rangecc(tabId)) |
1251 | : document_App(); | ||
1252 | iBool wasCurrent = (doc == (iWidget *) document_App()); | ||
1253 | size_t index = tabPageIndex_Widget(tabs, doc); | ||
1254 | iBool wasClosed = iFalse; | ||
1251 | if (argLabel_Command(cmd, "toright")) { | 1255 | if (argLabel_Command(cmd, "toright")) { |
1252 | while (tabCount_Widget(tabs) > index + 1) { | 1256 | while (tabCount_Widget(tabs) > index + 1) { |
1253 | destroy_Widget(removeTabPage_Widget(tabs, index + 1)); | 1257 | destroy_Widget(removeTabPage_Widget(tabs, index + 1)); |
@@ -1272,7 +1276,9 @@ iBool handleCommand_App(const char *cmd) { | |||
1272 | index--; | 1276 | index--; |
1273 | } | 1277 | } |
1274 | arrange_Widget(tabs); | 1278 | arrange_Widget(tabs); |
1275 | postCommandf_App("tabs.switch page:%p", tabPage_Widget(tabs, index)); | 1279 | if (wasCurrent) { |
1280 | postCommandf_App("tabs.switch page:%p", tabPage_Widget(tabs, index)); | ||
1281 | } | ||
1276 | } | 1282 | } |
1277 | else { | 1283 | else { |
1278 | postCommand_App("quit"); | 1284 | postCommand_App("quit"); |
diff --git a/src/ui/window.c b/src/ui/window.c index 8cab100d..2e38512b 100644 --- a/src/ui/window.c +++ b/src/ui/window.c | |||
@@ -437,11 +437,17 @@ static iBool handleNavBarCommands_(iWidget *navBar, const char *cmd) { | |||
437 | else if (equal_Command(cmd, "mouse.clicked") && arg_Command(cmd)) { | 437 | else if (equal_Command(cmd, "mouse.clicked") && arg_Command(cmd)) { |
438 | iWidget *widget = pointer_Command(cmd); | 438 | iWidget *widget = pointer_Command(cmd); |
439 | iWidget *menu = findWidget_App("doctabs.menu"); | 439 | iWidget *menu = findWidget_App("doctabs.menu"); |
440 | if (isTabButton_Widget(widget) && !isVisible_Widget(menu)) { | 440 | if (isTabButton_Widget(widget)) { |
441 | iWidget *tabs = findWidget_App("doctabs"); | 441 | if (!isVisible_Widget(menu)) { |
442 | showTabPage_Widget(tabs, | 442 | iWidget *tabs = findWidget_App("doctabs"); |
443 | tabPage_Widget(tabs, childIndex_Widget(widget->parent, widget))); | 443 | iWidget *page = tabPage_Widget(tabs, childIndex_Widget(widget->parent, widget)); |
444 | openMenu_Widget(menu, coord_Command(cmd)); | 444 | if (argLabel_Command(cmd, "button") == SDL_BUTTON_MIDDLE) { |
445 | postCommandf_App("tabs.close id:%s", cstr_String(id_Widget(page))); | ||
446 | return iTrue; | ||
447 | } | ||
448 | showTabPage_Widget(tabs, page); | ||
449 | openMenu_Widget(menu, coord_Command(cmd)); | ||
450 | } | ||
445 | } | 451 | } |
446 | } | 452 | } |
447 | else if (equal_Command(cmd, "navigate.reload")) { | 453 | else if (equal_Command(cmd, "navigate.reload")) { |