diff options
author | Chris Young <chris@unsatisfactorysoftware.co.uk> | 2016-01-31 17:58:27 +0000 |
---|---|---|
committer | Chris Young <chris@unsatisfactorysoftware.co.uk> | 2016-01-31 17:58:27 +0000 |
commit | cd0bcc421a2ae5a4bf64f4e21c92a0004ef7ece8 (patch) | |
tree | 95c40cb2c6907de7eae5b3507e77c69d1c9c104d /amiga/gui.c | |
parent | cc0abb66b092f2198e1931ee6921fe79da4ed94d (diff) | |
download | netsurf-cd0bcc421a2ae5a4bf64f4e21c92a0004ef7ece8.tar.gz netsurf-cd0bcc421a2ae5a4bf64f4e21c92a0004ef7ece8.tar.bz2 |
Add an option to close inactive tabs to the tab bar context menu
Diffstat (limited to 'amiga/gui.c')
-rw-r--r-- | amiga/gui.c | 44 |
1 files changed, 27 insertions, 17 deletions
diff --git a/amiga/gui.c b/amiga/gui.c index e4cdd1831..15a5e9d64 100644 --- a/amiga/gui.c +++ b/amiga/gui.c @@ -2455,7 +2455,7 @@ static void ami_handle_msg(void) break; case WMHI_CLOSEWINDOW: - ami_close_all_tabs(gwin); + ami_gui_close_window(gwin); break; #ifdef __amigaos4__ case WMHI_ICONIFY: @@ -2524,7 +2524,7 @@ static void ami_handle_msg(void) if(ami_menu_window_close == (void *)AMI_MENU_WINDOW_CLOSE_ALL) ami_quit_netsurf(); else - ami_close_all_tabs(ami_menu_window_close); + ami_gui_close_window(ami_menu_window_close); ami_menu_window_close = NULL; } @@ -2914,7 +2914,7 @@ void ami_quit_netsurf(void) /* This also closes windows that are attached to the * gui_window, such as local history and find. */ ShowWindow(gwin->win, WINDOW_BACKMOST); - ami_close_all_tabs(gwin); + ami_gui_close_window(gwin); break; case AMINS_GUIOPTSWINDOW: @@ -4386,36 +4386,46 @@ gui_window_create(struct browser_window *bw, return g; } -void ami_close_all_tabs(struct gui_window_2 *gwin) +static void ami_gui_close_tabs(struct gui_window_2 *gwin, bool other_tabs) { struct Node *tab; struct Node *ntab; - + struct gui_window *gw; + if((gwin->tabs > 1) && (nsoption_bool(tab_close_warn) == true)) { char *req_body = ami_utf8_easy(messages_get("MultiTabClose")); int32 res = ami_warn_user_multi(req_body, "Yes", "No", gwin->win); free(req_body); - + if(res == 0) return; } - - if(gwin->tabs) - { + + if(gwin->tabs) { tab = GetHead(&gwin->tab_list); - do - { + do { ntab=GetSucc(tab); GetClickTabNodeAttrs(tab, - TNA_UserData,&gwin->gw, + TNA_UserData,&gw, TAG_DONE); - browser_window_destroy(gwin->gw->bw); + + if((other_tabs == false) || (gwin->gw != gw)) { + browser_window_destroy(gw->bw); + } } while((tab=ntab)); + } else { + if(other_tabs == false) browser_window_destroy(gwin->gw->bw); } - else - { - browser_window_destroy(gwin->gw->bw); - } +} + +void ami_gui_close_window(struct gui_window_2 *gwin) +{ + ami_gui_close_tabs(gwin, false); +} + +void ami_gui_close_inactive_tabs(struct gui_window_2 *gwin) +{ + ami_gui_close_tabs(gwin, true); } static void gui_window_destroy(struct gui_window *g) |