Added a configuration entry to focus new tabs

This commit is contained in:
Pierre Pronchery 2010-07-02 22:29:18 +00:00
parent 93fab0fb53
commit c9a12340dd
4 changed files with 52 additions and 15 deletions

View File

@ -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);
}

View File

@ -54,6 +54,7 @@ struct _Surfer
/* preferences */
GtkWidget * pr_window;
GtkWidget * pr_homepage;
GtkWidget * pr_focus_tabs;
/* find */
GtkWidget * fi_dialog;

View File

@ -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)
{

View File

@ -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);