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