changeset 5530:2c4c975620f0

[gaim-migrate @ 5930] Okay, several changes in this commit. - We now have gtkprefs.h. - We have a place where we can add UI prefs. - show_prefs() -> gaim_gtk_prefs_show(). - make_frame() -> gaim_gtk_make_frame(). - The debug window is the first thing to have prefs. You can even turn off the toolbar if you edit ~/.gaim/prefs.xml. committer: Tailor Script <tailor@pidgin.im>
author Christian Hammond <chipx86@chipx86.com>
date Mon, 26 May 2003 08:30:48 +0000
parents e7747cae9710
children 10920646988f
files plugins/docklet/docklet.c plugins/gestures/gestures.c plugins/idle.c plugins/notify.c plugins/spellchk.c plugins/timestamp.c src/Makefile.am src/buddy_chat.c src/gtkdebug.c src/gtkpounce.c src/gtkprefs.c src/gtkprefs.h src/gtkutils.c src/gtkutils.h src/main.c src/multi.c src/ui.h
diffstat 17 files changed, 317 insertions(+), 199 deletions(-) [+]
line wrap: on
line diff
--- a/plugins/docklet/docklet.c	Mon May 26 07:06:20 2003 +0000
+++ b/plugins/docklet/docklet.c	Mon May 26 08:30:48 2003 +0000
@@ -151,7 +151,7 @@
 
 	gaim_new_item_from_stock(menu, _("File Transfers..."), GAIM_STOCK_FILE_TRANSFER, G_CALLBACK(gaim_show_xfer_dialog), NULL, 0, 0, NULL);
 	gaim_new_item_from_stock(menu, _("Accounts..."), GAIM_STOCK_ACCOUNTS, G_CALLBACK(account_editor), NULL, 0, 0, NULL);
-	gaim_new_item_from_stock(menu, _("Preferences..."), GTK_STOCK_PREFERENCES, G_CALLBACK(show_prefs), NULL, 0, 0, NULL);
+	gaim_new_item_from_stock(menu, _("Preferences..."), GTK_STOCK_PREFERENCES, G_CALLBACK(gaim_gtk_prefs_show), NULL, 0, 0, NULL);
 
 	gaim_separator(menu);
 
@@ -448,7 +448,7 @@
 	frame = gtk_vbox_new(FALSE, 18);
 	gtk_container_set_border_width(GTK_CONTAINER(frame), 12);
 
-	vbox = make_frame(frame, _("Tray Icon Configuration"));
+	vbox = gaim_gtk_make_frame(frame, _("Tray Icon Configuration"));
 	hbox = gtk_hbox_new(FALSE, 18);
 	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
 
--- a/plugins/gestures/gestures.c	Mon May 26 07:06:20 2003 +0000
+++ b/plugins/gestures/gestures.c	Mon May 26 08:30:48 2003 +0000
@@ -207,7 +207,7 @@
 	gtk_container_set_border_width(GTK_CONTAINER(ret), 12);
 
 	/* Configuration frame */
-	vbox = make_frame(ret, _("Mouse Gestures Configuration"));
+	vbox = gaim_gtk_make_frame(ret, _("Mouse Gestures Configuration"));
 
 #if 0
 	/* Mouse button drop-down menu */
--- a/plugins/idle.c	Mon May 26 07:06:20 2003 +0000
+++ b/plugins/idle.c	Mon May 26 08:30:48 2003 +0000
@@ -75,7 +75,7 @@
 	ret = gtk_vbox_new(FALSE, 18);
 	gtk_container_set_border_width(GTK_CONTAINER(ret), 12);
 
-	frame = make_frame(ret, _("Idle Time"));
+	frame = gaim_gtk_make_frame(ret, _("Idle Time"));
 	
 	vbox = gtk_vbox_new(FALSE, 5);
 	gtk_container_add(GTK_CONTAINER(frame), vbox);
--- a/plugins/notify.c	Mon May 26 07:06:20 2003 +0000
+++ b/plugins/notify.c	Mon May 26 08:30:48 2003 +0000
@@ -570,7 +570,7 @@
 	ret = gtk_vbox_new(FALSE, 18);
 	gtk_container_set_border_width (GTK_CONTAINER (ret), 12);
 
-	vbox = make_frame(ret, _("Notify For"));
+	vbox = gaim_gtk_make_frame(ret, _("Notify For"));
 	toggle = gtk_check_button_new_with_mnemonic(_("_IM windows"));
 	gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0);
 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), type & TYPE_IM);
@@ -582,7 +582,7 @@
 	g_signal_connect(G_OBJECT(toggle), "toggled", G_CALLBACK(options), GINT_TO_POINTER(9));
 
 	/*--------------*/
-	vbox = make_frame(ret, _("Notification Methods"));
+	vbox = gaim_gtk_make_frame(ret, _("Notification Methods"));
 	hbox = gtk_hbox_new(FALSE, 18);
 	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
 	toggle = gtk_check_button_new_with_mnemonic(_("Prepend _string into window title (hit enter to save):"));
@@ -617,7 +617,7 @@
 	g_signal_connect(G_OBJECT(toggle), "toggled", G_CALLBACK(options), GINT_TO_POINTER(6));
 
 	/*--------------*/
-	vbox = make_frame(ret, _("Notification Removal"));
+	vbox = gaim_gtk_make_frame(ret, _("Notification Removal"));
 	toggle = gtk_check_button_new_with_mnemonic(_("Remove when conversation window gains _focus"));
 	gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0);
 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), choice & NOTIFY_FOCUS);
--- a/plugins/spellchk.c	Mon May 26 07:06:20 2003 +0000
+++ b/plugins/spellchk.c	Mon May 26 08:30:48 2003 +0000
@@ -408,7 +408,7 @@
 	ret = gtk_vbox_new(FALSE, 18);
 	gtk_container_set_border_width (GTK_CONTAINER (ret), 12);
 	
-	vbox = make_frame(ret, _("Text Replacements"));
+	vbox = gaim_gtk_make_frame(ret, _("Text Replacements"));
 	gtk_container_set_border_width(GTK_CONTAINER(vbox), 4);
 	gtk_widget_set_size_request(vbox, 300, -1);
 	gtk_widget_show (vbox);
@@ -470,7 +470,7 @@
 
 	gtk_widget_show(button);
 
-	vbox = make_frame(ret, _("Add a new text replacement"));
+	vbox = gaim_gtk_make_frame(ret, _("Add a new text replacement"));
 	gtk_widget_set_size_request(vbox, 300, -1);
 
 	hbox = gtk_hbox_new(FALSE, 2);
--- a/plugins/timestamp.c	Mon May 26 07:06:20 2003 +0000
+++ b/plugins/timestamp.c	Mon May 26 08:30:48 2003 +0000
@@ -69,7 +69,7 @@
 	ret = gtk_vbox_new(FALSE, 18);
 	gtk_container_set_border_width (GTK_CONTAINER (ret), 12);
 
-	frame = make_frame(ret, _("iChat Timestamp"));
+	frame = gaim_gtk_make_frame(ret, _("iChat Timestamp"));
 	vbox = gtk_vbox_new(FALSE, 5);
 	gtk_container_add(GTK_CONTAINER(frame), vbox);
 
--- a/src/Makefile.am	Mon May 26 07:06:20 2003 +0000
+++ b/src/Makefile.am	Mon May 26 08:30:48 2003 +0000
@@ -70,6 +70,7 @@
 	gtkplugin.c \
 	gtkplugin.h \
 	gtkprefs.c \
+	gtkprefs.h \
 	gtkpounce.c \
 	gtkpounce.h \
 	gtkrequest.c \
--- a/src/buddy_chat.c	Mon May 26 07:06:20 2003 +0000
+++ b/src/buddy_chat.c	Mon May 26 08:30:48 2003 +0000
@@ -267,7 +267,7 @@
 		gtk_container_set_border_width(GTK_CONTAINER(mainbox), 5);
 		gtk_container_add(GTK_CONTAINER(joinchat), mainbox);
 
-		frame = make_frame(mainbox, _("Buddy Chat"));
+		frame = gaim_gtk_make_frame(mainbox, _("Buddy Chat"));
 
 		fbox = gtk_vbox_new(FALSE, 5);
 		gtk_container_set_border_width(GTK_CONTAINER(fbox), 5);
--- a/src/gtkdebug.c	Mon May 26 07:06:20 2003 +0000
+++ b/src/gtkdebug.c	Mon May 26 08:30:48 2003 +0000
@@ -23,6 +23,7 @@
 #include "gtkdebug.h"
 #include "gaim.h"
 #include "gtkimhtml.h"
+#include "prefs.h"
 #include <gtk/gtk.h>
 
 typedef struct
@@ -52,10 +53,18 @@
 	g_free(debug_win);
 	debug_win = NULL;
 
-	if (misc_options & OPT_MISC_DEBUG)
-		misc_options ^= OPT_MISC_DEBUG;
+	gaim_prefs_set_bool("/gaim/gtk/debug/enabled", FALSE);
+
+	return FALSE;
+}
 
-	save_prefs();
+static gboolean
+__configure_cb(GtkWidget *w, GdkEventConfigure *event, DebugWindow *win)
+{
+	if (GTK_WIDGET_VISIBLE(w)) {
+		gaim_prefs_set_int("/gaim/gtk/debug/width",  event->width);
+		gaim_prefs_set_int("/gaim/gtk/debug/height", event->height);
+	}
 
 	return FALSE;
 }
@@ -76,6 +85,9 @@
 __timestamps_cb(GtkWidget *w, DebugWindow *win)
 {
 	win->timestamps = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w));
+
+	gaim_prefs_set_bool("/gaim/gtk/debug/timestamps", win->timestamps);
+						
 }
 
 static DebugWindow *
@@ -85,56 +97,69 @@
 	GtkWidget *vbox;
 	GtkWidget *toolbar;
 	GtkWidget *sw;
+	GtkWidget *button;
+	int width, height;
 
 	win = g_new0(DebugWindow, 1);
 
+	width  = gaim_prefs_get_int("/gaim/gtk/debug/width");
+	height = gaim_prefs_get_int("/gaim/gtk/debug/height");
+
 	GAIM_DIALOG(win->window);
-	gtk_window_set_default_size(GTK_WINDOW(win->window), 500, 200);
+	gtk_window_set_default_size(GTK_WINDOW(win->window), width, height);
 	gtk_window_set_role(GTK_WINDOW(win->window), "debug");
 	gtk_window_set_title(GTK_WINDOW(win->window), _("Debug Window"));
 
 	g_signal_connect(G_OBJECT(win->window), "delete_event",
 					 G_CALLBACK(debug_window_destroy), NULL);
+	g_signal_connect(G_OBJECT(win->window), "configure_event",
+					 G_CALLBACK(__configure_cb), win);
 
 	/* Setup the vbox */
 	vbox = gtk_vbox_new(FALSE, 0);
 	gtk_container_add(GTK_CONTAINER(win->window), vbox);
 
-	/* Setup our top button bar thingie. */
-	toolbar = gtk_toolbar_new();
-	gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_BOTH_HORIZ);
-	gtk_toolbar_set_icon_size(GTK_TOOLBAR(toolbar),
-							  GTK_ICON_SIZE_SMALL_TOOLBAR);
+	if (gaim_prefs_get_bool("/gaim/gtk/debug/toolbar")) {
+		/* Setup our top button bar thingie. */
+		toolbar = gtk_toolbar_new();
+		gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_BOTH_HORIZ);
+		gtk_toolbar_set_icon_size(GTK_TOOLBAR(toolbar),
+								  GTK_ICON_SIZE_SMALL_TOOLBAR);
 
-	gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0);
+		gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0);
 
 #if 0
-	/* Find button */
-	gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar), GTK_STOCK_FIND,
-							 NULL, NULL, NULL, NULL, -1);
+		/* Find button */
+		gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar), GTK_STOCK_FIND,
+								 NULL, NULL, NULL, NULL, -1);
 
-	/* Save */
-	gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar), GTK_STOCK_SAVE,
-							 NULL, NULL, NULL, NULL, -1);
+		/* Save */
+		gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar), GTK_STOCK_SAVE,
+								 NULL, NULL, NULL, NULL, -1);
 #endif
 
-	/* Clear button */
-	gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar), GTK_STOCK_CLEAR,
-							 NULL, NULL, G_CALLBACK(__clear_cb), win, -1);
+		/* Clear button */
+		gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar), GTK_STOCK_CLEAR,
+								 NULL, NULL, G_CALLBACK(__clear_cb), win, -1);
 
-	gtk_toolbar_insert_space(GTK_TOOLBAR(toolbar), -1);
+		gtk_toolbar_insert_space(GTK_TOOLBAR(toolbar), -1);
 
-	/* Pause */
-	gtk_toolbar_append_element(GTK_TOOLBAR(toolbar),
-							   GTK_TOOLBAR_CHILD_TOGGLEBUTTON, NULL,
-							   _("Pause"), NULL, NULL,
-							   NULL, G_CALLBACK(__pause_cb), win);
+		/* Pause */
+		gtk_toolbar_append_element(GTK_TOOLBAR(toolbar),
+								   GTK_TOOLBAR_CHILD_TOGGLEBUTTON, NULL,
+								   _("Pause"), NULL, NULL,
+								   NULL, G_CALLBACK(__pause_cb), win);
 
-	/* Timestamps */
-	gtk_toolbar_append_element(GTK_TOOLBAR(toolbar),
-							   GTK_TOOLBAR_CHILD_TOGGLEBUTTON, NULL,
-							   _("Timestamps"), NULL, NULL,
-							   NULL, G_CALLBACK(__timestamps_cb), win);
+		/* Timestamps */
+		button = gtk_toolbar_append_element(GTK_TOOLBAR(toolbar),
+											GTK_TOOLBAR_CHILD_TOGGLEBUTTON,
+											NULL, _("Timestamps"), NULL, NULL,
+											NULL, G_CALLBACK(__timestamps_cb),
+											win);
+
+		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button),
+				gaim_prefs_get_bool("/gaim/gtk/debug/timestamps"));
+	}
 
 	/* Now our scrolled window... */
 	sw = gtk_scrolled_window_new(NULL, NULL);
@@ -163,6 +188,8 @@
 		debug_win = debug_window_new();
 
 	gtk_widget_show(debug_win->window);
+
+	gaim_prefs_set_bool("/gaim/gtk/debug/enabled", TRUE);
 }
 
 void
@@ -178,44 +205,48 @@
 gaim_gtk_debug_print(GaimDebugLevel level, const char *category,
 					 const char *format, va_list args)
 {
-	gchar *arg_s;
+	gchar *arg_s, *ts_s;
+	gboolean timestamps;
+
+	timestamps = gaim_prefs_get_bool("/gaim/gtk/debug/timestamps");
 
 	arg_s = g_strdup_vprintf(format, args);
 
+	if (category == NULL) {
+		ts_s = g_strdup("");
+	}
+	else {
+		/*
+		 * If the category is not NULL, then do timestamps.
+		 * This IS right. :)
+		 */
+		if (timestamps) {
+			gchar mdate[64];
+			time_t mtime = time(NULL);
+
+			strftime(mdate, sizeof(mdate), "%H:%M:%S", localtime(&mtime));
+
+			ts_s = g_strdup_printf("(%s) ", mdate);
+		}
+		else
+			ts_s = g_strdup("");
+	}
+
 	if ((misc_options & OPT_MISC_DEBUG) &&
 		debug_win != NULL && !debug_win->paused) {
 
-		gchar *esc_s, *cat_s, *ts_s, *s;
-
-		if (category == NULL) {
-			cat_s = g_strdup("");
-			ts_s = g_strdup("");
-		}
-		else {
-			cat_s = g_strdup_printf("<b>%s:</b> ", category);
+		gchar *esc_s, *cat_s, *s;
 
-			/*
-			 * If the category is not NULL, then do timestamps.
-			 * This IS right. :)
-			 */
-			if (debug_win->timestamps) {
-				gchar mdate[64];
-				time_t mtime = time(NULL);
-
-				strftime(mdate, sizeof(mdate), "%H:%M:%S", localtime(&mtime));
-
-				ts_s = g_strdup_printf("(%s) ", mdate);
-			}
-			else
-				ts_s = g_strdup("");
-		}
+		if (category == NULL)
+			cat_s = g_strdup("");
+		else
+			cat_s = g_strdup_printf("<b>%s:</b> ", category);
 
 		esc_s = g_markup_escape_text(arg_s, -1);
 
 		s = g_strdup_printf("<font color=\"%s\">%s%s%s</font>",
 							debug_fg_colors[level], ts_s, cat_s, esc_s);
 
-		g_free(ts_s);
 		g_free(esc_s);
 
 		if (level == GAIM_DEBUG_FATAL) {
@@ -234,11 +265,12 @@
 
 	if (opt_debug) {
 		if (category == NULL)
-			g_print("%s", arg_s);
+			g_print("%s%s", ts_s, arg_s);
 		else
-			g_print("%s: %s", category, arg_s);
+			g_print("%s%s: %s", ts_s, category, arg_s);
 	}
 
+	g_free(ts_s);
 	g_free(arg_s);
 }
 
--- a/src/gtkpounce.c	Mon May 26 07:06:20 2003 +0000
+++ b/src/gtkpounce.c	Mon May 26 08:30:48 2003 +0000
@@ -510,7 +510,7 @@
 	gtk_box_pack_start(GTK_BOX(vbox1), vbox2, TRUE, TRUE, 0);
 
 	/* Create the "Pounce Who" frame. */
-	frame = make_frame(vbox2, _("Pounce Who"));
+	frame = gaim_gtk_make_frame(vbox2, _("Pounce Who"));
 
 	/* Account: */
 	hbox = gtk_hbox_new(FALSE, 6);
@@ -551,7 +551,7 @@
 	}
 
 	/* Create the "Pounce When" frame. */
-	frame = make_frame(vbox2, _("Pounce When"));
+	frame = gaim_gtk_make_frame(vbox2, _("Pounce When"));
 
 	table = gtk_table_new(2, 4, FALSE);
 	gtk_container_add(GTK_CONTAINER(frame), table);
@@ -602,7 +602,7 @@
 	gtk_widget_show(dialog->stop_typing);
 
 	/* Create the "Pounce Action" frame. */
-	frame = make_frame(vbox2, _("Pounce Action"));
+	frame = gaim_gtk_make_frame(vbox2, _("Pounce Action"));
 
 	table = gtk_table_new(3, 5, FALSE);
 	gtk_container_add(GTK_CONTAINER(frame), table);
--- a/src/gtkprefs.c	Mon May 26 07:06:20 2003 +0000
+++ b/src/gtkprefs.c	Mon May 26 08:30:48 2003 +0000
@@ -1,4 +1,7 @@
-/*
+/**
+ * @file gtkprefs.c GTK+ Preferences
+ * @ingroup gtkui
+ *
  * gaim
  *
  * Copyright (C) 1998-2002, Mark Spencer <markster@marko.net>
@@ -37,9 +40,11 @@
 #include "gtkimhtml.h"
 #include "gaim.h"
 #include "gtkblist.h"
+#include "gtkdebug.h"
 #include "gtkplugin.h"
-#include "gtkdebug.h"
+#include "gtkprefs.h"
 #include "prpl.h"
+#include "prefs.h"
 #include "proxy.h"
 #include "sound.h"
 #include "notify.h"
@@ -155,27 +160,6 @@
 					  to save it */
 }
 
-
-GtkWidget *make_frame(GtkWidget *ret, char *text) {
-	GtkWidget *vbox, *label, *hbox;
-	char labeltext[256];
-
-	vbox = gtk_vbox_new(FALSE, 6);
-	gtk_box_pack_start(GTK_BOX(ret), vbox, FALSE, FALSE, 0);
-	label = gtk_label_new(NULL);
-	g_snprintf(labeltext, sizeof(labeltext), "<span weight=\"bold\">%s</span>", text);
-	gtk_label_set_markup(GTK_LABEL(label), labeltext);
-	gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
-	gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
-	hbox = gtk_hbox_new(FALSE, 6);
-	gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
-	label = gtk_label_new("    ");
-	gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
-	vbox = gtk_vbox_new(FALSE, 6);
-	gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0);
-	return vbox;
-}
-
 /* OK, Apply and Cancel */
 
 static void pref_nb_select(GtkTreeSelection *sel, GtkNotebook *nb) {
@@ -203,7 +187,7 @@
 	ret = gtk_vbox_new(FALSE, 18);
 	gtk_container_set_border_width (GTK_CONTAINER (ret), 12);
 
-	vbox = make_frame(ret, _("Interface Options"));
+	vbox = gaim_gtk_make_frame(ret, _("Interface Options"));
 
 	gaim_button(_("D_isplay remote nicknames if no alias is set"), &misc_options, OPT_MISC_USE_SERVER_ALIAS, vbox);
 
@@ -443,6 +427,40 @@
 	return ret;
 }
 
+static void update_color(GtkWidget *w, GtkWidget *pic)
+{
+	GdkColor c;
+	GtkStyle *style;
+	c.pixel = 0;
+
+	if (pic == pref_fg_picture) {
+		if (font_options & OPT_FONT_FGCOL) {
+			c.red = fgcolor.red;
+			c.blue = fgcolor.blue;
+			c.green = fgcolor.green;
+		} else {
+			c.red = 0;
+			c.blue = 0;
+			c.green = 0;
+		}
+	} else {
+		if (font_options & OPT_FONT_BGCOL) {
+			c.red = bgcolor.red;
+			c.blue = bgcolor.blue;
+			c.green = bgcolor.green;
+		} else {
+			c.red = 0xffff;
+			c.blue = 0xffff;
+			c.green = 0xffff;
+		}
+	}
+
+	style = gtk_style_new();
+	style->bg[0] = c;
+	gtk_widget_set_style(pic, style);
+	g_object_unref(style);
+}
+
 GtkWidget *font_page() {
 	GtkWidget *ret;
 	GtkWidget *button;
@@ -453,13 +471,13 @@
 	ret = gtk_vbox_new(FALSE, 18);
 	gtk_container_set_border_width (GTK_CONTAINER (ret), 12);
 
-	vbox = make_frame(ret, _("Style"));
+	vbox = gaim_gtk_make_frame(ret, _("Style"));
 	gaim_button(_("_Bold"), &font_options, OPT_FONT_BOLD, vbox);
 	gaim_button(_("_Italics"), &font_options, OPT_FONT_ITALIC, vbox);
 	gaim_button(_("_Underline"), &font_options, OPT_FONT_UNDERLINE, vbox);
 	gaim_button(_("_Strikethrough"), &font_options, OPT_FONT_STRIKE, vbox);
 
-	vbox = make_frame(ret, _("Face"));
+	vbox = gaim_gtk_make_frame(ret, _("Face"));
 	hbox = gtk_hbox_new(FALSE, 6);
 	gtk_container_add(GTK_CONTAINER(vbox), hbox);
 	button = gaim_button(_("Use custo_m face"), &font_options, OPT_FONT_FACE, hbox);
@@ -484,7 +502,7 @@
 	g_signal_connect(G_OBJECT(button), "clicked",
 					 G_CALLBACK(gaim_gtk_toggle_sensitive), select);
 
-	vbox = make_frame(ret, _("Color"));
+	vbox = gaim_gtk_make_frame(ret, _("Color"));
 	hbox = gtk_hbox_new(FALSE, 5);
 	gtk_container_add(GTK_CONTAINER(vbox), hbox);
 
@@ -532,14 +550,14 @@
 	ret = gtk_vbox_new(FALSE, 18);
 	gtk_container_set_border_width (GTK_CONTAINER (ret), 12);
 
-	vbox = make_frame (ret, _("Display"));
+	vbox = gaim_gtk_make_frame (ret, _("Display"));
 	gaim_button(_("Show graphical _smileys"), &convo_options, OPT_CONVO_SHOW_SMILEY, vbox);
 	gaim_button(_("Show _timestamp on messages"), &convo_options, OPT_CONVO_SHOW_TIME, vbox);
 	gaim_button(_("Show _URLs as links"), &convo_options, OPT_CONVO_SEND_LINKS, vbox);
 #ifdef USE_GTKSPELL
 	gaim_button(_("_Highlight misspelled words"), &convo_options, OPT_CONVO_CHECK_SPELLING, vbox);
 #endif
-	vbox = make_frame (ret, _("Ignore"));
+	vbox = gaim_gtk_make_frame (ret, _("Ignore"));
 	gaim_button(_("Ignore c_olors"), &convo_options, OPT_CONVO_IGNORE_COLOUR, vbox);
 	gaim_button(_("Ignore font _faces"), &convo_options, OPT_CONVO_IGNORE_FONTS, vbox);
 	gaim_button(_("Ignore font si_zes"), &convo_options, OPT_CONVO_IGNORE_SIZES, vbox);
@@ -554,15 +572,15 @@
 	ret = gtk_vbox_new(FALSE, 18);
 	gtk_container_set_border_width (GTK_CONTAINER (ret), 12);
 
-	vbox = make_frame(ret, _("Send Message"));
+	vbox = gaim_gtk_make_frame(ret, _("Send Message"));
 	gaim_button(_("_Enter sends message"), &convo_options, OPT_CONVO_ENTER_SENDS, vbox);
 	gaim_button(_("C_ontrol-Enter sends message"), &convo_options, OPT_CONVO_CTL_ENTER, vbox);
 
-	vbox = make_frame (ret, _("Window Closing"));
+	vbox = gaim_gtk_make_frame (ret, _("Window Closing"));
 	gaim_button(_("E_scape closes window"), &convo_options, OPT_CONVO_ESC_CAN_CLOSE, vbox);
 	gaim_button(_("Control-_W closes window"), &convo_options, OPT_CONVO_CTL_W_CLOSES, vbox);
 
-	vbox = make_frame(ret, _("Insertions"));
+	vbox = gaim_gtk_make_frame(ret, _("Insertions"));
 	gaim_button(_("Control-{B/I/U/S} inserts _HTML tags"), &convo_options, OPT_CONVO_CTL_CHARS, vbox);
 	gaim_button(_("Control-(number) inserts _smileys"), &convo_options, OPT_CONVO_CTL_SMILEYS, vbox);
 
@@ -582,7 +600,7 @@
 	gtk_container_set_border_width (GTK_CONTAINER (ret), 12);
 	
 	
-	vbox = make_frame (ret, _("Buddy List Sorting"));
+	vbox = gaim_gtk_make_frame (ret, _("Buddy List Sorting"));
 	while (sl) {
 		l = g_list_append(l, ((struct gaim_gtk_blist_sort_method*)sl->data)->name);
 		l = g_list_append(l, ((struct gaim_gtk_blist_sort_method*)sl->data)->name);
@@ -596,21 +614,21 @@
 	
 	g_list_free(l);
 
-	vbox = make_frame (ret, _("Buddy List Toolbar"));
+	vbox = gaim_gtk_make_frame (ret, _("Buddy List Toolbar"));
 	gaim_dropdown(vbox, _("Show _buttons as:"), &blist_options, OPT_BLIST_SHOW_BUTTON_XPM | OPT_BLIST_NO_BUTTON_TEXT,
 		      _("Pictures"), OPT_BLIST_SHOW_BUTTON_XPM | OPT_BLIST_NO_BUTTON_TEXT, 
 		      _("Text"), 0,
 		      _("Pictures and text"), OPT_BLIST_SHOW_BUTTON_XPM,
 		      _("None"), OPT_BLIST_NO_BUTTON_TEXT, NULL);
 
-	vbox = make_frame (ret, _("Buddy List Window"));
+	vbox = gaim_gtk_make_frame (ret, _("Buddy List Window"));
 	gaim_button(_("_Raise window on events"), &blist_options, OPT_BLIST_POPUP, vbox);
 
-	vbox = make_frame (ret, _("Group Display"));
+	vbox = gaim_gtk_make_frame (ret, _("Group Display"));
 	/* gaim_button(_("Hide _groups with no online buddies"), &blist_options, OPT_BLIST_NO_MT_GRP, vbox); */
 	gaim_button(_("Show _numbers in groups"), &blist_options, OPT_BLIST_SHOW_GRPNUM, vbox);
 
-	vbox = make_frame (ret, _("Buddy Display"));
+	vbox = gaim_gtk_make_frame (ret, _("Buddy Display"));
 	button = gaim_button(_("Show buddy _icons"), &blist_options, OPT_BLIST_SHOW_ICONS, vbox);
 	b2 = gaim_button(_("Show _warning levels"), &blist_options, OPT_BLIST_SHOW_WARN, vbox);
 	if (blist_options & OPT_BLIST_SHOW_ICONS)
@@ -640,7 +658,7 @@
 	gtk_container_set_border_width(GTK_CONTAINER(ret), 12);
 
 	sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
-	vbox = make_frame(ret, _("Conversations"));
+	vbox = gaim_gtk_make_frame(ret, _("Conversations"));
 
 	/* Build a list of names. */
 	for (i = 0; i < gaim_conv_placement_get_fnc_count(); i++) {
@@ -675,7 +693,7 @@
 
 	sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
 
-	vbox = make_frame (ret, _("Window"));
+	vbox = gaim_gtk_make_frame (ret, _("Window"));
 	widge = gaim_dropdown(vbox, _("Show _buttons as:"), &im_options, OPT_IM_BUTTON_TEXT | OPT_IM_BUTTON_XPM,
 		      _("Pictures"), OPT_IM_BUTTON_XPM,
 		      _("Text"), OPT_IM_BUTTON_TEXT,
@@ -689,15 +707,15 @@
 	gaim_button(_("Hide window on _send"), &im_options, OPT_IM_POPDOWN, vbox);
 	gtk_widget_show (vbox);
 
-	vbox = make_frame (ret, _("Buddy Icons"));
+	vbox = gaim_gtk_make_frame (ret, _("Buddy Icons"));
 	gaim_button(_("Hide buddy _icons"), &im_options, OPT_IM_HIDE_ICONS, vbox);
 	gaim_button(_("Disable buddy icon a_nimation"), &im_options, OPT_IM_NO_ANIMATION, vbox);
 
-	vbox = make_frame (ret, _("Display"));
+	vbox = gaim_gtk_make_frame (ret, _("Display"));
 	gaim_button(_("Show _logins in window"), &im_options, OPT_IM_LOGON, vbox);
 	gaim_button(_("Show a_liases in tabs/titles"), &im_options, OPT_IM_ALIAS_TAB, vbox);
 
-	vbox = make_frame (ret, _("Typing Notification"));
+	vbox = gaim_gtk_make_frame (ret, _("Typing Notification"));
 	typingbutton = gaim_button(_("Notify buddies that you are _typing to them"), &misc_options,
 				   OPT_MISC_STEALTH_TYPING, vbox);
 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(typingbutton), !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(typingbutton)));
@@ -718,7 +736,7 @@
 
 	sg = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
 
-	vbox = make_frame (ret, _("Window"));
+	vbox = gaim_gtk_make_frame (ret, _("Window"));
 	dd = gaim_dropdown(vbox, _("Show _buttons as:"), &chat_options, OPT_CHAT_BUTTON_TEXT | OPT_CHAT_BUTTON_XPM,
 			   _("Pictures"), OPT_CHAT_BUTTON_XPM,
 			   _("Text"), OPT_CHAT_BUTTON_TEXT,
@@ -730,11 +748,11 @@
 	gaim_labeled_spin_button(vbox, _("_Entry field height:"), &buddy_chat_size.entry_height, 25, 9999, sg);
 	gaim_button(_("_Raise windows on events"), &chat_options, OPT_CHAT_POPUP, vbox);
 
-	vbox = make_frame (ret, _("Tab Completion"));
+	vbox = gaim_gtk_make_frame (ret, _("Tab Completion"));
 	gaim_button(_("_Tab-complete nicks"), &chat_options, OPT_CHAT_TAB_COMPLETE, vbox);
 	gaim_button(_("_Old-style tab completion"), &chat_options, OPT_CHAT_OLD_STYLE_TAB, vbox);
 
-	vbox = make_frame (ret, _("Display"));
+	vbox = gaim_gtk_make_frame (ret, _("Display"));
 	gaim_button(_("_Show people joining/leaving in window"), &chat_options, OPT_CHAT_LOGON, vbox);
 	gaim_button(_("Co_lorize screennames"), &chat_options, OPT_CHAT_COLORIZE, vbox);
 
@@ -753,7 +771,7 @@
 
 	sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
 
-	vbox = make_frame (ret, _("IM Tabs"));
+	vbox = gaim_gtk_make_frame (ret, _("IM Tabs"));
 	dd = gaim_dropdown(vbox, _("Tab _placement:"), &im_options, OPT_IM_SIDE_TAB | OPT_IM_BR_TAB,
 		      _("Top"), 0,
 		      _("Bottom"), OPT_IM_BR_TAB,
@@ -763,7 +781,7 @@
 	gaim_button(_("Show all _instant messages in one tabbed\nwindow"), &im_options, OPT_IM_ONE_WINDOW, vbox);
 
 
-	vbox = make_frame (ret, _("Chat Tabs"));
+	vbox = gaim_gtk_make_frame (ret, _("Chat Tabs"));
 	dd = gaim_dropdown(vbox, _("Tab _placement:"), &chat_options, OPT_CHAT_SIDE_TAB | OPT_CHAT_BR_TAB,
 			   _("Top"), 0,
 			   _("Bottom"), OPT_CHAT_BR_TAB,
@@ -773,7 +791,7 @@
 	gaim_button(_("Show all c_hats in one tabbed window"), &chat_options, OPT_CHAT_ONE_WINDOW,
 		    vbox);
 
-	vbox = make_frame (ret, _("Tab Options"));
+	vbox = gaim_gtk_make_frame (ret, _("Tab Options"));
 	button = gaim_button(_("Show _close button on tabs."), &convo_options, OPT_CONVO_NO_X_ON_TAB, vbox);
 	convo_options ^= OPT_CONVO_NO_X_ON_TAB;
 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(button), !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)));
@@ -794,14 +812,14 @@
 	ret = gtk_vbox_new(FALSE, 18);
 	gtk_container_set_border_width (GTK_CONTAINER (ret), 12);
 
-	vbox = make_frame (ret, _("Proxy Type"));
+	vbox = gaim_gtk_make_frame (ret, _("Proxy Type"));
 	gaim_dropdown(vbox, _("Proxy _type:"), (int*)&global_proxy_info.proxytype, -1,
 		      _("No proxy"), PROXY_NONE,
 		      "SOCKS 4", PROXY_SOCKS4,
 		      "SOCKS 5", PROXY_SOCKS5,
 		      "HTTP", PROXY_HTTP, NULL);
 
-	vbox = make_frame(ret, _("Proxy Server"));
+	vbox = gaim_gtk_make_frame(ret, _("Proxy Server"));
 	prefs_proxy_frame = vbox;
 
 	if (global_proxy_info.proxytype == PROXY_NONE)
@@ -936,7 +954,7 @@
 	gtk_container_set_border_width (GTK_CONTAINER (ret), 12);
 
 	sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
-	vbox = make_frame (ret, _("Browser Selection"));
+	vbox = gaim_gtk_make_frame (ret, _("Browser Selection"));
 
 	browsers = get_available_browsers();
 	if (browsers != NULL) {
@@ -963,7 +981,7 @@
 	g_signal_connect(G_OBJECT(browser_entry), "focus-out-event", G_CALLBACK(manual_browser_set), NULL);
 
 	if (browsers != NULL) {
-		vbox = make_frame (ret, _("Browser Options"));
+		vbox = gaim_gtk_make_frame (ret, _("Browser Options"));
 		label = gaim_button(_("Open new _window by default"), &misc_options, OPT_MISC_BROWSER_POPUP, vbox);
 	}
 
@@ -978,12 +996,12 @@
 	ret = gtk_vbox_new(FALSE, 18);
 	gtk_container_set_border_width (GTK_CONTAINER (ret), 12);
 
-	vbox = make_frame (ret, _("Message Logs"));
+	vbox = gaim_gtk_make_frame (ret, _("Message Logs"));
 	gaim_button(_("_Log all instant messages"), &logging_options, OPT_LOG_CONVOS, vbox);
 	gaim_button(_("Log all c_hats"), &logging_options, OPT_LOG_CHATS, vbox);
 	gaim_button(_("Strip _HTML from logs"), &logging_options, OPT_LOG_STRIP_HTML, vbox);
 
-	vbox = make_frame (ret, _("System Logs"));
+	vbox = gaim_gtk_make_frame (ret, _("System Logs"));
 	gaim_button(_("Log when buddies _sign on/sign off"), &logging_options, OPT_LOG_BUDDY_SIGNON,
 		    vbox);
 	gaim_button(_("Log when buddies become _idle/un-idle"), &logging_options, OPT_LOG_BUDDY_IDLE,
@@ -1024,12 +1042,12 @@
 
 	sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
 
-	vbox = make_frame (ret, _("Sound Options"));
+	vbox = gaim_gtk_make_frame (ret, _("Sound Options"));
 	gaim_button(_("_No sounds when you log in"), &sound_options, OPT_SOUND_SILENT_SIGNON, vbox);
 	gaim_button(_("_Sounds while away"), &sound_options, OPT_SOUND_WHEN_AWAY, vbox);
 
 #ifndef _WIN32
-	vbox = make_frame (ret, _("Sound Method"));
+	vbox = gaim_gtk_make_frame (ret, _("Sound Method"));
 	dd = gaim_dropdown(vbox, _("_Method"), &sound_options, OPT_SOUND_BEEP |
 		      OPT_SOUND_ESD | OPT_SOUND_ARTS | OPT_SOUND_NAS |
 			  OPT_SOUND_NORMAL | OPT_SOUND_CMD,
@@ -1089,11 +1107,11 @@
 
 	sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
 
-	vbox = make_frame (ret, _("Away"));
+	vbox = gaim_gtk_make_frame (ret, _("Away"));
 	gaim_button(_("_Sending messages removes away status"), &away_options, OPT_AWAY_BACK_ON_IM, vbox);
 	gaim_button(_("_Queue new messages when away"), &away_options, OPT_AWAY_QUEUE, vbox);
 
-	vbox = make_frame (ret, _("Auto-response"));
+	vbox = gaim_gtk_make_frame (ret, _("Auto-response"));
 	hbox = gtk_hbox_new(FALSE, 0);
 	gtk_container_add(GTK_CONTAINER(vbox), hbox);
 	gaim_labeled_spin_button(hbox, _("Seconds before _resending:"),
@@ -1105,7 +1123,7 @@
 	if (away_options & OPT_AWAY_NO_AUTO_RESP)
 		gtk_widget_set_sensitive(hbox, FALSE);
 
-	vbox = make_frame (ret, _("Idle"));
+	vbox = gaim_gtk_make_frame (ret, _("Idle"));
 	dd = gaim_dropdown(vbox, _("Idle _time reporting:"), &report_idle, -1,
 			   _("None"), IDLE_NONE,
 			   _("Gaim usage"), IDLE_GAIM,
@@ -1120,7 +1138,7 @@
 	gtk_size_group_add_widget(sg, dd);
 	gtk_misc_set_alignment(GTK_MISC(dd), 0, 0);
 
-	vbox = make_frame (ret, _("Auto-away"));
+	vbox = gaim_gtk_make_frame (ret, _("Auto-away"));
 	button = gaim_button(_("Set away _when idle"), &away_options, OPT_AWAY_AUTO, vbox);
 	select = gaim_labeled_spin_button(vbox, _("_Minutes before setting away:"), &auto_away, 1, 24 * 60, sg);
 	if (!(away_options & OPT_AWAY_AUTO))
@@ -1847,7 +1865,7 @@
 	}
 }
 
-void show_prefs()
+void gaim_gtk_prefs_show(void)
 {
 	GtkWidget *vbox, *vbox2;
 	GtkWidget *hbox;
@@ -1971,11 +1989,6 @@
 	gtk_widget_show(prefs);
 }
 
-void set_option(GtkWidget *w, int *option)
-{
-	*option = !(*option);
-}
-
 static void set_misc_option(GtkWidget *w, int option)
 {
 	misc_options ^= option;
@@ -2194,40 +2207,6 @@
 	gaim_conversation_foreach(gaim_gtkconv_update_font_colors);
 }
 
-void update_color(GtkWidget *w, GtkWidget *pic)
-{
-	GdkColor c;
-	GtkStyle *style;
-	c.pixel = 0;
-
-	if (pic == pref_fg_picture) {
-		if (font_options & OPT_FONT_FGCOL) {
-			c.red = fgcolor.red;
-			c.blue = fgcolor.blue;
-			c.green = fgcolor.green;
-		} else {
-			c.red = 0;
-			c.blue = 0;
-			c.green = 0;
-		}
-	} else {
-		if (font_options & OPT_FONT_BGCOL) {
-			c.red = bgcolor.red;
-			c.blue = bgcolor.blue;
-			c.green = bgcolor.green;
-		} else {
-			c.red = 0xffff;
-			c.blue = 0xffff;
-			c.green = 0xffff;
-		}
-	}
-
-	style = gtk_style_new();
-	style->bg[0] = c;
-	gtk_widget_set_style(pic, style);
-	g_object_unref(style);
-}
-
 void set_default_away(GtkWidget *w, gpointer i)
 {
 
@@ -2511,3 +2490,18 @@
 	gaim_conversation_foreach(gaim_gtkconv_update_font_face);
 }
 
+void
+gaim_gtk_prefs_init(void)
+{
+	gaim_prefs_add_none("/gaim");
+	gaim_prefs_add_none("/gaim/gtk");
+
+	/* Debug window preferences. */
+	gaim_prefs_add_none("/gaim/gtk/debug");
+	gaim_prefs_add_bool("/gaim/gtk/debug/toolbar", TRUE);
+	gaim_prefs_add_bool("/gaim/gtk/debug/timestamps", FALSE);
+	gaim_prefs_add_bool("/gaim/gtk/debug/enabled", FALSE);
+	gaim_prefs_add_int("/gaim/gtk/debug/width",  400);
+	gaim_prefs_add_int("/gaim/gtk/debug/height", 150);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/gtkprefs.h	Mon May 26 08:30:48 2003 +0000
@@ -0,0 +1,61 @@
+/**
+ * @file gtkprefs.h GTK+ Preferences
+ * @ingroup gtkui
+ *
+ * gaim
+ *
+ * Copyright (C) 1998-2002, Mark Spencer <markster@marko.net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ */
+#ifndef _GAIM_GTK_PREFS_H_
+#define _GAIM_GTK_PREFS_H_
+
+/* XXX These should go. */
+extern GtkListStore *prefs_away_store;
+extern GtkWidget *prefs_away_menu;
+extern GtkWidget *pref_fg_picture;
+extern GtkWidget *pref_bg_picture;
+
+/**
+ * Initializes all UI-specific preferences.
+ */
+void gaim_gtk_prefs_init(void);
+
+/**
+ * Shows the preferences dialog.
+ */
+void gaim_gtk_prefs_show(void);
+
+/**
+ * Sets the default away message.
+ *
+ * @todo This should be moved or renamed or something?
+ */
+void set_default_away(GtkWidget *, gpointer);
+
+/**
+ * Initializes the default away menu.
+ *
+ * @todo This should be moved or renamed or something?
+ */
+void default_away_menu_init(GtkWidget *);
+
+void apply_font_dlg(GtkWidget *, GtkWidget *);
+void apply_color_dlg(GtkWidget *, gpointer);
+void destroy_colorsel(GtkWidget *, gpointer);
+
+#endif /* _GAIM_GTK_PREFS_H_ */
--- a/src/gtkutils.c	Mon May 26 07:06:20 2003 +0000
+++ b/src/gtkutils.c	Mon May 26 08:30:48 2003 +0000
@@ -484,3 +484,33 @@
 
 	return menuitem;
 }
+
+GtkWidget *
+gaim_gtk_make_frame(GtkWidget *parent, const char *title)
+{
+	GtkWidget *vbox, *label, *hbox;
+	char labeltitle[256];
+
+	vbox = gtk_vbox_new(FALSE, 6);
+	gtk_box_pack_start(GTK_BOX(parent), vbox, FALSE, FALSE, 0);
+
+	label = gtk_label_new(NULL);
+	g_snprintf(labeltitle, sizeof(labeltitle),
+			   "<span weight=\"bold\">%s</span>", title);
+
+	gtk_label_set_markup(GTK_LABEL(label), labeltitle);
+	gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
+	gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
+
+	hbox = gtk_hbox_new(FALSE, 6);
+	gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
+
+	label = gtk_label_new("    ");
+	gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
+
+	vbox = gtk_vbox_new(FALSE, 6);
+	gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0);
+
+	return vbox;
+}
+
--- a/src/gtkutils.h	Mon May 26 07:06:20 2003 +0000
+++ b/src/gtkutils.h	Mon May 26 08:30:48 2003 +0000
@@ -138,7 +138,8 @@
  *
  * @param menu       The menu to which to append the menu item.
  * @param str        The title for the menu item.
- * @param icon       An icon to place to the left of the menu item, or NULL for no icon.
+ * @param icon       An icon to place to the left of the menu item,
+ *                   or @c NULL for no icon.
  * @param sf         A function to call when the menu item is activated.
  * @param data       Data to pass to the signal function.
  * @param accel_key  Something.
@@ -147,6 +148,19 @@
  *
  * @return The newly created menu item.
  */
-GtkWidget *gaim_new_item_from_stock(GtkWidget *menu, const char *str, const char *icon, GtkSignalFunc sf, gpointer data, guint accel_key, guint accel_mods, char *mod);
+GtkWidget *gaim_new_item_from_stock(GtkWidget *menu, const char *str,
+									const char *icon, GtkSignalFunc sf,
+									gpointer data, guint accel_key,
+									guint accel_mods, char *mod);
+
+/**
+ * Creates a HIG preferences frame.
+ *
+ * @param parent The widget to put the frame into.
+ * @param title  The title for the frame.
+ *
+ * @return The vbox to put things into.
+ */
+GtkWidget *gaim_gtk_make_frame(GtkWidget *parent, const char *title);
 
 #endif /* _GAIM_GTK_UTILS_H_ */
--- a/src/main.c	Mon May 26 07:06:20 2003 +0000
+++ b/src/main.c	Mon May 26 08:30:48 2003 +0000
@@ -376,7 +376,7 @@
 	button = gaim_pixbuf_button_from_stock(_("Preferences"), GTK_STOCK_PREFERENCES, GAIM_BUTTON_VERTICAL);
 	gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
 	g_signal_connect(G_OBJECT(button), "clicked",
-					 G_CALLBACK(show_prefs), mainwindow);
+					 G_CALLBACK(gaim_gtk_prefs_show), mainwindow);
 	gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
 
 	button = gaim_pixbuf_button_from_stock(_("Sign On"), GAIM_STOCK_SIGN_ON, GAIM_BUTTON_VERTICAL);
@@ -881,6 +881,10 @@
 	gaim_set_notify_ui_ops(gaim_get_gtk_notify_ui_ops());
 	gaim_set_request_ui_ops(gaim_get_gtk_request_ui_ops());
 
+	gaim_prefs_init();
+	gaim_gtk_prefs_init();
+	gaim_prefs_load();
+	load_prefs();
 
 	plugin_search_paths[0] = LIBDIR;
 	plugin_search_paths[1] = gaim_user_dir();
@@ -899,9 +903,6 @@
 	wgaim_init();
 #endif
 
-	gaim_prefs_init();
-	gaim_prefs_load();
-	load_prefs();
 	core_main();
 	load_pounces();
 	ui_main();
--- a/src/multi.c	Mon May 26 07:06:20 2003 +0000
+++ b/src/multi.c	Mon May 26 08:30:48 2003 +0000
@@ -744,7 +744,7 @@
 		gtk_widget_destroy(ma->login_frame);
 	ma->login_frame = NULL;
 
-	frame = make_frame(box, _("Login Options"));
+	frame = gaim_gtk_make_frame(box, _("Login Options"));
 	ma->login_frame = gtk_widget_get_parent(gtk_widget_get_parent(frame));
 	gtk_box_reorder_child(GTK_BOX(box), ma->login_frame, 0);
 
@@ -884,7 +884,7 @@
 		gtk_widget_destroy(ma->user_frame);
 	ma->user_frame = NULL;
 
-	frame = make_frame(box, _("User Options"));
+	frame = gaim_gtk_make_frame(box, _("User Options"));
 	ma->user_frame = gtk_widget_get_parent(gtk_widget_get_parent(frame));
 	gtk_box_reorder_child(GTK_BOX(box), ma->user_frame, 1);
 	gtk_widget_show_all(ma->user_frame);
@@ -956,7 +956,7 @@
 		return;
 
 	g_snprintf(buf, sizeof(buf), _("%s Options"), p->info->name);
-	frame = make_frame(box, buf);
+	frame = gaim_gtk_make_frame(box, buf);
 
 	/* BLEH */
 	ma->proto_frame = gtk_widget_get_parent(gtk_widget_get_parent(frame));
@@ -1032,7 +1032,7 @@
 	if(ma->account)
 		gpi = ma->account->gpi;
 
-	frame = make_frame(box, _("Proxy Options"));
+	frame = gaim_gtk_make_frame(box, _("Proxy Options"));
 	ma->proxy_frame = gtk_widget_get_parent(gtk_widget_get_parent(frame));
 	gtk_widget_show_all(ma->proxy_frame);
 
--- a/src/ui.h	Mon May 26 07:06:20 2003 +0000
+++ b/src/ui.h	Mon May 26 08:30:48 2003 +0000
@@ -36,6 +36,7 @@
 #include "gtkconv.h"
 #include "pounce.h"
 #include "gtkft.h"
+#include "gtkprefs.h"
 #include "gtkutils.h"
 #include "stock.h"
 
@@ -171,6 +172,8 @@
 extern int smiley_array[FACE_TOTAL];
 extern GtkWidget *fgcseld;
 extern GtkWidget *bgcseld;
+void build_allow_list();
+void build_block_list();
 
 /* Globals in pounce.c */
 extern GtkWidget *bpmenu;
@@ -298,24 +301,6 @@
 extern void update_show_plugins(); /* this is a hack and will be removed */
 #endif
 
-/* Functions in prefs.c */
-extern void set_option(GtkWidget *, int *);
-extern void show_prefs();
-extern void show_debug();
-extern void update_color(GtkWidget *, GtkWidget *);
-extern void set_default_away(GtkWidget *, gpointer);
-extern void default_away_menu_init(GtkWidget *);
-extern void build_allow_list();
-extern void build_block_list();
-extern GtkWidget *make_frame(GtkWidget *, char *);
-extern GtkListStore *prefs_away_store;
-extern GtkWidget *prefs_away_menu;
-extern GtkWidget *pref_fg_picture;
-extern GtkWidget *pref_bg_picture;
-extern void apply_font_dlg(GtkWidget *, GtkWidget *);
-extern void apply_color_dlg(GtkWidget *, gpointer);
-extern void destroy_colorsel(GtkWidget *, gpointer);
-
 /* Functions in prpl.c */
 extern void register_dialog();