summaryrefslogtreecommitdiff
path: root/amiga/gui.c
diff options
context:
space:
mode:
authorChris Young <chris@unsatisfactorysoftware.co.uk>2016-01-31 17:58:27 +0000
committerChris Young <chris@unsatisfactorysoftware.co.uk>2016-01-31 17:58:27 +0000
commitcd0bcc421a2ae5a4bf64f4e21c92a0004ef7ece8 (patch)
tree95c40cb2c6907de7eae5b3507e77c69d1c9c104d /amiga/gui.c
parentcc0abb66b092f2198e1931ee6921fe79da4ed94d (diff)
downloadnetsurf-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.c44
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)