diff options
author | Jonathan Blandford <jrb@redhat.com> | 1999-04-01 00:58:38 +0000 |
---|---|---|
committer | Jonathan Blandford <jrb@src.gnome.org> | 1999-04-01 00:58:38 +0000 |
commit | b63c67767dcc70d9cc720bc29badd67cca2652ad (patch) | |
tree | fe76d7f54ef9c3008d1f128082a8c01b8b4a537f /capplets | |
parent | 982628466cf528a3e11f3d4fb4227986ad9dcd8f (diff) | |
download | gnome-control-center-b63c67767dcc70d9cc720bc29badd67cca2652ad.tar.gz |
Now you can set the font!
1999-03-31 Jonathan Blandford <jrb@redhat.com>
* capplets/theme-switcher/gui.c,lister.c,da.h: Now you can set the
font!
Diffstat (limited to 'capplets')
-rw-r--r-- | capplets/theme-switcher/da.h | 8 | ||||
-rw-r--r-- | capplets/theme-switcher/da.h-67648 | 8 | ||||
-rw-r--r-- | capplets/theme-switcher/gui.c | 224 | ||||
-rw-r--r-- | capplets/theme-switcher/gui.c-6060 | 224 | ||||
-rw-r--r-- | capplets/theme-switcher/lister.c | 72 | ||||
-rw-r--r-- | capplets/theme-switcher/lister.c-42011 | 72 |
6 files changed, 422 insertions, 186 deletions
diff --git a/capplets/theme-switcher/da.h b/capplets/theme-switcher/da.h index 6c34a8c9c..ecd4e1dd4 100644 --- a/capplets/theme-switcher/da.h +++ b/capplets/theme-switcher/da.h @@ -63,15 +63,13 @@ update_theme_entries(GtkWidget *disp_list); void signal_apply_theme(GtkWidget *widget); void -edit_file_to_use(gchar *file, gchar *theme); +edit_file_to_use(gchar *file, gchar *theme, gchar *font); void set_tmp_rc(void); void -use_theme(gchar *theme); +use_theme(gchar *theme, gchar *font); void -test_theme(gchar *theme); -void -click_update(GtkWidget *widget, gpointer data); +test_theme(gchar *theme, gchar *font); gchar * install_theme(gchar *file); gint diff --git a/capplets/theme-switcher/da.h-67648 b/capplets/theme-switcher/da.h-67648 index 6c34a8c9c..ecd4e1dd4 100644 --- a/capplets/theme-switcher/da.h-67648 +++ b/capplets/theme-switcher/da.h-67648 @@ -63,15 +63,13 @@ update_theme_entries(GtkWidget *disp_list); void signal_apply_theme(GtkWidget *widget); void -edit_file_to_use(gchar *file, gchar *theme); +edit_file_to_use(gchar *file, gchar *theme, gchar *font); void set_tmp_rc(void); void -use_theme(gchar *theme); +use_theme(gchar *theme, gchar *font); void -test_theme(gchar *theme); -void -click_update(GtkWidget *widget, gpointer data); +test_theme(gchar *theme, gchar *font); gchar * install_theme(gchar *file); gint diff --git a/capplets/theme-switcher/gui.c b/capplets/theme-switcher/gui.c index 77071873d..f28b42358 100644 --- a/capplets/theme-switcher/gui.c +++ b/capplets/theme-switcher/gui.c @@ -4,11 +4,9 @@ #include <signal.h> static gboolean ignore_change = FALSE; -static gchar *readme_current; static GtkWidget *install_theme_file_sel; -static GtkWidget *readme_display; static GtkWidget *capplet_widget; static GtkWidget *theme_list; static GtkWidget *auto_preview; @@ -17,7 +15,11 @@ static GtkWidget *current_theme = NULL; static GtkWidget *current_global_theme = NULL; static GtkWidget *initial_theme = NULL; static GtkWidget *last_theme = NULL; - +static GtkWidget *font_sel; +static GtkWidget *font_cbox; +static gboolean initial_preview; +static gboolean initial_font_cbox; +static gchar *initial_font; static void click_preview(GtkWidget *widget, gpointer data); static void @@ -36,11 +38,36 @@ delete_entry(GtkWidget *widget, gpointer data); static void auto_callback (GtkWidget *widget, gpointer data) { - if (GTK_TOGGLE_BUTTON (auto_preview)->active) - click_preview (widget,NULL); + if (ignore_change == FALSE) { + if (GTK_TOGGLE_BUTTON (auto_preview)->active) + click_preview (widget,NULL); + capplet_widget_state_changed(CAPPLET_WIDGET (capplet_widget), TRUE); + } } static void +font_callback (GtkWidget *widget, gchar *font, gpointer data) +{ + if (ignore_change == FALSE) { + capplet_widget_state_changed(CAPPLET_WIDGET (capplet_widget), TRUE); + if (GTK_TOGGLE_BUTTON (auto_preview)->active) + click_preview (widget,NULL); + } +} +static void +use_theme_font_callback (GtkWidget *widget, gpointer data) +{ + if (ignore_change == FALSE) { + capplet_widget_state_changed(CAPPLET_WIDGET (capplet_widget), TRUE); + if (GTK_TOGGLE_BUTTON (auto_preview)->active) + click_preview (widget,NULL); + if (!GTK_TOGGLE_BUTTON (font_cbox)->active) + gtk_widget_set_sensitive (font_sel, FALSE); + else + gtk_widget_set_sensitive (font_sel, TRUE); + } +} +static void browse_dialog_ok (GtkWidget *widget, gpointer data) { GtkWidget *filesel = gtk_widget_get_toplevel (widget); @@ -151,9 +178,10 @@ GtkWidget * make_main(void) { void *sw, *label; - GtkWidget *box, *hbox, *hbox2; + GtkWidget *box, *hbox, *hbox2, *vbox; GtkWidget *text, *frame, *frame2, *button; GtkWidget *button_vbox; + gboolean default_used; capplet_widget = capplet_widget_new(); gtk_container_set_border_width(GTK_CONTAINER(capplet_widget), 5); @@ -188,8 +216,9 @@ make_main(void) label = gtk_label_new (_("Auto\nPreview")); gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); auto_preview = gtk_check_button_new (); - - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (auto_preview), gnome_config_get_bool ("/theme-switcher-capplet/settings/auto=TRUE")); + initial_preview = gnome_config_get_bool ("/theme-switcher-capplet/settings/auto=TRUE"); + gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (auto_preview), + initial_preview); gtk_signal_connect (GTK_OBJECT (auto_preview), "toggled", GTK_SIGNAL_FUNC (auto_callback), NULL); gtk_container_add (GTK_CONTAINER (auto_preview), label); gtk_box_pack_start (GTK_BOX (button_vbox), auto_preview, FALSE, FALSE, 0); @@ -200,18 +229,51 @@ make_main(void) gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (install_theme_callback), NULL); gtk_box_pack_start (GTK_BOX (button_vbox), button, FALSE, FALSE, 0); - /* HTML widget describing themes + /* Font selector. */ - frame = gtk_frame_new (_("Theme Information")); - frame2 = gtk_frame_new (NULL); - gtk_frame_set_shadow_type (GTK_FRAME (frame2), GTK_SHADOW_IN); - gtk_container_add (GTK_CONTAINER (frame), frame2); - gtk_container_set_border_width (GTK_CONTAINER (frame2), GNOME_PAD_SMALL); + frame = gtk_frame_new (_("User Font")); gtk_box_pack_start(GTK_BOX(hbox), frame, TRUE, TRUE, 0); + font_sel = gnome_font_picker_new (); + gnome_font_picker_set_mode (GNOME_FONT_PICKER (font_sel), + GNOME_FONT_PICKER_MODE_FONT_INFO); + initial_font = gnome_config_get_string_with_default ("/theme-switcher-capplet/settings/font",&default_used); + if (initial_font == NULL) { + gnome_font_picker_set_font_name (GNOME_FONT_PICKER (font_sel), + initial_font); + } + gnome_font_picker_fi_set_use_font_in_label (GNOME_FONT_PICKER (font_sel), + TRUE, + 12); + gnome_font_picker_fi_set_show_size (GNOME_FONT_PICKER (font_sel), FALSE); + gtk_signal_connect (GTK_OBJECT (font_sel), + "font_set", + font_callback, + NULL); + vbox = gtk_vbox_new (FALSE, GNOME_PAD_SMALL); + gtk_container_set_border_width (GTK_CONTAINER (vbox), GNOME_PAD_SMALL); + gtk_container_add (GTK_CONTAINER (frame), vbox); + font_cbox = gtk_check_button_new_with_label (_("Use custom font.")); + initial_font_cbox = gnome_config_get_bool ("/theme-switcher-capplet/settings/use_theme_font=FALSE"); + gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (font_cbox), + initial_font_cbox); + gtk_signal_connect (GTK_OBJECT (font_cbox), + "toggled", + GTK_SIGNAL_FUNC (use_theme_font_callback), + NULL); + gtk_box_pack_start (GTK_BOX (vbox), font_cbox, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (vbox), font_sel, FALSE, FALSE, 0); + if (!GTK_TOGGLE_BUTTON (font_cbox)->active) + gtk_widget_set_sensitive (font_sel, FALSE); + else + gtk_widget_set_sensitive (font_sel, TRUE); + + gtk_widget_show_all (vbox); + +#if 0 readme_display = gtk_xmhtml_new(); - gtk_container_add(GTK_CONTAINER(frame2), readme_display); - + gtk_container_add(GTK_CONTAINER(frame2), readme_display) ; +#endif /* Preview of theme */ hbox = gtk_hbox_new (FALSE, GNOME_PAD_SMALL); @@ -241,36 +303,33 @@ make_main(void) GTK_SIGNAL_FUNC (delete_capplet), NULL); gtk_container_add (GTK_CONTAINER (capplet_widget), box); - readme_current = NULL; - current_theme = NULL; last_theme = NULL; return capplet_widget; } static void -click_update(GtkWidget *widget, gpointer data) -{ - update_theme_entries(theme_list); -} - -static void click_preview(GtkWidget *widget, gpointer data) { gchar *rc; - if (current_theme == last_theme) { - return; - } +/* if (current_theme == last_theme) + return;*/ last_theme = current_theme; if (!current_theme) { - return; + return; } rc = (gchar *)gtk_object_get_data(GTK_OBJECT(current_theme), "rc"); - test_theme(rc); + if (GTK_TOGGLE_BUTTON (font_cbox)->active) + test_theme(rc, + gnome_font_picker_get_font_name (GNOME_FONT_PICKER (font_sel))); + else + { + test_theme(rc, NULL); + } + send_reread(); } - static void click_help(GtkWidget *widget, gpointer data) { @@ -289,8 +348,8 @@ click_try(GtkWidget *widget, gpointer data) gchar *rc; gchar *dir, cmd[10240]; - if (current_theme == current_global_theme) - return; +/* if (current_theme == current_global_theme) + return;*/ widget = current_theme; if (!widget) return; @@ -303,7 +362,15 @@ click_try(GtkWidget *widget, gpointer data) /*g_snprintf(cmd, sizeof(cmd), "eesh -e \"restart %s/e\"", dir);*/ /* printf("%s\n", cmd); */ send_reread(); - use_theme(rc); + if (GTK_TOGGLE_BUTTON (font_cbox)->active) + { + use_theme(rc, + gnome_font_picker_get_font_name (GNOME_FONT_PICKER (font_sel))); + } + else + { + use_theme(rc, NULL); + } gdk_error_warnings = 0; signal_apply_theme(widget); gdk_flush(); @@ -316,6 +383,10 @@ click_ok(GtkWidget *widget, gpointer data) click_try (widget, data); gnome_config_set_bool ("/theme-switcher-capplet/settings/auto",GTK_TOGGLE_BUTTON (auto_preview)->active); gnome_config_set_string ("/theme-switcher-capplet/settings/theme", gtk_object_get_data (GTK_OBJECT (current_theme), "name")); + gnome_config_set_bool ("/theme-switcher-capplet/settings/use_theme_font", + GTK_TOGGLE_BUTTON (font_cbox)->active); + gnome_config_set_string ("/theme-switcher-capplet/settings/font", + gnome_font_picker_get_font_name (GNOME_FONT_PICKER (font_sel))); gnome_config_sync (); } static void @@ -324,48 +395,62 @@ click_revert(GtkWidget *widget, gpointer data) gchar *rc; gchar *dir, cmd[10240]; - if ((current_global_theme == initial_theme) || (!current_global_theme)) - return; - last_theme = current_global_theme; widget = initial_theme; - if (!widget) + if (!widget) + /* we hope this doesn't happen, but it could if things + * are mis-installed -jrb */ + /* Damn, I hate this code... )-: */ return; - - current_theme = widget; - current_global_theme = widget; + rc = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "rc"); dir = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "dir"); - - /* hack for enlightenment only!!!! */ - /* FIXME: restart what ever windowmanager you have! */ - /* g_snprintf(cmd, sizeof(cmd), "eesh -e \"restart %s/e\"", dir);*/ - /* printf("%s\n", cmd); */ - send_reread(); - use_theme(rc); - gdk_error_warnings = 0; - signal_apply_theme(widget); - gdk_flush(); - /* system(cmd); */ - gdk_error_warnings = 1; + + if ((current_global_theme != initial_theme) || + (initial_font_cbox != GTK_TOGGLE_BUTTON (font_cbox)->active) || + (strcmp (initial_font, + gnome_font_picker_get_font_name (GNOME_FONT_PICKER (font_sel))))) + { + + /* This if statement is magic to determine if we want to reset the system theme. + * It can almost certainly be cleaned up if needed. Basicly, it sees if anything has + * or if the theme has been set.. */ + send_reread(); + use_theme(rc, initial_font); + gdk_error_warnings = 0; + signal_apply_theme(widget); + gdk_flush(); + gdk_error_warnings = 1; + } + current_global_theme = widget; ignore_change = TRUE; + gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (auto_preview), + initial_preview); + gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (font_cbox), + initial_font_cbox); + gnome_font_picker_set_font_name (GNOME_FONT_PICKER (font_sel), + initial_font); gtk_list_select_child (GTK_LIST (theme_list), initial_theme); - ignore_change = FALSE; - rc = (gchar *)gtk_object_get_data(GTK_OBJECT(current_theme), "rc"); - test_theme(rc); + test_theme(rc, initial_font); send_reread(); + if (!GTK_TOGGLE_BUTTON (font_cbox)->active) + gtk_widget_set_sensitive (font_sel, FALSE); + else + gtk_widget_set_sensitive (font_sel, TRUE); + ignore_change = FALSE; + current_theme = initial_theme; } static void click_entry(GtkWidget *widget, gpointer data) { - gchar *rc, *name, *readme, *new_readme, buf[1024]; + gchar *rc, *name, *new_readme, buf[1024]; FILE *f; name = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "name"); rc = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "rc"); - readme = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "readme"); /* Load in the README file */ +#if 0 if (readme_current) { g_free(readme_current); @@ -386,7 +471,7 @@ click_entry(GtkWidget *widget, gpointer data) } else gtk_xmhtml_source(GTK_XMHTML(readme_display), ""); - +#endif if (!ignore_change) { current_theme = widget; @@ -395,25 +480,24 @@ click_entry(GtkWidget *widget, gpointer data) capplet_widget_state_changed(CAPPLET_WIDGET (capplet_widget), TRUE); else capplet_widget_state_changed(CAPPLET_WIDGET (capplet_widget), FALSE); - } + if (GTK_TOGGLE_BUTTON (auto_preview)->active) click_preview (widget,NULL); + } } static void delete_entry(GtkWidget *widget, gpointer data) { - gchar *rc, *name, *readme, *icon, *dir; + gchar *rc, *name, *icon, *dir; name = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "name"); rc = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "rc"); dir = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "dir"); - readme = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "readme"); icon = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "icon"); g_free(name); g_free(rc); g_free(dir); - g_free(readme); g_free(icon); if (current_theme == widget) @@ -442,6 +526,8 @@ update_theme_entries(GtkWidget *disp_list) if (current_theme) current_name = g_strdup(gtk_object_get_data(GTK_OBJECT(current_theme), "name")); + else + current_name = d_theme; current_theme = NULL; initial_theme = NULL; @@ -456,12 +542,13 @@ update_theme_entries(GtkWidget *disp_list) if (strcmp (d_theme, te[i].name) == 0) initial_theme = item; if (current_name && (strcmp (current_name, te[i].name) == 0)) - current_theme = item; + { + current_theme = item; + } gtk_object_set_data(GTK_OBJECT(item), "name", g_strdup(te[i].name)); gtk_object_set_data(GTK_OBJECT(item), "rc", g_strdup(te[i].rc)); gtk_object_set_data(GTK_OBJECT(item), "dir", g_strdup(te[i].dir)); - gtk_object_set_data(GTK_OBJECT(item), "readme", g_strdup(te[i].readme)); gtk_object_set_data(GTK_OBJECT(item), "icon", g_strdup(te[i].icon)); gtk_signal_connect(GTK_OBJECT(item), "select", GTK_SIGNAL_FUNC(click_entry), NULL); @@ -484,7 +571,6 @@ update_theme_entries(GtkWidget *disp_list) gtk_object_set_data(GTK_OBJECT(item), "name", g_strdup(te[i].name)); gtk_object_set_data(GTK_OBJECT(item), "rc", g_strdup(te[i].rc)); gtk_object_set_data(GTK_OBJECT(item), "dir", g_strdup(te[i].dir)); - gtk_object_set_data(GTK_OBJECT(item), "readme", g_strdup(te[i].readme)); gtk_object_set_data(GTK_OBJECT(item), "icon", g_strdup(te[i].icon)); gtk_signal_connect(GTK_OBJECT(item), "select", GTK_SIGNAL_FUNC(click_entry), NULL); @@ -523,6 +609,10 @@ update_theme_entries(GtkWidget *disp_list) } } - g_free (current_name); - g_free (d_theme); + if (current_name != d_theme) { + g_free (current_name); + g_free (d_theme); + } else + g_free (d_theme); + if (current_theme == NULL) } diff --git a/capplets/theme-switcher/gui.c-6060 b/capplets/theme-switcher/gui.c-6060 index 77071873d..f28b42358 100644 --- a/capplets/theme-switcher/gui.c-6060 +++ b/capplets/theme-switcher/gui.c-6060 @@ -4,11 +4,9 @@ #include <signal.h> static gboolean ignore_change = FALSE; -static gchar *readme_current; static GtkWidget *install_theme_file_sel; -static GtkWidget *readme_display; static GtkWidget *capplet_widget; static GtkWidget *theme_list; static GtkWidget *auto_preview; @@ -17,7 +15,11 @@ static GtkWidget *current_theme = NULL; static GtkWidget *current_global_theme = NULL; static GtkWidget *initial_theme = NULL; static GtkWidget *last_theme = NULL; - +static GtkWidget *font_sel; +static GtkWidget *font_cbox; +static gboolean initial_preview; +static gboolean initial_font_cbox; +static gchar *initial_font; static void click_preview(GtkWidget *widget, gpointer data); static void @@ -36,11 +38,36 @@ delete_entry(GtkWidget *widget, gpointer data); static void auto_callback (GtkWidget *widget, gpointer data) { - if (GTK_TOGGLE_BUTTON (auto_preview)->active) - click_preview (widget,NULL); + if (ignore_change == FALSE) { + if (GTK_TOGGLE_BUTTON (auto_preview)->active) + click_preview (widget,NULL); + capplet_widget_state_changed(CAPPLET_WIDGET (capplet_widget), TRUE); + } } static void +font_callback (GtkWidget *widget, gchar *font, gpointer data) +{ + if (ignore_change == FALSE) { + capplet_widget_state_changed(CAPPLET_WIDGET (capplet_widget), TRUE); + if (GTK_TOGGLE_BUTTON (auto_preview)->active) + click_preview (widget,NULL); + } +} +static void +use_theme_font_callback (GtkWidget *widget, gpointer data) +{ + if (ignore_change == FALSE) { + capplet_widget_state_changed(CAPPLET_WIDGET (capplet_widget), TRUE); + if (GTK_TOGGLE_BUTTON (auto_preview)->active) + click_preview (widget,NULL); + if (!GTK_TOGGLE_BUTTON (font_cbox)->active) + gtk_widget_set_sensitive (font_sel, FALSE); + else + gtk_widget_set_sensitive (font_sel, TRUE); + } +} +static void browse_dialog_ok (GtkWidget *widget, gpointer data) { GtkWidget *filesel = gtk_widget_get_toplevel (widget); @@ -151,9 +178,10 @@ GtkWidget * make_main(void) { void *sw, *label; - GtkWidget *box, *hbox, *hbox2; + GtkWidget *box, *hbox, *hbox2, *vbox; GtkWidget *text, *frame, *frame2, *button; GtkWidget *button_vbox; + gboolean default_used; capplet_widget = capplet_widget_new(); gtk_container_set_border_width(GTK_CONTAINER(capplet_widget), 5); @@ -188,8 +216,9 @@ make_main(void) label = gtk_label_new (_("Auto\nPreview")); gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); auto_preview = gtk_check_button_new (); - - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (auto_preview), gnome_config_get_bool ("/theme-switcher-capplet/settings/auto=TRUE")); + initial_preview = gnome_config_get_bool ("/theme-switcher-capplet/settings/auto=TRUE"); + gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (auto_preview), + initial_preview); gtk_signal_connect (GTK_OBJECT (auto_preview), "toggled", GTK_SIGNAL_FUNC (auto_callback), NULL); gtk_container_add (GTK_CONTAINER (auto_preview), label); gtk_box_pack_start (GTK_BOX (button_vbox), auto_preview, FALSE, FALSE, 0); @@ -200,18 +229,51 @@ make_main(void) gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (install_theme_callback), NULL); gtk_box_pack_start (GTK_BOX (button_vbox), button, FALSE, FALSE, 0); - /* HTML widget describing themes + /* Font selector. */ - frame = gtk_frame_new (_("Theme Information")); - frame2 = gtk_frame_new (NULL); - gtk_frame_set_shadow_type (GTK_FRAME (frame2), GTK_SHADOW_IN); - gtk_container_add (GTK_CONTAINER (frame), frame2); - gtk_container_set_border_width (GTK_CONTAINER (frame2), GNOME_PAD_SMALL); + frame = gtk_frame_new (_("User Font")); gtk_box_pack_start(GTK_BOX(hbox), frame, TRUE, TRUE, 0); + font_sel = gnome_font_picker_new (); + gnome_font_picker_set_mode (GNOME_FONT_PICKER (font_sel), + GNOME_FONT_PICKER_MODE_FONT_INFO); + initial_font = gnome_config_get_string_with_default ("/theme-switcher-capplet/settings/font",&default_used); + if (initial_font == NULL) { + gnome_font_picker_set_font_name (GNOME_FONT_PICKER (font_sel), + initial_font); + } + gnome_font_picker_fi_set_use_font_in_label (GNOME_FONT_PICKER (font_sel), + TRUE, + 12); + gnome_font_picker_fi_set_show_size (GNOME_FONT_PICKER (font_sel), FALSE); + gtk_signal_connect (GTK_OBJECT (font_sel), + "font_set", + font_callback, + NULL); + vbox = gtk_vbox_new (FALSE, GNOME_PAD_SMALL); + gtk_container_set_border_width (GTK_CONTAINER (vbox), GNOME_PAD_SMALL); + gtk_container_add (GTK_CONTAINER (frame), vbox); + font_cbox = gtk_check_button_new_with_label (_("Use custom font.")); + initial_font_cbox = gnome_config_get_bool ("/theme-switcher-capplet/settings/use_theme_font=FALSE"); + gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (font_cbox), + initial_font_cbox); + gtk_signal_connect (GTK_OBJECT (font_cbox), + "toggled", + GTK_SIGNAL_FUNC (use_theme_font_callback), + NULL); + gtk_box_pack_start (GTK_BOX (vbox), font_cbox, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (vbox), font_sel, FALSE, FALSE, 0); + if (!GTK_TOGGLE_BUTTON (font_cbox)->active) + gtk_widget_set_sensitive (font_sel, FALSE); + else + gtk_widget_set_sensitive (font_sel, TRUE); + + gtk_widget_show_all (vbox); + +#if 0 readme_display = gtk_xmhtml_new(); - gtk_container_add(GTK_CONTAINER(frame2), readme_display); - + gtk_container_add(GTK_CONTAINER(frame2), readme_display) ; +#endif /* Preview of theme */ hbox = gtk_hbox_new (FALSE, GNOME_PAD_SMALL); @@ -241,36 +303,33 @@ make_main(void) GTK_SIGNAL_FUNC (delete_capplet), NULL); gtk_container_add (GTK_CONTAINER (capplet_widget), box); - readme_current = NULL; - current_theme = NULL; last_theme = NULL; return capplet_widget; } static void -click_update(GtkWidget *widget, gpointer data) -{ - update_theme_entries(theme_list); -} - -static void click_preview(GtkWidget *widget, gpointer data) { gchar *rc; - if (current_theme == last_theme) { - return; - } +/* if (current_theme == last_theme) + return;*/ last_theme = current_theme; if (!current_theme) { - return; + return; } rc = (gchar *)gtk_object_get_data(GTK_OBJECT(current_theme), "rc"); - test_theme(rc); + if (GTK_TOGGLE_BUTTON (font_cbox)->active) + test_theme(rc, + gnome_font_picker_get_font_name (GNOME_FONT_PICKER (font_sel))); + else + { + test_theme(rc, NULL); + } + send_reread(); } - static void click_help(GtkWidget *widget, gpointer data) { @@ -289,8 +348,8 @@ click_try(GtkWidget *widget, gpointer data) gchar *rc; gchar *dir, cmd[10240]; - if (current_theme == current_global_theme) - return; +/* if (current_theme == current_global_theme) + return;*/ widget = current_theme; if (!widget) return; @@ -303,7 +362,15 @@ click_try(GtkWidget *widget, gpointer data) /*g_snprintf(cmd, sizeof(cmd), "eesh -e \"restart %s/e\"", dir);*/ /* printf("%s\n", cmd); */ send_reread(); - use_theme(rc); + if (GTK_TOGGLE_BUTTON (font_cbox)->active) + { + use_theme(rc, + gnome_font_picker_get_font_name (GNOME_FONT_PICKER (font_sel))); + } + else + { + use_theme(rc, NULL); + } gdk_error_warnings = 0; signal_apply_theme(widget); gdk_flush(); @@ -316,6 +383,10 @@ click_ok(GtkWidget *widget, gpointer data) click_try (widget, data); gnome_config_set_bool ("/theme-switcher-capplet/settings/auto",GTK_TOGGLE_BUTTON (auto_preview)->active); gnome_config_set_string ("/theme-switcher-capplet/settings/theme", gtk_object_get_data (GTK_OBJECT (current_theme), "name")); + gnome_config_set_bool ("/theme-switcher-capplet/settings/use_theme_font", + GTK_TOGGLE_BUTTON (font_cbox)->active); + gnome_config_set_string ("/theme-switcher-capplet/settings/font", + gnome_font_picker_get_font_name (GNOME_FONT_PICKER (font_sel))); gnome_config_sync (); } static void @@ -324,48 +395,62 @@ click_revert(GtkWidget *widget, gpointer data) gchar *rc; gchar *dir, cmd[10240]; - if ((current_global_theme == initial_theme) || (!current_global_theme)) - return; - last_theme = current_global_theme; widget = initial_theme; - if (!widget) + if (!widget) + /* we hope this doesn't happen, but it could if things + * are mis-installed -jrb */ + /* Damn, I hate this code... )-: */ return; - - current_theme = widget; - current_global_theme = widget; + rc = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "rc"); dir = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "dir"); - - /* hack for enlightenment only!!!! */ - /* FIXME: restart what ever windowmanager you have! */ - /* g_snprintf(cmd, sizeof(cmd), "eesh -e \"restart %s/e\"", dir);*/ - /* printf("%s\n", cmd); */ - send_reread(); - use_theme(rc); - gdk_error_warnings = 0; - signal_apply_theme(widget); - gdk_flush(); - /* system(cmd); */ - gdk_error_warnings = 1; + + if ((current_global_theme != initial_theme) || + (initial_font_cbox != GTK_TOGGLE_BUTTON (font_cbox)->active) || + (strcmp (initial_font, + gnome_font_picker_get_font_name (GNOME_FONT_PICKER (font_sel))))) + { + + /* This if statement is magic to determine if we want to reset the system theme. + * It can almost certainly be cleaned up if needed. Basicly, it sees if anything has + * or if the theme has been set.. */ + send_reread(); + use_theme(rc, initial_font); + gdk_error_warnings = 0; + signal_apply_theme(widget); + gdk_flush(); + gdk_error_warnings = 1; + } + current_global_theme = widget; ignore_change = TRUE; + gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (auto_preview), + initial_preview); + gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (font_cbox), + initial_font_cbox); + gnome_font_picker_set_font_name (GNOME_FONT_PICKER (font_sel), + initial_font); gtk_list_select_child (GTK_LIST (theme_list), initial_theme); - ignore_change = FALSE; - rc = (gchar *)gtk_object_get_data(GTK_OBJECT(current_theme), "rc"); - test_theme(rc); + test_theme(rc, initial_font); send_reread(); + if (!GTK_TOGGLE_BUTTON (font_cbox)->active) + gtk_widget_set_sensitive (font_sel, FALSE); + else + gtk_widget_set_sensitive (font_sel, TRUE); + ignore_change = FALSE; + current_theme = initial_theme; } static void click_entry(GtkWidget *widget, gpointer data) { - gchar *rc, *name, *readme, *new_readme, buf[1024]; + gchar *rc, *name, *new_readme, buf[1024]; FILE *f; name = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "name"); rc = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "rc"); - readme = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "readme"); /* Load in the README file */ +#if 0 if (readme_current) { g_free(readme_current); @@ -386,7 +471,7 @@ click_entry(GtkWidget *widget, gpointer data) } else gtk_xmhtml_source(GTK_XMHTML(readme_display), ""); - +#endif if (!ignore_change) { current_theme = widget; @@ -395,25 +480,24 @@ click_entry(GtkWidget *widget, gpointer data) capplet_widget_state_changed(CAPPLET_WIDGET (capplet_widget), TRUE); else capplet_widget_state_changed(CAPPLET_WIDGET (capplet_widget), FALSE); - } + if (GTK_TOGGLE_BUTTON (auto_preview)->active) click_preview (widget,NULL); + } } static void delete_entry(GtkWidget *widget, gpointer data) { - gchar *rc, *name, *readme, *icon, *dir; + gchar *rc, *name, *icon, *dir; name = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "name"); rc = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "rc"); dir = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "dir"); - readme = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "readme"); icon = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "icon"); g_free(name); g_free(rc); g_free(dir); - g_free(readme); g_free(icon); if (current_theme == widget) @@ -442,6 +526,8 @@ update_theme_entries(GtkWidget *disp_list) if (current_theme) current_name = g_strdup(gtk_object_get_data(GTK_OBJECT(current_theme), "name")); + else + current_name = d_theme; current_theme = NULL; initial_theme = NULL; @@ -456,12 +542,13 @@ update_theme_entries(GtkWidget *disp_list) if (strcmp (d_theme, te[i].name) == 0) initial_theme = item; if (current_name && (strcmp (current_name, te[i].name) == 0)) - current_theme = item; + { + current_theme = item; + } gtk_object_set_data(GTK_OBJECT(item), "name", g_strdup(te[i].name)); gtk_object_set_data(GTK_OBJECT(item), "rc", g_strdup(te[i].rc)); gtk_object_set_data(GTK_OBJECT(item), "dir", g_strdup(te[i].dir)); - gtk_object_set_data(GTK_OBJECT(item), "readme", g_strdup(te[i].readme)); gtk_object_set_data(GTK_OBJECT(item), "icon", g_strdup(te[i].icon)); gtk_signal_connect(GTK_OBJECT(item), "select", GTK_SIGNAL_FUNC(click_entry), NULL); @@ -484,7 +571,6 @@ update_theme_entries(GtkWidget *disp_list) gtk_object_set_data(GTK_OBJECT(item), "name", g_strdup(te[i].name)); gtk_object_set_data(GTK_OBJECT(item), "rc", g_strdup(te[i].rc)); gtk_object_set_data(GTK_OBJECT(item), "dir", g_strdup(te[i].dir)); - gtk_object_set_data(GTK_OBJECT(item), "readme", g_strdup(te[i].readme)); gtk_object_set_data(GTK_OBJECT(item), "icon", g_strdup(te[i].icon)); gtk_signal_connect(GTK_OBJECT(item), "select", GTK_SIGNAL_FUNC(click_entry), NULL); @@ -523,6 +609,10 @@ update_theme_entries(GtkWidget *disp_list) } } - g_free (current_name); - g_free (d_theme); + if (current_name != d_theme) { + g_free (current_name); + g_free (d_theme); + } else + g_free (d_theme); + if (current_theme == NULL) } diff --git a/capplets/theme-switcher/lister.c b/capplets/theme-switcher/lister.c index c4a00195a..fba527e23 100644 --- a/capplets/theme-switcher/lister.c +++ b/capplets/theme-switcher/lister.c @@ -1,9 +1,19 @@ #include "da.h" #include <sys/types.h> #include <utime.h> - +#define MARK_STRING "# -- THEME AUTO-WRITTEN DO NOT EDIT\n" +static void +print_standard_stuff(FILE *fout, gchar *theme, gchar *font) +{ + fprintf(fout, MARK_STRING); + fprintf(fout, "include \"%s\"\n\n", theme); + if (font) + fprintf(fout, "style \"user-font\"\n{\n font=\"%s\"\n}\nwidget_class \"*\" style \"user-font\"\n\n", font); + fprintf(fout, "include \"~/.gtkrc.mine\"\n\n"); + fprintf(fout, MARK_STRING); +} void -edit_file_to_use(gchar *file, gchar *theme) +edit_file_to_use(gchar *file, gchar *theme, gchar *font) { FILE *fin, *fout; gchar tmp[4096], buf[4096]; @@ -17,38 +27,58 @@ edit_file_to_use(gchar *file, gchar *theme) fin = fopen(file, "r"); if (!fin) { - fprintf(fout, "# -- THEME AUTO-WRITTEN DO NOT EDIT\n"); - fprintf(fout, "include \"%s\"\n\n", theme); + print_standard_stuff (fout, theme, font); fclose(fout); cp(tmp, file); return; } while (fgets(buf, sizeof(buf), fin)) - { - if (!strcmp("# -- THEME AUTO-WRITTEN DO NOT EDIT\n", buf)) - hastheme = 1; + { + if (!strcmp(MARK_STRING, buf)) + hastheme += 1; } rewind(fin); if (!hastheme) { - fprintf(fout, "# -- THEME AUTO-WRITTEN DO NOT EDIT\n"); - fprintf(fout, "include \"%s\"\n\n", theme); + print_standard_stuff (fout, theme, font); while (fgets(buf, sizeof(buf), fin)) fprintf(fout, "%s", buf); } - else + else if (hastheme == 1) + /* we keep this in for backwards compatability. */ { + nextline = 0; while (fgets(buf, sizeof(buf), fin)) { - if (!nextline) - fprintf(fout, "%s", buf); - else + if (nextline == 1) + nextline = 0; + else if (!strcmp(MARK_STRING, buf)) { - nextline = 0; - fprintf(fout, "include \"%s\"\n\n", theme); + print_standard_stuff (fout, theme, font); + nextline = 1; } - if (!strcmp("# -- THEME AUTO-WRITTEN DO NOT EDIT\n", buf)) - nextline = 1; + else if (nextline == 0) + fprintf(fout, "%s", buf); + } + } + else + { + nextline = 0; + while (fgets(buf, sizeof(buf), fin)) + { + if (!strcmp(MARK_STRING, buf)) + { + if (nextline == 0) + { + nextline = 1; + print_standard_stuff (fout, theme, font); + } + else + { + nextline = 0; + } + } else if (nextline == 0) + fprintf(fout, "%s", buf); } } fclose(fin); @@ -72,7 +102,7 @@ set_tmp_rc(void) } void -use_theme(gchar *theme) +use_theme(gchar *theme, gchar *font) { gchar s[4096], *home; @@ -80,17 +110,17 @@ use_theme(gchar *theme) if (!home) return; g_snprintf(s, sizeof(s), "%s/.gtkrc", home); - edit_file_to_use(s, theme); + edit_file_to_use(s, theme, font); } void -test_theme(gchar *theme) +test_theme(gchar *theme, gchar *font) { static time_t last_written_time = 0; time_t current_time = time (NULL); struct utimbuf buf; - edit_file_to_use(gtkrc_tmp, theme); + edit_file_to_use(gtkrc_tmp, theme, font); if (last_written_time >= current_time) { diff --git a/capplets/theme-switcher/lister.c-42011 b/capplets/theme-switcher/lister.c-42011 index c4a00195a..fba527e23 100644 --- a/capplets/theme-switcher/lister.c-42011 +++ b/capplets/theme-switcher/lister.c-42011 @@ -1,9 +1,19 @@ #include "da.h" #include <sys/types.h> #include <utime.h> - +#define MARK_STRING "# -- THEME AUTO-WRITTEN DO NOT EDIT\n" +static void +print_standard_stuff(FILE *fout, gchar *theme, gchar *font) +{ + fprintf(fout, MARK_STRING); + fprintf(fout, "include \"%s\"\n\n", theme); + if (font) + fprintf(fout, "style \"user-font\"\n{\n font=\"%s\"\n}\nwidget_class \"*\" style \"user-font\"\n\n", font); + fprintf(fout, "include \"~/.gtkrc.mine\"\n\n"); + fprintf(fout, MARK_STRING); +} void -edit_file_to_use(gchar *file, gchar *theme) +edit_file_to_use(gchar *file, gchar *theme, gchar *font) { FILE *fin, *fout; gchar tmp[4096], buf[4096]; @@ -17,38 +27,58 @@ edit_file_to_use(gchar *file, gchar *theme) fin = fopen(file, "r"); if (!fin) { - fprintf(fout, "# -- THEME AUTO-WRITTEN DO NOT EDIT\n"); - fprintf(fout, "include \"%s\"\n\n", theme); + print_standard_stuff (fout, theme, font); fclose(fout); cp(tmp, file); return; } while (fgets(buf, sizeof(buf), fin)) - { - if (!strcmp("# -- THEME AUTO-WRITTEN DO NOT EDIT\n", buf)) - hastheme = 1; + { + if (!strcmp(MARK_STRING, buf)) + hastheme += 1; } rewind(fin); if (!hastheme) { - fprintf(fout, "# -- THEME AUTO-WRITTEN DO NOT EDIT\n"); - fprintf(fout, "include \"%s\"\n\n", theme); + print_standard_stuff (fout, theme, font); while (fgets(buf, sizeof(buf), fin)) fprintf(fout, "%s", buf); } - else + else if (hastheme == 1) + /* we keep this in for backwards compatability. */ { + nextline = 0; while (fgets(buf, sizeof(buf), fin)) { - if (!nextline) - fprintf(fout, "%s", buf); - else + if (nextline == 1) + nextline = 0; + else if (!strcmp(MARK_STRING, buf)) { - nextline = 0; - fprintf(fout, "include \"%s\"\n\n", theme); + print_standard_stuff (fout, theme, font); + nextline = 1; } - if (!strcmp("# -- THEME AUTO-WRITTEN DO NOT EDIT\n", buf)) - nextline = 1; + else if (nextline == 0) + fprintf(fout, "%s", buf); + } + } + else + { + nextline = 0; + while (fgets(buf, sizeof(buf), fin)) + { + if (!strcmp(MARK_STRING, buf)) + { + if (nextline == 0) + { + nextline = 1; + print_standard_stuff (fout, theme, font); + } + else + { + nextline = 0; + } + } else if (nextline == 0) + fprintf(fout, "%s", buf); } } fclose(fin); @@ -72,7 +102,7 @@ set_tmp_rc(void) } void -use_theme(gchar *theme) +use_theme(gchar *theme, gchar *font) { gchar s[4096], *home; @@ -80,17 +110,17 @@ use_theme(gchar *theme) if (!home) return; g_snprintf(s, sizeof(s), "%s/.gtkrc", home); - edit_file_to_use(s, theme); + edit_file_to_use(s, theme, font); } void -test_theme(gchar *theme) +test_theme(gchar *theme, gchar *font) { static time_t last_written_time = 0; time_t current_time = time (NULL); struct utimbuf buf; - edit_file_to_use(gtkrc_tmp, theme); + edit_file_to_use(gtkrc_tmp, theme, font); if (last_written_time >= current_time) { |