From 2bd872d86a587a1127a7f82ffc2fe5aa4df6dc66 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Tue, 20 Apr 2010 18:51:35 +0000 Subject: [PATCH] Apply the correct status, progress and location when switching tabs --- src/callbacks.c | 26 ++++++++++++++++++++------ src/callbacks.h | 3 +-- src/surfer.c | 13 +++++++++---- 3 files changed, 30 insertions(+), 12 deletions(-) diff --git a/src/callbacks.c b/src/callbacks.c index 9b7c7c7..6ec0ae3 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -502,20 +502,34 @@ void on_notebook_close_tab(gpointer data) /* on_notebook_switch_page */ -void on_notebook_switch_page(GtkWidget * widget, GtkNotebookPage * page, - guint n, gpointer data) +static gboolean _switch_page_idle(gpointer data); + +void on_notebook_switch_page(gpointer data) { Surfer * surfer = data; + + g_idle_add(_switch_page_idle, surfer); +} + +static gboolean _switch_page_idle(gpointer data) +{ + Surfer * surfer = data; + gint n; GtkWidget * ghtml; + if((n = gtk_notebook_get_current_page(GTK_NOTEBOOK(surfer->notebook))) + < 0) + return FALSE; ghtml = gtk_notebook_get_nth_page(GTK_NOTEBOOK(surfer->notebook), n); /* FIXME implement: * - change the title (tab) * - update toolbar buttons */ - surfer_set_location(surfer, ghtml_get_location(ghtml)); - surfer_set_progress(surfer, ghtml_get_progress(ghtml)); - surfer_set_status(surfer, ghtml_get_status(ghtml)); - surfer_set_title(surfer, ghtml_get_title(ghtml)); + /* XXX the Surfer fetches the right values by himself => API change? */ + surfer_set_location(surfer, NULL); + surfer_set_progress(surfer, 0.0); + surfer_set_status(surfer, NULL); + surfer_set_title(surfer, NULL); + return FALSE; } diff --git a/src/callbacks.h b/src/callbacks.h index b7d1dc6..e5df08d 100644 --- a/src/callbacks.h +++ b/src/callbacks.h @@ -67,7 +67,6 @@ void on_stop(gpointer data); /* notebook */ void on_notebook_close_tab(gpointer data); -void on_notebook_switch_page(GtkWidget * widget, GtkNotebookPage * page, - guint n, gpointer data); +void on_notebook_switch_page(gpointer data); #endif diff --git a/src/surfer.c b/src/surfer.c index d92141f..04166a4 100644 --- a/src/surfer.c +++ b/src/surfer.c @@ -285,8 +285,8 @@ Surfer * _new_do(char const * url) surfer->notebook = gtk_notebook_new(); gtk_notebook_set_show_border(GTK_NOTEBOOK(surfer->notebook), FALSE); gtk_notebook_set_show_tabs(GTK_NOTEBOOK(surfer->notebook), FALSE); - g_signal_connect(G_OBJECT(surfer->notebook), "switch-page", G_CALLBACK( - on_notebook_switch_page), surfer); + g_signal_connect_swapped(G_OBJECT(surfer->notebook), "switch-page", + G_CALLBACK(on_notebook_switch_page), surfer); gtk_box_pack_start(GTK_BOX(vbox), surfer->notebook, TRUE, TRUE, 0); /* statusbar */ surfer->statusbox = gtk_hbox_new(FALSE, 0); @@ -383,12 +383,13 @@ void surfer_set_location(Surfer * surfer, char const * url) GtkWidget * widget; GtkWidget * view; + if((view = surfer_get_view(surfer)) == NULL) + return; /* consider the current tab only */ + url = ghtml_get_location(view); if(url == NULL) url = ""; widget = gtk_bin_get_child(GTK_BIN(surfer->lb_path)); gtk_entry_set_text(GTK_ENTRY(widget), url); - if((view = surfer_get_view(surfer)) == NULL) - return; /* XXX really correct? */ if(i == 8) gtk_combo_box_remove_text(GTK_COMBO_BOX(surfer->lb_path), 0); else @@ -423,9 +424,13 @@ void surfer_set_progress(Surfer * surfer, gdouble fraction) /* surfer_set_status */ void surfer_set_status(Surfer * surfer, char const * status) { + GtkWidget * view; GtkStatusbar * sb = GTK_STATUSBAR(surfer->statusbar); GtkProgressBar * pb = GTK_PROGRESS_BAR(surfer->progress); + if((view = surfer_get_view(surfer)) == NULL) + return; /* consider the current tab only */ + status = ghtml_get_status(view); if(surfer->statusbar_id != 0) gtk_statusbar_remove(sb, gtk_statusbar_get_context_id(sb, ""), surfer->statusbar_id);