From db8767108b6650d280152ec91bb6433143beb067 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Tue, 20 Apr 2010 23:30:42 +0000 Subject: [PATCH] Close the proper tab when closing tabs --- src/callbacks.c | 8 +++++--- src/callbacks.h | 2 +- src/surfer.c | 18 +++++++++++++----- src/surfer.h | 2 +- 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/callbacks.c b/src/callbacks.c index 6ec0ae3..3e6f1ca 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -62,7 +62,7 @@ void on_file_close_tab(gpointer data) { Surfer * surfer = data; - surfer_close_tab(surfer); + surfer_close_tab(surfer, NULL); } @@ -493,11 +493,13 @@ void on_home(gpointer data) /* on_notebook_close_tab */ -void on_notebook_close_tab(gpointer data) +void on_notebook_close_tab(GtkWidget * widget, gpointer data) { Surfer * surfer = data; - surfer_close_tab(surfer); + if((widget = g_object_get_data(G_OBJECT(widget), "widget")) == NULL) + return; /* XXX report error */ + surfer_close_tab(surfer, widget); } diff --git a/src/callbacks.h b/src/callbacks.h index e5df08d..ff734a0 100644 --- a/src/callbacks.h +++ b/src/callbacks.h @@ -66,7 +66,7 @@ void on_refresh(gpointer data); void on_stop(gpointer data); /* notebook */ -void on_notebook_close_tab(gpointer data); +void on_notebook_close_tab(GtkWidget * widget, gpointer data); void on_notebook_switch_page(gpointer data); #endif diff --git a/src/surfer.c b/src/surfer.c index a2f7eef..0272b9a 100644 --- a/src/surfer.c +++ b/src/surfer.c @@ -486,18 +486,25 @@ void surfer_set_title(Surfer * surfer, char const * title) /* useful */ /* surfer_close_tab */ -void surfer_close_tab(Surfer * surfer) +void surfer_close_tab(Surfer * surfer, GtkWidget * view) { gint n; - GtkWidget * view; if(gtk_notebook_get_n_pages(GTK_NOTEBOOK(surfer->notebook)) == 1) { surfer_delete(surfer); return; } - n = gtk_notebook_get_current_page(GTK_NOTEBOOK(surfer->notebook)); - view = gtk_notebook_get_nth_page(GTK_NOTEBOOK(surfer->notebook), n); + if(view == NULL) + { + n = gtk_notebook_get_current_page(GTK_NOTEBOOK( + surfer->notebook)); + view = gtk_notebook_get_nth_page(GTK_NOTEBOOK(surfer->notebook), + n); + } + else if((n = gtk_notebook_page_num(GTK_NOTEBOOK(surfer->notebook), + view)) < 0) + return; /* XXX return error */ ghtml_delete(view); gtk_notebook_remove_page(GTK_NOTEBOOK(surfer->notebook), n); if(gtk_notebook_get_n_pages(GTK_NOTEBOOK(surfer->notebook)) == 1) @@ -812,10 +819,11 @@ static GtkWidget * _tab_button(Surfer * surfer, GtkWidget * widget, g_object_set_data(G_OBJECT(widget), "label", label); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 4); button = gtk_button_new(); + g_object_set_data(G_OBJECT(button), "widget", widget); gtk_button_set_image(GTK_BUTTON(button), gtk_image_new_from_stock( GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU)); gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); - g_signal_connect_swapped(G_OBJECT(button), "clicked", G_CALLBACK( + g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK( on_notebook_close_tab), surfer); gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, TRUE, 0); gtk_widget_show_all(hbox); diff --git a/src/surfer.h b/src/surfer.h index 9df8093..141a6c0 100644 --- a/src/surfer.h +++ b/src/surfer.h @@ -72,7 +72,7 @@ void surfer_warning(Surfer * surfer, char const * message); void surfer_open(Surfer * surfer, char const * url); void surfer_open_dialog(Surfer * surfer); void surfer_open_tab(Surfer * surfer, char const * url); -void surfer_close_tab(Surfer * surfer); +void surfer_close_tab(Surfer * surfer, GtkWidget * widget); void surfer_print(Surfer * surfer);