Mercurial > pidgin
diff src/prefs.c @ 915:378c862a2381
[gaim-migrate @ 925]
bmiller is damn cool. he did everything i asked for, the next day even.
committer: Tailor Script <tailor@pidgin.im>
| author | Eric Warmenhoven <eric@warmenhoven.org> |
|---|---|
| date | Fri, 15 Sep 2000 18:24:32 +0000 |
| parents | 568bb0f5c921 |
| children | a88af4cc626a |
line wrap: on
line diff
--- a/src/prefs.c Fri Sep 15 16:51:31 2000 +0000 +++ b/src/prefs.c Fri Sep 15 18:24:32 2000 +0000 @@ -57,6 +57,7 @@ static void prefs_build_away(GtkWidget *); static void prefs_build_browser(GtkWidget *); static gint handle_delete(GtkWidget *, GdkEvent *, void *); +static void delete_prefs(GtkWidget *, void *); static GtkWidget *prefdialog = NULL; static GtkWidget *debugbutton = NULL; @@ -693,11 +694,69 @@ gtk_widget_show(prefdialog); } +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_DISP_CHAT_BUTTON_TEXT | OPT_DISP_CHAT_BUTTON_XPM); + else + mask = (OPT_DISP_CONV_BUTTON_TEXT | OPT_DISP_CONV_BUTTON_XPM); + display_options &= ~(mask); + display_options |= (data & mask); + + if (data & 0x1) + update_chat_button_pix(); + else + update_im_button_pix(); +} + +static void im_buttons_menu_init(GtkWidget *omenu) +{ + GtkWidget *menu, *opt; + int index; + + switch (display_options & + (OPT_DISP_CONV_BUTTON_TEXT | OPT_DISP_CONV_BUTTON_XPM)) { + case OPT_DISP_CONV_BUTTON_TEXT: + index = 2; + break; + case OPT_DISP_CONV_BUTTON_XPM: + index = 1; + break; + default: /* both or neither */ + index = 0; + break; + } + + menu = gtk_menu_new(); + + opt = gtk_menu_item_new_with_label(_("Pictures and Text")); + gtk_signal_connect(GTK_OBJECT(opt), "activate", GTK_SIGNAL_FUNC(set_buttons_opt), (void *)(OPT_DISP_CONV_BUTTON_TEXT | OPT_DISP_CONV_BUTTON_XPM)); + gtk_widget_show(opt); + gtk_menu_append(GTK_MENU(menu), opt); + + opt = gtk_menu_item_new_with_label(_("Pictures Only")); + gtk_signal_connect(GTK_OBJECT(opt), "activate", GTK_SIGNAL_FUNC(set_buttons_opt), (void *)OPT_DISP_CONV_BUTTON_XPM); + gtk_widget_show(opt); + gtk_menu_append(GTK_MENU(menu), opt); + + opt = gtk_menu_item_new_with_label(_("Text Only")); + gtk_signal_connect(GTK_OBJECT(opt), "activate", GTK_SIGNAL_FUNC(set_buttons_opt), (void *)OPT_DISP_CONV_BUTTON_TEXT); + gtk_widget_show(opt); + gtk_menu_append(GTK_MENU(menu), opt); + + 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), index); +} + static void im_page() { GtkWidget *parent; GtkWidget *box; + GtkWidget *hbox; GtkWidget *label; + GtkWidget *opt; parent = prefdialog->parent; gtk_widget_destroy(prefdialog); @@ -714,7 +773,20 @@ gtk_widget_show(label); gaim_button(_("Show logins in window"), &display_options, OPT_DISP_SHOW_LOGON, box); - gaim_button(_("Show buttons with text"), &display_options, OPT_DISP_CONV_SHOW_TEXT, box); + + hbox = gtk_hbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 5); + gtk_widget_show(hbox); + + label = gtk_label_new(_("Show buttons as ")); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); + gtk_widget_show(label); + + opt = gtk_option_menu_new(); + gtk_box_pack_start(GTK_BOX(hbox), opt, FALSE, FALSE, 5); + im_buttons_menu_init(opt); + gtk_widget_show(opt); + gaim_button(_("Show larger entry box on new windows"), &display_options, OPT_DISP_CONV_BIG_ENTRY, box); gaim_button(_("Raise windows on events"), &general_options, OPT_GEN_POPUP_WINDOWS, box); gaim_button(_("Ignore new conversations when away"), &general_options, OPT_GEN_DISCARD_WHEN_AWAY, box); @@ -723,11 +795,53 @@ gtk_widget_show(prefdialog); } +static void chat_buttons_menu_init(GtkWidget *omenu) +{ + GtkWidget *menu, *opt; + int index; + + switch (display_options & + (OPT_DISP_CHAT_BUTTON_TEXT | OPT_DISP_CHAT_BUTTON_XPM)) { + case OPT_DISP_CHAT_BUTTON_TEXT: + index = 2; + break; + case OPT_DISP_CHAT_BUTTON_XPM: + index = 1; + break; + default: /* both or neither */ + index = 0; + break; + } + + menu = gtk_menu_new(); + + opt = gtk_menu_item_new_with_label(_("Pictures and Text")); + gtk_signal_connect(GTK_OBJECT(opt), "activate", GTK_SIGNAL_FUNC(set_buttons_opt), (void *)(OPT_DISP_CHAT_BUTTON_TEXT | OPT_DISP_CHAT_BUTTON_XPM | 1)); + gtk_widget_show(opt); + gtk_menu_append(GTK_MENU(menu), opt); + + opt = gtk_menu_item_new_with_label(_("Pictures Only")); + gtk_signal_connect(GTK_OBJECT(opt), "activate", GTK_SIGNAL_FUNC(set_buttons_opt), (void *)(OPT_DISP_CHAT_BUTTON_XPM | 1)); + gtk_widget_show(opt); + gtk_menu_append(GTK_MENU(menu), opt); + + opt = gtk_menu_item_new_with_label(_("Text Only")); + gtk_signal_connect(GTK_OBJECT(opt), "activate", GTK_SIGNAL_FUNC(set_buttons_opt), (void *)(OPT_DISP_CHAT_BUTTON_TEXT | 1)); + gtk_widget_show(opt); + gtk_menu_append(GTK_MENU(menu), opt); + + 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), index); +} + static void chat_page() { GtkWidget *parent; GtkWidget *box; + GtkWidget *hbox; GtkWidget *label; + GtkWidget *opt; parent = prefdialog->parent; gtk_widget_destroy(prefdialog); @@ -744,7 +858,21 @@ gtk_widget_show(label); gaim_button(_("Show people joining/leaving in window"), &display_options, OPT_DISP_CHAT_LOGON, box); - gaim_button(_("Show buttons with text"), &display_options, OPT_DISP_CHAT_SHOW_TEXT, box); + + hbox = gtk_hbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 5); + gtk_widget_show(hbox); + + label = gtk_label_new(_("Show buttons as ")); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); + gtk_widget_show(label); + + opt = gtk_option_menu_new(); + gtk_box_pack_start(GTK_BOX(hbox), opt, FALSE, FALSE, 5); + chat_buttons_menu_init(opt); + gtk_widget_show(opt); + + gaim_button(_("Show larger entry box on new windows"), &display_options, OPT_DISP_CHAT_BIG_ENTRY, box); gaim_button(_("Raise windows on events"), &general_options, OPT_GEN_POPUP_CHAT, box); @@ -1587,6 +1715,8 @@ gtk_container_border_width(GTK_CONTAINER(prefs), 10); gtk_window_set_title(GTK_WINDOW(prefs), _("Gaim - Preferences")); gtk_widget_set_usize(prefs, 600, 550); + gtk_signal_connect(GTK_OBJECT(prefs), "destroy", + GTK_SIGNAL_FUNC(delete_prefs), NULL); vbox = gtk_vbox_new(FALSE, 5); gtk_container_add(GTK_CONTAINER(prefs), vbox); @@ -1723,6 +1853,16 @@ return FALSE; } +static void delete_prefs(GtkWidget *w, void *data) +{ + if (prefs) { + save_prefs(); + gtk_widget_destroy(prefs); + } + prefs = NULL; +} + + void set_option(GtkWidget *w, int *option) { *option = !(*option); @@ -1764,9 +1904,6 @@ if (blist) update_button_pix(); - if ((int)option == OPT_DISP_CHAT_SHOW_TEXT) update_chat_button_pix(); - if ((int)option == OPT_DISP_CONV_SHOW_TEXT) update_im_button_pix(); - #ifdef USE_APPLET update_pixmaps(); #endif
