Mercurial > pidgin
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); |