# HG changeset patch # User Sean Egan # Date 1028263763 0 # Node ID 120e08ea5aeef6d3a53c5b48f8418a50c5d9b623 # Parent de3118740c8711c0a8c266f6854a1f65cd0333c9 [gaim-migrate @ 3385] this actually isn't finished yet--don't complain about it. Reccomended for use with gtk2. committer: Tailor Script diff -r de3118740c87 -r 120e08ea5aee src/prefs.c --- a/src/prefs.c Fri Aug 02 04:48:04 2002 +0000 +++ b/src/prefs.c Fri Aug 02 04:49:23 2002 +0000 @@ -1,7 +1,7 @@ /* * gaim * - * Copyright (C) 1998-1999, Mark Spencer + * Copyright (C) 1998-2002, Mark Spencer * * 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 @@ -36,6 +36,10 @@ #include "gtkimhtml.h" #include "gaim.h" #include "prpl.h" +#include "proxy.h" + +/* xpms for gtk1.2 */ +#if !GTK_CHECK_VERSION (1,3,0) #include "pixmaps/cancel.xpm" #include "pixmaps/fontface2.xpm" #include "pixmaps/gnome_add.xpm" @@ -44,297 +48,115 @@ #include "pixmaps/bgcolor.xpm" #include "pixmaps/fgcolor.xpm" #include "pixmaps/save.xpm" -#include "proxy.h" +#include "pixmaps/ok.xpm" +#include "pixmaps/join.xpm" +#endif -struct debug_window *dw = NULL; -static GtkWidget *prefs = NULL; -static GtkWidget *gaim_button(const char *, guint *, int, GtkWidget *); -static GtkWidget *blist_tab_radio(const char *, int, GtkWidget *, GtkWidget *); -static void prefs_build_general(); -static void prefs_build_buddy(); -static void prefs_build_convo(); -static void prefs_build_sound(); -static void prefs_build_away(); -static void prefs_build_deny(); -static gint handle_delete(GtkWidget *, GdkEvent *, void *); -static void delete_prefs(GtkWidget *, void *); -void set_default_away(GtkWidget *, gpointer); -static void set_font_option(GtkWidget *w, int option); +/* temporary preferences */ +static guint misc_options_new; +static guint logging_options_new; +static guint blist_options_new; +static guint convo_options_new; +static guint im_options_new; +static guint chat_options_new; +static guint font_options_new; +static guint sound_options_new; +static char *sound_file_new[NUM_SOUNDS]; +static guint away_options_new; +static guint away_resend_new; +static int auto_away_new; +static int report_idle_new; +static int proxytype_new; +static struct away_message* default_away_new; +static int web_browser_new; +static char sound_cmd_new[2048]; +static char web_command_new[2048]; +static int fontsize_new; +GdkColor fgcolor_new, bgcolor_new; +static struct window_size conv_size_new, buddy_chat_size_new; +char fontface_new[128]; +#if !GTK_CHECK_VERSION(1,3,0) +char fontxfld_new[256]; +char fontfacexfld[256]; +#endif +char fontface[128]; -static GtkWidget *sounddialog = NULL; -static GtkWidget *prefdialog = NULL; -static GtkWidget *tickerbutton = NULL; -GtkWidget *debugbutton = NULL; - -extern GtkWidget *tickerwindow; -extern void BuddyTickerShow(); GtkWidget *prefs_away_list = NULL; GtkWidget *prefs_away_menu = NULL; GtkWidget *preftree = NULL; +GtkWidget *fontseld = NULL; + +#if GTK_CHECK_VERSION(1,3,0) +GtkTreeStore *prefs_away_store = NULL; +#endif + +static int sound_row_sel = 0; +static char *last_sound_dir = NULL; + +static GtkWidget *sounddialog = NULL; +static GtkWidget *browser_entry = NULL; +static GtkWidget *sound_entry = NULL; +static GtkWidget *away_text = NULL; GtkCTreeNode *general_node = NULL; GtkCTreeNode *deny_node = NULL; GtkWidget *prefs_proxy_frame = NULL; - -static void destdeb(GtkWidget *m, gpointer n) -{ - gtk_widget_destroy(debugbutton); - debugbutton = NULL; -} - -static void desttkr(GtkWidget *m, gpointer n) -{ - gtk_widget_destroy(tickerbutton); - tickerbutton = NULL; -} - -static void set_idle(GtkWidget *w, int *data) -{ - report_idle = (int)data; - save_prefs(); -} +static GtkWidget *gaim_button(const char *, guint *, int, GtkWidget *); +GtkWidget *gaim_labeled_spin_button(GtkWidget *, const gchar *, int*, int, int); +static GtkWidget *gaim_dropdown(GtkWidget *, const gchar *, int *, int, ...); +static GtkWidget *show_color_pref(GtkWidget *, gboolean); +static void delete_prefs(GtkWidget *, void *); +void set_default_away(GtkWidget *, gpointer); +static void set_font_option(GtkWidget *w, int option); -static GtkWidget *idle_radio(char *label, int which, GtkWidget *box, GtkWidget *set) -{ - GtkWidget *opt; - - if (!set) - opt = gtk_radio_button_new_with_label(NULL, label); - else - opt = - gtk_radio_button_new_with_label(gtk_radio_button_group(GTK_RADIO_BUTTON(set)), - label); - gtk_box_pack_start(GTK_BOX(box), opt, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(opt), "clicked", GTK_SIGNAL_FUNC(set_idle), (void *)which); - gtk_widget_show(opt); - if (report_idle == which) - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(opt), TRUE); - - return opt; -} - -static GtkWidget *browser_entry = NULL; -static GtkWidget *new_window = NULL; +struct debug_window *dw = NULL; +static GtkWidget *prefs = NULL; +GtkWidget *debugbutton = NULL; -static void set_browser(GtkWidget *w, int *data) -{ - web_browser = (int)data; - if (web_browser != BROWSER_MANUAL) { - if (browser_entry) - gtk_widget_set_sensitive(browser_entry, FALSE); - } else { - if (browser_entry) - gtk_widget_set_sensitive(browser_entry, TRUE); - } - - if (web_browser != BROWSER_NETSCAPE) { - if (new_window) - gtk_widget_set_sensitive(new_window, FALSE); - } else { - if (new_window) - gtk_widget_set_sensitive(new_window, TRUE); - } - - - save_prefs(); -} - -static int manualentry_key_pressed(GtkWidget *w, GdkEvent *event, void *dummy) -{ - g_snprintf(web_command, sizeof(web_command), "%s", gtk_entry_get_text(GTK_ENTRY(browser_entry))); - save_prefs(); - return TRUE; -} - -static GtkWidget *browser_radio(char *label, int which, GtkWidget *box, GtkWidget *set) -{ - GtkWidget *opt; - - if (!set) - opt = gtk_radio_button_new_with_label(NULL, label); - else - opt = - gtk_radio_button_new_with_label(gtk_radio_button_group(GTK_RADIO_BUTTON(set)), - label); - gtk_box_pack_start(GTK_BOX(box), opt, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(opt), "clicked", GTK_SIGNAL_FUNC(set_browser), (void *)which); - gtk_widget_show(opt); - if (web_browser == which) - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(opt), TRUE); - - return opt; -} - -static void brentdes(GtkWidget *m, gpointer n) -{ - browser_entry = NULL; - new_window = NULL; +void delete_prefs(GtkWidget *asdf, void *gdsa) { + int v; + + prefs = NULL; + for (v = 0; v < NUM_SOUNDS; v++) { + if (sound_file_new[v]) + g_free(sound_file_new[v]); + sound_file_new[v] = NULL; + } + sound_entry = NULL; + browser_entry = NULL; + debugbutton=NULL; + gtk_widget_destroy(sounddialog); +#if GTK_CHECK_VERSION(1,3,0) + g_object_unref(G_OBJECT(prefs_away_store)); +#endif } -static void general_page() -{ - GtkWidget *parent; - GtkWidget *box; - GtkWidget *label; - GtkWidget *hbox; - GtkWidget *vbox; - GtkWidget *frame; - GtkWidget *mbox; - GtkWidget *sep; - GtkWidget *idle; - GtkWidget *opt; - GtkWidget *typingbutton; - - parent = prefdialog->parent; - gtk_widget_destroy(prefdialog); - - prefdialog = gtk_frame_new(_("General Options")); - gtk_container_add(GTK_CONTAINER(parent), prefdialog); - - box = gtk_vbox_new(FALSE, 5); - gtk_container_set_border_width(GTK_CONTAINER(box), 5); - gtk_container_add(GTK_CONTAINER(prefdialog), box); - gtk_widget_show(box); - - label = gtk_label_new(_("All options take effect immediately unless otherwise noted.")); - gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 5); - gtk_widget_show(label); - - hbox = gtk_hbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 5); - gtk_widget_show(hbox); - - vbox = gtk_vbox_new(TRUE, 5); - gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 5); - gtk_widget_show(vbox); - - frame = gtk_frame_new(_("Miscellaneous")); - gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 5); - gtk_widget_show(frame); - - mbox = gtk_vbox_new(TRUE, 5); - gtk_container_add(GTK_CONTAINER(frame), mbox); - gtk_widget_show(mbox); - - gaim_button(_("Use borderless buttons"), &misc_options, OPT_MISC_COOL_LOOK, mbox); - - if (!tickerwindow && (misc_options & OPT_MISC_BUDDY_TICKER)) - misc_options ^= OPT_MISC_BUDDY_TICKER; - tickerbutton = gaim_button(_("Show Buddy Ticker"), &misc_options, OPT_MISC_BUDDY_TICKER, mbox); - gtk_signal_connect(GTK_OBJECT(tickerbutton), "destroy", GTK_SIGNAL_FUNC(desttkr), 0); - - if (!dw && (misc_options & OPT_MISC_DEBUG)) - misc_options ^= OPT_MISC_DEBUG; - debugbutton = gaim_button(_("Show Debug Window"), &misc_options, OPT_MISC_DEBUG, mbox); - gtk_signal_connect(GTK_OBJECT(debugbutton), "destroy", GTK_SIGNAL_FUNC(destdeb), 0); - - /* Preferences should be positive */ - typingbutton = gaim_button(_("Notify buddies that you are typing to them"), &misc_options, - OPT_MISC_STEALTH_TYPING, mbox); - - /* So we have to toggle it */ - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(typingbutton), !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(typingbutton))); - misc_options ^= OPT_MISC_STEALTH_TYPING; - - frame = gtk_frame_new(_("Report Idle Times")); - gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 5); - gtk_widget_show(frame); - - mbox = gtk_vbox_new(TRUE, 5); - gtk_container_add(GTK_CONTAINER(frame), mbox); - gtk_widget_show(mbox); - - idle = idle_radio(_("None"), IDLE_NONE, mbox, NULL); - idle = idle_radio(_("Gaim Use"), IDLE_GAIM, mbox, idle); -#ifdef USE_SCREENSAVER - idle = idle_radio(_("X Use"), IDLE_SCREENSAVER, mbox, idle); +GtkWidget *preflabel; +GtkWidget *prefsnotebook; +#if GTK_CHECK_VERSION(1,3,0) +GtkTreeStore *prefstree; +#else +GtkWidget *prefstree; #endif - frame = gtk_frame_new(_("Logging")); - gtk_box_pack_start(GTK_BOX(hbox), frame, TRUE, TRUE, 5); - gtk_widget_show(frame); - - mbox = gtk_vbox_new(TRUE, 5); - gtk_container_add(GTK_CONTAINER(frame), mbox); - gtk_widget_show(mbox); - - gaim_button(_("Log all conversations"), &logging_options, OPT_LOG_ALL, mbox); - gaim_button(_("Strip HTML from logs"), &logging_options, OPT_LOG_STRIP_HTML, mbox); - - sep = gtk_hseparator_new(); - gtk_box_pack_start(GTK_BOX(mbox), sep, FALSE, FALSE, 0); - gtk_widget_show(sep); - - gaim_button(_("Log when buddies sign on/sign off"), &logging_options, OPT_LOG_BUDDY_SIGNON, - mbox); - gaim_button(_("Log when buddies become idle/un-idle"), &logging_options, OPT_LOG_BUDDY_IDLE, - mbox); - gaim_button(_("Log when buddies go away/come back"), &logging_options, OPT_LOG_BUDDY_AWAY, mbox); - gaim_button(_("Log your own signons/idleness/awayness"), &logging_options, OPT_LOG_MY_SIGNON, - mbox); - gaim_button(_("Individual log file for each buddy's signons"), &logging_options, - OPT_LOG_INDIVIDUAL, mbox); - - frame = gtk_frame_new(_("Browser")); - gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 5); - gtk_widget_show(frame); - - hbox = gtk_hbox_new(FALSE, 5); - gtk_container_add(GTK_CONTAINER(frame), hbox); - gtk_widget_show(hbox); - - vbox = gtk_vbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 5); - gtk_widget_show(vbox); +static void set_misc_options(); +static void set_logging_options(); +static void set_blist_options(); +static void set_convo_options(); +static void set_im_options(); +static void set_chat_options(); +static void set_font_options(); +static void set_sound_options(); +static void set_away_options(); - opt = browser_radio(_("Konqueror"), BROWSER_KONQ, vbox, NULL); - opt = browser_radio(_("Opera"), BROWSER_OPERA, vbox, opt); - opt = browser_radio(_("Netscape"), BROWSER_NETSCAPE, vbox, opt); - opt = browser_radio(_("Mozilla"), BROWSER_MOZILLA, vbox, opt); - - new_window = - gaim_button(_("Pop up new window by default"), &misc_options, OPT_MISC_BROWSER_POPUP, vbox); - - vbox = gtk_vbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 5); - gtk_widget_show(vbox); - -#ifdef USE_GNOME - opt = browser_radio(_("GNOME URL Handler"), BROWSER_GNOME, vbox, opt); -#endif /* USE_GNOME */ - opt = browser_radio(_("Galeon"), BROWSER_GALEON, vbox, opt); - opt = browser_radio(_("Manual (%s for URL)"), BROWSER_MANUAL, vbox, opt); - - browser_entry = gtk_entry_new(); - gtk_box_pack_start(GTK_BOX(vbox), browser_entry, FALSE, FALSE, 0); - gtk_entry_set_text(GTK_ENTRY(browser_entry), web_command); - gtk_signal_connect(GTK_OBJECT(browser_entry), "focus_out_event", - GTK_SIGNAL_FUNC(manualentry_key_pressed), NULL); - gtk_signal_connect(GTK_OBJECT(browser_entry), "destroy", GTK_SIGNAL_FUNC(brentdes), NULL); - gtk_widget_show(browser_entry); - - if (web_browser != BROWSER_MANUAL) { - gtk_widget_set_sensitive(browser_entry, FALSE); - } else { - gtk_widget_set_sensitive(browser_entry, TRUE); - } - - if (web_browser != BROWSER_NETSCAPE) { - gtk_widget_set_sensitive(new_window, FALSE); - } else { - gtk_widget_set_sensitive(new_window, TRUE); - } - - gtk_widget_show(prefdialog); -} +extern void BuddyTickerShow(); #define PROXYHOST 0 #define PROXYPORT 1 #define PROXYTYPE 2 #define PROXYUSER 3 #define PROXYPASS 4 - static void proxy_print_option(GtkEntry *entry, int entrynum) { if (entrynum == PROXYHOST) @@ -348,106 +170,588 @@ save_prefs(); } -static void proxy_print_optionrad(GtkRadioButton * entry, int entrynum) + +/* OK, Apply and Cancel */ + +static void apply_cb(GtkWidget *button, void *data) { - if (entrynum == PROXY_NONE) - gtk_widget_set_sensitive(prefs_proxy_frame, FALSE); - else - gtk_widget_set_sensitive(prefs_proxy_frame, TRUE); + int r; + if (misc_options != misc_options_new) + set_misc_options(); + if (logging_options != logging_options_new) + set_logging_options(); + if (blist_options != blist_options_new) + set_blist_options(); + if (convo_options != convo_options_new) + set_convo_options(); + if (im_options != im_options_new) + set_im_options(); + if (chat_options != chat_options_new) + set_chat_options(); + chat_options = chat_options_new; + if (font_options != font_options_new) + set_font_options(); + if (sound_options != sound_options_new) + set_sound_options(); + for (r = 0; r < NUM_SOUNDS; r++) { + if (sound_file[r]) + g_free(sound_file[r]); + sound_file[r] = sound_file_new[r]; + sound_file_new[r] = NULL; + } + if (away_options != away_options_new) + set_away_options(); + away_resend = away_resend_new; + auto_away = auto_away_new; + report_idle = report_idle_new; + web_browser = web_browser_new; + proxytype = proxytype_new; + default_away = default_away_new; + fontsize = fontsize_new; + g_snprintf(sound_cmd, sizeof(sound_cmd), "%s", sound_cmd_new); + g_snprintf(web_command, sizeof(web_command), "%s", web_command_new); + memcpy(&conv_size, &conv_size_new, sizeof(struct window_size)); + memcpy(&conv_size, &conv_size_new, sizeof(struct window_size)); + memcpy(&fgcolor, &fgcolor_new, sizeof(GdkColor)); + memcpy(&bgcolor, &bgcolor_new, sizeof(GdkColor)); - proxytype = entrynum; + + g_snprintf(fontface, sizeof(fontface), fontface_new); +#if !GTK_CHECK_VERSION(1,3,0) + g_snprintf(fontxfld, sizeof(fontxfld), fontxfld_new); +#endif + update_convo_font(); + update_convo_color(); save_prefs(); } -static void proxy_page() + +static void ok_cb(GtkWidget *button, void *data) { - GtkWidget *parent; + apply_cb(button, data); + gtk_widget_destroy(prefs); +} +#if GTK_CHECK_VERSION(1,3,0) +static void pref_nb_select(GtkTreeSelection *sel, GtkNotebook *nb) { + GtkTreeIter iter; + GValue val = { 0, }; + GtkTreeModel *model = GTK_TREE_MODEL(prefstree); + + if (! gtk_tree_selection_get_selected (sel, &model, &iter)) + return; + gtk_tree_model_get_value (model, &iter, 1, &val); + gtk_label_set_text (GTK_LABEL(preflabel), g_value_get_string (&val)); + g_value_unset (&val); + gtk_tree_model_get_value (model, &iter, 2, &val); + gtk_notebook_set_current_page (GTK_NOTEBOOK (prefsnotebook), g_value_get_int (&val)); + +} +#else +static void pref_nb_select(GtkCTree *ctree, GtkCTreeNode *node, gint column, GtkNotebook *nb) { + char *text; + gtk_ctree_get_node_info(GTK_CTREE(ctree), node, &text, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + gtk_label_set_text (GTK_LABEL(preflabel), text); + gtk_notebook_set_page (GTK_NOTEBOOK (prefsnotebook), gtk_ctree_node_get_row_data(GTK_CTREE(ctree), node)); + +} +#endif /* GTK_CHECK_VERSION */ + +/* These are the pages in the preferences notebook */ +GtkWidget *interface_page() { + GtkWidget *ret; + GtkWidget *frame; GtkWidget *vbox; - GtkWidget *hbox; - GtkWidget *label; - GtkWidget *entry; - GtkWidget *first, *opt; + ret = gtk_vbox_new(FALSE, 5); + gtk_container_set_border_width (GTK_CONTAINER (ret), 6); + + /* All the pages are pretty similar--a vbox packed with frames... */ + frame = gtk_frame_new (_("Windows")); + gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + + /* And a vbox in each frame */ + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add (GTK_CONTAINER (frame), vbox); + + /* These shouldn't have to wait for user to click OK or APPLY or whatnot */ + /* They really shouldn't be in preferences at all */ + gaim_button(_("Show Buddy Ticker"), &misc_options, OPT_MISC_BUDDY_TICKER, vbox); + debugbutton = gaim_button(_("Show Debug Window"), &misc_options, OPT_MISC_DEBUG, vbox); + gtk_widget_show (vbox); + + + frame = gtk_frame_new (_("Style")); + gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add (GTK_CONTAINER (frame), vbox); + gaim_button(_("Use borderless buttons"), &misc_options_new, OPT_MISC_COOL_LOOK, vbox); + gtk_widget_show (vbox); + + gtk_widget_show(ret); + return ret; +} + +GtkWidget *font_page() { + GtkWidget *ret; GtkWidget *frame; - GtkWidget *table; + GtkWidget *button; + GtkWidget *vbox, *hbox; + GtkWidget *select = NULL; + ret = gtk_vbox_new(FALSE, 5); + gtk_container_set_border_width (GTK_CONTAINER (ret), 6); + + frame = gtk_frame_new (_("Style")); + gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add (GTK_CONTAINER (frame), vbox); + gaim_button(_("Bold"), &font_options_new, OPT_FONT_BOLD, vbox); + gaim_button(_("Italics"), &font_options_new, OPT_FONT_ITALIC, vbox); + gaim_button(_("Underline"), &font_options_new, OPT_FONT_UNDERLINE, vbox); + gaim_button(_("Strikethough"), &font_options_new, OPT_FONT_STRIKE, vbox); + gtk_widget_show (vbox); + + + frame = gtk_frame_new (_("Face")); + gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add (GTK_CONTAINER (frame), vbox); + hbox = gtk_hbox_new(FALSE, 5); + gtk_container_add(GTK_CONTAINER(vbox), hbox); + button = gaim_button(_("Use custom face"), &font_options_new, OPT_FONT_FACE, hbox); +#if GTK_CHECK_VERSION(1,3,0) + select = gtk_button_new_from_stock(GTK_STOCK_SELECT_FONT); +#else + select = picture_button(prefs, _("Select"), fontface2_xpm); +#endif + if (!(font_options_new & OPT_FONT_FACE)) + gtk_widget_set_sensitive(GTK_WIDGET(select), FALSE); + gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(toggle_sensitive), select); + gtk_signal_connect(GTK_OBJECT(select), "clicked", GTK_SIGNAL_FUNC(show_font_dialog), NULL); + gtk_box_pack_start(GTK_BOX(hbox), select, FALSE, FALSE, 0); + if (misc_options & OPT_MISC_COOL_LOOK) + gtk_button_set_relief(GTK_BUTTON(select), GTK_RELIEF_NONE); + gtk_widget_show(select); + gtk_widget_show(hbox); + + hbox = gtk_hbox_new(FALSE, 5); + gtk_container_add(GTK_CONTAINER(vbox), hbox); + button = gaim_button(_("Use custom size"), &font_options_new, OPT_FONT_SIZE, hbox); + select = gaim_labeled_spin_button(hbox, NULL, &fontsize_new, 1, 7); + if (!(font_options_new & OPT_FONT_SIZE)) + gtk_widget_set_sensitive(GTK_WIDGET(select), FALSE); + gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(toggle_sensitive), select); + gtk_widget_show(hbox); + gtk_widget_show (vbox); + + + frame = gtk_frame_new ("Color"); + gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add (GTK_CONTAINER (frame), vbox); + hbox = gtk_hbox_new(FALSE, 5); + gtk_container_add(GTK_CONTAINER(vbox), hbox); + + pref_fg_picture = show_color_pref(hbox, TRUE); + button = gaim_button(_("Text color"), &font_options_new, OPT_FONT_FGCOL, hbox); + gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(update_color), + pref_fg_picture); + +#if GTK_CHECK_VERSION(1,3,0) + select = gtk_button_new_from_stock(GTK_STOCK_SELECT_COLOR); +#else + select = picture_button(prefs, _("Select"), fgcolor_xpm); +#endif + if (!(font_options_new & OPT_FONT_FGCOL)) + gtk_widget_set_sensitive(GTK_WIDGET(select), FALSE); + gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(toggle_sensitive), select); + gtk_signal_connect(GTK_OBJECT(select), "clicked", GTK_SIGNAL_FUNC(show_fgcolor_dialog), NULL); + gtk_box_pack_start(GTK_BOX(hbox), select, FALSE, FALSE, 0); + if (misc_options & OPT_MISC_COOL_LOOK) + gtk_button_set_relief(GTK_BUTTON(select), GTK_RELIEF_NONE); + gtk_widget_show(select); + gtk_widget_show(hbox); - parent = prefdialog->parent; - gtk_widget_destroy(prefdialog); + hbox = gtk_hbox_new(FALSE, 5); + gtk_container_add(GTK_CONTAINER(vbox), hbox); + pref_bg_picture = show_color_pref(hbox, FALSE); + button = gaim_button(_("Background color"), &font_options_new, OPT_FONT_BGCOL, hbox); + gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(update_color), + pref_bg_picture); +#if GTK_CHECK_VERSION(1,3,0) + select = gtk_button_new_from_stock(GTK_STOCK_SELECT_COLOR); +#else + select = picture_button(prefs, _("Select"), bgcolor_xpm); +#endif + if (!(font_options_new & OPT_FONT_BGCOL)) + gtk_widget_set_sensitive(GTK_WIDGET(select), FALSE); + gtk_signal_connect(GTK_OBJECT(select), "clicked", GTK_SIGNAL_FUNC(show_bgcolor_dialog), NULL); + gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(toggle_sensitive), select); + gtk_box_pack_start(GTK_BOX(hbox), select, FALSE, FALSE, 0); + if (misc_options & OPT_MISC_COOL_LOOK) + gtk_button_set_relief(GTK_BUTTON(select), GTK_RELIEF_NONE); + gtk_widget_show(select); + gtk_widget_show(hbox); + gtk_widget_show (vbox); + + + gtk_widget_show(ret); + return ret; +} + + +GtkWidget *messages_page() { + GtkWidget *ret; + GtkWidget *frame; + GtkWidget *vbox; + ret = gtk_vbox_new(FALSE, 5); + gtk_container_set_border_width (GTK_CONTAINER (ret), 6); + + frame = gtk_frame_new ("Display"); + gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add (GTK_CONTAINER (frame), vbox); + gaim_button(_("Show graphical smileys"), &convo_options_new, OPT_CONVO_SHOW_SMILEY, vbox); + gaim_button(_("Show timestamp on messages"), &convo_options_new, OPT_CONVO_SHOW_TIME, vbox); + gaim_button(_("Show URLs as links"), &convo_options_new, OPT_CONVO_SEND_LINKS, vbox); + gaim_button(_("Highlight misspelled words"), &convo_options_new, OPT_CONVO_CHECK_SPELLING, vbox); + gtk_widget_show (vbox); + - prefdialog = gtk_frame_new(_("Proxy Options")); - gtk_container_add(GTK_CONTAINER(parent), prefdialog); + frame = gtk_frame_new ("Ignore"); + gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add (GTK_CONTAINER (frame), vbox); + gaim_button(_("Ignore colors"), &convo_options_new, OPT_CONVO_IGNORE_COLOUR, vbox); + gaim_button(_("Ignore font faces"), &convo_options_new, OPT_CONVO_IGNORE_FONTS, vbox); + gaim_button(_("Ignore font sizes"), &convo_options_new, OPT_CONVO_IGNORE_SIZES, vbox); + gaim_button(_("Ignore TiK Automated Messages"), &away_options_new, OPT_AWAY_TIK_HACK, vbox); + gtk_widget_show (vbox); + + gtk_widget_show(ret); + return ret; +} + +GtkWidget *hotkeys_page() { + GtkWidget *ret; + GtkWidget *frame; + GtkWidget *vbox; + ret = gtk_vbox_new(FALSE, 5); + gtk_container_set_border_width (GTK_CONTAINER (ret), 6); + + frame = gtk_frame_new ("Send Message"); + gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add (GTK_CONTAINER (frame), vbox); + gaim_button(_("Enter sends message"), &convo_options_new, OPT_CONVO_ENTER_SENDS, vbox); + gaim_button(_("Control-Enter sends message"), &convo_options_new, OPT_CONVO_CTL_ENTER, vbox); + gtk_widget_show (vbox); + + frame = gtk_frame_new ("Window Closing"); + gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add (GTK_CONTAINER (frame), vbox); + gaim_button(_("Escape closes window"), &convo_options_new, OPT_CONVO_ESC_CAN_CLOSE, vbox); + gaim_button(_("Control-W closes window"), &convo_options_new, OPT_CONVO_CTL_W_CLOSES, vbox); + gtk_widget_show (vbox); + + + frame = gtk_frame_new ("Insertions"); + gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); vbox = gtk_vbox_new(FALSE, 5); - gtk_container_set_border_width(GTK_CONTAINER(vbox), 5); - gtk_container_add(GTK_CONTAINER(prefdialog), vbox); + gtk_container_add (GTK_CONTAINER (frame), vbox); + gaim_button(_("Control-{B/I/U/S} inserts HTML tags"), &convo_options_new, OPT_CONVO_CTL_CHARS, vbox); + gaim_button(_("Control-(number) inserts smileys"), &convo_options_new, OPT_CONVO_CTL_SMILEYS, vbox); + gtk_widget_show (vbox); + + gtk_widget_show(ret); + return ret; +} + +GtkWidget *list_page() { + GtkWidget *ret; + GtkWidget *frame; + GtkWidget *vbox; + ret = gtk_vbox_new(FALSE, 5); + gtk_container_set_border_width (GTK_CONTAINER (ret), 6); + + frame = gtk_frame_new ("Buttons"); + gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add (GTK_CONTAINER (frame), vbox); + gaim_button(_("Hide IM/Info/Chat buttons"), &blist_options_new, OPT_BLIST_NO_BUTTONS, vbox); + gaim_button(_("Show pictures on buttons"), &blist_options_new, OPT_BLIST_SHOW_BUTTON_XPM, vbox); + gtk_widget_show (vbox); + + + frame = gtk_frame_new ("Buddy List Window"); + gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add (GTK_CONTAINER (frame), vbox); +#ifdef USE_APPLET + gaim_button(_("Automatically show buddy list on sign on"), &blist_options_new, + OPT_BLIST_APP_BUDDY_SHOW, vbox); + gaim_button(_("Display Buddy List near applet"), &blist_options_new, OPT_BLIST_NEAR_APPLET, vbox); + +#endif + gaim_button(_("Save Window Size/Position"), &blist_options_new, OPT_BLIST_SAVED_WINDOWS, vbox); + gaim_button(_("Raise Window on Events"), &blist_options_new, OPT_BLIST_POPUP, vbox); + gtk_widget_show(vbox); + + + frame = gtk_frame_new ("Group Display"); + gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add (GTK_CONTAINER (frame), vbox); + gaim_button(_("Hide groups with no online buddies"), &blist_options_new, OPT_BLIST_NO_MT_GRP, vbox); + gaim_button(_("Show numbers in groups"), &blist_options_new, OPT_BLIST_SHOW_GRPNUM, vbox); + gtk_widget_show(vbox); + + + frame = gtk_frame_new ("Buddy Display"); + gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add (GTK_CONTAINER (frame), vbox); + gaim_button(_("Show buddy type icons"), &blist_options_new, OPT_BLIST_SHOW_PIXMAPS, vbox); + gaim_button(_("Show warning levels"), &blist_options_new, OPT_BLIST_SHOW_WARN, vbox); + gaim_button(_("Show idle times"), &blist_options_new, OPT_BLIST_SHOW_IDLETIME, vbox); + gaim_button(_("Grey idle buddies"), &blist_options_new, OPT_BLIST_GREY_IDLERS, vbox); + gtk_widget_show(vbox); + + + + gtk_widget_show (vbox); + + gtk_widget_show(ret); + return ret; +} + +GtkWidget *im_page() { + GtkWidget *ret; + GtkWidget *frame; + GtkWidget *vbox; + GtkWidget *typingbutton; + + ret = gtk_vbox_new(FALSE, 5); + gtk_container_set_border_width (GTK_CONTAINER (ret), 6); + + frame = gtk_frame_new ("Window"); + gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add (GTK_CONTAINER (frame), vbox); + gaim_dropdown(vbox, "Show buttons as:", &im_options_new, OPT_IM_BUTTON_TEXT | OPT_IM_BUTTON_XPM, + "Pictures", OPT_IM_BUTTON_XPM, + "Text", OPT_IM_BUTTON_TEXT, + "Pictures and text", OPT_IM_BUTTON_XPM | OPT_IM_BUTTON_TEXT, NULL); + gaim_labeled_spin_button(vbox, _("New window width:"), &conv_size_new.width, 25, 9999); + gaim_labeled_spin_button(vbox, _("New window height:"), &conv_size_new.height, 25, 9999); + gaim_labeled_spin_button(vbox, _("Entry widget height:"), &conv_size_new.entry_height, 25, 9999); + gaim_button(_("Raise windows on events"), &im_options_new, OPT_IM_POPUP, vbox); + gaim_button(_("Hide window on send"), &im_options_new, OPT_IM_POPDOWN, vbox); + gtk_widget_show (vbox); + + + frame = gtk_frame_new ("Buddy Icons"); + gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add (GTK_CONTAINER (frame), vbox); + gaim_button(_("Hide Buddy Icons"), &im_options_new, OPT_IM_HIDE_ICONS, vbox); + gaim_button(_("Disable Buddy Icon Animation"), &im_options_new, OPT_IM_NO_ANIMATION, vbox); gtk_widget_show(vbox); - label = gtk_label_new(_("All options take effect immediately unless otherwise noted.")); - gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 5); - gtk_widget_show(label); + + frame = gtk_frame_new ("Display"); + gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add (GTK_CONTAINER (frame), vbox); + gaim_button(_("Show logins in window"), &im_options_new, OPT_IM_LOGON, vbox); + gtk_widget_show(vbox); + + + frame = gtk_frame_new ("Typing Notification"); + gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add (GTK_CONTAINER (frame), vbox); + typingbutton = gaim_button(_("Notify buddies that you are typing to them"), &misc_options_new, + OPT_MISC_STEALTH_TYPING, vbox); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(typingbutton), !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(typingbutton))); + misc_options ^= OPT_MISC_STEALTH_TYPING; + gtk_widget_show(vbox); + + + + gtk_widget_show (vbox); + + gtk_widget_show(ret); + return ret; +} + +GtkWidget *chat_page() { + GtkWidget *ret; + GtkWidget *frame; + GtkWidget *vbox; + ret = gtk_vbox_new(FALSE, 5); + gtk_container_set_border_width (GTK_CONTAINER (ret), 6); + + frame = gtk_frame_new ("Window"); + gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add (GTK_CONTAINER (frame), vbox); + gaim_dropdown(vbox, "Show buttons as:", &chat_options_new, OPT_CHAT_BUTTON_TEXT | OPT_CHAT_BUTTON_XPM, + "Pictures", OPT_CHAT_BUTTON_XPM, + "Text", OPT_CHAT_BUTTON_TEXT, + "Pictures and Text", OPT_CHAT_BUTTON_XPM | OPT_CHAT_BUTTON_TEXT, NULL); + gaim_labeled_spin_button(vbox, _("New window width:"), &buddy_chat_size_new.width, 25, 9999); + gaim_labeled_spin_button(vbox, _("New window height:"), &buddy_chat_size_new.height, 25, 9999); + gaim_labeled_spin_button(vbox, _("Entry widget height:"), &buddy_chat_size_new.entry_height, 25, 9999); + gaim_button(_("Raise windows on events"), &chat_options, OPT_CHAT_POPUP, vbox); + gtk_widget_show (vbox); + + + frame = gtk_frame_new ("Tab Completion"); + gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add (GTK_CONTAINER (frame), vbox); + gaim_button(_("Tab-Complete Nicks"), &chat_options_new, OPT_CHAT_TAB_COMPLETE, vbox); + gaim_button(_("Old-Style Tab Completion"), &chat_options_new, OPT_CHAT_OLD_STYLE_TAB, vbox); + gtk_widget_show(vbox); + + + frame = gtk_frame_new ("Display"); + gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add (GTK_CONTAINER (frame), vbox); + gaim_button(_("Show people joining/leaving in window"), &chat_options_new, OPT_CHAT_LOGON, vbox); + gaim_button(_("Colorize screennames"), &chat_options_new, OPT_CHAT_COLORIZE, vbox); + gtk_widget_show(vbox); + + gtk_widget_show(ret); + return ret; +} - label = gtk_label_new(_("Not all protocols can use these proxy options. Please see the " - "README file for details.")); - gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 5); - gtk_widget_show(label); +GtkWidget *tab_page() { + GtkWidget *ret; + GtkWidget *frame; + GtkWidget *vbox; + ret = gtk_vbox_new(FALSE, 5); + gtk_container_set_border_width (GTK_CONTAINER (ret), 6); + + frame = gtk_frame_new ("IM Tabs"); + gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add (GTK_CONTAINER (frame), vbox); + + gaim_dropdown(vbox, "Tab Placement:", &im_options_new, OPT_IM_SIDE_TAB | OPT_IM_BR_TAB, + "Top", 0, + "Bottom", OPT_IM_BR_TAB, + "Left", OPT_IM_SIDE_TAB, + "Right", OPT_IM_BR_TAB | OPT_IM_SIDE_TAB, NULL); + gaim_button(_("Show all Instant Messages in one tabbed\nwindow"), &im_options_new, OPT_IM_ONE_WINDOW, vbox); + gaim_button(_("Show aliases in tabs/titles"), &im_options_new, OPT_IM_ALIAS_TAB, vbox); + gtk_widget_show (vbox); + + + frame = gtk_frame_new ("Chat Tabs"); + gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add (GTK_CONTAINER (frame), vbox); + + gaim_dropdown(vbox, "Tab Placement:", &chat_options_new, OPT_CHAT_SIDE_TAB | OPT_CHAT_BR_TAB, + "Top", 0, + "Bottom", OPT_CHAT_BR_TAB, + "Left", OPT_CHAT_SIDE_TAB, + "Right", OPT_CHAT_SIDE_TAB | OPT_CHAT_BR_TAB, NULL); + gaim_button(_("Show all chats in one tabbed window"), &chat_options_new, OPT_CHAT_ONE_WINDOW, + vbox); + gtk_widget_show(vbox); - frame = gtk_frame_new(_("Proxy Type")); - gtk_container_set_border_width(GTK_CONTAINER(frame), 5); - gtk_widget_show(frame); - gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 5); + frame = gtk_frame_new ("Combined Tabs"); + gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add (GTK_CONTAINER (frame), vbox); + gtk_widget_show(vbox); + gaim_button(_("Show IMs and chats in same tabbed\nwindow."), &convo_options_new, OPT_CONVO_COMBINE, vbox); + + frame = gtk_frame_new ("Buddy List Tabs"); + gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add (GTK_CONTAINER (frame), vbox); + + gaim_dropdown(vbox, "Tab Placement:", &blist_options_new, OPT_BLIST_BOTTOM_TAB, + "Top", 0, + "Bottom", OPT_BLIST_BOTTOM_TAB, NULL); + gtk_widget_show(vbox); + + gtk_widget_show(ret); + return ret; +} + +GtkWidget *proxy_page() { + GtkWidget *ret; + GtkWidget *frame; + GtkWidget *vbox; + GtkWidget *entry; + GtkWidget *label; + GtkWidget *hbox; + GtkWidget *table; + + ret = gtk_vbox_new(FALSE, 5); + gtk_container_set_border_width (GTK_CONTAINER (ret), 6); + + frame = gtk_frame_new ("Proxy Type"); + gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add (GTK_CONTAINER (frame), vbox); + gaim_dropdown(vbox, "Proxy Type:", &proxytype_new, -1, + "No Proxy", PROXY_NONE, + "SOCKS 4", PROXY_SOCKS4, + "SOCKS 5", PROXY_SOCKS5, + "HTTP", PROXY_HTTP, NULL); + gtk_widget_show (vbox); table = gtk_table_new(2, 2, FALSE); gtk_container_set_border_width(GTK_CONTAINER(table), 5); gtk_table_set_col_spacings(GTK_TABLE(table), 5); gtk_table_set_row_spacings(GTK_TABLE(table), 5); gtk_widget_show(table); - gtk_container_add(GTK_CONTAINER(frame), table); frame = gtk_frame_new(_("Proxy Server")); prefs_proxy_frame = frame; - first = gtk_radio_button_new_with_label(NULL, _("No Proxy")); - gtk_table_attach(GTK_TABLE(table), first, 0, 1, 0, 1, GTK_FILL | GTK_EXPAND, 0, 0, 0); - - gtk_signal_connect(GTK_OBJECT(first), "clicked", - GTK_SIGNAL_FUNC(proxy_print_optionrad), (void *)PROXY_NONE); - gtk_widget_show(first); - - if (proxytype == PROXY_NONE) - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(first), TRUE); - - opt = - gtk_radio_button_new_with_label(gtk_radio_button_group(GTK_RADIO_BUTTON(first)), - _("SOCKS 4")); - gtk_table_attach(GTK_TABLE(table), opt, 1, 2, 0, 1, GTK_FILL | GTK_EXPAND, 0, 0, 0); - gtk_signal_connect(GTK_OBJECT(opt), "clicked", - GTK_SIGNAL_FUNC(proxy_print_optionrad), (void *)PROXY_SOCKS4); - gtk_widget_show(opt); - if (proxytype == PROXY_SOCKS4) - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(opt), TRUE); - - opt = - gtk_radio_button_new_with_label(gtk_radio_button_group(GTK_RADIO_BUTTON(first)), - _("SOCKS 5")); - gtk_table_attach(GTK_TABLE(table), opt, 0, 1, 1, 2, GTK_FILL | GTK_EXPAND, 0, 0, 0); - gtk_signal_connect(GTK_OBJECT(opt), "clicked", - GTK_SIGNAL_FUNC(proxy_print_optionrad), (void *)PROXY_SOCKS5); - gtk_widget_show(opt); - if (proxytype == PROXY_SOCKS5) - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(opt), TRUE); - - opt = - gtk_radio_button_new_with_label(gtk_radio_button_group(GTK_RADIO_BUTTON(first)), _("HTTP")); - gtk_table_attach(GTK_TABLE(table), opt, 1, 2, 1, 2, GTK_FILL | GTK_EXPAND, 0, 0, 0); - gtk_signal_connect(GTK_OBJECT(opt), "clicked", - GTK_SIGNAL_FUNC(proxy_print_optionrad), (void *)PROXY_HTTP); - gtk_widget_show(opt); - if (proxytype == PROXY_HTTP) - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(opt), TRUE); - - - gtk_container_set_border_width(GTK_CONTAINER(frame), 5); gtk_widget_show(frame); - gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 5); + gtk_box_pack_start(GTK_BOX(ret), frame, FALSE, FALSE, 5); if (proxytype == PROXY_NONE) gtk_widget_set_sensitive(GTK_WIDGET(frame), FALSE); @@ -466,7 +770,7 @@ gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1, GTK_FILL, 0, 0, 0); entry = gtk_entry_new(); - gtk_table_attach(GTK_TABLE(table), entry, 1, 2, 0, 1, GTK_FILL | GTK_EXPAND, 0, 0, 0); + gtk_table_attach(GTK_TABLE(table), entry, 1, 2, 0, 1, GTK_FILL, 0, 0, 0); gtk_signal_connect(GTK_OBJECT(entry), "changed", GTK_SIGNAL_FUNC(proxy_print_option), (void *)PROXYHOST); gtk_entry_set_text(GTK_ENTRY(entry), proxyhost); @@ -482,7 +786,7 @@ gtk_widget_show(label); entry = gtk_entry_new(); - gtk_table_attach(GTK_TABLE(table), entry, 1, 2, 1, 2, GTK_FILL | GTK_EXPAND, 0, 0, 0); + gtk_table_attach(GTK_TABLE(table), entry, 1, 2, 1, 2, GTK_FILL, 0, 0, 0); gtk_signal_connect(GTK_OBJECT(entry), "changed", GTK_SIGNAL_FUNC(proxy_print_option), (void *)PROXYPORT); @@ -499,7 +803,7 @@ gtk_widget_show(label); entry = gtk_entry_new(); - gtk_table_attach(GTK_TABLE(table), entry, 1, 2, 2, 3, GTK_FILL | GTK_EXPAND, 0, 0, 0); + gtk_table_attach(GTK_TABLE(table), entry, 1, 2, 2, 3, GTK_FILL, 0, 0, 0); gtk_signal_connect(GTK_OBJECT(entry), "changed", GTK_SIGNAL_FUNC(proxy_print_option), (void *)PROXYUSER); gtk_entry_set_text(GTK_ENTRY(entry), proxyuser); @@ -515,926 +819,326 @@ gtk_widget_show(label); entry = gtk_entry_new(); - gtk_table_attach(GTK_TABLE(table), entry, 1, 2, 3, 4, GTK_FILL | GTK_EXPAND, 0, 0, 0); + gtk_table_attach(GTK_TABLE(table), entry, 1, 2, 3, 4, GTK_FILL , 0, 0, 0); gtk_entry_set_visibility(GTK_ENTRY(entry), FALSE); gtk_signal_connect(GTK_OBJECT(entry), "changed", GTK_SIGNAL_FUNC(proxy_print_option), (void *)PROXYPASS); gtk_entry_set_text(GTK_ENTRY(entry), proxypass); gtk_widget_show(entry); - - gtk_widget_show(prefdialog); -} - -static void buddy_page() -{ - GtkWidget *parent; - GtkWidget *box; - GtkWidget *label; - GtkWidget *frame; - GtkWidget *hbox; - GtkWidget *vbox; - GtkWidget *sep; - GtkWidget *opt; - GtkWidget *button; - GtkWidget *button2; - - parent = prefdialog->parent; - gtk_widget_destroy(prefdialog); - - prefdialog = gtk_frame_new(_("Buddy List Options")); - gtk_container_add(GTK_CONTAINER(parent), prefdialog); - - box = gtk_vbox_new(FALSE, 5); - gtk_container_set_border_width(GTK_CONTAINER(box), 5); - gtk_container_add(GTK_CONTAINER(prefdialog), box); - gtk_widget_show(box); - - label = gtk_label_new(_("All options take effect immediately unless otherwise noted.")); - gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 5); - gtk_widget_show(label); - - frame = gtk_frame_new(_("Buddy List Window")); - gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 5); - gtk_widget_show(frame); - - hbox = gtk_hbox_new(FALSE, 5); - gtk_container_add(GTK_CONTAINER(frame), hbox); - gtk_widget_show(hbox); - - /* "Place blist tabs */ - vbox = gtk_vbox_new(TRUE, 5); - gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 5); - gtk_widget_show(vbox); - - label = gtk_label_new(_("Tab Placement:")); - gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 5); - gtk_widget_show(label); - opt = blist_tab_radio(_("Top"), ~(OPT_BLIST_BOTTOM_TAB), vbox, NULL); - opt = blist_tab_radio(_("Bottom"), OPT_BLIST_BOTTOM_TAB, vbox, opt); - - sep = gtk_vseparator_new(); - gtk_box_pack_start(GTK_BOX(hbox), sep, FALSE, FALSE, 5); - gtk_widget_show(sep); - - /* End of blist tab options */ - - vbox = gtk_vbox_new(TRUE, 5); - gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 5); - gtk_widget_show(vbox); - - button = gaim_button(_("Hide IM/Info/Chat buttons"), &blist_options, OPT_BLIST_NO_BUTTONS, vbox); -#ifdef USE_APPLET - gaim_button(_("Automatically show buddy list on sign on"), &blist_options, - OPT_BLIST_APP_BUDDY_SHOW, vbox); - gaim_button(_("Display Buddy List near applet"), &blist_options, OPT_BLIST_NEAR_APPLET, vbox); - -#endif - gaim_button(_("Save Window Size/Position"), &blist_options, OPT_BLIST_SAVED_WINDOWS, vbox); - - button2 = - gaim_button(_("Show pictures on buttons"), &blist_options, OPT_BLIST_SHOW_BUTTON_XPM, vbox); - if (blist_options & OPT_BLIST_NO_BUTTONS) - gtk_widget_set_sensitive(button2, FALSE); - gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(toggle_sensitive), button2); - gaim_button(_("Raise Buddy List on Signons and Signoffs"), &blist_options, OPT_BLIST_POPUP, vbox); - - frame = gtk_frame_new(_("Group Displays")); - gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 5); - gtk_widget_show(frame); - - hbox = gtk_hbox_new(TRUE, 5); - gtk_container_add(GTK_CONTAINER(frame), hbox); - gtk_widget_show(hbox); - - vbox = gtk_vbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 5); - gtk_widget_show(vbox); - - gaim_button(_("Hide groups with no online buddies"), &blist_options, OPT_BLIST_NO_MT_GRP, vbox); - - vbox = gtk_vbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 5); - gtk_widget_show(vbox); - - gaim_button(_("Show numbers in groups"), &blist_options, OPT_BLIST_SHOW_GRPNUM, vbox); - - frame = gtk_frame_new(_("Buddy Displays")); - gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 5); - gtk_widget_show(frame); - - hbox = gtk_hbox_new(TRUE, 5); - gtk_container_add(GTK_CONTAINER(frame), hbox); - gtk_widget_show(hbox); - - vbox = gtk_vbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 5); - gtk_widget_show(vbox); - - gaim_button(_("Show buddy type icons"), &blist_options, OPT_BLIST_SHOW_PIXMAPS, vbox); - gaim_button(_("Show warning levels"), &blist_options, OPT_BLIST_SHOW_WARN, vbox); - - vbox = gtk_vbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 5); - gtk_widget_show(vbox); - - gaim_button(_("Show idle times"), &blist_options, OPT_BLIST_SHOW_IDLETIME, vbox); - gaim_button(_("Grey idle buddies"), &blist_options, OPT_BLIST_GREY_IDLERS, vbox); - - gtk_widget_show(prefdialog); -} - -static void convo_page() -{ - GtkWidget *parent; - GtkWidget *box; - GtkWidget *label; - GtkWidget *frame; - GtkWidget *hbox; - GtkWidget *vbox; - - parent = prefdialog->parent; - gtk_widget_destroy(prefdialog); - - prefdialog = gtk_frame_new(_("Conversation Options")); - gtk_container_add(GTK_CONTAINER(parent), prefdialog); - - box = gtk_vbox_new(FALSE, 5); - gtk_container_set_border_width(GTK_CONTAINER(box), 5); - gtk_container_add(GTK_CONTAINER(prefdialog), box); - gtk_widget_show(box); - - label = gtk_label_new(_("All options take effect immediately unless otherwise noted.")); - gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 5); - gtk_widget_show(label); - - frame = gtk_frame_new(_("Keyboard Options")); - gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 5); - gtk_widget_show(frame); - - hbox = gtk_hbox_new(TRUE, 5); - gtk_container_add(GTK_CONTAINER(frame), hbox); - gtk_widget_show(hbox); - - vbox = gtk_vbox_new(TRUE, 5); - gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 5); - gtk_widget_show(vbox); - - gaim_button(_("Enter sends message"), &convo_options, OPT_CONVO_ENTER_SENDS, vbox); - gaim_button(_("Control-Enter sends message"), &convo_options, OPT_CONVO_CTL_ENTER, vbox); - gaim_button(_("Escape 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 = gtk_vbox_new(TRUE, 5); - gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 5); - gtk_widget_show(vbox); - - 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); - gaim_button(_("F2 toggles timestamp display"), &convo_options, OPT_CONVO_F2_TOGGLES, vbox); - - frame = gtk_frame_new(_("Display and General Options")); - gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 5); - gtk_widget_show(frame); - - hbox = gtk_hbox_new(TRUE, 5); - gtk_container_add(GTK_CONTAINER(frame), hbox); - gtk_widget_show(hbox); - - vbox = gtk_vbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 5); - gtk_widget_show(vbox); - - 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); - gaim_button(_("Highlight misspelled words"), &convo_options, OPT_CONVO_CHECK_SPELLING, vbox); - 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 = gtk_vbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 5); - gtk_widget_show(vbox); - - gaim_button(_("Ignore colors"), &convo_options, OPT_CONVO_IGNORE_COLOUR, vbox); - gaim_button(_("Ignore font faces"), &convo_options, OPT_CONVO_IGNORE_FONTS, vbox); - gaim_button(_("Ignore font sizes"), &convo_options, OPT_CONVO_IGNORE_SIZES, vbox); - gaim_button(_("Ignore TiK Automated Messages"), &away_options, OPT_AWAY_TIK_HACK, vbox); - gaim_button(_("Ignore new conversations when away"), &away_options, OPT_AWAY_DISCARD, vbox); - - gtk_widget_show(prefdialog); + gtk_widget_show(ret); + return ret; } -static void set_buttons_opt(GtkWidget *w, int data) -{ - int mask; - if (data & 0x1) { /* set the first bit if we're affecting chat buttons */ - mask = (OPT_CHAT_BUTTON_TEXT | OPT_CHAT_BUTTON_XPM); - chat_options &= ~(mask); - chat_options |= (data & mask); - update_chat_button_pix(); - } else { - mask = (OPT_IM_BUTTON_TEXT | OPT_IM_BUTTON_XPM); - im_options &= ~(mask); - im_options |= (data & mask); - update_im_button_pix(); - } +GtkWidget *browser_page() { + GtkWidget *ret; + GtkWidget *frame; + GtkWidget *vbox, *hbox; + GtkWidget *label; + ret = gtk_vbox_new(FALSE, 5); + gtk_container_set_border_width (GTK_CONTAINER (ret), 6); - save_prefs(); -} + frame = gtk_frame_new ("Browser Selection"); + gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add (GTK_CONTAINER (frame), vbox); + gaim_dropdown(vbox, "Broswer", &web_browser_new, -1, + "Netscape", BROWSER_NETSCAPE, + "Konqueror", BROWSER_KONQ, + "Mozilla", BROWSER_MOZILLA, + "Manual", BROWSER_MANUAL, +#ifdef USE_GNOME + "GNOME URL Handler", BROWSER_GNOME, +#endif /* USE_GNOME */ + "Galeon", BROWSER_GALEON, + "Opera", BROWSER_OPERA, NULL); -/* i like everclear */ -static GtkWidget *am_radio(char *label, int which, GtkWidget *box, GtkWidget *set) -{ - GtkWidget *opt; + hbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); + label = gtk_label_new("Manual: "); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + gtk_widget_show(label); + browser_entry = gtk_entry_new(); + if (web_browser_new != BROWSER_MANUAL) + gtk_widget_set_sensitive(browser_entry, FALSE); + gtk_box_pack_start (GTK_BOX (hbox), browser_entry, FALSE, FALSE, 0); + gtk_widget_show(browser_entry); + gtk_widget_show(hbox); + gtk_widget_show (vbox); + - if (!set) - opt = gtk_radio_button_new_with_label(NULL, label); - else - opt = - gtk_radio_button_new_with_label(gtk_radio_button_group(GTK_RADIO_BUTTON(set)), - label); - gtk_box_pack_start(GTK_BOX(box), opt, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(opt), "clicked", GTK_SIGNAL_FUNC(set_buttons_opt), (void *)which); - gtk_widget_show(opt); - if (which & 1) { - if (which == (OPT_CHAT_BUTTON_TEXT | 1)) { - if ((chat_options & OPT_CHAT_BUTTON_TEXT) && - !(chat_options & OPT_CHAT_BUTTON_XPM)) - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(opt), TRUE); - } else if (which == (OPT_CHAT_BUTTON_XPM | 1)) { - if (!(chat_options & OPT_CHAT_BUTTON_TEXT) && - (chat_options & OPT_CHAT_BUTTON_XPM)) - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(opt), TRUE); - } else { - if (((chat_options & OPT_CHAT_BUTTON_TEXT) && - (chat_options & OPT_CHAT_BUTTON_XPM)) || - (!(chat_options & OPT_CHAT_BUTTON_TEXT) && - !(chat_options & OPT_CHAT_BUTTON_XPM))) - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(opt), TRUE); - } - } else { - if (which == OPT_IM_BUTTON_TEXT) { - if ((im_options & OPT_IM_BUTTON_TEXT) && !(im_options & OPT_IM_BUTTON_XPM)) - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(opt), TRUE); - } else if (which == OPT_IM_BUTTON_XPM) { - if (!(im_options & OPT_IM_BUTTON_TEXT) && (im_options & OPT_IM_BUTTON_XPM)) - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(opt), TRUE); - } else { - if (((im_options & OPT_IM_BUTTON_TEXT) && - (im_options & OPT_IM_BUTTON_XPM)) || - (!(im_options & OPT_IM_BUTTON_TEXT) && !(im_options & OPT_IM_BUTTON_XPM))) - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(opt), TRUE); - } - } + frame = gtk_frame_new ("Browser Options"); + gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add (GTK_CONTAINER (frame), vbox); + gaim_button(_("Open new window by default"), &misc_options_new, OPT_MISC_BROWSER_POPUP, vbox); + gtk_widget_show(vbox); + + gtk_widget_show(ret); + return ret; +} + +GtkWidget *logging_page() { + GtkWidget *ret; + GtkWidget *frame; + GtkWidget *vbox; + ret = gtk_vbox_new(FALSE, 5); + gtk_container_set_border_width (GTK_CONTAINER (ret), 6); - return opt; -} + frame = gtk_frame_new ("Message Logs"); + gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add (GTK_CONTAINER (frame), vbox); + gaim_button(_("Log all conversations"), &logging_options_new, OPT_LOG_ALL, vbox); + gaim_button(_("Strip HTML from logs"), &logging_options_new, OPT_LOG_STRIP_HTML, vbox); + gtk_widget_show (vbox); -static void set_tab_opt(GtkWidget *w, int data) -{ - int mask; - if (convo_options & OPT_CONVO_COMBINE) { - /* through an amazing coincidence (this wasn't planned), we're able to do this, - * since the two sets of options end up having the same value. isn't that great. */ - mask = (OPT_CHAT_SIDE_TAB | OPT_CHAT_BR_TAB); - chat_options &= ~(mask); - chat_options |= (data & mask); - - mask = (OPT_IM_SIDE_TAB | OPT_IM_BR_TAB); - im_options &= ~(mask); - im_options |= (data & mask); - update_im_tabs(); - } else { - if (data & 0x1) { /* set the first bit if we're affecting chat buttons */ - mask = (OPT_CHAT_SIDE_TAB | OPT_CHAT_BR_TAB); - chat_options &= ~(mask); - chat_options |= (data & mask); - update_chat_tabs(); - } else { - mask = (OPT_IM_SIDE_TAB | OPT_IM_BR_TAB); - im_options &= ~(mask); - im_options |= (data & mask); - update_im_tabs(); - } - } + frame = gtk_frame_new ("System Logs"); + gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add (GTK_CONTAINER (frame), vbox); + gaim_button(_("Log when buddies sign on/sign off"), &logging_options_new, OPT_LOG_BUDDY_SIGNON, + vbox); + gaim_button(_("Log when buddies become idle/un-idle"), &logging_options_new, OPT_LOG_BUDDY_IDLE, + vbox); + gaim_button(_("Log when buddies go away/come back"), &logging_options_new, OPT_LOG_BUDDY_AWAY, vbox); + gaim_button(_("Log your own signons/idleness/awayness"), &logging_options_new, OPT_LOG_MY_SIGNON, + vbox); + gaim_button(_("Individual log file for each buddy's signons"), &logging_options_new, + OPT_LOG_INDIVIDUAL, vbox); + gtk_widget_show(vbox); - save_prefs(); + gtk_widget_show(ret); + return ret; } -static GtkWidget *tab_radio(char *label, int which, GtkWidget *box, GtkWidget *set) +static GtkWidget *sndcmd = NULL; +/* static void set_sound_driver(GtkWidget *w, int option) { - GtkWidget *opt; - - if (!set) - opt = gtk_radio_button_new_with_label(NULL, label); + if (option == OPT_SOUND_CMD) + gtk_widget_set_sensitive(sndcmd, TRUE); else - opt = - gtk_radio_button_new_with_label(gtk_radio_button_group(GTK_RADIO_BUTTON(set)), - label); - gtk_box_pack_start(GTK_BOX(box), opt, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(opt), "clicked", GTK_SIGNAL_FUNC(set_tab_opt), (void *)which); - gtk_widget_show(opt); - if (which & 1) { - if ((chat_options & (OPT_CHAT_SIDE_TAB | OPT_CHAT_BR_TAB)) == (which ^ 1)) - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(opt), TRUE); - if (!(chat_options & OPT_CHAT_ONE_WINDOW)) - gtk_widget_set_sensitive(opt, FALSE); - } else { - if ((im_options & (OPT_IM_SIDE_TAB | OPT_IM_BR_TAB)) == which) - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(opt), TRUE); - if (!(im_options & OPT_IM_ONE_WINDOW)) - gtk_widget_set_sensitive(opt, FALSE); - } + gtk_widget_set_sensitive(sndcmd, FALSE); - return opt; -} + sound_options &= ~(OPT_SOUND_NORMAL | OPT_SOUND_BEEP | + OPT_SOUND_NAS | OPT_SOUND_ARTSC | + OPT_SOUND_ESD | OPT_SOUND_CMD); + sound_options |= option; + save_prefs(); + } */ -static void update_spin_value(GtkWidget *w, GtkWidget *spin) +static gint sound_cmd_yeah(GtkEntry *entry, GdkEvent *event, gpointer d) { - int *value = gtk_object_get_user_data(GTK_OBJECT(spin)); - *value = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin)); + g_snprintf(sound_cmd_new, sizeof(sound_cmd_new), "%s", gtk_entry_get_text(GTK_ENTRY(sndcmd))); + return TRUE; } -static void gaim_labeled_spin_button(GtkWidget *box, const gchar *title, int *val, int min, int max) -{ - GtkWidget *hbox; - GtkWidget *label; - GtkWidget *spin; - GtkObject *adjust; - - hbox = gtk_hbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 5); - gtk_widget_show(hbox); - - label = gtk_label_new(title); - gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); - gtk_widget_show(label); - - adjust = gtk_adjustment_new(*val, min, max, 1, 1, 1); - spin = gtk_spin_button_new(GTK_ADJUSTMENT(adjust), 1, 0); - gtk_object_set_user_data(GTK_OBJECT(spin), val); - gtk_widget_set_usize(spin, 50, -1); - gtk_box_pack_start(GTK_BOX(hbox), spin, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(adjust), "value-changed", - GTK_SIGNAL_FUNC(update_spin_value), GTK_WIDGET(spin)); - gtk_widget_show(spin); -} - -static gboolean current_is_im = FALSE; - -static void not_im() -{ - current_is_im = FALSE; -} - -static void im_page() -{ - GtkWidget *parent; - GtkWidget *box; +GtkWidget *sound_page() { + GtkWidget *ret; + GtkWidget *frame; GtkWidget *label; - GtkWidget *frame; - GtkWidget *vbox; - GtkWidget *hbox; - GtkWidget *vbox2; - GtkWidget *opt; - GtkWidget *sep; - GtkWidget *button; - GtkWidget *hbox2; - GtkWidget *vbox3; + GtkWidget *vbox, *hbox; + + ret = gtk_vbox_new(FALSE, 5); + gtk_container_set_border_width (GTK_CONTAINER (ret), 6); - parent = prefdialog->parent; - gtk_widget_destroy(prefdialog); + frame = gtk_frame_new ("Sound Options"); + gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add (GTK_CONTAINER (frame), vbox); + 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); + gtk_widget_show (vbox); - current_is_im = TRUE; - prefdialog = gtk_frame_new(_("IM Options")); - gtk_container_add(GTK_CONTAINER(parent), prefdialog); - gtk_signal_connect(GTK_OBJECT(prefdialog), "destroy", GTK_SIGNAL_FUNC(not_im), NULL); - - box = gtk_vbox_new(FALSE, 5); - gtk_container_set_border_width(GTK_CONTAINER(box), 5); - gtk_container_add(GTK_CONTAINER(prefdialog), box); - gtk_widget_show(box); + frame = gtk_frame_new ("Sound Method"); + gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add (GTK_CONTAINER (frame), vbox); - label = gtk_label_new(_("All options take effect immediately unless otherwise noted.")); - gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 5); - gtk_widget_show(label); + gaim_dropdown(vbox, "Method", &sound_options_new, OPT_SOUND_BEEP | + OPT_SOUND_ESD | OPT_SOUND_ARTSC | OPT_SOUND_NAS | OPT_SOUND_NORMAL | + OPT_SOUND_CMD, + "Console Beep", OPT_SOUND_BEEP, +#ifdef ESD_SOUND + "ESD", OPT_SOUND_ESD, +#endif /* ESD_SOUND */ +#ifdef ARTSC_SOUND + "ArtsC", OPT_SOUND_ARTSC, +#endif /* ARTSC_SOUND */ +#ifdef NAS_SOUND + "NAS", OPT_SOUND_NAS, +#endif /* NAS_SOUND */ + "Internal", OPT_SOUND_NORMAL, + "Command", OPT_SOUND_CMD, NULL); - frame = gtk_frame_new(_("IM Window")); - gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 5); - gtk_widget_show(frame); - - vbox = gtk_vbox_new(FALSE, 5); - gtk_container_add(GTK_CONTAINER(frame), vbox); - gtk_widget_show(vbox); - + hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5); gtk_widget_show(hbox); - - vbox2 = gtk_vbox_new(TRUE, 5); - gtk_box_pack_start(GTK_BOX(hbox), vbox2, FALSE, FALSE, 5); - gtk_widget_show(vbox2); - - label = gtk_label_new(_("Show buttons as: ")); - gtk_box_pack_start(GTK_BOX(vbox2), label, FALSE, FALSE, 5); + label = gtk_label_new("Sound Method"); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); + gtk_widget_show(label); + + hbox = gtk_hbox_new(FALSE, 5); + gtk_container_add(GTK_CONTAINER(vbox), hbox); + gtk_widget_show(hbox); + label = gtk_label_new(_("Sound command\n(%s for filename)")); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); gtk_widget_show(label); - opt = am_radio(_("Pictures And Text"), OPT_IM_BUTTON_TEXT | OPT_IM_BUTTON_XPM, vbox2, NULL); - opt = am_radio(_("Pictures"), OPT_IM_BUTTON_XPM, vbox2, opt); - opt = am_radio(_("Text"), OPT_IM_BUTTON_TEXT, vbox2, opt); - - sep = gtk_vseparator_new(); - gtk_box_pack_start(GTK_BOX(hbox), sep, FALSE, FALSE, 5); - gtk_widget_show(sep); - - vbox2 = gtk_vbox_new(TRUE, 5); - gtk_box_pack_start(GTK_BOX(hbox), vbox2, TRUE, TRUE, 5); - gtk_widget_show(vbox2); + sndcmd = gtk_entry_new(); - button = - gaim_button(_("Show all conversations in one tabbed window"), &im_options, OPT_IM_ONE_WINDOW, - vbox2); - opt = gaim_button(_("Show chats in the same tabbed window"), &convo_options, OPT_CONVO_COMBINE, vbox2); - if (chat_options & OPT_CHAT_ONE_WINDOW) { - if (!(im_options & OPT_IM_ONE_WINDOW)) - gtk_widget_set_sensitive(opt, FALSE); - gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(toggle_sensitive), opt); - } else - gtk_widget_set_sensitive(opt, FALSE); - gaim_button(_("Raise windows on events"), &im_options, OPT_IM_POPUP, vbox2); - gaim_button(_("Show logins in window"), &im_options, OPT_IM_LOGON, vbox2); - gaim_button(_("Show aliases in tabs/titles/ticker"), &im_options, OPT_IM_ALIAS_TAB, vbox2); - gaim_button(_("Hide window on send"), &im_options, OPT_IM_POPDOWN, vbox2); + gtk_entry_set_editable(GTK_ENTRY(sndcmd), TRUE); + gtk_entry_set_text(GTK_ENTRY(sndcmd), sound_cmd); +#if GTK_CHECK_VERSION(1,3,0) + gtk_widget_set_size_request(sndcmd, 75, -1); +#else + gtk_widget_set_usize(sndcmd, 75, -1); +#endif + gtk_widget_set_sensitive(sndcmd, (sound_options_new & OPT_SOUND_CMD)); + gtk_box_pack_start(GTK_BOX(hbox), sndcmd, TRUE, TRUE, 5); + gtk_signal_connect(GTK_OBJECT(sndcmd), "focus_out_event", GTK_SIGNAL_FUNC(sound_cmd_yeah), NULL); + gtk_widget_show(sndcmd); - frame = gtk_frame_new(_("Window Sizes")); - gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 5); - gtk_widget_show(frame); - vbox = gtk_vbox_new(FALSE, 5); - gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_widget_show(vbox); - gaim_labeled_spin_button(vbox, _("New window width:"), &conv_size.width, 25, 9999); - gaim_labeled_spin_button(vbox, _("New window height:"), &conv_size.height, 25, 9999); - gaim_labeled_spin_button(vbox, _("Entry widget height:"), &conv_size.entry_height, 25, 9999); - - frame = gtk_frame_new(_("Tab Placement")); - gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 5); - gtk_widget_show(frame); - - hbox = gtk_hbox_new(FALSE, 5); - gtk_container_add(GTK_CONTAINER(frame), hbox); - gtk_widget_show(hbox); - - vbox = gtk_vbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 5); - gtk_widget_show(vbox); - - hbox2 = gtk_hbox_new(TRUE, 5); - gtk_box_pack_start(GTK_BOX(vbox), hbox2, TRUE, TRUE, 5); - gtk_widget_show(hbox2); - - vbox3 = gtk_vbox_new(TRUE, 5); - gtk_box_pack_start(GTK_BOX(hbox2), vbox3, TRUE, TRUE, 5); - gtk_widget_show(vbox3); - - opt = tab_radio(_("Top"), 0, vbox3, NULL); - gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(toggle_sensitive), opt); - opt = tab_radio(_("Bottom"), OPT_IM_BR_TAB, vbox3, opt); - gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(toggle_sensitive), opt); - - vbox3 = gtk_vbox_new(TRUE, 5); - gtk_box_pack_start(GTK_BOX(hbox2), vbox3, TRUE, TRUE, 5); - gtk_widget_show(vbox3); - - opt = tab_radio(_("Left"), OPT_IM_SIDE_TAB, vbox3, opt); - gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(toggle_sensitive), opt); - opt = tab_radio(_("Right"), OPT_IM_SIDE_TAB | OPT_IM_BR_TAB, vbox3, opt); - gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(toggle_sensitive), opt); - -#if USE_PIXBUF - frame = gtk_frame_new(_("Buddy Icons")); - gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 5); - gtk_widget_show(frame); - - hbox = gtk_hbox_new(FALSE, 5); - gtk_container_add(GTK_CONTAINER(frame), hbox); - gtk_widget_show(hbox); - - vbox = gtk_vbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 5); - gtk_widget_show(vbox); - - gaim_button(_("Hide Buddy Icons"), &im_options, OPT_IM_HIDE_ICONS, vbox); - - vbox = gtk_vbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 5); - gtk_widget_show(vbox); - - gaim_button(_("Disable Buddy Icon Animation"), &im_options, OPT_IM_NO_ANIMATION, vbox); -#endif - - gtk_widget_show(prefdialog); + gtk_widget_show(ret); + return ret; } -static void chat_page() -{ - GtkWidget *parent; - GtkWidget *box; - GtkWidget *label; +GtkWidget *away_page() { + GtkWidget *ret; GtkWidget *frame; GtkWidget *vbox; GtkWidget *hbox; - GtkWidget *vbox2; - GtkWidget *opt; - GtkWidget *sep; + GtkWidget *label; GtkWidget *button; - GtkWidget *hbox2; - GtkWidget *vbox3; - GtkWidget *tab; - GtkWidget *old; + GtkWidget *select; - parent = prefdialog->parent; - gtk_widget_destroy(prefdialog); - - prefdialog = gtk_frame_new(_("Chat Options")); - gtk_container_add(GTK_CONTAINER(parent), prefdialog); + ret = gtk_vbox_new(FALSE, 5); + gtk_container_set_border_width (GTK_CONTAINER (ret), 6); - box = gtk_vbox_new(FALSE, 5); - gtk_container_set_border_width(GTK_CONTAINER(box), 5); - gtk_container_add(GTK_CONTAINER(prefdialog), box); - gtk_widget_show(box); - - label = gtk_label_new(_("All options take effect immediately unless otherwise noted.")); - gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 5); - gtk_widget_show(label); - - frame = gtk_frame_new(_("Group Chat Window")); - gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 5); - gtk_widget_show(frame); - + frame = gtk_frame_new ("Away"); + gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); vbox = gtk_vbox_new(FALSE, 5); - gtk_container_add(GTK_CONTAINER(frame), vbox); - gtk_widget_show(vbox); - - hbox = gtk_hbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5); - gtk_widget_show(hbox); + gtk_container_add (GTK_CONTAINER (frame), vbox); + gaim_button(_("Sending messages removes away status"), &away_options_new, OPT_AWAY_BACK_ON_IM, vbox); + gaim_button(_("Queue new messages when away"), &away_options_new, OPT_AWAY_QUEUE, vbox); + gaim_button(_("Ignore new conversations when away"), &away_options_new, OPT_AWAY_DISCARD, vbox); + gaim_button(_("Sounds while away"), &sound_options_new, OPT_SOUND_WHEN_AWAY, vbox); + gtk_widget_show (vbox); - vbox2 = gtk_vbox_new(TRUE, 5); - gtk_box_pack_start(GTK_BOX(hbox), vbox2, FALSE, FALSE, 5); - gtk_widget_show(vbox2); - label = gtk_label_new(_("Show buttons as: ")); - gtk_box_pack_start(GTK_BOX(vbox2), label, FALSE, FALSE, 5); - gtk_widget_show(label); - - opt = - am_radio(_("Pictures And Text"), OPT_CHAT_BUTTON_TEXT | OPT_CHAT_BUTTON_XPM | 1, vbox2, - NULL); - opt = am_radio(_("Pictures"), OPT_CHAT_BUTTON_XPM | 1, vbox2, opt); - opt = am_radio(_("Text"), OPT_CHAT_BUTTON_TEXT | 1, vbox2, opt); - - sep = gtk_vseparator_new(); - gtk_box_pack_start(GTK_BOX(hbox), sep, FALSE, FALSE, 5); - gtk_widget_show(sep); + frame = gtk_frame_new ("Auto-response"); + gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add (GTK_CONTAINER (frame), vbox); - vbox2 = gtk_vbox_new(TRUE, 5); - gtk_box_pack_start(GTK_BOX(hbox), vbox2, TRUE, TRUE, 5); - gtk_widget_show(vbox2); + hbox = gtk_hbox_new(FALSE, 0); + gtk_container_add(GTK_CONTAINER(vbox), hbox); + gaim_labeled_spin_button(hbox, _("Seconds before resending:"), + &away_resend_new, 1, 24 * 60 * 60); + gtk_widget_show(hbox); + gaim_button(_("Don't send auto-response"), &away_options, OPT_AWAY_NO_AUTO_RESP, vbox); + gaim_button(_("Only send auto-response when idle"), &away_options_new, OPT_AWAY_IDLE_RESP, vbox); - button = - gaim_button(_("Show all chats in one tabbed window"), &chat_options, OPT_CHAT_ONE_WINDOW, - vbox2); - opt = gaim_button(_("Show conversations in the same tabbed window"), &convo_options, OPT_CONVO_COMBINE, vbox2); - if (im_options & OPT_IM_ONE_WINDOW) { - if (!(chat_options & OPT_CHAT_ONE_WINDOW)) - gtk_widget_set_sensitive(opt, FALSE); - gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(toggle_sensitive), opt); - } else - gtk_widget_set_sensitive(opt, FALSE); - gaim_button(_("Raise windows on events"), &chat_options, OPT_CHAT_POPUP, vbox2); - gaim_button(_("Show people joining/leaving in window"), &chat_options, OPT_CHAT_LOGON, vbox2); - - frame = gtk_frame_new(_("Window Sizes")); - gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 5); - gtk_widget_show(frame); - - vbox = gtk_vbox_new(FALSE, 5); - gtk_container_add(GTK_CONTAINER(frame), vbox); + if (away_options_new & OPT_AWAY_NO_AUTO_RESP) + gtk_widget_set_sensitive(hbox, FALSE); gtk_widget_show(vbox); - gaim_labeled_spin_button(vbox, _("New window width:"), &buddy_chat_size.width, 25, 9999); - gaim_labeled_spin_button(vbox, _("New window height:"), &buddy_chat_size.height, 25, 9999); - gaim_labeled_spin_button(vbox, _("Entry widget height:"), &buddy_chat_size.entry_height, 25, 9999); - frame = gtk_frame_new(_("Tab Placement")); - gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 5); - gtk_widget_show(frame); - - hbox = gtk_hbox_new(FALSE, 5); - gtk_container_add(GTK_CONTAINER(frame), hbox); - gtk_widget_show(hbox); - + frame = gtk_frame_new ("Idle"); + gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); vbox = gtk_vbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 5); + gtk_container_add (GTK_CONTAINER (frame), vbox); + gaim_dropdown(vbox, "Idle Time Reporting:", &away_resend_new, -1, + "None", IDLE_NONE, + "Gaim Usage", IDLE_GAIM, +#ifdef USE_SCREENSAVER + "X Usage", IDLE_SCREENSAVER, +#endif + NULL); gtk_widget_show(vbox); - - hbox2 = gtk_hbox_new(TRUE, 5); - gtk_box_pack_start(GTK_BOX(vbox), hbox2, TRUE, TRUE, 5); - gtk_widget_show(hbox2); - - vbox3 = gtk_vbox_new(TRUE, 5); - gtk_box_pack_start(GTK_BOX(hbox2), vbox3, TRUE, TRUE, 5); - gtk_widget_show(vbox3); - - opt = tab_radio(_("Top"), 1, vbox3, NULL); - gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(toggle_sensitive), opt); - opt = tab_radio(_("Bottom"), OPT_CHAT_BR_TAB | 1, vbox3, opt); - gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(toggle_sensitive), opt); - - vbox3 = gtk_vbox_new(TRUE, 5); - gtk_box_pack_start(GTK_BOX(hbox2), vbox3, TRUE, TRUE, 5); - gtk_widget_show(vbox3); - - opt = tab_radio(_("Left"), OPT_CHAT_SIDE_TAB | 1, vbox3, opt); - gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(toggle_sensitive), opt); - opt = tab_radio(_("Right"), OPT_CHAT_SIDE_TAB | OPT_CHAT_BR_TAB | 1, vbox3, opt); - gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(toggle_sensitive), opt); - - frame = gtk_frame_new(_("Tab Completion")); - gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 5); - gtk_widget_show(frame); - - hbox = gtk_hbox_new(FALSE, 5); - gtk_container_add(GTK_CONTAINER(frame), hbox); - gtk_widget_show(hbox); - + + frame = gtk_frame_new ("Auto-away"); + gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); vbox = gtk_vbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 5); - gtk_widget_show(vbox); - - tab = gaim_button(_("Tab-Complete Nicks"), &chat_options, OPT_CHAT_TAB_COMPLETE, vbox); + gtk_container_add (GTK_CONTAINER (frame), vbox); - vbox = gtk_vbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 5); - gtk_widget_show(vbox); - - old = gaim_button(_("Old-Style Tab Completion"), &chat_options, OPT_CHAT_OLD_STYLE_TAB, vbox); - if (!(chat_options & OPT_CHAT_TAB_COMPLETE)) - gtk_widget_set_sensitive(GTK_WIDGET(old), FALSE); - gtk_signal_connect(GTK_OBJECT(tab), "clicked", GTK_SIGNAL_FUNC(toggle_sensitive), old); - - gtk_widget_show(prefdialog); -} + button = gaim_button(_("Set away when idle"), &away_options_new, OPT_AWAY_AUTO, vbox); + select = gaim_labeled_spin_button(vbox, "Minutes before setting away:", &auto_away_new, 1, 24 * 60); + if (!(away_options_new & OPT_AWAY_AUTO)) + gtk_widget_set_sensitive(GTK_WIDGET(select), FALSE); + gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(toggle_sensitive), select); -static GtkWidget *show_color_pref(GtkWidget *box, gboolean fgc) -{ - /* more stuff stolen from X-Chat */ - GtkWidget *swid; - GdkColor c; - GtkStyle *style; - c.pixel = 0; - if (fgc) { - if (font_options & OPT_FONT_FGCOL) { - c.red = fgcolor.red << 8; - c.blue = fgcolor.blue << 8; - c.green = fgcolor.green << 8; - } else { - c.red = 0; - c.blue = 0; - c.green = 0; - } - } else { - if (font_options & OPT_FONT_BGCOL) { - c.red = bgcolor.red << 8; - c.blue = bgcolor.blue << 8; - c.green = bgcolor.green << 8; - } else { - c.red = 0xffff; - c.blue = 0xffff; - c.green = 0xffff; - } - } - - style = gtk_style_new(); - style->bg[0] = c; - - swid = gtk_event_box_new(); - gtk_widget_set_style(GTK_WIDGET(swid), style); - gtk_style_unref(style); - gtk_widget_set_usize(GTK_WIDGET(swid), 40, -1); - gtk_box_pack_start(GTK_BOX(box), swid, FALSE, FALSE, 5); - gtk_widget_show(swid); - return swid; + label = gtk_label_new("Away message:"); + hbox = gtk_hbox_new(FALSE, 0); + gtk_container_add(GTK_CONTAINER(vbox), hbox); + gtk_widget_show(hbox); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); + gtk_widget_show(label); + prefs_away_menu = gtk_option_menu_new(); + if (!(away_options_new & OPT_AWAY_AUTO)) + gtk_widget_set_sensitive(GTK_WIDGET(prefs_away_menu), FALSE); + gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(toggle_sensitive), prefs_away_menu); + default_away_menu_init(prefs_away_menu); + gtk_widget_show(prefs_away_menu); + gtk_box_pack_start(GTK_BOX(hbox), prefs_away_menu, FALSE, FALSE, 0); + gtk_widget_show (vbox); + + gtk_widget_show(ret); + return ret; } -GtkWidget *pref_fg_picture = NULL; -GtkWidget *pref_bg_picture = NULL; - -void update_color(GtkWidget *w, GtkWidget *pic) +#if GTK_CHECK_VERSION (1,3,0) +static void event_toggled (GtkCellRendererToggle *cell, gchar *pth, gpointer data) { - GdkColor c; - GtkStyle *style; - c.pixel = 0; - if (pic == pref_fg_picture) { - if (font_options & OPT_FONT_FGCOL) { - c.red = fgcolor.red << 8; - c.blue = fgcolor.blue << 8; - c.green = fgcolor.green << 8; - } else { - c.red = 0; - c.blue = 0; - c.green = 0; - } - } else { - if (font_options & OPT_FONT_BGCOL) { - c.red = bgcolor.red << 8; - c.blue = bgcolor.blue << 8; - c.green = bgcolor.green << 8; - } else { - c.red = 0xffff; - c.blue = 0xffff; - c.green = 0xffff; - } - } + GtkTreeModel *model = (GtkTreeModel *)data; + GtkTreeIter iter; + GtkTreePath *path = gtk_tree_path_new_from_string(pth); + gint soundnum; + + gtk_tree_model_get_iter (model, &iter, path); + gtk_tree_model_get (model, &iter, 2, &soundnum, -1); - style = gtk_style_new(); - style->bg[0] = c; - gtk_widget_set_style(pic, style); - gtk_style_unref(style); + sound_options_new ^= sounds[soundnum].opt; + gtk_list_store_set (GTK_LIST_STORE (model), &iter, 0, sound_options_new & sounds[soundnum].opt, -1); +} +#endif + +static void test_sound(GtkWidget *button, gpointer i_am_NULL) +{ + guint32 tmp_sound = sound_options; + if (!(sound_options & OPT_SOUND_WHEN_AWAY)) + sound_options ^= OPT_SOUND_WHEN_AWAY; + if (!(sound_options & sounds[sound_row_sel].opt)) + sound_options ^= sounds[sound_row_sel].opt; + play_sound(sound_row_sel); + sound_options = tmp_sound; } -static void font_page() +static void reset_sound(GtkWidget *button, gpointer i_am_also_NULL) { - GtkWidget *parent; - GtkWidget *box; - GtkWidget *label; - GtkWidget *hbox; - GtkWidget *button; - GtkWidget *select; - GtkWidget *spin; - GtkObject *adjust; - GtkWidget *frame; - GtkWidget *fbox; - GtkWidget *table; - - parent = prefdialog->parent; - gtk_widget_destroy(prefdialog); - - prefdialog = gtk_frame_new(_("Font Options")); - gtk_container_add(GTK_CONTAINER(parent), prefdialog); - - box = gtk_vbox_new(FALSE, 5); - gtk_container_set_border_width(GTK_CONTAINER(box), 5); - gtk_container_add(GTK_CONTAINER(prefdialog), box); - gtk_widget_show(box); - - label = gtk_label_new(_("All options take effect immediately unless otherwise noted.")); - gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 5); - gtk_widget_show(label); - - frame = gtk_frame_new("Font Style"); - - table = gtk_table_new(2, 2, FALSE); - gtk_container_set_border_width(GTK_CONTAINER(table), 5); - gtk_table_set_col_spacings(GTK_TABLE(table), 5); - gtk_table_set_row_spacings(GTK_TABLE(table), 5); - gtk_container_add(GTK_CONTAINER(frame), table); - - button = gtk_check_button_new_with_label(_("Bold Text")); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(button), (font_options & OPT_FONT_BOLD)); - gtk_table_attach(GTK_TABLE(table), button, 0, 1, 0, 1, GTK_FILL | GTK_EXPAND, 0, 0, 0); - gtk_signal_connect(GTK_OBJECT(button), "clicked", - GTK_SIGNAL_FUNC(set_font_option), (int *)OPT_FONT_BOLD); - - button = gtk_check_button_new_with_label(_("Italic Text")); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(button), (font_options & OPT_FONT_ITALIC)); - gtk_table_attach(GTK_TABLE(table), button, 0, 1, 1, 2, GTK_FILL | GTK_EXPAND, 0, 0, 0); - gtk_signal_connect(GTK_OBJECT(button), "clicked", - GTK_SIGNAL_FUNC(set_font_option), (int *)OPT_FONT_ITALIC); - - button = gtk_check_button_new_with_label(_("Underline Text")); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(button), (font_options & OPT_FONT_UNDERLINE)); - gtk_table_attach(GTK_TABLE(table), button, 1, 2, 0, 1, GTK_FILL | GTK_EXPAND, 0, 0, 0); - gtk_signal_connect(GTK_OBJECT(button), "clicked", - GTK_SIGNAL_FUNC(set_font_option), (int *)OPT_FONT_UNDERLINE); - - button = gtk_check_button_new_with_label(_("Strike through Text")); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(button), (font_options & OPT_FONT_STRIKE)); - gtk_table_attach(GTK_TABLE(table), button, 1, 2, 1, 2, GTK_FILL | GTK_EXPAND, 0, 0, 0); - gtk_signal_connect(GTK_OBJECT(button), "clicked", - GTK_SIGNAL_FUNC(set_font_option), (int *)OPT_FONT_STRIKE); - - - gtk_widget_show_all(table); - gtk_widget_show(frame); - - gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 5); - - /* ----------- */ - - frame = gtk_frame_new("Font Color"); - fbox = gtk_vbox_new(FALSE, 5); - - gtk_container_add(GTK_CONTAINER(frame), fbox); - gtk_container_set_border_width(GTK_CONTAINER(fbox), 5); - - gtk_widget_show(fbox); - gtk_widget_show(frame); - - gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 5); - hbox = gtk_hbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(fbox), hbox, FALSE, FALSE, 5); - gtk_widget_show(hbox); - - pref_fg_picture = show_color_pref(hbox, TRUE); - button = gaim_button(_("Text Color"), &font_options, OPT_FONT_FGCOL, hbox); - - select = picture_button(prefs, _("Select"), fgcolor_xpm); - gtk_box_pack_start(GTK_BOX(hbox), select, FALSE, FALSE, 5); - if (!(font_options & OPT_FONT_FGCOL)) - gtk_widget_set_sensitive(GTK_WIDGET(select), FALSE); - gtk_signal_connect(GTK_OBJECT(select), "clicked", GTK_SIGNAL_FUNC(show_fgcolor_dialog), NULL); - gtk_widget_show(select); - - gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(toggle_sensitive), select); - gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(update_color), - pref_fg_picture); - - hbox = gtk_hbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(fbox), hbox, FALSE, FALSE, 5); - gtk_widget_show(hbox); - - pref_bg_picture = show_color_pref(hbox, FALSE); - button = gaim_button(_("Background Color"), &font_options, OPT_FONT_BGCOL, hbox); - - select = picture_button(prefs, _("Select"), bgcolor_xpm); - gtk_box_pack_start(GTK_BOX(hbox), select, FALSE, FALSE, 5); - if (!(font_options & OPT_FONT_BGCOL)) - gtk_widget_set_sensitive(GTK_WIDGET(select), FALSE); - gtk_signal_connect(GTK_OBJECT(select), "clicked", GTK_SIGNAL_FUNC(show_bgcolor_dialog), NULL); - gtk_widget_show(select); - - gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(toggle_sensitive), select); - gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(update_color), - pref_bg_picture); - - /* ----------- */ - - frame = gtk_frame_new("Font Face"); - fbox = gtk_vbox_new(FALSE, 5); + /* This just resets a sound file back to default */ + sound_file_new[sound_row_sel] = NULL; - hbox = gtk_hbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(fbox), hbox, FALSE, FALSE, 5); - gtk_widget_show(hbox); - - button = gaim_button(_("Font Face for Text"), &font_options, OPT_FONT_FACE, hbox); - - select = picture_button(prefs, _("Select"), fontface2_xpm); - gtk_box_pack_start(GTK_BOX(hbox), select, FALSE, FALSE, 0); - if (!(font_options & OPT_FONT_FACE)) - gtk_widget_set_sensitive(GTK_WIDGET(select), FALSE); - gtk_signal_connect(GTK_OBJECT(select), "clicked", GTK_SIGNAL_FUNC(show_font_dialog), NULL); - gtk_widget_show(select); - - gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(toggle_sensitive), select); - - hbox = gtk_hbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(fbox), hbox, FALSE, FALSE, 5); - gtk_widget_show(hbox); - - button = gaim_button(_("Font Size for Text"), &font_options, OPT_FONT_SIZE, hbox); - - adjust = gtk_adjustment_new(fontsize, 1, 7, 1, 1, 1); - spin = gtk_spin_button_new(GTK_ADJUSTMENT(adjust), 1, 0); - gtk_widget_set_usize(spin, 50, -1); - gtk_object_set_user_data(GTK_OBJECT(spin), &fontsize); - if (!(font_options & OPT_FONT_SIZE)) - gtk_widget_set_sensitive(GTK_WIDGET(spin), FALSE); - gtk_box_pack_start(GTK_BOX(hbox), spin, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(toggle_sensitive), spin); - +gtk_signal_connect(GTK_OBJECT(adjust), "value-changed", GTK_SIGNAL_FUNC(update_spin_value), - GTK_WIDGET(spin)); - gtk_widget_show(spin); - - gtk_container_add(GTK_CONTAINER(frame), fbox); - gtk_container_set_border_width(GTK_CONTAINER(fbox), 5); - gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 5); - gtk_widget_show(fbox); - gtk_widget_show(frame); - - gtk_widget_show(prefdialog); + gtk_entry_set_text(GTK_ENTRY(sound_entry), "(default)"); } -static GtkWidget *sndent[NUM_SOUNDS]; -static GtkWidget *sndcmd = NULL; -static char *last_sound_dir = NULL; - void close_sounddialog(GtkWidget *w, GtkWidget *w2) { @@ -1461,16 +1165,14 @@ return; /* Let's just be safe */ - if (sound_file[snd]) - free(sound_file[snd]); + if (sound_file_new[snd]) + free(sound_file_new[snd]); /* Set it -- and forget it */ - sound_file[snd] = g_strdup(file); - - save_prefs(); - + sound_file_new[snd] = g_strdup(file); + /* Set our text entry */ - gtk_entry_set_text(GTK_ENTRY(sndent[snd]), sound_file[snd]); + gtk_entry_set_text(GTK_ENTRY(sound_entry), sound_file_new[snd]); /* Close the window! It's getting cold in here! */ close_sounddialog(NULL, sounddialog); @@ -1480,27 +1182,7 @@ last_sound_dir = g_dirname(sound_file[snd]); } -static void test_sound(GtkWidget *button, int snd) -{ - guint32 tmp_sound = sound_options; - if (!(sound_options & OPT_SOUND_WHEN_AWAY)) - sound_options ^= OPT_SOUND_WHEN_AWAY; - if (!(sound_options & sounds[snd].opt)) - sound_options ^= sounds[snd].opt; - play_sound(snd); - sound_options = tmp_sound; -} - -static void reset_sound(GtkWidget *button, int snd) -{ - - /* This just resets a sound file back to default */ - sound_file[snd] = NULL; - - gtk_entry_set_text(GTK_ENTRY(sndent[snd]), "(default)"); -} - -static void sel_sound(GtkWidget *button, int snd) +static void sel_sound(GtkWidget *button, gpointer being_NULL_is_fun) { char *buf = g_malloc(BUF_LEN); @@ -1517,7 +1199,7 @@ GTK_SIGNAL_FUNC(close_sounddialog), sounddialog); gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(sounddialog)->ok_button), - "clicked", GTK_SIGNAL_FUNC(do_select_sound), (int *)snd); + "clicked", GTK_SIGNAL_FUNC(do_select_sound), (int *)sound_row_sel); gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(sounddialog)->cancel_button), "clicked", GTK_SIGNAL_FUNC(close_sounddialog), sounddialog); @@ -1528,970 +1210,476 @@ gdk_window_raise(sounddialog->window); } -static void sound_entry(GtkWidget *box, int snd) -{ - GtkWidget *hbox; - GtkWidget *entry; - GtkWidget *button; + +#if GTK_CHECK_VERSION (1,3,0) +static void prefs_sound_sel (GtkTreeSelection *sel, GtkTreeModel *model) { + GtkTreeIter iter; + GValue val = { 0, }; + + if (! gtk_tree_selection_get_selected (sel, &model, &iter)) + return; + gtk_tree_model_get_value (model, &iter, 2, &val); + sound_row_sel = g_value_get_uint(&val); + if (sound_entry) + gtk_entry_set_text(sound_entry, sound_file_new[sound_row_sel] ? sound_file_new[sound_row_sel] : "(default)"); + g_value_unset (&val); + if (sounddialog) + gtk_widget_destroy(sounddialog); +} +#endif + +GtkWidget *sound_events_page() { + + GtkWidget *ret; + GtkWidget *frame; + GtkWidget *vbox; + GtkWidget *sw; + GtkWidget *button, *hbox; + +#if GTK_CHECK_VERSION(1,3,0) + GtkTreeIter iter; + GtkWidget *event_view; + GtkListStore *event_store; + GtkCellRenderer *rend; + GtkTreeViewColumn *col; + GtkTreeSelection *sel; + GtkTreePath *path; +#else + GtkWidget *list; +#endif + int j; + + ret = gtk_vbox_new(FALSE, 5); + gtk_container_set_border_width (GTK_CONTAINER (ret), 6); + + frame = gtk_frame_new ("Sound Events"); + gtk_box_pack_start (GTK_BOX (ret), frame, TRUE, TRUE, 0); + gtk_widget_show (frame); + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add (GTK_CONTAINER (frame), vbox); + sw = gtk_scrolled_window_new(NULL,NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0); + +#if GTK_CHECK_VERSION(1,3,0) + event_store = gtk_list_store_new (3, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_UINT); + + for (j=0; j < NUM_SOUNDS; j++) { + if (sounds[j].opt == 0) + continue; + + gtk_list_store_append (event_store, &iter); + gtk_list_store_set(event_store, &iter, + 0, sound_options & sounds[j].opt, + 1, sounds[j].label, + 2, j, -1); + } + + event_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL(event_store)); + + rend = gtk_cell_renderer_toggle_new(); + sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (event_view)); + g_signal_connect (G_OBJECT (sel), "changed", + G_CALLBACK (prefs_sound_sel), + NULL); + g_signal_connect (G_OBJECT(rend), "toggled", + G_CALLBACK(event_toggled), event_store); + path = gtk_tree_path_new_first(); + gtk_tree_selection_select_path(sel, path); + + col = gtk_tree_view_column_new_with_attributes ("Play", + rend, + "active", 0, + NULL); + gtk_tree_view_append_column (GTK_TREE_VIEW(event_view), col); + + rend = gtk_cell_renderer_text_new(); + col = gtk_tree_view_column_new_with_attributes ("Event", + rend, + "text", 1, + NULL); + gtk_tree_view_append_column (GTK_TREE_VIEW(event_view), col); + gtk_widget_show(event_view); + g_object_unref(G_OBJECT(event_store)); + gtk_container_add(GTK_CONTAINER(sw), event_view); +#else + list = gtk_clist_new(1); + for (j=0; sound_order[j] != 0; j++) { + if (sounds[sound_order[j]].opt == 0) + continue; + gtk_clist_append(GTK_CLIST(list), &(sounds[sound_order[j]].label)); + } + gtk_widget_show(list); + gtk_container_add(GTK_CONTAINER(sw), list); +#endif + + gtk_widget_show (vbox); + gtk_widget_show_all (ret); + + frame = gtk_frame_new ("Event Options"); + gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add (GTK_CONTAINER (frame), vbox); + + hbox = gtk_hbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); + gtk_widget_show(hbox); + sound_entry = gtk_entry_new(); + gtk_entry_set_text(GTK_ENTRY(sound_entry), sound_file_new[0] ? sound_file_new[0] : "(default)"); + gtk_entry_set_editable(GTK_ENTRY(sound_entry), FALSE); + gtk_box_pack_start(GTK_BOX(hbox), sound_entry, FALSE, FALSE, 5); + gtk_widget_show(sound_entry); + hbox = gtk_hbox_new(FALSE, 0); - gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); gtk_widget_show(hbox); - - gaim_button(sounds[snd].label, &sound_options, sounds[snd].opt, hbox); - button = gtk_button_new_with_label(_("Test")); - gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 3); - gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(test_sound), (void *)snd); + gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(test_sound), NULL); + gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 1); gtk_widget_show(button); button = gtk_button_new_with_label(_("Reset")); - gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 3); - gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(reset_sound), (void *)snd); + gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(reset_sound), NULL); + gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 1); gtk_widget_show(button); button = gtk_button_new_with_label(_("Choose...")); - gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 3); - gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(sel_sound), (void *)snd); + gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(sel_sound), NULL); + gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 1); gtk_widget_show(button); - - entry = gtk_entry_new(); - gtk_entry_set_editable(GTK_ENTRY(entry), FALSE); - - if (sound_file[snd]) - gtk_entry_set_text(GTK_ENTRY(entry), sound_file[snd]); - else - gtk_entry_set_text(GTK_ENTRY(entry), "(default)"); - - gtk_box_pack_end(GTK_BOX(hbox), entry, FALSE, FALSE, 5); - sndent[snd] = entry; - gtk_widget_show(entry); -} + + gtk_widget_show (vbox); -static gint sound_cmd_yeah(GtkEntry *entry, GdkEvent *event, gpointer d) -{ - g_snprintf(sound_cmd, sizeof(sound_cmd), "%s", gtk_entry_get_text(GTK_ENTRY(sndcmd))); - save_prefs(); - return TRUE; -} - -static void set_sound_driver(GtkWidget *w, int option) -{ - if (option == OPT_SOUND_CMD) - gtk_widget_set_sensitive(sndcmd, TRUE); - else - gtk_widget_set_sensitive(sndcmd, FALSE); - - sound_options &= ~(OPT_SOUND_NORMAL | OPT_SOUND_BEEP | - OPT_SOUND_NAS | OPT_SOUND_ARTSC | - OPT_SOUND_ESD | OPT_SOUND_CMD); - sound_options |= option; - save_prefs(); + return ret; } -static void sound_page() +#if GTK_CHECK_VERSION (1,3,0) +void away_message_sel(GtkTreeSelection *sel, GtkTreeModel *model) { - GtkWidget *parent; - GtkWidget *box; - GtkWidget *label; - GtkWidget *frame; - GtkWidget *vbox; - GtkWidget *hbox; - GtkWidget *vbox2; - GtkWidget *sep; - GtkWidget *omenu; - GtkWidget *menu; - GtkWidget *opt; - int i=1, driver=0, j; - /* order that sound options are presented in, SND_SEPARATOR for * - * a seperator. better to do it this way than try and re-order * - * the sound defines 'cause that would mux up the sound prefs in * - * gaimrc. this list is terminated with SND_END. -Robot101 */ - int sound_order[] = { - SND_BUDDY_ARRIVE, SND_BUDDY_LEAVE, SND_SEPARATOR, - SND_FIRST_RECEIVE, SND_RECEIVE, SND_SEND, SND_SEPARATOR, - SND_CHAT_JOIN, SND_CHAT_LEAVE, - SND_CHAT_YOU_SAY, SND_CHAT_SAY, SND_CHAT_NICK, - SND_END - }; - - parent = prefdialog->parent; - gtk_widget_destroy(prefdialog); - - prefdialog = gtk_frame_new(_("Sound Options")); - gtk_container_add(GTK_CONTAINER(parent), prefdialog); - - box = gtk_vbox_new(FALSE, 5); - gtk_container_set_border_width(GTK_CONTAINER(box), 5); - gtk_container_add(GTK_CONTAINER(prefdialog), box); - gtk_widget_show(box); - - label = gtk_label_new(_("All options take effect immediately unless otherwise noted.")); - gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 5); - gtk_widget_show(label); - - frame = gtk_frame_new(_("Options")); - gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 5); - gtk_widget_show(frame); - - vbox = gtk_vbox_new(FALSE, 5); - gtk_container_add(GTK_CONTAINER(frame), vbox); - gtk_widget_show(vbox); - - hbox = gtk_hbox_new(TRUE, 5); - gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5); - gtk_widget_show(hbox); - - vbox2 = gtk_vbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(hbox), vbox2, TRUE, TRUE, 5); - gtk_widget_show(vbox2); - - gaim_button(_("No sounds when you log in"), &sound_options, OPT_SOUND_SILENT_SIGNON, vbox2); - - vbox2 = gtk_vbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(hbox), vbox2, TRUE, TRUE, 5); - gtk_widget_show(vbox2); - - gaim_button(_("Sounds while away"), &sound_options, OPT_SOUND_WHEN_AWAY, vbox2); - - sep = gtk_hseparator_new(); - gtk_box_pack_start(GTK_BOX(vbox), sep, FALSE, FALSE, 0); - gtk_widget_show(sep); - - hbox = gtk_hbox_new(TRUE, 5); - gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5); - gtk_widget_show(hbox); - - label = gtk_label_new(_("Sound method")); - gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); - gtk_widget_show(label); - - omenu = gtk_option_menu_new(); - menu = gtk_menu_new(); - - opt = gtk_menu_item_new_with_label("Console Beep"); - gtk_signal_connect(GTK_OBJECT(opt), "activate", - GTK_SIGNAL_FUNC(set_sound_driver), - (gpointer)OPT_SOUND_BEEP); - gtk_widget_show(opt); - gtk_menu_append(GTK_MENU(menu), opt); - if ((sound_options & OPT_SOUND_BEEP) && !driver) driver = i; - i++; - -#ifdef ESD_SOUND - opt = gtk_menu_item_new_with_label("ESD"); - gtk_signal_connect(GTK_OBJECT(opt), "activate", - GTK_SIGNAL_FUNC(set_sound_driver), - (gpointer)OPT_SOUND_ESD); - gtk_widget_show(opt); - gtk_menu_append(GTK_MENU(menu), opt); - if ((sound_options & OPT_SOUND_ESD) && !driver) driver = i; - i++; -#endif -#ifdef ARTSC_SOUND - opt = gtk_menu_item_new_with_label("ArtsC"); - gtk_signal_connect(GTK_OBJECT(opt), "activate", - GTK_SIGNAL_FUNC(set_sound_driver), - (gpointer)OPT_SOUND_ARTSC); - gtk_widget_show(opt); - gtk_menu_append(GTK_MENU(menu), opt); - if ((sound_options & OPT_SOUND_ARTSC) && !driver) driver = i; - i++; -#endif -#ifdef NAS_SOUND - opt = gtk_menu_item_new_with_label("NAS"); - gtk_signal_connect(GTK_OBJECT(opt), "activate", - GTK_SIGNAL_FUNC(set_sound_driver), - (gpointer)OPT_SOUND_NAS); - gtk_widget_show(opt); - gtk_menu_append(GTK_MENU(menu), opt); - if ((sound_options & OPT_SOUND_NAS) && !driver) driver = i; - i++; -#endif - - opt = gtk_menu_item_new_with_label("Internal"); - gtk_signal_connect(GTK_OBJECT(opt), "activate", - GTK_SIGNAL_FUNC(set_sound_driver), - (gpointer)OPT_SOUND_NORMAL); - gtk_widget_show(opt); - gtk_menu_append(GTK_MENU(menu), opt); - if ((sound_options & OPT_SOUND_NORMAL) && !driver) driver = i; - i++; - - opt = gtk_menu_item_new_with_label("Command"); - gtk_signal_connect(GTK_OBJECT(opt), "activate", - GTK_SIGNAL_FUNC(set_sound_driver), - (gpointer)OPT_SOUND_CMD); - gtk_widget_show(opt); - gtk_menu_append(GTK_MENU(menu), opt); - if ((sound_options & OPT_SOUND_CMD) && !driver) driver = i; - i++; - - gtk_option_menu_set_menu(GTK_OPTION_MENU(omenu), menu); - gtk_option_menu_set_history(GTK_OPTION_MENU(omenu), driver - 1); - gtk_box_pack_start(GTK_BOX(hbox), omenu, FALSE, FALSE, 5); - gtk_widget_show_all(omenu); - - hbox = gtk_hbox_new(TRUE, 5); - gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5); - gtk_widget_show(hbox); - - label = gtk_label_new(_("Sound command\n(%s for filename)")); - gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); - gtk_widget_show(label); - - sndcmd = gtk_entry_new(); - gtk_entry_set_editable(GTK_ENTRY(sndcmd), TRUE); - gtk_entry_set_text(GTK_ENTRY(sndcmd), sound_cmd); - gtk_box_pack_end(GTK_BOX(hbox), sndcmd, FALSE, FALSE, 5); - gtk_signal_connect(GTK_OBJECT(sndcmd), "focus_out_event", GTK_SIGNAL_FUNC(sound_cmd_yeah), NULL); - gtk_widget_set_sensitive(sndcmd, (OPT_SOUND_CMD & sound_options)); - gtk_widget_show(sndcmd); - - frame = gtk_frame_new(_("Sound played when:")); - gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 5); - gtk_widget_show(frame); - - vbox = gtk_vbox_new(FALSE, 5); - gtk_container_add(GTK_CONTAINER(frame), vbox); - gtk_widget_show(vbox); - - for (j=0; sound_order[j] != SND_END; j++) { - if (sound_order[j] == SND_SEPARATOR) { - sep = gtk_hseparator_new(); - gtk_box_pack_start(GTK_BOX(vbox), sep, FALSE, FALSE, 5); - gtk_widget_show(sep); - } else { - /* no entry for sounds without an option */ - if (sounds[sound_order[j]].opt == 0) - continue; - sound_entry(vbox, sound_order[j]); - } - } - - gtk_widget_show(prefdialog); -} - -static struct away_message *cur_message; -static GtkWidget *away_text; -static GtkWidget *make_away_button = NULL; - -void away_list_clicked(GtkWidget *widget, struct away_message *a) -{ + GtkTreeIter iter; + GValue val = { 0, }; + gchar *message; gchar buffer[BUF_LONG]; char *tmp; - cur_message = a; - - /* Clear the Box */ + if (! gtk_tree_selection_get_selected (sel, &model, &iter)) + return; + gtk_tree_model_get_value (model, &iter, 1, &val); + message = g_value_get_string(&val); gtk_imhtml_clear(GTK_IMHTML(away_text)); - - /* Fill the text box with new message */ - strcpy(buffer, a->message); + strcpy(buffer, message); tmp = stylize(buffer, BUF_LONG); gtk_imhtml_append_text(GTK_IMHTML(away_text), tmp, -1, GTK_IMHTML_NO_TITLE | GTK_IMHTML_NO_COMMENTS | GTK_IMHTML_NO_SCROLL); gtk_imhtml_append_text(GTK_IMHTML(away_text), "
", -1, GTK_IMHTML_NO_TITLE | GTK_IMHTML_NO_COMMENTS | GTK_IMHTML_NO_SCROLL); g_free(tmp); -} - -void remove_away_message(GtkWidget *widget, void *dummy) -{ - GList *i; - struct away_message *a; - - i = GTK_LIST(prefs_away_list)->selection; - - if (!i) - return; - if (!i->next) { - gtk_imhtml_clear(GTK_IMHTML(away_text)); - } - a = gtk_object_get_user_data(GTK_OBJECT(i->data)); - rem_away_mess(NULL, a); + g_value_unset (&val); + } -static void paldest(GtkWidget *m, gpointer n) -{ - gtk_widget_destroy(prefs_away_list); - prefs_away_list = NULL; - prefs_away_menu = NULL; - make_away_button = NULL; -} - -static void do_away_mess(GtkWidget *m, gpointer n) -{ - GList *i = GTK_LIST(prefs_away_list)->selection; - if (i) - do_away_message(NULL, gtk_object_get_user_data(GTK_OBJECT(i->data))); -} - -void set_default_away(GtkWidget *w, gpointer i) -{ - int length = g_slist_length(away_messages); - - if (away_messages == NULL) - default_away = NULL; - else if ((int)i >= length) - default_away = g_slist_nth_data(away_messages, length - 1); - else - default_away = g_slist_nth_data(away_messages, (int)i); +void remove_away_message(GtkWidget *widget, GtkTreeView *tv) { + struct away_message *am; + GtkTreeIter iter; + GtkTreePath *path; + GtkTreeStore *ts = GTK_TREE_STORE(gtk_tree_view_get_model(tv)); + GtkTreeSelection *sel = gtk_tree_view_get_selection(tv); + GValue val = { 0, }; + + if (! gtk_tree_selection_get_selected (sel, &prefs_away_store, &iter)) + return; + gtk_tree_model_get_value (prefs_away_store, &iter, 2, &val); + am = g_value_get_pointer (&val); + gtk_imhtml_clear(GTK_IMHTML(away_text)); + rem_away_mess(NULL, am); + gtk_list_store_remove(ts, &iter); + path = gtk_tree_path_new_first(); + gtk_tree_selection_select_path(sel, path); } -void default_away_menu_init(GtkWidget *omenu) -{ - GtkWidget *menu, *opt; - int index = 0; - GSList *awy = away_messages; - struct away_message *a; - - menu = gtk_menu_new(); - - while (awy) { - a = (struct away_message *)awy->data; - opt = gtk_menu_item_new_with_label(a->name); - gtk_signal_connect(GTK_OBJECT(opt), "activate", GTK_SIGNAL_FUNC(set_default_away), - (gpointer)index); - gtk_widget_show(opt); - gtk_menu_append(GTK_MENU(menu), opt); - - awy = awy->next; - index++; - } +#else +void away_message_sel(GtkWidget *w, GtkWidget *list) {} +void remove_away_message(GtkWidget *widget, GtkWidget *list) {} +#endif - gtk_option_menu_remove_menu(GTK_OPTION_MENU(omenu)); - gtk_option_menu_set_menu(GTK_OPTION_MENU(omenu), menu); - gtk_option_menu_set_history(GTK_OPTION_MENU(omenu), g_slist_index(away_messages, default_away)); -} - -static void away_page() -{ - GtkWidget *parent; - GtkWidget *box; - GtkWidget *label; +GtkWidget *away_message_page() { + GtkWidget *ret; GtkWidget *frame; - GtkWidget *vbox; - GtkWidget *hbox; - GtkWidget *vbox2; - GtkWidget *button; - GtkWidget *button2; - GtkWidget *top; - GtkWidget *bot; + GtkWidget *vbox, *hbox, *bbox; + GtkWidget *button, *image, *label; GtkWidget *sw; - GtkWidget *sw2; - GtkWidget *list_item; - GtkWidget *sep; - GtkObject *adjust; - GtkWidget *spin; + +#if GTK_CHECK_VERSION(1,3,0) + GtkTreeIter iter; + GtkWidget *event_view; + GtkCellRenderer *rend; + GtkTreeViewColumn *col; + GtkTreeSelection *sel; + GtkTreePath *path; +#else + GtkWidget *list; +#endif GSList *awy = away_messages; struct away_message *a; - - parent = prefdialog->parent; - gtk_widget_destroy(prefdialog); - - prefdialog = gtk_frame_new(_("Away Messages")); - gtk_container_add(GTK_CONTAINER(parent), prefdialog); - - box = gtk_vbox_new(FALSE, 5); - gtk_container_add(GTK_CONTAINER(prefdialog), box); - gtk_container_set_border_width(GTK_CONTAINER(box), 5); - gtk_widget_show(box); - - label = gtk_label_new(_("All options take effect immediately unless otherwise noted.")); - gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 5); - gtk_widget_show(label); - - frame = gtk_frame_new(_("Options")); - gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 5); - gtk_widget_show(frame); - - vbox = gtk_vbox_new(FALSE, 5); - gtk_container_add(GTK_CONTAINER(frame), vbox); - gtk_widget_show(vbox); - - hbox = gtk_hbox_new(TRUE, 5); - gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5); - gtk_widget_show(hbox); - - vbox2 = gtk_vbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(hbox), vbox2, TRUE, TRUE, 5); - gtk_widget_show(vbox2); + GtkWidget *sw2; + + ret = gtk_vbox_new(FALSE, 5); + gtk_container_set_border_width (GTK_CONTAINER (ret), 6); - gaim_button(_("Ignore new conversations when away"), &away_options, OPT_AWAY_DISCARD, vbox2); - gaim_button(_("Sounds while away"), &sound_options, OPT_SOUND_WHEN_AWAY, vbox2); - gaim_button(_("Sending messages removes away status"), &away_options, OPT_AWAY_BACK_ON_IM, - vbox2); - - vbox2 = gtk_vbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(hbox), vbox2, TRUE, TRUE, 5); - gtk_widget_show(vbox2); - - button = gaim_button(_("Don't send auto-response"), &away_options, OPT_AWAY_NO_AUTO_RESP, vbox2); - button2 = gaim_button(_("Only send auto-response when idle"), &away_options, OPT_AWAY_IDLE_RESP, - vbox2); - if (away_options & OPT_AWAY_NO_AUTO_RESP) - gtk_widget_set_sensitive(button2, FALSE); - gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(toggle_sensitive), button2); - gaim_button(_("Queue new messages when away"), &away_options, OPT_AWAY_QUEUE, vbox2); + frame = gtk_frame_new ("Title"); + gtk_box_pack_start (GTK_BOX (ret), frame, TRUE, TRUE, 0); + gtk_widget_show (frame); + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add (GTK_CONTAINER (frame), vbox); + sw = gtk_scrolled_window_new(NULL,NULL); + away_text = gtk_imhtml_new(NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0); + +#if GTK_CHECK_VERSION(1,3,0) + prefs_away_store = gtk_list_store_new (3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER); + while (awy) { + a = (struct away_message *)awy->data; + gtk_list_store_append (prefs_away_store, &iter); + gtk_list_store_set(prefs_away_store, &iter, + 0, a->name, + 1, a->message, + 2, a, -1); + awy = awy->next; + } + event_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL(prefs_away_store)); - sep = gtk_hseparator_new(); - gtk_box_pack_start(GTK_BOX(vbox), sep, FALSE, FALSE, 0); - gtk_widget_show(sep); - - hbox = gtk_hbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); - gtk_widget_show(hbox); - - gaim_labeled_spin_button(hbox, _("Time between sending auto-responses (in seconds):"), - &away_resend, 1, 24 * 60 * 60); - - if (away_options & OPT_AWAY_NO_AUTO_RESP) - gtk_widget_set_sensitive(hbox, FALSE); - gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(toggle_sensitive), hbox); - - sep = gtk_hseparator_new(); - gtk_box_pack_start(GTK_BOX(vbox), sep, FALSE, FALSE, 0); - gtk_widget_show(sep); - hbox = gtk_hbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); - gtk_widget_show(hbox); - - button = gaim_button(_("Auto Away after"), &away_options, OPT_AWAY_AUTO, hbox); - - adjust = gtk_adjustment_new(auto_away, 1, 1440, 1, 10, 10); - spin = gtk_spin_button_new(GTK_ADJUSTMENT(adjust), 1, 0); - gtk_widget_set_usize(spin, 50, -1); - gtk_object_set_user_data(GTK_OBJECT(spin), &auto_away); - if (!(away_options & OPT_AWAY_AUTO)) - gtk_widget_set_sensitive(GTK_WIDGET(spin), FALSE); - gtk_box_pack_start(GTK_BOX(hbox), spin, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(toggle_sensitive), spin); - gtk_signal_connect(GTK_OBJECT(adjust), "value-changed", GTK_SIGNAL_FUNC(update_spin_value), - GTK_WIDGET(spin)); - gtk_widget_show(spin); - - label = gtk_label_new(_("minutes using")); - gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); - gtk_widget_show(label); - - prefs_away_menu = gtk_option_menu_new(); - gtk_box_pack_start(GTK_BOX(hbox), prefs_away_menu, FALSE, FALSE, 0); - default_away_menu_init(prefs_away_menu); - if (!(away_options & OPT_AWAY_AUTO)) - gtk_widget_set_sensitive(GTK_WIDGET(prefs_away_menu), FALSE); - gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(toggle_sensitive), - prefs_away_menu); - gtk_widget_show(prefs_away_menu); + rend = gtk_cell_renderer_text_new(); + col = gtk_tree_view_column_new_with_attributes ("NULL", + rend, + "text", 0, + NULL); + gtk_tree_view_append_column (GTK_TREE_VIEW(event_view), col); + gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(event_view), FALSE); + gtk_widget_show(event_view); + gtk_container_add(GTK_CONTAINER(sw), event_view); +#else + list = gtk_clist_new(1); + while (awy) { + char *msg; + a = (struct away_message *)awy->data; + msg = a->name; + gtk_clist_append(GTK_CLIST(list), &msg); + awy = awy->next; + } + gtk_widget_show(list); + gtk_container_add(GTK_CONTAINER(sw), list); +#endif - frame = gtk_frame_new(_("Messages")); - gtk_box_pack_start(GTK_BOX(box), frame, TRUE, TRUE, 5); - gtk_widget_show(frame); - - vbox = gtk_vbox_new(FALSE, 5); - gtk_container_add(GTK_CONTAINER(frame), vbox); - gtk_widget_show(vbox); - - hbox = gtk_hbox_new(TRUE, 0); - gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5); - gtk_widget_show(hbox); - - label = gtk_label_new(_("Title")); - gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); - gtk_widget_show(label); + gtk_widget_show (vbox); + gtk_widget_show (sw); + - label = gtk_label_new(_("Message")); - gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); - gtk_widget_show(label); - - top = gtk_hbox_new(FALSE, 0); - gtk_box_pack_start(GTK_BOX(vbox), top, TRUE, TRUE, 0); - gtk_widget_show(top); - - sw = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), - GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_box_pack_start(GTK_BOX(top), sw, TRUE, TRUE, 0); - gtk_widget_set_usize(sw, -1, 225); - gtk_widget_show(sw); - - prefs_away_list = gtk_list_new(); - gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw), prefs_away_list); - gtk_signal_connect(GTK_OBJECT(prefs_away_list), "destroy", GTK_SIGNAL_FUNC(paldest), 0); - gtk_widget_show(prefs_away_list); - + frame = gtk_frame_new ("Message"); + gtk_box_pack_start (GTK_BOX (ret), frame, TRUE, TRUE, 0); + gtk_widget_show (frame); + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add (GTK_CONTAINER (frame), vbox); + sw2 = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw2), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); - gtk_box_pack_start(GTK_BOX(top), sw2, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(vbox), sw2, TRUE, TRUE, 0); gtk_widget_show(sw2); - - away_text = gtk_imhtml_new(NULL, NULL); + gtk_container_add(GTK_CONTAINER(sw2), away_text); GTK_LAYOUT(away_text)->hadjustment->step_increment = 10.0; GTK_LAYOUT(away_text)->vadjustment->step_increment = 10.0; gaim_setup_imhtml(away_text); gtk_widget_show(away_text); - - bot = gtk_hbox_new(FALSE, 0); - gtk_box_pack_start(GTK_BOX(vbox), bot, FALSE, FALSE, 5); - gtk_widget_show(bot); - + gtk_widget_show (vbox); + gtk_widget_show (ret); + gtk_imhtml_set_defaults(GTK_IMHTML(away_text), NULL, NULL, NULL); +#if GTK_CHECK_VERSION(1,3,0) + sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (event_view)); + path = gtk_tree_path_new_first(); + g_signal_connect (G_OBJECT (sel), "changed", + G_CALLBACK (away_message_sel), + NULL); +#else + gtk_signal_connect(GTK_OBJECT(list), "changed", GTK_SIGNAL_FUNC(away_message_sel), NULL); +#endif + hbox = gtk_hbox_new(TRUE, 5); + gtk_widget_show(hbox); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); +#if GTK_CHECK_VERSION (1,3,0) + button = gtk_button_new_from_stock (GTK_STOCK_ADD); +#else button = picture_button(prefs, _("Add"), gnome_add_xpm); +#endif + gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); + if (misc_options & OPT_MISC_COOL_LOOK) + gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); + gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(create_away_mess), NULL); - gtk_box_pack_start(GTK_BOX(bot), button, TRUE, FALSE, 5); - + +#if GTK_CHECK_VERSION (1,3,0) + button = gtk_button_new_from_stock (GTK_STOCK_REMOVE); + gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(remove_away_message), event_view); +#else + button = picture_button(prefs, _("Remove"), gnome_remove_xpm); + //gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(create_away_mess), event_view); +#endif + gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); + if (misc_options & OPT_MISC_COOL_LOOK) + gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); + gtk_widget_show(button); + +#if GTK_CHECK_VERSION (1,3,0) + button = pixbuf_button(_("_Edit"), "edit.png"); +#else button = picture_button(prefs, _("Edit"), save_xpm); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(create_away_mess), button); - gtk_box_pack_start(GTK_BOX(bot), button, TRUE, FALSE, 5); - - make_away_button = picture_button(prefs, _("Make Away"), gnome_preferences_xpm); - gtk_signal_connect(GTK_OBJECT(make_away_button), "clicked", GTK_SIGNAL_FUNC(do_away_mess), NULL); - gtk_box_pack_start(GTK_BOX(bot), make_away_button, TRUE, FALSE, 5); - if (!connections) - gtk_widget_set_sensitive(make_away_button, FALSE); - - button = picture_button(prefs, _("Remove"), gnome_remove_xpm); - gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(remove_away_message), NULL); - gtk_box_pack_start(GTK_BOX(bot), button, TRUE, FALSE, 5); - - if (awy != NULL) { - char buffer[BUF_LONG]; - char *tmp; - a = (struct away_message *)awy->data; - g_snprintf(buffer, sizeof(buffer), "%s", a->message); - tmp = stylize(buffer, BUF_LONG); - gtk_imhtml_append_text(GTK_IMHTML(away_text), tmp, -1, GTK_IMHTML_NO_TITLE | - GTK_IMHTML_NO_COMMENTS | GTK_IMHTML_NO_SCROLL); - gtk_imhtml_append_text(GTK_IMHTML(away_text), "
", -1, GTK_IMHTML_NO_TITLE | - GTK_IMHTML_NO_COMMENTS | GTK_IMHTML_NO_SCROLL); - g_free(tmp); - } - - while (awy) { - a = (struct away_message *)awy->data; - list_item = gtk_list_item_new(); - gtk_container_add(GTK_CONTAINER(prefs_away_list), list_item); - gtk_signal_connect(GTK_OBJECT(list_item), "select", GTK_SIGNAL_FUNC(away_list_clicked), - a); - gtk_object_set_user_data(GTK_OBJECT(list_item), a); - gtk_widget_show(list_item); - - hbox = gtk_hbox_new(FALSE, 5); - gtk_container_add(GTK_CONTAINER(list_item), hbox); - gtk_widget_show(hbox); - - label = gtk_label_new(a->name); - gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); - gtk_widget_show(label); +#endif + gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); + if (misc_options & OPT_MISC_COOL_LOOK) + gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); + gtk_widget_show(button); + + return ret; +} +#if GTK_CHECK_VERSION (1,3,0) +GtkTreeIter *prefs_notebook_add_page(char *text, + GdkPixbuf *pixbuf, + GtkWidget *page, + GtkTreeIter *iter, + GtkTreeIter *parent, + int ind) { + GdkPixbuf *icon = NULL; + + if (pixbuf) + icon = gdk_pixbuf_scale_simple (pixbuf, 18, 18, GDK_INTERP_BILINEAR); - awy = awy->next; - } - if (away_messages != NULL) - gtk_list_select_item(GTK_LIST(prefs_away_list), 0); - - gtk_widget_show(prefdialog); + gtk_tree_store_append (prefstree, iter, parent); + gtk_tree_store_set (prefstree, iter, 0, icon, 1, text, 2, ind, -1); + + if (pixbuf) + g_object_unref(pixbuf); + if (icon) + g_object_unref(icon); + gtk_notebook_append_page(GTK_NOTEBOOK(prefsnotebook), page, gtk_label_new(text)); + return iter; } - -static GtkWidget *deny_type = NULL; -static GtkWidget *deny_conn_hbox = NULL; -static GtkWidget *deny_opt_menu = NULL; -static struct gaim_connection *current_deny_gc = NULL; -static gboolean current_is_deny = FALSE; -static GtkWidget *allow_list = NULL; -static GtkWidget *block_list = NULL; - -static void set_deny_mode(GtkWidget *w, int data) -{ - if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w))) - return; - debug_printf("setting deny mode %d\n", data); - current_deny_gc->permdeny = data; - serv_set_permit_deny(current_deny_gc); - do_export(current_deny_gc); -} - -static GtkWidget *deny_opt(char *label, int which, GtkWidget *box, GtkWidget *set) -{ - GtkWidget *opt; - - if (!set) - opt = gtk_radio_button_new_with_label(NULL, label); - else - opt = - gtk_radio_button_new_with_label(gtk_radio_button_group(GTK_RADIO_BUTTON(set)), - label); - gtk_box_pack_start(GTK_BOX(box), opt, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(opt), "toggled", GTK_SIGNAL_FUNC(set_deny_mode), (void *)which); - gtk_widget_show(opt); - if (current_deny_gc->permdeny == which) - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(opt), TRUE); - - return opt; -} +#else +GtkCTreeNode *prefs_notebook_add_page(char *text, + GdkPixmap *pixmap, + GtkWidget *page, + GtkCTreeNode **iter, + GtkCTreeNode **parent, + int ind) { -static void des_deny_opt(GtkWidget *d, gpointer e) -{ - gtk_widget_destroy(d); - current_deny_gc = NULL; - deny_conn_hbox = NULL; - deny_type = NULL; - deny_opt_menu = NULL; - current_is_deny = FALSE; - allow_list = NULL; - block_list = NULL; -} + GtkCTreeNode *itern; + char *texts[1]; -static void set_deny_type() -{ - GSList *bg = gtk_radio_button_group(GTK_RADIO_BUTTON(deny_type)); + texts[0] = text; - switch (current_deny_gc->permdeny) { - case 4: - break; - case 3: - bg = bg->next->next; - break; - case 2: - bg = bg->next; - break; - case 1: - bg = bg->next->next->next; - break; - } + *iter = gtk_ctree_insert_node (GTK_CTREE(prefstree), parent ? *parent : NULL, NULL, &text, + 0, NULL, NULL, NULL, NULL, 0, 1); + gtk_ctree_node_set_row_data(GTK_CTREE(prefstree), GTK_CTREE_NODE(*iter), (void *)ind); + if (pixmap) + gdk_pixmap_unref(pixmap); + + debug_printf("%s\n", texts[0]); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(bg->data), TRUE); + gtk_notebook_append_page(GTK_NOTEBOOK(prefsnotebook), page, gtk_label_new(text)); + return iter; } - -void build_allow_list() -{ - GtkWidget *label; - GtkWidget *list_item; - GSList *p; - - if (!current_is_deny) - return; - - p = current_deny_gc->permit; +#endif - gtk_list_remove_items(GTK_LIST(allow_list), GTK_LIST(allow_list)->children); - - while (p) { - label = gtk_label_new(p->data); - list_item = gtk_list_item_new(); - gtk_container_add(GTK_CONTAINER(list_item), label); - gtk_object_set_user_data(GTK_OBJECT(list_item), p->data); - gtk_widget_show(label); - gtk_container_add(GTK_CONTAINER(allow_list), list_item); - gtk_widget_show(list_item); - p = p->next; - } -} - -void build_block_list() -{ - GtkWidget *label; - GtkWidget *list_item; - GSList *d; - - if (!current_is_deny) - return; +void prefs_notebook_init() { + int a = 0; +#if GTK_CHECK_VERSION(1,3,0) + GtkTreeIter p, c; +#else + GtkCTreeNode *p = NULL; + GtkCTreeNode *c = NULL; +#endif + prefs_notebook_add_page("Interface", NULL, interface_page(), &p, NULL, a++); + prefs_notebook_add_page("Fonts", NULL, font_page(), &c, &p, a++); + prefs_notebook_add_page("Messages", NULL, messages_page(), &c, &p, a++); + prefs_notebook_add_page("Shortcuts", NULL, hotkeys_page(), &c, &p, a++); + prefs_notebook_add_page("Buddy List", NULL, list_page(), &c, &p, a++); + prefs_notebook_add_page("IM", NULL, im_page(), &c, &p, a++); + prefs_notebook_add_page("Chat", NULL, chat_page(), &c, &p, a++); + prefs_notebook_add_page("Tabs", NULL, tab_page(), &c, &p, a++); + prefs_notebook_add_page("Proxy", NULL, proxy_page(), &p, NULL, a++); + prefs_notebook_add_page("Browser", NULL, browser_page(), &p, NULL, a++); - d = current_deny_gc->deny; - - gtk_list_remove_items(GTK_LIST(block_list), GTK_LIST(block_list)->children); - - while (d) { - label = gtk_label_new(d->data); - list_item = gtk_list_item_new(); - gtk_container_add(GTK_CONTAINER(list_item), label); - gtk_object_set_user_data(GTK_OBJECT(list_item), d->data); - gtk_widget_show(label); - gtk_container_add(GTK_CONTAINER(block_list), list_item); - gtk_widget_show(list_item); - d = d->next; - } -} - -static void deny_gc_opt(GtkWidget *opt, struct gaim_connection *gc) -{ - current_deny_gc = gc; - set_deny_type(); - build_allow_list(); - build_block_list(); + prefs_notebook_add_page("Logging", NULL, logging_page(), &p, NULL, a++); + prefs_notebook_add_page("Sounds", NULL, sound_page(), &p, NULL, a++); + prefs_notebook_add_page("Sound Events", NULL, sound_events_page(), &c, &p, a++); + prefs_notebook_add_page("Away / Idle", NULL, away_page(), &p, NULL, a++); + prefs_notebook_add_page("Away Messages", NULL, away_message_page(), &c, &p, a++); } -static void build_deny_menu() +void show_prefs() { - GtkWidget *menu; - GtkWidget *opt; - GSList *c = connections; - struct gaim_connection *gc; - int count = 0; - gboolean found = FALSE; - char buf[2048]; - - if (g_slist_length(connections) == 1) { - gtk_widget_hide(deny_conn_hbox); - return; - } else - gtk_widget_show(deny_conn_hbox); - - menu = gtk_menu_new(); - - while (c) { - gc = (struct gaim_connection *)c->data; - c = c->next; - if (!gc->prpl->set_permit_deny) - continue; - g_snprintf(buf, sizeof buf, "%s (%s)", gc->username, gc->prpl->name()); - opt = gtk_menu_item_new_with_label(buf); - gtk_signal_connect(GTK_OBJECT(opt), "activate", GTK_SIGNAL_FUNC(deny_gc_opt), gc); - gtk_widget_show(opt); - gtk_menu_append(GTK_MENU(menu), opt); - if (gc == current_deny_gc) - found = TRUE; - else if (!found) - count++; - } - - if (!found) { - current_deny_gc = connections->data; - count = 0; - } - - gtk_option_menu_remove_menu(GTK_OPTION_MENU(deny_opt_menu)); - gtk_option_menu_set_menu(GTK_OPTION_MENU(deny_opt_menu), menu); - gtk_option_menu_set_history(GTK_OPTION_MENU(deny_opt_menu), count); - - gtk_widget_show(menu); - gtk_widget_show(deny_opt_menu); -} - -static void pref_deny_add(GtkWidget *button, gboolean permit) -{ - show_add_perm(current_deny_gc, NULL, permit); -} - -static void pref_deny_rem(GtkWidget *button, gboolean permit) -{ - GList *i; - char *who; - - if (permit && !allow_list) - return; - if (!permit && !block_list) - return; - - if (permit) - i = GTK_LIST(allow_list)->selection; - else - i = GTK_LIST(block_list)->selection; - - if (!i) - return; - who = gtk_object_get_user_data(GTK_OBJECT(i->data)); - if (permit) { - current_deny_gc->permit = g_slist_remove(current_deny_gc->permit, who); - serv_rem_permit(current_deny_gc, who); - build_allow_list(); - } else { - current_deny_gc->deny = g_slist_remove(current_deny_gc->deny, who); - serv_rem_deny(current_deny_gc, who); - build_block_list(); - } - - do_export(current_deny_gc); -} - -static void deny_page() -{ - GtkWidget *parent; - GtkWidget *box; + GtkWidget *vbox, *vbox2; GtkWidget *hbox; - GtkWidget *label; - GtkWidget *vbox; - GtkWidget *sw; - GtkWidget *bbox; + GtkWidget *frame; +#if GTK_CHECK_VERSION (1,3,0) + GtkWidget *tree_v; + GtkTreeViewColumn *column; + GtkCellRenderer *cell; + GtkTreeSelection *sel; +#endif + GtkWidget *notebook; + GtkWidget *sep; GtkWidget *button; - - parent = prefdialog->parent; - gtk_widget_destroy(prefdialog); - - current_deny_gc = connections->data; /* this is safe because this screen will only be - available when there are connections */ - current_is_deny = TRUE; - - prefdialog = gtk_frame_new(_("Privacy Options")); - gtk_container_add(GTK_CONTAINER(parent), prefdialog); - - box = gtk_vbox_new(FALSE, 5); - gtk_container_set_border_width(GTK_CONTAINER(box), 5); - gtk_container_add(GTK_CONTAINER(prefdialog), box); - gtk_widget_show(box); - - label = gtk_label_new(_("All options take effect immediately unless otherwise noted.")); - gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 5); - gtk_widget_show(label); - - deny_conn_hbox = gtk_hbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(box), deny_conn_hbox, FALSE, FALSE, 0); - gtk_widget_show(deny_conn_hbox); - - label = gtk_label_new(_("Set privacy for:")); - gtk_box_pack_start(GTK_BOX(deny_conn_hbox), label, FALSE, FALSE, 5); - gtk_widget_show(label); - - deny_opt_menu = gtk_option_menu_new(); - gtk_box_pack_start(GTK_BOX(deny_conn_hbox), deny_opt_menu, FALSE, FALSE, 5); - gtk_signal_connect(GTK_OBJECT(deny_opt_menu), "destroy", GTK_SIGNAL_FUNC(des_deny_opt), NULL); - gtk_widget_show(deny_opt_menu); - - build_deny_menu(); - - hbox = gtk_hbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(box), hbox, TRUE, TRUE, 5); - gtk_widget_show(hbox); - - vbox = gtk_vbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 5); - gtk_widget_show(vbox); - - deny_type = deny_opt(_("Allow all users to contact me"), 1, vbox, NULL); - deny_type = deny_opt(_("Allow only the users below"), 3, vbox, deny_type); - - label = gtk_label_new(_("Allow List")); - gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 5); - gtk_widget_show(label); - - sw = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); - gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 5); - gtk_widget_show(sw); - - allow_list = gtk_list_new(); - gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw), allow_list); - gtk_widget_show(allow_list); - - build_allow_list(); - - bbox = gtk_hbox_new(TRUE, 5); - gtk_box_pack_end(GTK_BOX(vbox), bbox, FALSE, FALSE, 5); - gtk_widget_show(bbox); - - button = picture_button(prefs, _("Add"), gnome_add_xpm); - gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(pref_deny_add), (void *)TRUE); - gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 5); - - button = picture_button(prefs, _("Remove"), gnome_remove_xpm); - gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(pref_deny_rem), (void *)TRUE); - gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 5); - - vbox = gtk_vbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 5); - gtk_widget_show(vbox); - - deny_type = deny_opt(_("Deny all users"), 2, vbox, deny_type); - deny_type = deny_opt(_("Block the users below"), 4, vbox, deny_type); - - label = gtk_label_new(_("Block List")); - gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 5); - gtk_widget_show(label); - - sw = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); - gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 5); - gtk_widget_show(sw); - - block_list = gtk_list_new(); - gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw), block_list); - gtk_widget_show(block_list); - - build_block_list(); - - bbox = gtk_hbox_new(TRUE, 5); - gtk_box_pack_end(GTK_BOX(vbox), bbox, FALSE, FALSE, 5); - gtk_widget_show(bbox); - - button = picture_button(prefs, _("Add"), gnome_add_xpm); - gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(pref_deny_add), FALSE); - gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 5); - - button = picture_button(prefs, _("Remove"), gnome_remove_xpm); - gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(pref_deny_rem), FALSE); - gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 5); - - gtk_widget_show(prefdialog); -} - -void update_connection_dependent_prefs() -{ /* what a crappy name */ - gboolean needdeny = FALSE; - GSList *c = connections; - struct gaim_connection *gc = NULL; - - if (!prefs) - return; - - while (c) { - gc = c->data; - if (gc->prpl->set_permit_deny) - break; - gc = NULL; - c = c->next; - } - needdeny = (gc != NULL); - - if (!needdeny && deny_node) { - if (current_is_deny) - gtk_ctree_select(GTK_CTREE(preftree), general_node); - gtk_ctree_remove_node(GTK_CTREE(preftree), deny_node); - deny_node = NULL; - } else if (deny_node && current_is_deny) { - build_deny_menu(); - build_allow_list(); - build_block_list(); - } else if (needdeny && !deny_node) { - prefs_build_deny(); - } - - if (make_away_button) { - if (connections) - gtk_widget_set_sensitive(make_away_button, TRUE); - else - gtk_widget_set_sensitive(make_away_button, FALSE); - } -} - -static void try_me(GtkCTree *ctree, GtkCTreeNode *node) -{ - /* this is a hack */ - void (*func)(); - func = gtk_ctree_node_get_row_data(ctree, node); - func(); -} - -void show_prefs() -{ - GtkWidget *vbox; - GtkWidget *hpaned; - /* GtkWidget *scroll; */ - GtkWidget *container; - GtkWidget *hbox; - GtkWidget *close; + + int r; if (prefs) { gtk_widget_show(prefs); return; } + /* copy the preferences to tmp values... + * I liked "take affect immediately" Oh well :-( */ + misc_options_new = misc_options; + logging_options_new = logging_options; + blist_options_new = blist_options; + convo_options_new = convo_options; + im_options_new = im_options; + chat_options_new = chat_options; + font_options_new = font_options; + sound_options_new = sound_options; + for (r = 0; r < NUM_SOUNDS; r++) + sound_file_new[r] = g_strdup(sound_file[r]); + away_options_new = away_options; + away_resend_new = away_resend; + report_idle_new = report_idle; + auto_away_new = auto_away; + default_away_new = default_away; + fontsize_new = fontsize; + web_browser_new = web_browser; + proxytype_new = proxytype; + g_snprintf(sound_cmd_new, sizeof(sound_cmd_new), "%s", sound_cmd); + g_snprintf(web_command_new, sizeof(web_command_new), "%s", web_command); + g_snprintf(fontface_new, sizeof(fontface_new), fontface); +#if !GTK_CHECK_VERSION(1,3,0) + g_snprintf(fontxfld_new, sizeof(fontxfld_new), fontxfld); +#endif + memcpy(&conv_size_new, &conv_size, sizeof(struct window_size)); + memcpy(&buddy_chat_size_new, &buddy_chat_size, sizeof(struct window_size)); + memcpy(&fgcolor_new, &fgcolor, sizeof(GdkColor)); + memcpy(&bgcolor_new, &bgcolor, sizeof(GdkColor)); + + /* Create the window */ prefs = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_wmclass(GTK_WINDOW(prefs), "preferences", "Gaim"); gtk_widget_realize(prefs); aol_icon(prefs->window); gtk_window_set_title(GTK_WINDOW(prefs), _("Gaim - Preferences")); - gtk_widget_set_usize(prefs, 725, 620); + gtk_window_set_policy (GTK_WINDOW(prefs), FALSE, FALSE, TRUE); gtk_signal_connect(GTK_OBJECT(prefs), "destroy", GTK_SIGNAL_FUNC(delete_prefs), NULL); vbox = gtk_vbox_new(FALSE, 5); @@ -2499,56 +1687,129 @@ gtk_container_add(GTK_CONTAINER(prefs), vbox); gtk_widget_show(vbox); - hpaned = gtk_hpaned_new(); - gtk_box_pack_start(GTK_BOX(vbox), hpaned, TRUE, TRUE, 0); - gtk_widget_show(hpaned); + hbox = gtk_hbox_new (FALSE, 6); + gtk_container_set_border_width (GTK_CONTAINER (hbox), 6); + gtk_container_add (GTK_CONTAINER(vbox), hbox); + gtk_widget_show (hbox); + + frame = gtk_frame_new (NULL); + gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN); + gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + + /* The tree -- much inspired by the Gimp */ +#if GTK_CHECK_VERSION(1,3,0) + prefstree = gtk_tree_store_new (3, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_INT); + tree_v = gtk_tree_view_new_with_model (GTK_TREE_MODEL (prefstree)); + gtk_container_add (GTK_CONTAINER (frame), tree_v); + + gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (tree_v), FALSE); + gtk_widget_show(tree_v); + /* icons */ + cell = gtk_cell_renderer_pixbuf_new (); + column = gtk_tree_view_column_new_with_attributes ("icons", cell, "pixbuf", 0, NULL); + + /* text */ + cell = gtk_cell_renderer_text_new (); + column = gtk_tree_view_column_new_with_attributes ("text", cell, "text", 1, NULL); + + gtk_tree_view_append_column (GTK_TREE_VIEW (tree_v), column); - /* - scroll = gtk_scrolled_window_new(NULL, NULL); - gtk_paned_pack1(GTK_PANED(hpaned), scroll, FALSE, FALSE); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll), GTK_POLICY_NEVER, GTK_POLICY_NEVER); - gtk_widget_set_usize(scroll, 125, -1); - gtk_widget_show(scroll); - */ +#else + prefstree = gtk_ctree_new(1,0); + gtk_ctree_set_line_style(prefstree, GTK_CTREE_LINES_NONE); + gtk_ctree_set_expander_style(GTK_CTREE(prefstree), GTK_CTREE_EXPANDER_TRIANGLE); + gtk_container_add(GTK_CONTAINER (frame), prefstree); + gtk_widget_set_usize(prefstree, 150, -1); + gtk_widget_show(prefstree); +#endif /* GTK_CHECK_VERSION */ - preftree = gtk_ctree_new(1, 0); - gtk_ctree_set_line_style(GTK_CTREE(preftree), GTK_CTREE_LINES_SOLID); - gtk_ctree_set_expander_style(GTK_CTREE(preftree), GTK_CTREE_EXPANDER_TRIANGLE); - gtk_clist_set_reorderable(GTK_CLIST(preftree), FALSE); - /* gtk_container_add(GTK_CONTAINER(scroll), preftree); */ - gtk_paned_pack1(GTK_PANED(hpaned), preftree, FALSE, FALSE); - gtk_signal_connect(GTK_OBJECT(preftree), "tree_select_row", GTK_SIGNAL_FUNC(try_me), NULL); - gtk_widget_set_usize(preftree, 125, -1); - gtk_widget_show(preftree); + /* The right side */ + frame = gtk_frame_new (NULL); + gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN); + gtk_box_pack_start (GTK_BOX (hbox), frame, TRUE, TRUE, 0); + gtk_widget_show (frame); + + vbox2 = gtk_vbox_new (FALSE, 4); + gtk_container_add (GTK_CONTAINER (frame), vbox2); + gtk_widget_show (vbox2); + + frame = gtk_frame_new (NULL); + gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT); + gtk_box_pack_start (GTK_BOX (vbox2), frame, FALSE, TRUE, 0); + gtk_widget_show (frame); + + hbox = gtk_hbox_new (FALSE, 4); + gtk_container_set_border_width (GTK_CONTAINER (hbox), 4); + gtk_container_add (GTK_CONTAINER (frame), hbox); + gtk_widget_show (hbox); + + preflabel = gtk_label_new(NULL); + gtk_box_pack_end (GTK_BOX (hbox), preflabel, FALSE, FALSE, 0); + gtk_widget_show (preflabel); - container = gtk_frame_new(NULL); - gtk_container_set_border_width(GTK_CONTAINER(container), 0); - gtk_frame_set_shadow_type(GTK_FRAME(container), GTK_SHADOW_NONE); - gtk_paned_pack2(GTK_PANED(hpaned), container, TRUE, TRUE); - gtk_widget_show(container); - - prefdialog = gtk_vbox_new(FALSE, 5); - gtk_container_add(GTK_CONTAINER(container), prefdialog); - gtk_widget_show(prefdialog); + + /* The notebook */ + prefsnotebook = notebook = gtk_notebook_new (); + gtk_notebook_set_show_tabs (GTK_NOTEBOOK (notebook), FALSE); + gtk_notebook_set_show_border (GTK_NOTEBOOK (notebook), FALSE); + gtk_box_pack_start (GTK_BOX (vbox2), notebook, FALSE, FALSE, 0); - prefs_build_general(); - prefs_build_buddy(); - prefs_build_convo(); - prefs_build_sound(); - prefs_build_away(); - prefs_build_deny(); - - /* general_page(); */ +#if GTK_CHECK_VERSION(1,3,0) + sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_v)); + g_signal_connect (G_OBJECT (sel), "changed", + G_CALLBACK (pref_nb_select), + notebook); +#else + gtk_signal_connect(GTK_OBJECT(prefstree), "tree-select-row", GTK_SIGNAL_FUNC(pref_nb_select), notebook); +#endif + gtk_widget_show(notebook); + sep = gtk_hseparator_new(); + gtk_widget_show(sep); + gtk_box_pack_start (GTK_BOX (vbox), sep, FALSE, FALSE, 0); + + /* The buttons to press! */ + hbox = gtk_hbox_new (FALSE, 6); + gtk_container_set_border_width (GTK_CONTAINER (hbox), 6); + gtk_container_add (GTK_CONTAINER(vbox), hbox); + gtk_widget_show (hbox); +#if GTK_CHECK_VERSION(1,3,0) + button = gtk_button_new_from_stock (GTK_STOCK_CANCEL); +#else + button = picture_button(prefs, _("Close"), cancel_xpm); +#endif + gtk_signal_connect_object(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy), prefs); + gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0); + if (misc_options & OPT_MISC_COOL_LOOK) + gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); + gtk_widget_show(button); +#if GTK_CHECK_VERSION(1,3,0) + button = gtk_button_new_from_stock (GTK_STOCK_APPLY); +#else + button = picture_button(prefs, _("Apply"), ok_xpm); +#endif + gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(apply_cb), prefs); + gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0); + if (misc_options & OPT_MISC_COOL_LOOK) + gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); + gtk_widget_show(button); + +#if GTK_CHECK_VERSION(1,3,0) + button = gtk_button_new_from_stock (GTK_STOCK_OK); +#else + button = picture_button(prefs, _("OK"), join_xpm); +#endif + gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(ok_cb), prefs); + gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0); + if (misc_options & OPT_MISC_COOL_LOOK) + gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); + gtk_widget_show(button); - hbox = gtk_hbox_new(FALSE, 5); - gtk_box_pack_end(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); - gtk_widget_show(hbox); - - close = picture_button(prefs, _("Close"), cancel_xpm); - gtk_box_pack_end(GTK_BOX(hbox), close, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(close), "clicked", GTK_SIGNAL_FUNC(handle_delete), NULL); - - gtk_widget_show(prefs); + prefs_notebook_init(); +#if GTK_CHECK_VERSION(1,3,0) + gtk_tree_view_expand_all (GTK_TREE_VIEW(tree_v)); +#endif + gtk_widget_show(prefs); } static gint debug_delete(GtkWidget *w, GdkEvent *event, void *dummy) @@ -2635,34 +1896,12 @@ g_print("%s", s); g_free(s); } - -static gint handle_delete(GtkWidget *w, GdkEvent *event, void *dummy) -{ - save_prefs(); - - if (event == NULL) - gtk_widget_destroy(prefs); - prefs = NULL; - prefdialog = NULL; - debugbutton = NULL; - prefs_away_menu = NULL; + - return FALSE; -} - -static void delete_prefs(GtkWidget *w, void *data) -{ - if (prefs) { - save_prefs(); - gtk_widget_destroy(prefs); - } - prefs = NULL; - prefs_away_menu = NULL; - deny_node = NULL; - current_deny_gc = NULL; -} + + void set_option(GtkWidget *w, int *option) { *option = !(*option); @@ -2681,130 +1920,142 @@ save_prefs(); } -static void set_logging_option(GtkWidget *w, int option) + +/* Functions for each _options variable that sees what's changed, and makes + * effective those changes that take place immediately (UI stuff) */ +static void set_misc_options() { - logging_options ^= option; + +/* int option = misc_options ^ misc_options_new; */ + misc_options = misc_options_new; + +} - if (option == OPT_LOG_ALL) +static void set_logging_options() +{ + int option = logging_options ^ logging_options_new; + logging_options = logging_options_new; + + if (option & OPT_LOG_ALL) update_log_convs(); - save_prefs(); } -static void set_blist_option(GtkWidget *w, int option) +static void set_blist_options() { - blist_options ^= option; - - save_prefs(); + int option = blist_options ^ blist_options_new; + blist_options = blist_options_new; if (!blist) return; + + if (option & OPT_BLIST_BOTTOM_TAB) + set_blist_tab(); - if (option == OPT_BLIST_NO_BUTTONS) + if (option & OPT_BLIST_NO_BUTTONS) build_imchat_box(!(blist_options & OPT_BLIST_NO_BUTTONS)); - if (option == OPT_BLIST_SHOW_GRPNUM) + if (option & OPT_BLIST_SHOW_GRPNUM) update_num_groups(); - if (option == OPT_BLIST_NO_MT_GRP) + if (option & OPT_BLIST_NO_MT_GRP) toggle_show_empty_groups(); - if ((option == OPT_BLIST_SHOW_BUTTON_XPM) || (option == OPT_BLIST_NO_BUTTONS)) + if ((option & OPT_BLIST_SHOW_BUTTON_XPM) || (option & OPT_BLIST_NO_BUTTONS)) update_button_pix(); - if (option == OPT_BLIST_SHOW_PIXMAPS) + if (option & OPT_BLIST_SHOW_PIXMAPS) toggle_buddy_pixmaps(); - if ((option == OPT_BLIST_GREY_IDLERS) || (option == OPT_BLIST_SHOW_IDLETIME)) + if ((option & OPT_BLIST_GREY_IDLERS) || (option & OPT_BLIST_SHOW_IDLETIME)) update_idle_times(); } -static void set_convo_option(GtkWidget *w, int option) +static void set_convo_options() { - convo_options ^= option; - - if (option == OPT_CONVO_SHOW_SMILEY) + int option = convo_options ^ convo_options_new; + convo_options = convo_options_new; + + if (option & OPT_CONVO_SHOW_SMILEY) toggle_smileys(); - if (option == OPT_CONVO_SHOW_TIME) + if (option & OPT_CONVO_SHOW_TIME) toggle_timestamps(); - if (option == OPT_CONVO_CHECK_SPELLING) + if (option & OPT_CONVO_CHECK_SPELLING) toggle_spellchk(); - if (option == OPT_CONVO_COMBINE) { + if (option & OPT_CONVO_COMBINE) { /* (OPT_IM_SIDE_TAB | OPT_IM_BR_TAB) == (OPT_CHAT_SIDE_TAB | OPT_CHAT_BR_TAB) */ - if (current_is_im) { - int set = im_options & (OPT_IM_SIDE_TAB | OPT_IM_BR_TAB); - chat_options &= ~(OPT_CHAT_SIDE_TAB | OPT_CHAT_BR_TAB); - chat_options |= set; - } else { - int set = chat_options & (OPT_IM_SIDE_TAB | OPT_IM_BR_TAB); - im_options &= ~(OPT_CHAT_SIDE_TAB | OPT_CHAT_BR_TAB); - im_options |= set; - } - convo_tabize(); + } - save_prefs(); } -static void set_im_option(GtkWidget *w, int option) +static void set_im_options() { - im_options ^= option; - - if (option == OPT_IM_ONE_WINDOW) + int option = im_options ^ im_options_new; + im_options = im_options_new; + + if (option & OPT_IM_ONE_WINDOW) im_tabize(); - if (option == OPT_IM_HIDE_ICONS) + if (option & OPT_IM_SIDE_TAB || option & OPT_IM_BR_TAB) + update_im_tabs(); + + if (option & OPT_IM_HIDE_ICONS) set_hide_icons(); - if (option == OPT_IM_ALIAS_TAB) { + if (option & OPT_IM_ALIAS_TAB) set_convo_titles(); - BuddyTickerSetNames(); - } - if (option == OPT_IM_NO_ANIMATION) + if (option & OPT_IM_NO_ANIMATION) set_anim(); - - save_prefs(); + + if (option & OPT_IM_BUTTON_TEXT || option & OPT_IM_BUTTON_XPM) + update_im_button_pix(); } -static void set_chat_option(GtkWidget *w, int option) +static void set_chat_options() { - chat_options ^= option; + int option = chat_options ^ chat_options_new; + chat_options = chat_options_new; - if (option == OPT_CHAT_ONE_WINDOW) + if (option & OPT_CHAT_ONE_WINDOW) chat_tabize(); - - save_prefs(); + + if (option & OPT_CHAT_BUTTON_TEXT || option & OPT_CHAT_BUTTON_XPM) + update_chat_button_pix(); } -void set_sound_option(GtkWidget *w, int option) +void set_sound_options() { - sound_options ^= option; - - save_prefs(); + /* int option = sound_options ^ sound_options_new; */ + sound_options = sound_options_new; + } -static void set_font_option(GtkWidget *w, int option) +static void set_font_options() { - font_options ^= option; - + /* int option = font_options ^ font_options_new; */ + font_options = font_options_new; + update_font_buttons(); - - save_prefs(); } -static void set_away_option(GtkWidget *w, int option) +static void set_away_options() { - away_options ^= option; + int option = away_options ^ away_options_new; + away_options = away_options_new; - if (option == OPT_AWAY_QUEUE) + if (option & OPT_AWAY_QUEUE) toggle_away_queue(); +} - save_prefs(); +static void toggle_option(GtkWidget *w, int option) { + int *o = gtk_object_get_user_data(GTK_OBJECT(w)); + *o ^= option; } GtkWidget *gaim_button(const char *text, guint *options, int option, GtkWidget *page) @@ -2813,157 +2064,328 @@ button = gtk_check_button_new_with_label(text); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(button), (*options & option)); gtk_box_pack_start(GTK_BOX(page), button, FALSE, FALSE, 0); + gtk_object_set_user_data(GTK_OBJECT(button), options); - if (options == &misc_options) + /* So that the ticker and debug window happen immediately + * I don't think they should be "preferences," anyway. */ + if (options == &misc_options && (option == OPT_MISC_DEBUG || option == OPT_MISC_BUDDY_TICKER)) gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(set_misc_option), (int *)option); - if (options == &logging_options) - gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(set_logging_option), - (int *)option); - if (options == &blist_options) - gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(set_blist_option), - (int *)option); - if (options == &convo_options) - gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(set_convo_option), - (int *)option); - if (options == &im_options) - gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(set_im_option), + else + gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(toggle_option), (int *)option); - if (options == &chat_options) - gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(set_chat_option), - (int *)option); - if (options == &font_options) - gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(set_font_option), - (int *)option); - if (options == &sound_options) - gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(set_sound_option), - (int *)option); - if (options == &away_options) - gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(set_away_option), - (int *)option); - + gtk_widget_show(button); return button; } -static void blist_tab_opt(GtkWidget *widget, int option) +void away_list_clicked(GtkWidget *widget, struct away_message *a) +{} +void default_away_menu_init(GtkWidget *omenu) { - /* Following general method of set_tab_opt() */ - int mask; - mask = (OPT_BLIST_BOTTOM_TAB); - - blist_options &= ~(mask); - blist_options |= (mask & option); - - set_blist_tab(); + GtkWidget *menu, *opt; + int index = 0; + GSList *awy = away_messages; + struct away_message *a; + + menu = gtk_menu_new(); + + while (awy) { + a = (struct away_message *)awy->data; + opt = gtk_menu_item_new_with_label(a->name); + gtk_signal_connect(GTK_OBJECT(opt), "activate", GTK_SIGNAL_FUNC(set_default_away), + (gpointer)index); + gtk_widget_show(opt); + gtk_menu_append(GTK_MENU(menu), opt); + + awy = awy->next; + index++; + } + + gtk_option_menu_remove_menu(GTK_OPTION_MENU(omenu)); + gtk_option_menu_set_menu(GTK_OPTION_MENU(omenu), menu); + gtk_option_menu_set_history(GTK_OPTION_MENU(omenu), g_slist_index(away_messages, default_away)); +} + +GtkWidget *pref_fg_picture = NULL; +GtkWidget *pref_bg_picture = NULL; + +void destroy_colorsel(GtkWidget *w, gpointer d) +{ + if (d) { + gtk_widget_destroy(fgcseld); + fgcseld = NULL; + } else { + gtk_widget_destroy(bgcseld); + bgcseld = NULL; + } } -static GtkWidget *blist_tab_radio(const char *label, int which, GtkWidget *box,GtkWidget *set) +void apply_color_dlg(GtkWidget *w, gpointer d) { - GtkWidget *new_opt; + gdouble color[3]; + if ((int)d == 1) { +#if GTK_CHECK_VERSION(1,3,0) + gtk_color_selection_get_current_color(GTK_COLOR_SELECTION + (GTK_COLOR_SELECTION_DIALOG(fgcseld)->colorsel), + &fgcolor_new); +#else + gtk_color_selection_get_color(GTK_COLOR_SELECTION + (GTK_COLOR_SELECTION_DIALOG(fgcseld)->colorsel), color); - if(!set) - new_opt = gtk_radio_button_new_with_label (NULL, label); - else - new_opt = gtk_radio_button_new_with_label(gtk_radio_button_group(GTK_RADIO_BUTTON(set)), label); - - gtk_box_pack_start(GTK_BOX(box), new_opt, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(new_opt), "clicked", - GTK_SIGNAL_FUNC(blist_tab_opt), (void *)which); - gtk_widget_show(new_opt); - - if ((blist_options & OPT_BLIST_BOTTOM_TAB) == (which & OPT_BLIST_BOTTOM_TAB)) - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(new_opt), TRUE); - - return new_opt; + fgcolor_new.red = ((guint16)(color[0] * 65535)) >> 8; + fgcolor_new.green = ((guint16)(color[1] * 65535)) >> 8; + fgcolor_new.blue = ((guint16)(color[2] * 65535)) >> 8; +#endif + destroy_colorsel(NULL, (void *)1); + update_color(NULL, pref_fg_picture); + } else { +#if GTK_CHECK_VERSION(1,3,0) + gtk_color_selection_get_current_color(GTK_COLOR_SELECTION + (GTK_COLOR_SELECTION_DIALOG(bgcseld)->colorsel), + &bgcolor_new); +#else + gtk_color_selection_get_color(GTK_COLOR_SELECTION + (GTK_COLOR_SELECTION_DIALOG(bgcseld)->colorsel), color); + + bgcolor_new.red = ((guint16)(color[0] * 65535)) >> 8; + bgcolor_new.green = ((guint16)(color[1] * 65535)) >> 8; + bgcolor_new.blue = ((guint16)(color[2] * 65535)) >> 8; +#endif + destroy_colorsel(NULL, (void *)0); + update_color(NULL, pref_bg_picture); + } } -void prefs_build_general() +void update_color(GtkWidget *w, GtkWidget *pic) { - GtkCTreeNode *node; - char *text[1]; + GdkColor c; + GtkStyle *style; + c.pixel = 0; + + if (pic == pref_fg_picture) { + if (font_options_new & OPT_FONT_FGCOL) { + c.red = fgcolor_new.red; + c.blue = fgcolor_new.blue; + c.green = fgcolor_new.green; + } else { + c.red = 0; + c.blue = 0; + c.green = 0; + } + } else { + if (font_options_new & OPT_FONT_BGCOL) { + c.red = bgcolor_new.red; + c.blue = bgcolor_new.blue; + c.green = bgcolor_new.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); + gtk_style_unref(style); +} +void set_default_away(GtkWidget *w, gpointer i) +{ + + int length = g_slist_length(away_messages); - text[0] = _("General"); - general_node = gtk_ctree_insert_node(GTK_CTREE(preftree), NULL, NULL, - text, 5, NULL, NULL, NULL, NULL, 0, 1); - gtk_ctree_node_set_row_data(GTK_CTREE(preftree), general_node, general_page); + if (away_messages == NULL) + default_away_new = NULL; + else if ((int)i >= length) + default_away_new = g_slist_nth_data(away_messages, length - 1); + else + default_away_new = g_slist_nth_data(away_messages, (int)i); +} + +static void update_spin_value(GtkWidget *w, GtkWidget *spin) +{ + int *value = gtk_object_get_user_data(GTK_OBJECT(spin)); + *value = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin)); +} +GtkWidget *gaim_labeled_spin_button(GtkWidget *box, const gchar *title, int *val, int min, int max) +{ + GtkWidget *hbox; + GtkWidget *label; + GtkWidget *spin; + GtkObject *adjust; - text[0] = _("Proxy"); - node = gtk_ctree_insert_node(GTK_CTREE(preftree), general_node, NULL, - text, 5, NULL, NULL, NULL, NULL, 0, 1); - gtk_ctree_node_set_row_data(GTK_CTREE(preftree), node, proxy_page); + hbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 5); + gtk_widget_show(hbox); + + label = gtk_label_new(title); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); + gtk_widget_show(label); - gtk_ctree_select(GTK_CTREE(preftree), general_node); + adjust = gtk_adjustment_new(*val, min, max, 1, 1, 1); + spin = gtk_spin_button_new(GTK_ADJUSTMENT(adjust), 1, 0); + gtk_object_set_user_data(GTK_OBJECT(spin), val); + gtk_widget_set_usize(spin, 50, -1); + gtk_box_pack_start(GTK_BOX(hbox), spin, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(adjust), "value-changed", + GTK_SIGNAL_FUNC(update_spin_value), GTK_WIDGET(spin)); + gtk_widget_show(spin); + return spin; } -void prefs_build_buddy() +void dropdown_set(GtkObject *w, int *option) { - GtkCTreeNode *parent; - char *text[1]; - - text[0] = _("Buddy List"); - parent = gtk_ctree_insert_node(GTK_CTREE(preftree), NULL, NULL, - text, 5, NULL, NULL, NULL, NULL, 0, 1); - gtk_ctree_node_set_row_data(GTK_CTREE(preftree), parent, buddy_page); + int opt = (int)gtk_object_get_user_data(w); + int clear = (int)gtk_object_get_data(w, "clear"); + + if (clear != -1) { + *option = *option & ~clear; + *option = *option | opt; + } else { + debug_printf("HELLO %d\n", opt); + *option = opt; + } + + if (option == &proxytype_new) { + if (opt == PROXY_NONE) + gtk_widget_set_sensitive(prefs_proxy_frame, FALSE); + else + gtk_widget_set_sensitive(prefs_proxy_frame, TRUE); + } else if (option == &web_browser_new) { + if (opt == BROWSER_MANUAL) + gtk_widget_set_sensitive(browser_entry, TRUE); + else + gtk_widget_set_sensitive(browser_entry, FALSE); + } else if (option == &sound_options_new) { + if (opt == OPT_SOUND_CMD) + gtk_widget_set_sensitive(sndcmd, TRUE); + else + gtk_widget_set_sensitive(sndcmd, FALSE); + } + } -void prefs_build_convo() +static GtkWidget *gaim_dropdown(GtkWidget *box, const gchar *title, int *option, int clear, ...) { - GtkCTreeNode *parent, *node; - char *text[1]; + va_list menuitems; + GtkWidget *dropdown, *opt, *menu; + GtkWidget *label; + gchar *text; + int value; + int o = 0; + GtkWidget *hbox; - text[0] = _("Conversations"); - parent = gtk_ctree_insert_node(GTK_CTREE(preftree), NULL, NULL, - text, 5, NULL, NULL, NULL, NULL, 0, 1); - gtk_ctree_node_set_row_data(GTK_CTREE(preftree), parent, convo_page); + hbox = gtk_hbox_new(FALSE, 5); + gtk_container_add (GTK_CONTAINER (box), hbox); + gtk_widget_show(hbox); + + label = gtk_label_new(title); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); + gtk_widget_show(label); + + va_start(menuitems, clear); + text = va_arg(menuitems, gchar *); + + if (!text) + return NULL; + + dropdown = gtk_option_menu_new(); + menu = gtk_menu_new(); - text[0] = _("IM Window"); - node = gtk_ctree_insert_node(GTK_CTREE(preftree), parent, NULL, - text, 5, NULL, NULL, NULL, NULL, 0, 1); - gtk_ctree_node_set_row_data(GTK_CTREE(preftree), node, im_page); + while (text) { + value = va_arg(menuitems, int); + opt = gtk_menu_item_new_with_label(text); + gtk_object_set_user_data(GTK_OBJECT(opt), (void *)value); + gtk_object_set_data(GTK_OBJECT(opt), "clear", (void *)clear); + gtk_signal_connect(GTK_OBJECT(opt), "activate", + GTK_SIGNAL_FUNC(dropdown_set), (void *)option); + gtk_widget_show(opt); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), opt); - text[0] = _("Chat"); - node = gtk_ctree_insert_node(GTK_CTREE(preftree), parent, NULL, - text, 5, NULL, NULL, NULL, NULL, 0, 1); - gtk_ctree_node_set_row_data(GTK_CTREE(preftree), node, chat_page); + if (((clear > -1) && ((*option & value) == value)) || *option == value) { + gtk_menu_set_active(GTK_MENU(menu), o); + } + text = va_arg(menuitems, gchar *); + o++; + } - text[0] = _("Font Options"); - node = gtk_ctree_insert_node(GTK_CTREE(preftree), parent, NULL, - text, 5, NULL, NULL, NULL, NULL, 0, 1); - gtk_ctree_node_set_row_data(GTK_CTREE(preftree), node, font_page); -} + va_end(menuitems); -void prefs_build_sound() + gtk_option_menu_set_menu(GTK_OPTION_MENU(dropdown), menu); + gtk_box_pack_start(GTK_BOX(hbox), dropdown, FALSE, FALSE, 0); + gtk_widget_show(dropdown); + return dropdown; +} + +static GtkWidget *show_color_pref(GtkWidget *box, gboolean fgc) { - GtkCTreeNode *parent; - char *text[1]; + /* more stuff stolen from X-Chat */ + GtkWidget *swid; + GdkColor c; + GtkStyle *style; + c.pixel = 0; + if (fgc) { + if (font_options_new & OPT_FONT_FGCOL) { + c.red = fgcolor_new.red; + c.blue = fgcolor_new.blue; + c.green = fgcolor_new.green; + } else { + c.red = 0; + c.blue = 0; + c.green = 0; + } + } else { + if (font_options_new & OPT_FONT_BGCOL) { + c.red = bgcolor_new.red; + c.blue = bgcolor_new.blue; + c.green = bgcolor_new.green; + } else { + c.red = 0xffff; + c.blue = 0xffff; + c.green = 0xffff; + } + } - text[0] = _("Sounds"); - parent = gtk_ctree_insert_node(GTK_CTREE(preftree), NULL, NULL, - text, 5, NULL, NULL, NULL, NULL, 0, 1); - gtk_ctree_node_set_row_data(GTK_CTREE(preftree), parent, sound_page); -} - -void prefs_build_away() -{ - GtkCTreeNode *parent; - char *text[1]; + style = gtk_style_new(); + style->bg[0] = c; - text[0] = _("Away Messages"); - parent = gtk_ctree_insert_node(GTK_CTREE(preftree), NULL, NULL, - text, 5, NULL, NULL, NULL, NULL, 0, 1); - gtk_ctree_node_set_row_data(GTK_CTREE(preftree), parent, away_page); + swid = gtk_event_box_new(); + gtk_widget_set_style(GTK_WIDGET(swid), style); + gtk_style_unref(style); + gtk_widget_set_usize(GTK_WIDGET(swid), 40, -1); + gtk_box_pack_start(GTK_BOX(box), swid, FALSE, FALSE, 5); + gtk_widget_show(swid); + return swid; } - -void prefs_build_deny() +void apply_font_dlg(GtkWidget *w, GtkWidget *f) { - char *text[1]; + int i = 0; +#if !GTK_CHECK_VERSION(1,3,0) + int j = 0, k = 0; +#endif + char *fontname; + + fontname = g_strdup(gtk_font_selection_dialog_get_font_name(GTK_FONT_SELECTION_DIALOG(fontseld))); + destroy_fontsel(0, 0); - if (connections && !deny_node) { - text[0] = _("Privacy"); - deny_node = gtk_ctree_insert_node(GTK_CTREE(preftree), NULL, NULL, - text, 5, NULL, NULL, NULL, NULL, 0, 1); - gtk_ctree_node_set_row_data(GTK_CTREE(preftree), deny_node, deny_page); +#if !GTK_CHECK_VERSION(1,3,0) + for (i = 0; i < strlen(fontname); i++) { + if (fontname[i] == '-') { + if (++j > 2) + break; + } else if (j == 2) + fontface_new[k++] = fontname[i]; } + fontface_new[k] = '\0'; + g_snprintf(fontxfld_new, sizeof(fontxfld_new), "%s", fontname); +#else + while(fontname[i] && !isdigit(fontname[i]) && i < sizeof(fontface_new)) { + fontface_new[i] = fontname[i]; + i++; + } + +#endif + g_free(fontname); }