changeset 11940:8dc2e512038f

[gaim-migrate @ 14231] These are likely to be somewhat useful additions to this plugin. But I don't realy use it, someone who does should comment. (Sean?) committer: Tailor Script <tailor@pidgin.im>
author Etan Reisner <pidgin@unreliablesource.net>
date Wed, 02 Nov 2005 03:23:02 +0000
parents 85c25a32bb48
children bfb56404a9b6
files plugins/gaimrc.c
diffstat 1 files changed, 95 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/plugins/gaimrc.c	Wed Nov 02 02:21:43 2005 +0000
+++ b/plugins/gaimrc.c	Wed Nov 02 03:23:02 2005 +0000
@@ -22,6 +22,7 @@
 #include "gtkplugin.h"
 #include "gtkprefs.h"
 #include "gtkutils.h"
+#include "util.c"
 #include "version.h"
 
 static guint pref_callback;
@@ -139,6 +140,75 @@
 }
 
 static void
+gaimrc_write(GtkWidget *widget, gpointer data)
+{
+	int i;
+	GString *style_string = g_string_new("");
+	char *prefbase = NULL;
+
+	if (gaim_prefs_get_bool("/plugins/gtk/gaimrc/set/gtk-font-name")) {
+		const char *pref = gaim_prefs_get_string("/plugins/gtk/gaimrc/gtk-font-name");
+		g_string_append_printf(style_string, "gtk-font-name = \"%s\"\n", pref);
+	}
+
+	if (gaim_prefs_get_bool("/plugins/gtk/gaimrc/set/gtk-key-theme-name")) {
+		const char *pref = gaim_prefs_get_string("/plugins/gtk/gaimrc/gtk-key-theme-name");
+		g_string_append_printf(style_string, "gtk-key-theme-name = \"%s\"\n", pref);
+	}
+
+	g_string_append(style_string, "style \"gaimrc_style\" {\n");
+
+	for (i = 0; i < G_N_ELEMENTS(color_prefs); i++) {
+		if (gaim_prefs_get_bool(color_prefs_set[i])) {
+			prefbase = g_path_get_basename(color_prefs[i]);
+			g_string_append_printf(style_string,
+			                       "%s = \"%s\"\n", prefbase,
+			                       gaim_prefs_get_string(color_prefs[i]));
+			g_free(prefbase);
+		}
+	}
+
+	for (i = 0; i < G_N_ELEMENTS(widget_size_prefs); i++) {
+		if (gaim_prefs_get_bool(widget_size_prefs_set[i])) {
+			prefbase = g_path_get_basename(widget_size_prefs[i]);
+			g_string_append_printf(style_string,
+			                       "%s = %d\n", prefbase,
+			                       gaim_prefs_get_int(widget_size_prefs[i]));
+			g_free(prefbase);
+		}
+	}
+
+	g_string_append(style_string, "}");
+	g_string_append(style_string, "widget_class \"*\" style \"gaimrc_style\"\n");
+
+	for (i = 0; i < G_N_ELEMENTS(font_prefs); i++) {
+		if (gaim_prefs_get_bool(font_prefs_set[i])) {
+			prefbase = g_path_get_basename(font_prefs[i]);
+			g_string_append_printf(style_string,
+			                       "style \"%s_style\"\n"
+			                       "{font_name = \"%s\"}\n"
+			                       "widget \"%s\""
+			                       "style \"%s_style\"\n", prefbase,
+			                       gaim_prefs_get_string(font_prefs[i]),
+			                       prefbase, prefbase);
+			g_free(prefbase);
+		}
+	}
+
+	gaim_util_write_data_to_file(".gtkrc-2.0", style_string->str, -1);
+
+	g_string_free(style_string, TRUE);
+}
+
+static void
+gaimrc_reread(GtkWidget *widget, gpointer data)
+{
+	gtk_rc_reparse_all();
+	/* I don't know if this is necessary but it shouldn't hurt. */
+	gaimrc_make_changes();
+}
+
+static void
 gaimrc_pref_changed_cb(const char *name, GaimPrefType type, gpointer value,
                        gpointer data)
 {
@@ -320,7 +390,7 @@
 static GtkWidget *
 gaimrc_get_config_frame(GaimPlugin *plugin)
 {
-	GtkWidget *ret = NULL, *frame = NULL, *hbox = NULL;
+	GtkWidget *ret = NULL, *frame = NULL, *hbox = NULL, *vbox = NULL;
 	/*
 	GtkWidget *check = NULL, *widget = NULL, *label = NULL;
 	*/
@@ -331,14 +401,14 @@
 	*/
 	int i;
 
-	ret = gtk_vbox_new(FALSE, 18);
-	gtk_container_set_border_width(GTK_CONTAINER(ret), 12);
+	ret = gtk_vbox_new(FALSE, GAIM_HIG_CAT_SPACE);
+	gtk_container_set_border_width(GTK_CONTAINER(ret), GAIM_HIG_BORDER);
 
 	sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
 
 	frame = gaim_gtk_make_frame(ret, "General");
 	/* interface font */
-	hbox = gtk_hbox_new(FALSE, 18);
+	hbox = gtk_hbox_new(FALSE, GAIM_HIG_CAT_SPACE);
 	gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0);
 
 	check = gaim_gtk_prefs_checkbox(_("GTK+ Interface Font"),
@@ -357,7 +427,7 @@
 	                 G_CALLBACK(gaimrc_set_font_special), NULL);
 
 	/* key theme name */
-	hbox = gtk_hbox_new(FALSE, 18);
+	hbox = gtk_hbox_new(FALSE, GAIM_HIG_CAT_SPACE);
 	gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0);
 
 	check = gaim_gtk_prefs_checkbox(_("GTK+ Text Shortcut Theme"),
@@ -376,7 +446,7 @@
 	frame = gaim_gtk_make_frame(ret, "Interface colors");
 	/* imhtml stuff */
 	for (i = 0; i < G_N_ELEMENTS(color_prefs); i++) {
-		hbox = gtk_hbox_new(FALSE, 18);
+		hbox = gtk_hbox_new(FALSE, GAIM_HIG_CAT_SPACE);
 		gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0);
 
 		check = gaim_gtk_prefs_checkbox(_(color_names[i]),
@@ -400,7 +470,7 @@
 	frame = gaim_gtk_make_frame(ret, "Widget Sizes");
 	/* widget size stuff */
 	for (i = 0; i < G_N_ELEMENTS(widget_size_prefs); i++) {
-		hbox = gtk_hbox_new(FALSE, 18);
+		hbox = gtk_hbox_new(FALSE, GAIM_HIG_CAT_SPACE);
 		gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0);
 
 		check = gaim_gtk_prefs_checkbox(_(widget_size_names[i]),
@@ -418,7 +488,7 @@
 	frame = gaim_gtk_make_frame(ret, "Fonts");
 	/* imhtml font stuff */
 	for (i = 0; i < G_N_ELEMENTS(font_prefs); i++) {
-		hbox = gtk_hbox_new(FALSE, 18);
+		hbox = gtk_hbox_new(FALSE, GAIM_HIG_CAT_SPACE);
 		gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0);
 
 		check = gaim_gtk_prefs_checkbox(_(font_names[i]),
@@ -438,6 +508,23 @@
 		                 G_CALLBACK(gaimrc_set_font), GINT_TO_POINTER(i));
 	}
 
+	frame = gaim_gtk_make_frame(ret, "General");
+
+	vbox = gtk_vbox_new(FALSE, GAIM_HIG_CAT_SPACE);
+	gtk_box_pack_start(GTK_BOX(frame), vbox, FALSE, FALSE, 0);
+
+	check = gtk_button_new_with_label(_("Write a gtkrc file with these settings"));
+	gtk_box_pack_start(GTK_BOX(vbox), check, FALSE, FALSE, 0);
+	gtk_size_group_add_widget(sg, check);
+	g_signal_connect(G_OBJECT(check), "clicked", G_CALLBACK(gaimrc_write),
+	                 NULL);
+
+	check = gtk_button_new_with_label(_("Re-read gtkrc files"));
+	gtk_box_pack_start(GTK_BOX(vbox), check, FALSE, FALSE, 0);
+	gtk_size_group_add_widget(sg, check);
+	g_signal_connect(G_OBJECT(check), "clicked", G_CALLBACK(gaimrc_reread),
+	                 NULL);
+
 	gtk_widget_show_all(ret);
 	return ret;
 }