Guifications - The notification plugin to end all notification plugins! Copyright (C) 2003 Gary Kramlich 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. #include "guifications.h" /*********************************************************************** ***********************************************************************/ /*********************************************************************** ***********************************************************************/ static GtkWidget *make_entry( const gchar *pref ); static GtkWidget *make_button( gchar *text ); static void make_color_preview( GtkWidget *image, const gchar *color ); static void chk_box_cb( GtkWidget *check, const gchar *pref ); static void spn_btn_cb( GtkWidget *spin, const gchar *pref ); static void opt_mnu_cb( GtkWidget *opt_menu, const gchar *pref ); static gboolean edt_box_cb( GtkWidget *entry, GdkEventFocus *event, const gchar *pref ); static void image_file_ok( GtkWidget *widget, gpointer data ); static void image_file_dialog( GtkWidget *check, gpointer data ); static void font_ok( GtkWidget *widget, gpointer data ); static void font_dialog( GtkWidget *check, gpointer data ); static void color_ok( GtkWidget *widget, gpointer data ); static void color_dialog( GtkWidget *widget, gpointer data ); /**********************************************************************/ get_config_frame(GaimPlugin *plugin) { GtkWidget *note, *vbox, *hbox, *frame, *label, *spin; GtkWidget *chk_btn, *opt_mnu, *edt_box; note = gtk_notebook_new(); /******************************************************************* *******************************************************************/ /* setup behavior sizegroup */ sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); /* create behavior tab */ vbox = gtk_vbox_new(FALSE, 4); gtk_container_set_border_width(GTK_CONTAINER(vbox), 12); label = gtk_label_new("Behavior"); gtk_notebook_insert_page(GTK_NOTEBOOK(note), vbox, label, -1); /* create notification frame */ frame = gaim_gtk_make_frame(vbox, "Notifications"); /* create sign on/off hbox */ hbox = gtk_hbox_new(FALSE, 4); gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0); /* create sign on check */ chk_btn = make_check_button(gaim_prefs_get_bool(GF_PREF_BEHAVIOR_SHOW_SIGN_ON), "Show _Sign On", sg); g_signal_connect(G_OBJECT(chk_btn), "clicked", G_CALLBACK(chk_box_cb), (gpointer)GF_PREF_BEHAVIOR_SHOW_SIGN_ON); gtk_box_pack_start(GTK_BOX(hbox), chk_btn, FALSE, FALSE, 0 ); /* create sign off check */ chk_btn = make_check_button(gaim_prefs_get_bool(GF_PREF_BEHAVIOR_SHOW_SIGN_OFF), "Show Sign _Off", sg); g_signal_connect(G_OBJECT(chk_btn), "clicked", G_CALLBACK(chk_box_cb), (gpointer)GF_PREF_BEHAVIOR_SHOW_SIGN_OFF); gtk_box_pack_start(GTK_BOX(hbox), chk_btn, FALSE, FALSE, 0); /* create away/back hbox */ hbox = gtk_hbox_new(FALSE, 4); gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0); chk_btn = make_check_button(gaim_prefs_get_bool(GF_PREF_BEHAVIOR_SHOW_AWAY), "Show _Away", sg); g_signal_connect(G_OBJECT(chk_btn), "clicked", G_CALLBACK(chk_box_cb), (gpointer)GF_PREF_BEHAVIOR_SHOW_AWAY); gtk_box_pack_start(GTK_BOX(hbox), chk_btn, FALSE, FALSE, 0 ); chk_btn = make_check_button(gaim_prefs_get_bool(GF_PREF_BEHAVIOR_SHOW_BACK), "Show _Back", sg); g_signal_connect(G_OBJECT(chk_btn), "clicked", G_CALLBACK(chk_box_cb), (gpointer)GF_PREF_BEHAVIOR_SHOW_BACK); gtk_box_pack_start(GTK_BOX(hbox), chk_btn, FALSE, FALSE, 0); /* create idle/unidle hbox */ hbox = gtk_hbox_new(FALSE, 4); gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0); chk_btn = make_check_button(gaim_prefs_get_bool(GF_PREF_BEHAVIOR_SHOW_IDLE), "Show _Idle", sg); g_signal_connect(G_OBJECT(chk_btn), "clicked", G_CALLBACK(chk_box_cb), (gpointer)GF_PREF_BEHAVIOR_SHOW_IDLE); gtk_box_pack_start(GTK_BOX(hbox), chk_btn, FALSE, FALSE, 0); /* create unidle check */ chk_btn = make_check_button(gaim_prefs_get_bool(GF_PREF_BEHAVIOR_SHOW_UNIDLE), "Show _Unidle", sg); g_signal_connect(G_OBJECT(chk_btn), "clicked", G_CALLBACK(chk_box_cb), (gpointer)GF_PREF_BEHAVIOR_SHOW_UNIDLE); gtk_box_pack_start(GTK_BOX(hbox), chk_btn, FALSE, FALSE, 0); /* create position frame */ frame = gaim_gtk_make_frame(vbox, "Position"); /* create position option menu */ opt_mnu = make_window_position_option_menu(gaim_prefs_get_int(GF_PREF_BEHAVIOR_WINDOW_POS)); g_signal_connect(G_OBJECT(opt_mnu), "changed", G_CALLBACK(opt_mnu_cb), GF_PREF_BEHAVIOR_WINDOW_POS); label = add_label(opt_mnu, "_Position:", sg); gtk_box_pack_start(GTK_BOX(frame), label, FALSE, FALSE, 0); /* create vertical check */ chk_btn = make_check_button(gaim_prefs_get_bool(GF_PREF_BEHAVIOR_WINDOW_VERTICAL), "_Vertical", sg); g_signal_connect(G_OBJECT(chk_btn), "clicked", G_CALLBACK(chk_box_cb), (gpointer)GF_PREF_BEHAVIOR_WINDOW_VERTICAL); gtk_box_pack_start(GTK_BOX(frame), chk_btn, FALSE, FALSE, 0); /* create display frame */ frame = gaim_gtk_make_frame(vbox, "Display"); /* create display spin */ spin = make_spin_button(gaim_prefs_get_int(GF_PREF_BEHAVIOR_TIMEOUT), 0, 60, TRUE); g_signal_connect(G_OBJECT(spin), "changed", G_CALLBACK(spn_btn_cb), (gpointer)GF_PREF_BEHAVIOR_TIMEOUT); spin = add_label(spin, "Display _time:", sg); label = make_label("seconds", NULL); gtk_box_pack_start(GTK_BOX(spin), label, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(frame), spin, FALSE, FALSE, 0); /* create zoom option menu */ opt_mnu = make_window_zoom_option_menu(gaim_prefs_get_int(GF_PREF_BEHAVIOR_ZOOM)); g_signal_connect(G_OBJECT(opt_mnu), "changed", G_CALLBACK(opt_mnu_cb), GF_PREF_BEHAVIOR_ZOOM); label = add_label(opt_mnu, "_Zoom:", sg); gtk_box_pack_start(GTK_BOX(frame), label, FALSE, FALSE, 0); chk_btn = make_check_button(gaim_prefs_get_bool(GF_PREF_BEHAVIOR_ALIAS), "S_how alias if set", NULL); g_signal_connect(G_OBJECT(chk_btn), "clicked", G_CALLBACK(chk_box_cb), (gpointer)GF_PREF_BEHAVIOR_ALIAS); gtk_box_pack_start(GTK_BOX(frame), chk_btn, FALSE, FALSE, 0); chk_btn = make_check_button(gaim_prefs_get_bool(GF_PREF_BEHAVIOR_SHOWAWAY), "Sho_w Guifications while away", NULL); g_signal_connect(G_OBJECT(chk_btn), "clicked", G_CALLBACK(chk_box_cb), (gpointer)GF_PREF_BEHAVIOR_SHOWAWAY); gtk_box_pack_start(GTK_BOX(frame), chk_btn, FALSE, FALSE, 0); frame = gaim_gtk_make_frame(vbox, "Mouse"); /* create mouse1 option */ opt_mnu = make_window_mouse_option_menu(gaim_prefs_get_int(GF_PREF_BEHAVIOR_MOUSE1)); g_signal_connect(G_OBJECT(opt_mnu), "changed", G_CALLBACK(opt_mnu_cb), GF_PREF_BEHAVIOR_MOUSE1); label = add_label(opt_mnu, "_Left Button:", sg); gtk_box_pack_start(GTK_BOX(frame), label, FALSE, FALSE, 0); /* create mouse2 option */ opt_mnu = make_window_mouse_option_menu(gaim_prefs_get_int(GF_PREF_BEHAVIOR_MOUSE2)); g_signal_connect(G_OBJECT(opt_mnu), "changed", G_CALLBACK(opt_mnu_cb), GF_PREF_BEHAVIOR_MOUSE2); label = add_label(opt_mnu, "_Middle Button:", sg); gtk_box_pack_start(GTK_BOX(frame), label, FALSE, FALSE, 0); /* create mouse3 option */ opt_mnu = make_window_mouse_option_menu(gaim_prefs_get_int(GF_PREF_BEHAVIOR_MOUSE3)); g_signal_connect(G_OBJECT(opt_mnu), "changed", G_CALLBACK(opt_mnu_cb), GF_PREF_BEHAVIOR_MOUSE3); label = add_label(opt_mnu, "_Right Button:", sg); gtk_box_pack_start(GTK_BOX(frame), label, FALSE, FALSE, 0); /******************************************************************* *******************************************************************/ /* make appearance sizegroup */ sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); /* create appearance tab */ vbox = gtk_vbox_new(FALSE, 4); label = gtk_label_new("Appearance"); gtk_container_set_border_width(GTK_CONTAINER(vbox), 12); gtk_notebook_insert_page(GTK_NOTEBOOK(note), vbox, label, -1); frame = gaim_gtk_make_frame(vbox, "Image"); chk_btn = make_check_button(gaim_prefs_get_bool(GF_PREF_APPEARANCE_IMAGE), "Use custom _image", sg); g_signal_connect(G_OBJECT(chk_btn), "clicked", G_CALLBACK(chk_box_cb), (gpointer)GF_PREF_APPEARANCE_IMAGE); gtk_box_pack_start(GTK_BOX(frame), chk_btn, FALSE, FALSE, 0); /* create image entry/button hbox */ hbox = gtk_hbox_new(FALSE, 4); gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0); /* create image edit box */ edt_image = make_entry(GF_PREF_APPEARANCE_IMAGE_FILE); gtk_widget_set_sensitive(edt_image, FALSE); gtk_box_pack_start(GTK_BOX(hbox), edt_image, FALSE, FALSE, 0); /* create image button */ btn_image = make_button("_Browse..."); gtk_widget_set_sensitive(btn_image, gaim_prefs_get_bool(GF_PREF_APPEARANCE_IMAGE)); g_signal_connect(G_OBJECT(btn_image), "clicked", G_CALLBACK(image_file_dialog), NULL); gtk_box_pack_start(GTK_BOX(hbox), btn_image, FALSE, FALSE, 0); frame = gaim_gtk_make_frame(vbox, "Text"); hbox = gtk_hbox_new(FALSE, 4); gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0); chk_btn = make_check_button(gaim_prefs_get_bool(GF_PREF_APPEARANCE_FONT), "Use custom fon_t", sg); g_signal_connect(G_OBJECT(chk_btn), "clicked", G_CALLBACK(chk_box_cb), (gpointer)GF_PREF_APPEARANCE_FONT); gtk_box_pack_start(GTK_BOX(hbox), chk_btn, FALSE, FALSE, 0); btn_font = gtk_button_new_from_stock(GTK_STOCK_SELECT_FONT); gtk_widget_set_sensitive(btn_font, gaim_prefs_get_bool(GF_PREF_APPEARANCE_FONT)); g_signal_connect(G_OBJECT(btn_font), "clicked", G_CALLBACK(font_dialog), NULL); gtk_box_pack_start(GTK_BOX(hbox), btn_font, FALSE, FALSE, 0); hbox = gtk_hbox_new(FALSE, 4); gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0); chk_btn = make_check_button(gaim_prefs_get_bool(GF_PREF_APPEARANCE_COLOR), "Use custom co_lor", sg); g_signal_connect(G_OBJECT(chk_btn), "clicked", G_CALLBACK(chk_box_cb), (gpointer)GF_PREF_APPEARANCE_COLOR); gtk_box_pack_start(GTK_BOX(hbox), chk_btn, FALSE, FALSE, 0); /* create color button */ btn_color = gtk_button_new_from_stock(GTK_STOCK_SELECT_COLOR); gtk_widget_set_sensitive(btn_color, gaim_prefs_get_bool(GF_PREF_APPEARANCE_COLOR)); g_signal_connect(G_OBJECT(btn_color), "clicked", G_CALLBACK(color_dialog), NULL); gtk_box_pack_start(GTK_BOX(hbox), btn_color, FALSE, FALSE, 0); /* create color event box */ evt_color = gtk_event_box_new(); gtk_widget_set_size_request(evt_color, 50, -1); make_color_preview(evt_color, gaim_prefs_get_string(GF_PREF_COLORS_FOREGROUND)); gtk_box_pack_start(GTK_BOX(hbox), evt_color, FALSE, FALSE, 0); /* create clipping option menu */ opt_mnu = make_text_clipping_option_menu(gaim_prefs_get_int(GF_PREF_APPEARANCE_TEXT_CLIPPING)); g_signal_connect(G_OBJECT(opt_mnu), "changed", G_CALLBACK(opt_mnu_cb), GF_PREF_APPEARANCE_TEXT_CLIPPING); label = add_label(opt_mnu, "Clippin_g:", sg); gtk_box_pack_start(GTK_BOX(frame), label, FALSE, FALSE, 0); /* create position option menu */ opt_mnu = make_item_position_option_menu(gaim_prefs_get_int(GF_PREF_APPEARANCE_TEXT_POS)); g_signal_connect(G_OBJECT(opt_mnu), "changed", G_CALLBACK(opt_mnu_cb), GF_PREF_APPEARANCE_TEXT_POS); label = add_label(opt_mnu, "_Position:", sg); gtk_box_pack_start(GTK_BOX(frame), label, FALSE, FALSE, 0); spin = make_spin_button(gaim_prefs_get_int(GF_PREF_APPEARANCE_TEXT_X), 0, 255, TRUE); g_signal_connect(G_OBJECT(spin), "changed", G_CALLBACK(spn_btn_cb), (gpointer)GF_PREF_APPEARANCE_TEXT_X); label = add_label(spin, "_Horizontal offset:", sg); gtk_box_pack_start(GTK_BOX(frame), label, FALSE, FALSE, 0); spin = make_spin_button(gaim_prefs_get_int(GF_PREF_APPEARANCE_TEXT_Y), 0, 255, TRUE); g_signal_connect(G_OBJECT(spin), "changed", G_CALLBACK(spn_btn_cb), (gpointer)GF_PREF_APPEARANCE_TEXT_Y); label = add_label(spin, "_Vertical offset:", sg); gtk_box_pack_start(GTK_BOX(frame), label, FALSE, FALSE, 0); /* create protocol frame */ frame = gaim_gtk_make_frame(vbox, "Protocol"); /* create position option menu */ opt_mnu = make_item_position_option_menu(gaim_prefs_get_int(GF_PREF_APPEARANCE_PROT_POS)); g_signal_connect(G_OBJECT(opt_mnu), "changed", G_CALLBACK(opt_mnu_cb), GF_PREF_APPEARANCE_PROT_POS); label = add_label(opt_mnu, "P_osition:", sg); gtk_box_pack_start(GTK_BOX(frame), label, FALSE, FALSE, 0); /* create size option menu */ opt_mnu = make_icon_size_option_menu(gaim_prefs_get_int(GF_PREF_APPEARANCE_PROT_SIZE)); g_signal_connect(G_OBJECT(opt_mnu), "changed", G_CALLBACK(opt_mnu_cb), GF_PREF_APPEARANCE_PROT_SIZE); label = add_label(opt_mnu, "Si_ze:", sg); gtk_box_pack_start(GTK_BOX(frame), label, FALSE, FALSE, 0); spin = make_spin_button(gaim_prefs_get_int(GF_PREF_APPEARANCE_PROT_X), 0, 255, TRUE); g_signal_connect(G_OBJECT(spin), "changed", G_CALLBACK(spn_btn_cb), (gpointer)GF_PREF_APPEARANCE_PROT_X); label = add_label(spin, "Ho_rizontal offset:", sg); gtk_box_pack_start(GTK_BOX(frame), label, FALSE, FALSE, 0); spin = make_spin_button(gaim_prefs_get_int(GF_PREF_APPEARANCE_PROT_Y), 0, 255, TRUE); g_signal_connect(G_OBJECT(spin), "changed", G_CALLBACK(spn_btn_cb), (gpointer)GF_PREF_APPEARANCE_PROT_Y); label = add_label(spin, "Ver_tical offset:", sg); gtk_box_pack_start(GTK_BOX(frame), label, FALSE, FALSE, 0); /******************************************************************* *******************************************************************/ /* make messages size group */ sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); vbox = gtk_vbox_new(FALSE, 4); label = gtk_label_new("Messages"); gtk_container_set_border_width(GTK_CONTAINER(vbox), 12); gtk_notebook_insert_page(GTK_NOTEBOOK(note), vbox, label, -1); /* create messages frame */ frame = gaim_gtk_make_frame(vbox, "Status Messages"); /* create sign on line */ edt_box = make_entry(GF_PREF_MESSAGES_SIGN_ON); label = add_label(edt_box, "_Sign on:", sg); gtk_box_pack_start(GTK_BOX(frame), label, FALSE, FALSE, 0); /* create sign off line */ edt_box = make_entry(GF_PREF_MESSAGES_SIGN_OFF); label = add_label(edt_box, "Sign _off:", sg); gtk_box_pack_start(GTK_BOX(frame), label, FALSE, FALSE, 0); edt_box = make_entry(GF_PREF_MESSAGES_AWAY); label = add_label(edt_box, "_Away:", sg); gtk_box_pack_start(GTK_BOX(frame), label, FALSE, FALSE, 0); edt_box = make_entry(GF_PREF_MESSAGES_BACK); label = add_label(edt_box, "_Back:", sg); gtk_box_pack_start(GTK_BOX(frame), label, FALSE, FALSE, 0); edt_box = make_entry(GF_PREF_MESSAGES_IDLE); label = add_label(edt_box, "_Idle:", sg); gtk_box_pack_start(GTK_BOX(frame), label, FALSE, FALSE, 0); edt_box = make_entry(GF_PREF_MESSAGES_UNIDLE); label = add_label(edt_box, "_Unidle:", sg); gtk_box_pack_start(GTK_BOX(frame), label, FALSE, FALSE, 0); /******************************************************************* *******************************************************************/ /* make advanced sizeground */ sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); /* create advanced tab */ vbox = gtk_vbox_new(FALSE, 4); label = gtk_label_new("Advanced"); gtk_container_set_border_width(GTK_CONTAINER(vbox), 12); gtk_notebook_insert_page(GTK_NOTEBOOK(note), vbox, label, -1); /* create release notification frame */ frame = gaim_gtk_make_frame(vbox, "Release Notification"); /* create release notification check */ chk_btn = make_check_button(gaim_prefs_get_bool(GF_PREF_ADVANCED_RELEASE), "Check for new releases", sg); g_signal_connect(G_OBJECT(chk_btn), "clicked", G_CALLBACK(chk_box_cb), (gpointer)GF_PREF_ADVANCED_RELEASE); gtk_box_pack_start(GTK_BOX(frame), chk_btn, FALSE, FALSE, 0); /* create behavior frame */ frame = gaim_gtk_make_frame(vbox, "Behavior"); /* create sign on spin */ spin = make_spin_button(gaim_prefs_get_int(GF_PREF_ADVANCED_DELAY), 0, 30000, TRUE); g_signal_connect(G_OBJECT(spin), "changed", G_CALLBACK(spn_btn_cb), (gpointer)GF_PREF_ADVANCED_DELAY); label = add_label(spin, "_Sign on delay:", sg); gtk_box_pack_start(GTK_BOX(frame), label, FALSE, FALSE, 0); /* create sign on description */ label = make_label("milliseconds", NULL); gtk_box_pack_start(GTK_BOX(spin), label, FALSE, FALSE, 0); gtk_widget_show_all(note); /**********************************************************************/ make_color_preview(GtkWidget *image, const gchar *color) { if (gaim_prefs_get_bool(GF_PREF_APPEARANCE_COLOR)) pango_color_parse(&pcolor, color); gcolor.green = pcolor.green; gcolor.blue = pcolor.blue; gcolor.red = gcolor.green = gcolor.blue = 0; gtk_widget_set_style(image, style); /**********************************************************************/ make_entry(const gchar *pref) { gtk_entry_set_text(GTK_ENTRY(entry), gaim_prefs_get_string(pref)); g_signal_connect(G_OBJECT(entry), "focus-out-event", G_CALLBACK(edt_box_cb), (gpointer)pref); /**********************************************************************/ make_button(gchar *text) { ret = gtk_button_new_with_mnemonic(text); /*********************************************************************** ***********************************************************************/ chk_box_cb(GtkWidget *check, const gchar *pref) { gboolean enabled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check)); gaim_prefs_set_bool(pref, enabled); if (g_ascii_strcasecmp(pref, GF_PREF_APPEARANCE_IMAGE) == 0) gtk_widget_set_sensitive(btn_image, enabled); else if (g_ascii_strcasecmp(pref, GF_PREF_APPEARANCE_FONT) == 0) gtk_widget_set_sensitive(btn_font, enabled); else if (g_ascii_strcasecmp(pref, GF_PREF_APPEARANCE_COLOR) == 0) { gtk_widget_set_sensitive(btn_color, enabled); make_color_preview(evt_color, gaim_prefs_get_string(GF_PREF_COLORS_FOREGROUND)); /**********************************************************************/ spn_btn_cb(GtkWidget *spin, const gchar *pref) { gaim_prefs_set_int(pref, gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin))); /**********************************************************************/ opt_mnu_cb(GtkWidget *opt_menu, const gchar *pref) { if (g_ascii_strcasecmp(pref, GF_PREF_BEHAVIOR_ZOOM) == 0) gaim_prefs_set_int(pref, gtk_option_menu_get_history(GTK_OPTION_MENU(opt_menu))); /**********************************************************************/ edt_box_cb(GtkWidget *entry, GdkEventFocus *event, const gchar *pref) { gaim_prefs_set_string(pref, gtk_entry_get_text(GTK_ENTRY(entry))); /**********************************************************************/ image_file_dialog(GtkWidget *check, gpointer data) { file_sel = gtk_file_selection_new("Select a background image"); gtk_file_selection_set_filename(GTK_FILE_SELECTION(file_sel), gaim_prefs_get_string(GF_PREF_APPEARANCE_IMAGE_FILE)); gtk_file_selection_hide_fileop_buttons(GTK_FILE_SELECTION(file_sel)); g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(file_sel)->ok_button), "clicked", G_CALLBACK(image_file_ok), (gpointer)file_sel); g_signal_connect_swapped(G_OBJECT(GTK_FILE_SELECTION(file_sel)->ok_button), "clicked", G_CALLBACK(gtk_widget_destroy), (gpointer)file_sel); g_signal_connect_swapped(G_OBJECT(GTK_FILE_SELECTION(file_sel)->cancel_button), "clicked", G_CALLBACK(gtk_widget_destroy), (gpointer)file_sel); gtk_widget_show(file_sel); /**********************************************************************/ image_file_ok(GtkWidget *widget, gpointer data) { GtkWidget *file_sel = (GtkWidget*)data, *message_box = NULL; file = gtk_file_selection_get_filename(GTK_FILE_SELECTION(file_sel)); pixbuf = gdk_pixbuf_new_from_file(file, NULL); gaim_prefs_set_string(GF_PREF_APPEARANCE_IMAGE_FILE, file); gtk_entry_set_text(GTK_ENTRY(edt_image), file); message_box = gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "The file \"%s\" is not a valid image file", file); g_signal_connect_swapped(G_OBJECT(message_box), "response", G_CALLBACK(gtk_widget_destroy), GTK_OBJECT(message_box)); gtk_widget_show(message_box); /**********************************************************************/ font_dialog(GtkWidget *check, gpointer data) { font_sel = gtk_font_selection_dialog_new("Select Font"); gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(font_sel), gaim_prefs_get_string(GF_PREF_APPEARANCE_FONT_FACE)); gtk_font_selection_dialog_set_preview_text(GTK_FONT_SELECTION_DIALOG(font_sel), "Guifications"); g_signal_connect(G_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel)->ok_button), "clicked", G_CALLBACK(font_ok), (gpointer)font_sel); g_signal_connect_swapped(G_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel)->ok_button), "clicked", G_CALLBACK(gtk_widget_destroy), (gpointer)font_sel); g_signal_connect_swapped(G_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel)->cancel_button), "clicked", G_CALLBACK(gtk_widget_destroy), (gpointer)font_sel); gtk_widget_show(font_sel); /**********************************************************************/ font_ok(GtkWidget *widget, gpointer data) { GtkWidget *font_sel = (GtkWidget*)data; face = gtk_font_selection_dialog_get_font_name(GTK_FONT_SELECTION_DIALOG(font_sel)); gaim_prefs_set_string(GF_PREF_APPEARANCE_FONT_FACE, face); /**********************************************************************/ color_dialog(GtkWidget *widget, gpointer data) { pango_color_parse(&pcolor, gaim_prefs_get_string(GF_PREF_COLORS_FOREGROUND)); color.green = pcolor.green; color.blue = pcolor.blue; color_sel = gtk_color_selection_dialog_new("Select Font Color"); gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(color_sel)->colorsel), &color); g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_sel)->ok_button), "clicked", G_CALLBACK(color_ok), (gpointer)color_sel); g_signal_connect_swapped(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_sel)->ok_button), "clicked", G_CALLBACK(gtk_widget_destroy), (gpointer)color_sel); g_signal_connect_swapped(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_sel)->cancel_button), "clicked", G_CALLBACK(gtk_widget_destroy), (gpointer)color_sel); gtk_widget_show(color_sel); /**********************************************************************/ color_ok(GtkWidget *widget, gpointer data) { GtkWidget *color_sel = (GtkWidget*)data; gtk_color_selection_get_current_color(GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(color_sel)->colorsel), &color); g_snprintf(buf, sizeof(buf), "#%04x%04x%04x", color.red, color.green, color.blue); make_color_preview(evt_color, buf); gaim_prefs_set_string(GF_PREF_COLORS_FOREGROUND, buf); /**********************************************************************/