| 1031 GObjectClass *gobject_class; |
1064 GObjectClass *gobject_class; |
| 1032 object_class = (GtkObjectClass*) class; |
1065 object_class = (GtkObjectClass*) class; |
| 1033 gobject_class = (GObjectClass*) class; |
1066 gobject_class = (GObjectClass*) class; |
| 1034 parent_class = gtk_type_class(GTK_TYPE_HBOX); |
1067 parent_class = gtk_type_class(GTK_TYPE_HBOX); |
| 1035 gobject_class->finalize = gtk_imhtmltoolbar_finalize; |
1068 gobject_class->finalize = gtk_imhtmltoolbar_finalize; |
| |
1069 |
| |
1070 purple_prefs_add_none(PIDGIN_PREFS_ROOT "/conversations/toolbar"); |
| |
1071 purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/toolbar/wide", FALSE); |
| 1036 } |
1072 } |
| 1037 |
1073 |
| 1038 static void gtk_imhtmltoolbar_create_old_buttons(GtkIMHtmlToolbar *toolbar) |
1074 static void gtk_imhtmltoolbar_create_old_buttons(GtkIMHtmlToolbar *toolbar) |
| 1039 { |
1075 { |
| |
1076 GtkWidget *hbox; |
| 1040 GtkWidget *button; |
1077 GtkWidget *button; |
| 1041 /* Bold */ |
1078 struct { |
| 1042 button = pidgin_pixbuf_toolbar_button_from_stock(GTK_STOCK_BOLD); |
1079 char *stock; |
| 1043 g_signal_connect(G_OBJECT(button), "clicked", |
1080 gpointer callback; |
| 1044 G_CALLBACK(do_bold), toolbar); |
1081 GtkWidget **button; |
| 1045 toolbar->bold = button; |
1082 const char *tooltip; |
| 1046 |
1083 } buttons[] = { |
| 1047 |
1084 {GTK_STOCK_BOLD, G_CALLBACK(do_bold), &toolbar->bold, _("Bold")}, |
| 1048 /* Italic */ |
1085 {GTK_STOCK_ITALIC, do_italic, &toolbar->italic, _("Italic")}, |
| 1049 button = pidgin_pixbuf_toolbar_button_from_stock(GTK_STOCK_ITALIC); |
1086 {GTK_STOCK_UNDERLINE, do_underline, &toolbar->underline, _("Underline")}, |
| 1050 g_signal_connect(G_OBJECT(button), "clicked", |
1087 {GTK_STOCK_STRIKETHROUGH, do_strikethrough, &toolbar->strikethrough, _("Strikethrough")}, |
| 1051 G_CALLBACK(do_italic), toolbar); |
1088 {"", NULL, NULL, NULL}, |
| 1052 toolbar->italic = button; |
1089 {PIDGIN_STOCK_TOOLBAR_TEXT_LARGER, do_big, &toolbar->larger_size, _("Increase Font Size")}, |
| 1053 |
1090 {PIDGIN_STOCK_TOOLBAR_TEXT_SMALLER, do_small, &toolbar->smaller_size, _("Decrease Font Size")}, |
| 1054 /* Underline */ |
1091 {"", NULL, NULL, NULL}, |
| 1055 button = pidgin_pixbuf_toolbar_button_from_stock(GTK_STOCK_UNDERLINE); |
1092 {PIDGIN_STOCK_TOOLBAR_FONT_FACE, toggle_font, &toolbar->font, _("Font Face")}, |
| 1056 g_signal_connect(G_OBJECT(button), "clicked", |
1093 {PIDGIN_STOCK_TOOLBAR_FGCOLOR, toggle_bg_color, &toolbar->bgcolor, _("Background Color")}, |
| 1057 G_CALLBACK(do_underline), toolbar); |
1094 {PIDGIN_STOCK_TOOLBAR_BGCOLOR, toggle_fg_color, &toolbar->fgcolor, _("Foreground Color")}, |
| 1058 toolbar->underline = button; |
1095 {"", NULL, NULL, NULL}, |
| 1059 |
1096 {PIDGIN_STOCK_CLEAR, clear_formatting_cb, &toolbar->clear, _("Reset Formatting")}, |
| 1060 |
1097 {"", NULL, NULL, NULL}, |
| 1061 /* Strikethrough */ |
1098 {PIDGIN_STOCK_TOOLBAR_INSERT_LINK, insert_link_cb, &toolbar->link, _("Insert Link")}, |
| 1062 button = pidgin_pixbuf_toolbar_button_from_stock(GTK_STOCK_STRIKETHROUGH); |
1099 {PIDGIN_STOCK_TOOLBAR_INSERT_IMAGE, insert_image_cb, &toolbar->image, _("Insert IM Image")}, |
| 1063 g_signal_connect(G_OBJECT(button), "clicked", |
1100 {PIDGIN_STOCK_TOOLBAR_SMILEY, insert_smiley_cb, &toolbar->smiley, _("Insert Smiley")}, |
| 1064 G_CALLBACK(do_strikethrough), toolbar); |
1101 {NULL, NULL, NULL, NULL} |
| 1065 toolbar->strikethrough = button; |
1102 }; |
| 1066 |
1103 int iter; |
| 1067 /* Increase font size */ |
1104 |
| 1068 button = pidgin_pixbuf_toolbar_button_from_stock(PIDGIN_STOCK_TOOLBAR_TEXT_LARGER); |
1105 hbox = gtk_hbox_new(FALSE, 0); |
| 1069 g_signal_connect(G_OBJECT(button), "clicked", |
1106 |
| 1070 G_CALLBACK(do_big), toolbar); |
1107 for (iter = 0; buttons[iter].stock; iter++) { |
| 1071 toolbar->larger_size = button; |
1108 if (buttons[iter].stock[0]) { |
| 1072 |
1109 button = pidgin_pixbuf_toolbar_button_from_stock(buttons[iter].stock); |
| 1073 /* Decrease font size */ |
1110 g_signal_connect(G_OBJECT(button), "clicked", |
| 1074 button = pidgin_pixbuf_toolbar_button_from_stock(PIDGIN_STOCK_TOOLBAR_TEXT_SMALLER); |
1111 G_CALLBACK(buttons[iter].callback), toolbar); |
| 1075 g_signal_connect(G_OBJECT(button), "clicked", |
1112 *(buttons[iter].button) = button; |
| 1076 G_CALLBACK(do_small), toolbar); |
1113 gtk_tooltips_set_tip(toolbar->tooltips, button, buttons[iter].tooltip, NULL); |
| 1077 toolbar->smaller_size = button; |
1114 } else |
| 1078 |
1115 button = gtk_vseparator_new(); |
| 1079 /* Font Face */ |
1116 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); |
| 1080 |
1117 } |
| 1081 button = pidgin_pixbuf_toolbar_button_from_stock(PIDGIN_STOCK_TOOLBAR_FONT_FACE); |
1118 |
| 1082 g_signal_connect(G_OBJECT(button), "clicked", |
1119 gtk_box_pack_start(GTK_BOX(toolbar), hbox, FALSE, FALSE, 0); |
| 1083 G_CALLBACK(toggle_font), toolbar); |
1120 g_object_set_data(G_OBJECT(toolbar), "wide-view", hbox); |
| 1084 toolbar->font = button; |
|
| 1085 |
|
| 1086 /* Foreground Color */ |
|
| 1087 button = pidgin_pixbuf_toolbar_button_from_stock(PIDGIN_STOCK_TOOLBAR_FGCOLOR); |
|
| 1088 g_signal_connect(G_OBJECT(button), "clicked", |
|
| 1089 G_CALLBACK(toggle_fg_color), toolbar); |
|
| 1090 toolbar->fgcolor = button; |
|
| 1091 |
|
| 1092 /* Background Color */ |
|
| 1093 button = pidgin_pixbuf_toolbar_button_from_stock(PIDGIN_STOCK_TOOLBAR_BGCOLOR); |
|
| 1094 g_signal_connect(G_OBJECT(button), "clicked", |
|
| 1095 G_CALLBACK(toggle_bg_color), toolbar); |
|
| 1096 toolbar->bgcolor = button; |
|
| 1097 |
|
| 1098 button = pidgin_pixbuf_toolbar_button_from_stock(PIDGIN_STOCK_TOOLBAR_INSERT_LINK); |
|
| 1099 g_signal_connect(G_OBJECT(button), "clicked", |
|
| 1100 G_CALLBACK(insert_link_cb), toolbar); |
|
| 1101 toolbar->link = button; |
|
| 1102 |
|
| 1103 /* Insert IM Image */ |
|
| 1104 button = pidgin_pixbuf_toolbar_button_from_stock(PIDGIN_STOCK_TOOLBAR_INSERT_IMAGE); |
|
| 1105 g_signal_connect(G_OBJECT(button), "clicked", |
|
| 1106 G_CALLBACK(insert_image_cb), toolbar); |
|
| 1107 toolbar->image = button; |
|
| 1108 |
|
| 1109 /* Insert Smiley */ |
|
| 1110 button = pidgin_pixbuf_toolbar_button_from_stock(PIDGIN_STOCK_TOOLBAR_SMILEY); |
|
| 1111 g_signal_connect(G_OBJECT(button), "clicked", |
|
| 1112 G_CALLBACK(insert_smiley_cb), toolbar); |
|
| 1113 toolbar->smiley = button; |
|
| 1114 |
|
| 1115 /* Reset formatting */ |
|
| 1116 button = pidgin_pixbuf_toolbar_button_from_stock(PIDGIN_STOCK_TOOLBAR_SMILEY); |
|
| 1117 g_signal_connect(G_OBJECT(button), "clicked", |
|
| 1118 G_CALLBACK(clear_formatting_cb), toolbar); |
|
| 1119 toolbar->clear = button; |
|
| 1120 } |
1121 } |
| 1121 |
1122 |
| 1122 static void |
1123 static void |
| 1123 button_sensitiveness_changed(GtkWidget *button, gpointer dontcare, GtkWidget *item) |
1124 button_sensitiveness_changed(GtkWidget *button, gpointer dontcare, GtkWidget *item) |
| 1124 { |
1125 { |
| 1201 gtk_box_pack_start(GTK_BOX(bbox), image, FALSE, FALSE, 0); |
1214 gtk_box_pack_start(GTK_BOX(bbox), image, FALSE, FALSE, 0); |
| 1202 label = gtk_label_new_with_mnemonic(_("_Font")); |
1215 label = gtk_label_new_with_mnemonic(_("_Font")); |
| 1203 gtk_label_set_use_markup(GTK_LABEL(label), TRUE); |
1216 gtk_label_set_use_markup(GTK_LABEL(label), TRUE); |
| 1204 g_object_set_data(G_OBJECT(hbox), "font_label", label); |
1217 g_object_set_data(G_OBJECT(hbox), "font_label", label); |
| 1205 gtk_box_pack_start(GTK_BOX(bbox), label, FALSE, FALSE, 0); |
1218 gtk_box_pack_start(GTK_BOX(bbox), label, FALSE, FALSE, 0); |
| 1206 gtk_box_pack_start(GTK_BOX(hbox), font_button, FALSE, FALSE, 0); |
1219 gtk_box_pack_start(GTK_BOX(box), font_button, FALSE, FALSE, 0); |
| 1207 gtk_widget_show_all(font_button); |
1220 gtk_widget_show_all(font_button); |
| 1208 |
1221 |
| 1209 font_menu = gtk_menu_new(); |
1222 font_menu = gtk_menu_new(); |
| 1210 g_object_set_data(G_OBJECT(toolbar), "font_menu", font_menu); |
1223 g_object_set_data(G_OBJECT(toolbar), "font_menu", font_menu); |
| 1211 |
1224 |
| 1242 gtk_container_add(GTK_CONTAINER(insert_button), bbox); |
1255 gtk_container_add(GTK_CONTAINER(insert_button), bbox); |
| 1243 image = gtk_image_new_from_stock(PIDGIN_STOCK_TOOLBAR_INSERT, gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL)); |
1256 image = gtk_image_new_from_stock(PIDGIN_STOCK_TOOLBAR_INSERT, gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL)); |
| 1244 gtk_box_pack_start(GTK_BOX(bbox), image, FALSE, FALSE, 0); |
1257 gtk_box_pack_start(GTK_BOX(bbox), image, FALSE, FALSE, 0); |
| 1245 label = gtk_label_new_with_mnemonic(_("_Insert")); |
1258 label = gtk_label_new_with_mnemonic(_("_Insert")); |
| 1246 gtk_box_pack_start(GTK_BOX(bbox), label, FALSE, FALSE, 0); |
1259 gtk_box_pack_start(GTK_BOX(bbox), label, FALSE, FALSE, 0); |
| 1247 gtk_box_pack_start(GTK_BOX(hbox), insert_button, FALSE, FALSE, 0); |
1260 gtk_box_pack_start(GTK_BOX(box), insert_button, FALSE, FALSE, 0); |
| 1248 gtk_widget_show_all(insert_button); |
1261 gtk_widget_show_all(insert_button); |
| 1249 |
1262 |
| 1250 insert_menu = gtk_menu_new(); |
1263 insert_menu = gtk_menu_new(); |
| 1251 g_object_set_data(G_OBJECT(toolbar), "insert_menu", insert_menu); |
1264 g_object_set_data(G_OBJECT(toolbar), "insert_menu", insert_menu); |
| 1252 |
1265 |
| 1275 |
1288 |
| 1276 g_signal_connect_swapped(G_OBJECT(insert_button), "button-press-event", G_CALLBACK(gtk_widget_activate), insert_button); |
1289 g_signal_connect_swapped(G_OBJECT(insert_button), "button-press-event", G_CALLBACK(gtk_widget_activate), insert_button); |
| 1277 g_signal_connect(G_OBJECT(insert_button), "activate", G_CALLBACK(pidgin_menu_clicked), insert_menu); |
1290 g_signal_connect(G_OBJECT(insert_button), "activate", G_CALLBACK(pidgin_menu_clicked), insert_menu); |
| 1278 g_signal_connect(G_OBJECT(insert_menu), "deactivate", G_CALLBACK(pidgin_menu_deactivate), insert_button); |
1291 g_signal_connect(G_OBJECT(insert_menu), "deactivate", G_CALLBACK(pidgin_menu_deactivate), insert_button); |
| 1279 toolbar->sml = NULL; |
1292 toolbar->sml = NULL; |
| |
1293 |
| |
1294 gtk_box_pack_start(GTK_BOX(hbox), box, FALSE, FALSE, 0); |
| |
1295 g_object_set_data(G_OBJECT(hbox), "lean-view", box); |
| |
1296 |
| |
1297 purple_prefs_connect_callback(toolbar, PIDGIN_PREFS_ROOT "/conversations/toolbar/wide", |
| |
1298 imhtmltoolbar_view_pref_changed, toolbar); |
| |
1299 purple_prefs_trigger_callback(PIDGIN_PREFS_ROOT "/conversations/toolbar/wide"); |
| |
1300 |
| |
1301 gtk_widget_add_events(event, GDK_BUTTON_PRESS_MASK); |
| |
1302 gtk_box_pack_start(GTK_BOX(hbox), event, TRUE, TRUE, 0); |
| |
1303 g_signal_connect(G_OBJECT(event), "button-press-event", G_CALLBACK(gtk_imhtmltoolbar_popup_menu), toolbar); |
| |
1304 gtk_widget_show(event); |
| 1280 } |
1305 } |
| 1281 |
1306 |
| 1282 GtkWidget *gtk_imhtmltoolbar_new() |
1307 GtkWidget *gtk_imhtmltoolbar_new() |
| 1283 { |
1308 { |
| 1284 return GTK_WIDGET(g_object_new(gtk_imhtmltoolbar_get_type(), NULL)); |
1309 return GTK_WIDGET(g_object_new(gtk_imhtmltoolbar_get_type(), NULL)); |