From c9a12340ddf1ed0a4d106b535020bc7889342512 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Fri, 2 Jul 2010 22:29:18 +0000 Subject: [PATCH] Added a configuration entry to focus new tabs --- src/callbacks.c | 24 +++++++++++++++++------- src/common.h | 1 + src/surfer.c | 41 +++++++++++++++++++++++++++++++++-------- src/surfer.h | 1 + 4 files changed, 52 insertions(+), 15 deletions(-) diff --git a/src/callbacks.c b/src/callbacks.c index 3e8cdeb..ac5e5bb 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -400,7 +400,6 @@ static void _preferences_on_ok(gpointer data); void on_preferences(gpointer data) { Surfer * surfer = data; - PangoFontDescription * desc; GtkWidget * vbox; GtkWidget * widget; GtkWidget * notebook; @@ -414,8 +413,6 @@ void on_preferences(gpointer data) return; } /* FIXME consider using gtk_dialog_new() */ - desc = pango_font_description_new(); - pango_font_description_set_weight(desc, PANGO_WEIGHT_BOLD); surfer->pr_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_resizable(GTK_WINDOW(surfer->pr_window), FALSE); gtk_window_set_title(GTK_WINDOW(surfer->pr_window), @@ -429,13 +426,19 @@ void on_preferences(gpointer data) notebook = gtk_notebook_new(); /* general */ page = gtk_vbox_new(FALSE, 0); + /* homepage */ hbox = gtk_hbox_new(FALSE, 4); widget = gtk_label_new(_("Homepage:")); - gtk_widget_modify_font(widget, desc); gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0); surfer->pr_homepage = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(hbox), surfer->pr_homepage, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(page), hbox, TRUE, TRUE, 0); + /* focus tabs */ + hbox = gtk_hbox_new(FALSE, 4); + surfer->pr_focus_tabs = gtk_check_button_new_with_label( + _("Focus new tabs")); + gtk_box_pack_start(GTK_BOX(hbox), surfer->pr_focus_tabs, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(page), hbox, TRUE, TRUE, 0); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), page, gtk_label_new(_("General"))); gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 0); @@ -461,13 +464,21 @@ void on_preferences(gpointer data) _preferences_set(surfer); gtk_container_add(GTK_CONTAINER(surfer->pr_window), vbox); gtk_widget_show_all(surfer->pr_window); - pango_font_description_free(desc); } static void _preferences_set(Surfer * surfer) { + char const * p; + gtk_entry_set_text(GTK_ENTRY(surfer->pr_homepage), surfer->homepage != NULL ? surfer->homepage : ""); + if((p = config_get(surfer->config, "", "focus_new_tabs")) != NULL + && strcmp(p, "1") == 0) + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON( + surfer->pr_focus_tabs), TRUE); + else + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON( + surfer->pr_focus_tabs), FALSE); } static gboolean _preferences_on_closex(gpointer data) @@ -491,8 +502,7 @@ static void _preferences_on_ok(gpointer data) Surfer * surfer = data; gtk_widget_hide(surfer->pr_window); - free(surfer->homepage); - surfer->homepage = strdup(gtk_entry_get_text(GTK_ENTRY( + surfer_set_homepage(surfer, gtk_entry_get_text(GTK_ENTRY( surfer->pr_homepage))); surfer_config_save(surfer); } diff --git a/src/common.h b/src/common.h index 2019b56..ee39b7f 100644 --- a/src/common.h +++ b/src/common.h @@ -54,6 +54,7 @@ struct _Surfer /* preferences */ GtkWidget * pr_window; GtkWidget * pr_homepage; + GtkWidget * pr_focus_tabs; /* find */ GtkWidget * fi_dialog; diff --git a/src/surfer.c b/src/surfer.c index daa7e91..9289157 100644 --- a/src/surfer.c +++ b/src/surfer.c @@ -182,6 +182,8 @@ unsigned int surfer_cnt = 0; static char * _config_get_filename(void); static int _config_load_string(Config * config, char const * variable, char ** value); +static int _config_save_boolean(Config * config, char const * variable, + gboolean value); static int _config_save_string(Config * config, char const * variable, char const * value); @@ -408,6 +410,14 @@ void surfer_set_fullscreen(Surfer * surfer, gboolean fullscreen) } +/* surfer_set_homepage */ +void surfer_set_homepage(Surfer * surfer, char const * homepage) +{ + free(surfer->homepage); + surfer->homepage = strdup(homepage); +} + + /* surfer_set_location */ void surfer_set_location(Surfer * surfer, char const * url) { @@ -591,6 +601,9 @@ int surfer_config_save(Surfer * surfer) return 1; ret |= _config_save_string(surfer->config, "homepage", surfer->homepage); + ret |= _config_save_boolean(surfer->config, "focus_new_tabs", + gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( + surfer->pr_focus_tabs))); if(ret == 0) ret |= config_save(surfer->config, filename); free(filename); @@ -890,23 +903,28 @@ static GtkWidget * _tab_button(Surfer * surfer, GtkWidget * widget, void surfer_open_tab(Surfer * surfer, char const * url) { GtkWidget * widget; + GtkNotebook * notebook = GTK_NOTEBOOK(surfer->notebook); + int i; + char const * p; if((widget = ghtml_new(surfer)) == NULL) { surfer_error(NULL, _("Could not initialize HTML renderer"), 0); return; } + gtk_widget_show_all(widget); /* must be before set_current_page() */ if(url != NULL) ghtml_load_url(widget, url); - gtk_notebook_append_page(GTK_NOTEBOOK(surfer->notebook), widget, - _tab_button(surfer, widget, _("Untitled"))); - if(gtk_notebook_get_n_pages(GTK_NOTEBOOK(surfer->notebook)) > 1) - gtk_notebook_set_show_tabs(GTK_NOTEBOOK(surfer->notebook), - TRUE); + if((i = gtk_notebook_append_page(notebook, widget, _tab_button(surfer, + widget, _("Untitled")))) > 0) + { + gtk_notebook_set_show_tabs(notebook, TRUE); + if((p = config_get(surfer->config, "", "focus_new_tabs")) + != NULL && strcmp(p, "1") == 0) + gtk_notebook_set_current_page(notebook, i); + } else - gtk_notebook_set_show_tabs(GTK_NOTEBOOK(surfer->notebook), - FALSE); - gtk_widget_show_all(widget); + gtk_notebook_set_show_tabs(notebook, FALSE); } static GtkWidget * _tab_button(Surfer * surfer, GtkWidget * widget, @@ -1361,6 +1379,13 @@ static int _config_load_string(Config * config, char const * variable, } +static int _config_save_boolean(Config * config, char const * variable, + gboolean value) +{ + return config_set(config, "", variable, value ? "1" : "0"); +} + + static int _config_save_string(Config * config, char const * variable, char const * value) { diff --git a/src/surfer.h b/src/surfer.h index c6d7c3a..13348ac 100644 --- a/src/surfer.h +++ b/src/surfer.h @@ -53,6 +53,7 @@ void surfer_delete(Surfer * surfer); GtkWidget * surfer_get_view(Surfer * surfer); void surfer_set_fullscreen(Surfer * surfer, gboolean fullscreen); +void surfer_set_homepage(Surfer * surfer, char const * homepage); void surfer_set_location(Surfer * surfer, char const * url); void surfer_set_progress(Surfer * surfer, gdouble fraction); void surfer_set_status(Surfer * surfer, char const * status);