comparison pidgin/gtkimhtmltoolbar.c @ 22885:36c3f901480d

disapproval of revision '9cbb69e06e19c581b9691f6acb2c48f204050dd6'
author Richard Laager <rlaager@wiktel.com>
date Sat, 10 May 2008 09:24:52 +0000
parents b8f861d7b540
children ed346fedec30 dea8b856466e
comparison
equal deleted inserted replaced
22884:b8f861d7b540 22885:36c3f901480d
40 #include "gtkutils.h" 40 #include "gtkutils.h"
41 41
42 #include <gdk/gdkkeysyms.h> 42 #include <gdk/gdkkeysyms.h>
43 43
44 static GtkHBoxClass *parent_class = NULL; 44 static GtkHBoxClass *parent_class = NULL;
45 static GtkSettings *settings = NULL;
46 45
47 static void toggle_button_set_active_block(GtkToggleButton *button, 46 static void toggle_button_set_active_block(GtkToggleButton *button,
48 gboolean is_active, 47 gboolean is_active,
49 GtkIMHtmlToolbar *toolbar); 48 GtkIMHtmlToolbar *toolbar);
50 49
51 static gboolean get_gtk_wide(void);
52
53 /* If we're not overriding GTK+, grab its potentially new default and use that. */
54 static void toolbar_style_changed_cb(GObject *obj, GParamSpec *pspec, gpointer data)
55 {
56 /* If we're not overriding GTK+, grab its potentially new default and use that.
57 * Otherwise, if the potentially new default matches the user's setting, we
58 * no longer want to override. */
59 if (!purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/toolbar/override_gtk"))
60 {
61 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/conversations/toolbar/wide",
62 get_gtk_wide());
63 }
64 else
65 {
66 gboolean gtk_wide = get_gtk_wide();
67 gboolean pidgin_wide = purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/toolbar/wide");
68 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/conversations/toolbar/override_gtk", (gtk_wide != pidgin_wide));
69 }
70 }
71
72 static gboolean get_gtk_wide()
73 {
74 gint style;
75
76 if (settings == NULL)
77 {
78 settings = gtk_settings_get_default();
79 g_signal_connect(settings, "notify::gtk-toolbar-style",
80 G_CALLBACK(toolbar_style_changed_cb), NULL);
81 }
82
83 g_object_get(settings, "gtk-toolbar-style", &style, NULL);
84
85 return (style == GTK_TOOLBAR_ICONS);
86 }
87 50
88 static void do_bold(GtkWidget *bold, GtkIMHtmlToolbar *toolbar) 51 static void do_bold(GtkWidget *bold, GtkIMHtmlToolbar *toolbar)
89 { 52 {
90 g_return_if_fail(toolbar != NULL); 53 g_return_if_fail(toolbar != NULL);
91 gtk_imhtml_toggle_bold(GTK_IMHTML(toolbar->imhtml)); 54 gtk_imhtml_toggle_bold(GTK_IMHTML(toolbar->imhtml));
1068 1031
1069 G_OBJECT_CLASS(parent_class)->finalize (object); 1032 G_OBJECT_CLASS(parent_class)->finalize (object);
1070 } 1033 }
1071 1034
1072 static void 1035 static void
1073 switch_toolbar_view(GtkWidget *item, gpointer data) 1036 switch_toolbar_view(GtkWidget *item, GtkIMHtmlToolbar *toolbar)
1074 { 1037 {
1075 gboolean gtk_wide; /* The current GTK+ default. */ 1038 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/conversations/toolbar/wide",
1076 gboolean pidgin_wide; /* The desired Pidgin setting. */ 1039 !purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/toolbar/wide"));
1077
1078 gtk_wide = get_gtk_wide();
1079 pidgin_wide = !purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/toolbar/wide");
1080
1081 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/conversations/toolbar/override_gtk", (gtk_wide != pidgin_wide));
1082 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/conversations/toolbar/wide", pidgin_wide);
1083 } 1040 }
1084 1041
1085 static gboolean 1042 static gboolean
1086 gtk_imhtmltoolbar_popup_menu(GtkWidget *widget, GdkEventButton *event, GtkIMHtmlToolbar *toolbar) 1043 gtk_imhtmltoolbar_popup_menu(GtkWidget *widget, GdkEventButton *event, GtkIMHtmlToolbar *toolbar)
1087 { 1044 {
1094 1051
1095 wide = GTK_WIDGET_VISIBLE(toolbar->bold); 1052 wide = GTK_WIDGET_VISIBLE(toolbar->bold);
1096 1053
1097 menu = gtk_menu_new(); 1054 menu = gtk_menu_new();
1098 item = gtk_menu_item_new_with_mnemonic(wide ? _("Group Items") : _("Ungroup Items")); 1055 item = gtk_menu_item_new_with_mnemonic(wide ? _("Group Items") : _("Ungroup Items"));
1099 g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(switch_toolbar_view), NULL); 1056 g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(switch_toolbar_view), toolbar);
1100 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); 1057 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
1101 gtk_widget_show(item); 1058 gtk_widget_show(item);
1102 1059
1103 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, pidgin_menu_position_func_helper, 1060 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, pidgin_menu_position_func_helper,
1104 widget, event->button, event->time); 1061 widget, event->button, event->time);
1115 parent_class = gtk_type_class(GTK_TYPE_HBOX); 1072 parent_class = gtk_type_class(GTK_TYPE_HBOX);
1116 gobject_class->finalize = gtk_imhtmltoolbar_finalize; 1073 gobject_class->finalize = gtk_imhtmltoolbar_finalize;
1117 1074
1118 purple_prefs_add_none(PIDGIN_PREFS_ROOT "/conversations/toolbar"); 1075 purple_prefs_add_none(PIDGIN_PREFS_ROOT "/conversations/toolbar");
1119 purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/toolbar/wide", FALSE); 1076 purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/toolbar/wide", FALSE);
1120 purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/toolbar/override_gtk", FALSE);
1121 } 1077 }
1122 1078
1123 static void gtk_imhtmltoolbar_create_old_buttons(GtkIMHtmlToolbar *toolbar) 1079 static void gtk_imhtmltoolbar_create_old_buttons(GtkIMHtmlToolbar *toolbar)
1124 { 1080 {
1125 GtkWidget *hbox; 1081 GtkWidget *hbox;
1355 1311
1356 gtk_box_pack_start(GTK_BOX(hbox), box, FALSE, FALSE, 0); 1312 gtk_box_pack_start(GTK_BOX(hbox), box, FALSE, FALSE, 0);
1357 g_object_set_data(G_OBJECT(hbox), "lean-view", box); 1313 g_object_set_data(G_OBJECT(hbox), "lean-view", box);
1358 gtk_widget_show(box); 1314 gtk_widget_show(box);
1359 1315
1360 toolbar_style_changed_cb(NULL, NULL, NULL);
1361 purple_prefs_connect_callback(toolbar, PIDGIN_PREFS_ROOT "/conversations/toolbar/wide", 1316 purple_prefs_connect_callback(toolbar, PIDGIN_PREFS_ROOT "/conversations/toolbar/wide",
1362 imhtmltoolbar_view_pref_changed, toolbar); 1317 imhtmltoolbar_view_pref_changed, toolbar);
1363 g_signal_connect_data(G_OBJECT(toolbar), "realize", 1318 g_signal_connect_data(G_OBJECT(toolbar), "realize",
1364 G_CALLBACK(purple_prefs_trigger_callback), PIDGIN_PREFS_ROOT "/conversations/toolbar/wide", 1319 G_CALLBACK(purple_prefs_trigger_callback), PIDGIN_PREFS_ROOT "/conversations/toolbar/wide",
1365 NULL, G_CONNECT_AFTER | G_CONNECT_SWAPPED); 1320 NULL, G_CONNECT_AFTER | G_CONNECT_SWAPPED);