Close the proper tab when closing tabs

This commit is contained in:
Pierre Pronchery 2010-04-20 23:30:42 +00:00
parent 76d467f53a
commit db8767108b
4 changed files with 20 additions and 10 deletions

View File

@ -62,7 +62,7 @@ void on_file_close_tab(gpointer data)
{ {
Surfer * surfer = 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 */ /* on_notebook_close_tab */
void on_notebook_close_tab(gpointer data) void on_notebook_close_tab(GtkWidget * widget, gpointer data)
{ {
Surfer * surfer = 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);
} }

View File

@ -66,7 +66,7 @@ void on_refresh(gpointer data);
void on_stop(gpointer data); void on_stop(gpointer data);
/* notebook */ /* notebook */
void on_notebook_close_tab(gpointer data); void on_notebook_close_tab(GtkWidget * widget, gpointer data);
void on_notebook_switch_page(gpointer data); void on_notebook_switch_page(gpointer data);
#endif #endif

View File

@ -486,18 +486,25 @@ void surfer_set_title(Surfer * surfer, char const * title)
/* useful */ /* useful */
/* surfer_close_tab */ /* surfer_close_tab */
void surfer_close_tab(Surfer * surfer) void surfer_close_tab(Surfer * surfer, GtkWidget * view)
{ {
gint n; gint n;
GtkWidget * view;
if(gtk_notebook_get_n_pages(GTK_NOTEBOOK(surfer->notebook)) == 1) if(gtk_notebook_get_n_pages(GTK_NOTEBOOK(surfer->notebook)) == 1)
{ {
surfer_delete(surfer); surfer_delete(surfer);
return; return;
} }
n = gtk_notebook_get_current_page(GTK_NOTEBOOK(surfer->notebook)); if(view == NULL)
view = gtk_notebook_get_nth_page(GTK_NOTEBOOK(surfer->notebook), n); {
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); ghtml_delete(view);
gtk_notebook_remove_page(GTK_NOTEBOOK(surfer->notebook), n); gtk_notebook_remove_page(GTK_NOTEBOOK(surfer->notebook), n);
if(gtk_notebook_get_n_pages(GTK_NOTEBOOK(surfer->notebook)) == 1) 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); g_object_set_data(G_OBJECT(widget), "label", label);
gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 4); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 4);
button = gtk_button_new(); 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_button_set_image(GTK_BUTTON(button), gtk_image_new_from_stock(
GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU)); GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU));
gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); 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); on_notebook_close_tab), surfer);
gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, TRUE, 0);
gtk_widget_show_all(hbox); gtk_widget_show_all(hbox);

View File

@ -72,7 +72,7 @@ void surfer_warning(Surfer * surfer, char const * message);
void surfer_open(Surfer * surfer, char const * url); void surfer_open(Surfer * surfer, char const * url);
void surfer_open_dialog(Surfer * surfer); void surfer_open_dialog(Surfer * surfer);
void surfer_open_tab(Surfer * surfer, char const * url); 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); void surfer_print(Surfer * surfer);