Mercurial > pidgin
comparison pidgin/gtkimhtmltoolbar.c @ 32672:3828a61c44da
A boring and large patch so I can merge heads.
author | Elliott Sales de Andrade <qulogic@pidgin.im> |
---|---|
date | Fri, 23 Dec 2011 08:21:58 +0000 |
parents | ea07a6230b57 |
children |
comparison
equal
deleted
inserted
replaced
32671:0e69949b3e61 | 32672:3828a61c44da |
---|---|
41 #include "gtkthemes.h" | 41 #include "gtkthemes.h" |
42 #include "gtkutils.h" | 42 #include "gtkutils.h" |
43 | 43 |
44 #include <gdk/gdkkeysyms.h> | 44 #include <gdk/gdkkeysyms.h> |
45 | 45 |
46 #if !GTK_CHECK_VERSION(2,18,0) | |
47 #define gtk_widget_get_visible(x) GTK_WIDGET_VISIBLE(x) | |
48 #define gtk_widget_is_sensitive(x) GTK_WIDGET_IS_SENSITIVE(x) | |
49 #endif | |
50 | |
46 static GtkHBoxClass *parent_class = NULL; | 51 static GtkHBoxClass *parent_class = NULL; |
47 | 52 |
48 static void toggle_button_set_active_block(GtkToggleButton *button, | 53 static void toggle_button_set_active_block(GtkToggleButton *button, |
49 gboolean is_active, | 54 gboolean is_active, |
50 GtkIMHtmlToolbar *toolbar); | 55 GtkIMHtmlToolbar *toolbar); |
122 static void | 127 static void |
123 realize_toolbar_font(GtkWidget *widget, GtkIMHtmlToolbar *toolbar) | 128 realize_toolbar_font(GtkWidget *widget, GtkIMHtmlToolbar *toolbar) |
124 { | 129 { |
125 GtkFontSelection *sel; | 130 GtkFontSelection *sel; |
126 | 131 |
127 sel = GTK_FONT_SELECTION( | 132 sel = GTK_FONT_SELECTION(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog)->fontsel); |
128 gtk_font_selection_dialog_get_font_selection(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog))); | 133 gtk_widget_hide_all(gtk_widget_get_parent(sel->size_entry)); |
129 gtk_widget_hide(gtk_widget_get_parent( | 134 gtk_widget_show_all(sel->family_list); |
130 gtk_font_selection_get_size_entry(sel))); | 135 gtk_widget_show(gtk_widget_get_parent(sel->family_list)); |
131 gtk_widget_show_all(gtk_font_selection_get_family_list(sel)); | 136 gtk_widget_show(gtk_widget_get_parent(gtk_widget_get_parent(sel->family_list))); |
132 gtk_widget_show(gtk_widget_get_parent( | |
133 gtk_font_selection_get_family_list(sel))); | |
134 gtk_widget_show(gtk_widget_get_parent(gtk_widget_get_parent( | |
135 gtk_font_selection_get_family_list(sel)))); | |
136 } | 137 } |
137 | 138 |
138 static void | 139 static void |
139 cancel_toolbar_font(GtkWidget *widget, GtkIMHtmlToolbar *toolbar) | 140 cancel_toolbar_font(GtkWidget *widget, GtkIMHtmlToolbar *toolbar) |
140 { | 141 { |
193 DEFAULT_FONT_FACE); | 194 DEFAULT_FONT_FACE); |
194 } | 195 } |
195 | 196 |
196 g_signal_connect(G_OBJECT(toolbar->font_dialog), "delete_event", | 197 g_signal_connect(G_OBJECT(toolbar->font_dialog), "delete_event", |
197 G_CALLBACK(destroy_toolbar_font), toolbar); | 198 G_CALLBACK(destroy_toolbar_font), toolbar); |
198 g_signal_connect(G_OBJECT( | 199 g_signal_connect(G_OBJECT(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog)->ok_button), "clicked", |
199 gtk_font_selection_dialog_get_ok_button(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog))), | 200 G_CALLBACK(apply_font), toolbar->font_dialog); |
200 "clicked", G_CALLBACK(apply_font), toolbar->font_dialog); | 201 g_signal_connect(G_OBJECT(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog)->cancel_button), "clicked", |
201 g_signal_connect(G_OBJECT( | 202 G_CALLBACK(cancel_toolbar_font), toolbar); |
202 gtk_font_selection_dialog_get_cancel_button(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog))), | |
203 "clicked", G_CALLBACK(cancel_toolbar_font), toolbar); | |
204 g_signal_connect_after(G_OBJECT(toolbar->font_dialog), "realize", | 203 g_signal_connect_after(G_OBJECT(toolbar->font_dialog), "realize", |
205 G_CALLBACK(realize_toolbar_font), toolbar); | 204 G_CALLBACK(realize_toolbar_font), toolbar); |
206 } | 205 } |
207 gtk_window_present(GTK_WINDOW(toolbar->font_dialog)); | 206 gtk_window_present(GTK_WINDOW(toolbar->font_dialog)); |
208 } else { | 207 } else { |
257 GtkWidget *colorsel; | 256 GtkWidget *colorsel; |
258 GdkColor fgcolor; | 257 GdkColor fgcolor; |
259 char *color = gtk_imhtml_get_current_forecolor(GTK_IMHTML(toolbar->imhtml)); | 258 char *color = gtk_imhtml_get_current_forecolor(GTK_IMHTML(toolbar->imhtml)); |
260 | 259 |
261 if (!toolbar->fgcolor_dialog) { | 260 if (!toolbar->fgcolor_dialog) { |
262 GtkWidget *ok_button; | |
263 GtkWidget *cancel_button; | |
264 | 261 |
265 toolbar->fgcolor_dialog = gtk_color_selection_dialog_new(_("Select Text Color")); | 262 toolbar->fgcolor_dialog = gtk_color_selection_dialog_new(_("Select Text Color")); |
266 colorsel = | 263 colorsel = GTK_COLOR_SELECTION_DIALOG(toolbar->fgcolor_dialog)->colorsel; |
267 gtk_color_selection_dialog_get_color_selection(GTK_COLOR_SELECTION_DIALOG(toolbar->fgcolor_dialog)); | |
268 if (color) { | 264 if (color) { |
269 gdk_color_parse(color, &fgcolor); | 265 gdk_color_parse(color, &fgcolor); |
270 gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(colorsel), &fgcolor); | 266 gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(colorsel), &fgcolor); |
271 g_free(color); | 267 g_free(color); |
272 } | 268 } |
273 | 269 |
274 g_object_set_data(G_OBJECT(colorsel), "purple_toolbar", toolbar); | 270 g_object_set_data(G_OBJECT(colorsel), "purple_toolbar", toolbar); |
275 | 271 |
276 g_object_get(G_OBJECT(toolbar->fgcolor_dialog), "ok-button", &ok_button, NULL); | |
277 g_object_get(G_OBJECT(toolbar->fgcolor_dialog), "cancel-button", &cancel_button, NULL); | |
278 g_signal_connect(G_OBJECT(toolbar->fgcolor_dialog), "delete_event", | 272 g_signal_connect(G_OBJECT(toolbar->fgcolor_dialog), "delete_event", |
279 G_CALLBACK(destroy_toolbar_fgcolor), toolbar); | 273 G_CALLBACK(destroy_toolbar_fgcolor), toolbar); |
280 g_signal_connect(G_OBJECT(ok_button), "clicked", G_CALLBACK(do_fgcolor), colorsel); | 274 g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(toolbar->fgcolor_dialog)->ok_button), "clicked", |
281 g_signal_connect(G_OBJECT(cancel_button), "clicked", | 275 G_CALLBACK(do_fgcolor), colorsel); |
282 G_CALLBACK(cancel_toolbar_fgcolor), toolbar); | 276 g_signal_connect(G_OBJECT (GTK_COLOR_SELECTION_DIALOG(toolbar->fgcolor_dialog)->cancel_button), "clicked", |
277 G_CALLBACK(cancel_toolbar_fgcolor), toolbar); | |
283 } | 278 } |
284 gtk_window_present(GTK_WINDOW(toolbar->fgcolor_dialog)); | 279 gtk_window_present(GTK_WINDOW(toolbar->fgcolor_dialog)); |
285 } else { | 280 } else { |
286 cancel_toolbar_fgcolor(color, toolbar); | 281 cancel_toolbar_fgcolor(color, toolbar); |
287 } | 282 } |
341 GtkWidget *colorsel; | 336 GtkWidget *colorsel; |
342 GdkColor bgcolor; | 337 GdkColor bgcolor; |
343 char *color = gtk_imhtml_get_current_backcolor(GTK_IMHTML(toolbar->imhtml)); | 338 char *color = gtk_imhtml_get_current_backcolor(GTK_IMHTML(toolbar->imhtml)); |
344 | 339 |
345 if (!toolbar->bgcolor_dialog) { | 340 if (!toolbar->bgcolor_dialog) { |
346 GtkWidget *ok_button; | |
347 GtkWidget *cancel_button; | |
348 | 341 |
349 toolbar->bgcolor_dialog = gtk_color_selection_dialog_new(_("Select Background Color")); | 342 toolbar->bgcolor_dialog = gtk_color_selection_dialog_new(_("Select Background Color")); |
350 colorsel = | 343 colorsel = GTK_COLOR_SELECTION_DIALOG(toolbar->bgcolor_dialog)->colorsel; |
351 gtk_color_selection_dialog_get_color_selection(GTK_COLOR_SELECTION_DIALOG(toolbar->fgcolor_dialog)); | |
352 | |
353 if (color) { | 344 if (color) { |
354 gdk_color_parse(color, &bgcolor); | 345 gdk_color_parse(color, &bgcolor); |
355 gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(colorsel), &bgcolor); | 346 gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(colorsel), &bgcolor); |
356 g_free(color); | 347 g_free(color); |
357 } | 348 } |
358 | 349 |
359 g_object_set_data(G_OBJECT(colorsel), "purple_toolbar", toolbar); | 350 g_object_set_data(G_OBJECT(colorsel), "purple_toolbar", toolbar); |
360 | 351 |
361 g_object_get(G_OBJECT(toolbar->bgcolor_dialog), "ok-button", &ok_button, NULL); | |
362 g_object_get(G_OBJECT(toolbar->bgcolor_dialog), "cancel-button", | |
363 &cancel_button, NULL); | |
364 g_signal_connect(G_OBJECT(toolbar->bgcolor_dialog), "delete_event", | 352 g_signal_connect(G_OBJECT(toolbar->bgcolor_dialog), "delete_event", |
365 G_CALLBACK(destroy_toolbar_bgcolor), toolbar); | 353 G_CALLBACK(destroy_toolbar_bgcolor), toolbar); |
366 g_signal_connect(G_OBJECT(ok_button), "clicked", | 354 g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(toolbar->bgcolor_dialog)->ok_button), "clicked", |
367 G_CALLBACK(do_bgcolor), colorsel); | 355 G_CALLBACK(do_bgcolor), colorsel); |
368 g_signal_connect(G_OBJECT(cancel_button), "clicked", | 356 g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(toolbar->bgcolor_dialog)->cancel_button), "clicked", |
369 G_CALLBACK(cancel_toolbar_bgcolor), toolbar); | 357 G_CALLBACK(cancel_toolbar_bgcolor), toolbar); |
370 | 358 |
371 } | 359 } |
372 gtk_window_present(GTK_WINDOW(toolbar->bgcolor_dialog)); | 360 gtk_window_present(GTK_WINDOW(toolbar->bgcolor_dialog)); |
373 } else { | 361 } else { |
476 gtk_widget_grab_focus(toolbar->imhtml); | 464 gtk_widget_grab_focus(toolbar->imhtml); |
477 } | 465 } |
478 | 466 |
479 static void insert_hr_cb(GtkWidget *widget, GtkIMHtmlToolbar *toolbar) | 467 static void insert_hr_cb(GtkWidget *widget, GtkIMHtmlToolbar *toolbar) |
480 { | 468 { |
481 GtkTextIter iter; | 469 GtkTextIter iter; |
482 GtkTextMark *ins; | 470 GtkTextMark *ins; |
483 GtkIMHtmlScalable *hr; | 471 GtkIMHtmlScalable *hr; |
484 | 472 |
485 ins = gtk_text_buffer_get_insert(gtk_text_view_get_buffer(GTK_TEXT_VIEW(toolbar->imhtml))); | 473 ins = gtk_text_buffer_get_insert(gtk_text_view_get_buffer(GTK_TEXT_VIEW(toolbar->imhtml))); |
486 gtk_text_buffer_get_iter_at_mark(gtk_text_view_get_buffer(GTK_TEXT_VIEW(toolbar->imhtml)), &iter, ins); | 474 gtk_text_buffer_get_iter_at_mark(gtk_text_view_get_buffer(GTK_TEXT_VIEW(toolbar->imhtml)), &iter, ins); |
487 hr = gtk_imhtml_hr_new(); | 475 hr = gtk_imhtml_hr_new(); |
488 gtk_imhtml_hr_add_to(hr, GTK_IMHTML(toolbar->imhtml), &iter); | 476 gtk_imhtml_hr_add_to(hr, GTK_IMHTML(toolbar->imhtml), &iter); |
489 } | 477 } |
490 | 478 |
491 static void | 479 static void |
737 } | 725 } |
738 | 726 |
739 static gboolean | 727 static gboolean |
740 smiley_dialog_input_cb(GtkWidget *dialog, GdkEvent *event, GtkIMHtmlToolbar *toolbar) | 728 smiley_dialog_input_cb(GtkWidget *dialog, GdkEvent *event, GtkIMHtmlToolbar *toolbar) |
741 { | 729 { |
742 if ((event->type == GDK_KEY_PRESS && event->key.keyval == GDK_KEY_Escape) || | 730 if ((event->type == GDK_KEY_PRESS && event->key.keyval == GDK_Escape) || |
743 (event->type == GDK_BUTTON_PRESS && event->button.button == 1)) | 731 (event->type == GDK_BUTTON_PRESS && event->button.button == 1)) |
744 { | 732 { |
745 close_smiley_dialog(toolbar); | 733 close_smiley_dialog(toolbar); |
746 return TRUE; | 734 return TRUE; |
747 } | 735 } |
927 static void send_attention_cb(GtkWidget *attention, GtkIMHtmlToolbar *toolbar) | 915 static void send_attention_cb(GtkWidget *attention, GtkIMHtmlToolbar *toolbar) |
928 { | 916 { |
929 PurpleConversation *conv = | 917 PurpleConversation *conv = |
930 g_object_get_data(G_OBJECT(toolbar), "active_conv"); | 918 g_object_get_data(G_OBJECT(toolbar), "active_conv"); |
931 const gchar *who = purple_conversation_get_name(conv); | 919 const gchar *who = purple_conversation_get_name(conv); |
932 PurpleConnection *gc = purple_conversation_get_gc(conv); | 920 PurpleConnection *gc = purple_conversation_get_connection(conv); |
933 | 921 |
934 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(attention), FALSE, toolbar); | 922 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(attention), FALSE, toolbar); |
935 purple_prpl_send_attention(gc, who, 0); | 923 purple_prpl_send_attention(gc, who, 0); |
936 gtk_widget_grab_focus(toolbar->imhtml); | 924 gtk_widget_grab_focus(toolbar->imhtml); |
937 } | 925 } |
1107 gboolean *push_in, | 1095 gboolean *push_in, |
1108 gpointer data) | 1096 gpointer data) |
1109 { | 1097 { |
1110 GtkWidget *widget = GTK_WIDGET(data); | 1098 GtkWidget *widget = GTK_WIDGET(data); |
1111 GtkRequisition menu_req; | 1099 GtkRequisition menu_req; |
1112 GtkAllocation allocation; | 1100 gint ythickness = widget->style->ythickness; |
1113 gint ythickness = gtk_widget_get_style(widget)->ythickness; | |
1114 int savy; | 1101 int savy; |
1115 | 1102 |
1116 gtk_widget_get_allocation(widget, &allocation); | |
1117 gtk_widget_size_request(GTK_WIDGET (menu), &menu_req); | 1103 gtk_widget_size_request(GTK_WIDGET (menu), &menu_req); |
1118 gdk_window_get_origin(gtk_widget_get_window(widget), x, y); | 1104 gdk_window_get_origin(widget->window, x, y); |
1119 *x += allocation.x; | 1105 *x += widget->allocation.x; |
1120 *y += allocation.y + allocation.height; | 1106 *y += widget->allocation.y + widget->allocation.height; |
1121 savy = *y; | 1107 savy = *y; |
1122 | 1108 |
1123 pidgin_menu_position_func_helper(menu, x, y, push_in, data); | 1109 pidgin_menu_position_func_helper(menu, x, y, push_in, data); |
1124 | 1110 |
1125 if (savy > *y + ythickness + 1) | 1111 if (savy > *y + ythickness + 1) |
1126 *y -= allocation.height; | 1112 *y -= widget->allocation.height; |
1127 } | 1113 } |
1128 | 1114 |
1129 static gboolean | 1115 static gboolean |
1130 button_activate_on_click(GtkWidget *button, GdkEventButton *event, GtkIMHtmlToolbar *toolbar) | 1116 button_activate_on_click(GtkWidget *button, GdkEventButton *event, GtkIMHtmlToolbar *toolbar) |
1131 { | 1117 { |
1266 {"", NULL, NULL, NULL}, | 1252 {"", NULL, NULL, NULL}, |
1267 {PIDGIN_STOCK_TOOLBAR_INSERT_IMAGE, insert_image_cb, &toolbar->image, _("Insert IM Image")}, | 1253 {PIDGIN_STOCK_TOOLBAR_INSERT_IMAGE, insert_image_cb, &toolbar->image, _("Insert IM Image")}, |
1268 {PIDGIN_STOCK_TOOLBAR_INSERT_LINK, insert_link_cb, &toolbar->link, _("Insert Link")}, | 1254 {PIDGIN_STOCK_TOOLBAR_INSERT_LINK, insert_link_cb, &toolbar->link, _("Insert Link")}, |
1269 {"", NULL, NULL, NULL}, | 1255 {"", NULL, NULL, NULL}, |
1270 {PIDGIN_STOCK_TOOLBAR_SMILEY, insert_smiley_cb, &toolbar->smiley, _("Insert Smiley")}, | 1256 {PIDGIN_STOCK_TOOLBAR_SMILEY, insert_smiley_cb, &toolbar->smiley, _("Insert Smiley")}, |
1257 {PIDGIN_STOCK_TOOLBAR_SEND_ATTENTION, send_attention_cb, &toolbar->attention, _("Send Attention")}, | |
1271 {NULL, NULL, NULL, NULL} | 1258 {NULL, NULL, NULL, NULL} |
1272 }; | 1259 }; |
1273 int iter; | 1260 int iter; |
1274 | 1261 |
1275 hbox = gtk_hbox_new(FALSE, 0); | 1262 hbox = gtk_hbox_new(FALSE, 0); |
1288 #endif | 1275 #endif |
1289 } else | 1276 } else |
1290 button = gtk_vseparator_new(); | 1277 button = gtk_vseparator_new(); |
1291 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | 1278 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); |
1292 } | 1279 } |
1293 /* create the attention button (this is a bit hacky to not break ABI) */ | |
1294 button = pidgin_pixbuf_toolbar_button_from_stock(PIDGIN_STOCK_TOOLBAR_SEND_ATTENTION); | |
1295 g_signal_connect(G_OBJECT(button), "button-press-event", G_CALLBACK(gtk_imhtmltoolbar_popup_menu), toolbar); | |
1296 g_signal_connect(G_OBJECT(button), "clicked", | |
1297 G_CALLBACK(send_attention_cb), toolbar); | |
1298 g_object_set_data(G_OBJECT(toolbar), "attention", button); | |
1299 #if GTK_CHECK_VERSION(2,12,0) | |
1300 gtk_widget_set_tooltip_text(button, _("Send Attention")); | |
1301 #else | |
1302 gtk_tooltips_set_tip(toolbar->tooltips, button, _("Send Attention"), NULL); | |
1303 #endif | |
1304 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
1305 | 1280 |
1306 gtk_box_pack_start(GTK_BOX(toolbar), hbox, FALSE, FALSE, 0); | 1281 gtk_box_pack_start(GTK_BOX(toolbar), hbox, FALSE, FALSE, 0); |
1307 g_object_set_data(G_OBJECT(toolbar), "wide-view", hbox); | 1282 g_object_set_data(G_OBJECT(toolbar), "wide-view", hbox); |
1308 } | 1283 } |
1309 | 1284 |
1317 } | 1292 } |
1318 | 1293 |
1319 static void | 1294 static void |
1320 button_sensitiveness_changed(GtkWidget *button, gpointer dontcare, GtkWidget *item) | 1295 button_sensitiveness_changed(GtkWidget *button, gpointer dontcare, GtkWidget *item) |
1321 { | 1296 { |
1322 gtk_widget_set_sensitive(item, gtk_widget_get_sensitive(button)); | 1297 gtk_widget_set_sensitive(item, gtk_widget_is_sensitive(button)); |
1323 } | 1298 } |
1324 | 1299 |
1325 static void | 1300 static void |
1326 update_menuitem(GtkToggleButton *button, GtkCheckMenuItem *item) | 1301 update_menuitem(GtkToggleButton *button, GtkCheckMenuItem *item) |
1327 { | 1302 { |
1340 static void | 1315 static void |
1341 imhtmltoolbar_view_pref_changed(const char *name, PurplePrefType type, | 1316 imhtmltoolbar_view_pref_changed(const char *name, PurplePrefType type, |
1342 gconstpointer value, gpointer toolbar) | 1317 gconstpointer value, gpointer toolbar) |
1343 { | 1318 { |
1344 if (value) { | 1319 if (value) { |
1345 gtk_widget_hide(g_object_get_data(G_OBJECT(toolbar), "lean-view")); | 1320 gtk_widget_hide_all(g_object_get_data(G_OBJECT(toolbar), "lean-view")); |
1346 gtk_widget_show_all(g_object_get_data(G_OBJECT(toolbar), "wide-view")); | 1321 gtk_widget_show_all(g_object_get_data(G_OBJECT(toolbar), "wide-view")); |
1347 } else { | 1322 } else { |
1348 gtk_widget_hide(g_object_get_data(G_OBJECT(toolbar), "wide-view")); | 1323 gtk_widget_hide_all(g_object_get_data(G_OBJECT(toolbar), "wide-view")); |
1349 gtk_widget_show_all(g_object_get_data(G_OBJECT(toolbar), "lean-view")); | 1324 gtk_widget_show_all(g_object_get_data(G_OBJECT(toolbar), "lean-view")); |
1350 } | 1325 } |
1351 } | 1326 } |
1352 | 1327 |
1353 static void gtk_imhtmltoolbar_init (GtkIMHtmlToolbar *toolbar) | 1328 static void gtk_imhtmltoolbar_init (GtkIMHtmlToolbar *toolbar) |
1362 GtkWidget *attention_button; | 1337 GtkWidget *attention_button; |
1363 GtkWidget *font_menu; | 1338 GtkWidget *font_menu; |
1364 GtkWidget *insert_menu; | 1339 GtkWidget *insert_menu; |
1365 GtkWidget *menuitem; | 1340 GtkWidget *menuitem; |
1366 GtkWidget *sep; | 1341 GtkWidget *sep; |
1367 GObject *wide_attention_button; | |
1368 int i; | 1342 int i; |
1369 struct { | 1343 struct { |
1370 const char *label; | 1344 const char *label; |
1371 GtkWidget **button; | 1345 GtkWidget **button; |
1372 gboolean check; | 1346 gboolean check; |
1515 sep = gtk_vseparator_new(); | 1489 sep = gtk_vseparator_new(); |
1516 gtk_box_pack_start(GTK_BOX(box), sep, FALSE, FALSE, 0); | 1490 gtk_box_pack_start(GTK_BOX(box), sep, FALSE, FALSE, 0); |
1517 gtk_widget_show_all(sep); | 1491 gtk_widget_show_all(sep); |
1518 | 1492 |
1519 /* Attention */ | 1493 /* Attention */ |
1520 wide_attention_button = g_object_get_data(G_OBJECT(toolbar), "attention"); | |
1521 | |
1522 attention_button = gtk_button_new(); | 1494 attention_button = gtk_button_new(); |
1523 gtk_button_set_relief(GTK_BUTTON(attention_button), GTK_RELIEF_NONE); | 1495 gtk_button_set_relief(GTK_BUTTON(attention_button), GTK_RELIEF_NONE); |
1524 bbox = gtk_hbox_new(FALSE, 3); | 1496 bbox = gtk_hbox_new(FALSE, 3); |
1525 gtk_container_add(GTK_CONTAINER(attention_button), bbox); | 1497 gtk_container_add(GTK_CONTAINER(attention_button), bbox); |
1526 image = gtk_image_new_from_stock(PIDGIN_STOCK_TOOLBAR_SEND_ATTENTION, | 1498 image = gtk_image_new_from_stock(PIDGIN_STOCK_TOOLBAR_SEND_ATTENTION, |
1528 gtk_box_pack_start(GTK_BOX(bbox), image, FALSE, FALSE, 0); | 1500 gtk_box_pack_start(GTK_BOX(bbox), image, FALSE, FALSE, 0); |
1529 label = gtk_label_new_with_mnemonic(_("_Attention!")); | 1501 label = gtk_label_new_with_mnemonic(_("_Attention!")); |
1530 gtk_box_pack_start(GTK_BOX(bbox), label, FALSE, FALSE, 0); | 1502 gtk_box_pack_start(GTK_BOX(bbox), label, FALSE, FALSE, 0); |
1531 gtk_box_pack_start(GTK_BOX(box), attention_button, FALSE, FALSE, 0); | 1503 gtk_box_pack_start(GTK_BOX(box), attention_button, FALSE, FALSE, 0); |
1532 g_signal_connect_swapped(G_OBJECT(attention_button), "clicked", | 1504 g_signal_connect_swapped(G_OBJECT(attention_button), "clicked", |
1533 G_CALLBACK(gtk_button_clicked), wide_attention_button); | 1505 G_CALLBACK(gtk_button_clicked), toolbar->attention); |
1534 gtk_widget_show_all(attention_button); | 1506 gtk_widget_show_all(attention_button); |
1535 | 1507 |
1536 g_signal_connect(wide_attention_button, "notify::sensitive", | 1508 g_signal_connect(G_OBJECT(toolbar->attention), "notify::sensitive", |
1537 G_CALLBACK(button_sensitiveness_changed), attention_button); | 1509 G_CALLBACK(button_sensitiveness_changed), attention_button); |
1538 g_signal_connect(wide_attention_button, "notify::visible", | 1510 g_signal_connect(G_OBJECT(toolbar->attention), "notify::visible", |
1539 G_CALLBACK(button_visibility_changed), attention_button); | 1511 G_CALLBACK(button_visibility_changed), attention_button); |
1540 | 1512 |
1541 /* set attention button to be greyed out until we get a conversation */ | 1513 /* set attention button to be greyed out until we get a conversation */ |
1542 gtk_widget_set_sensitive(GTK_WIDGET(wide_attention_button), FALSE); | 1514 gtk_widget_set_sensitive(toolbar->attention, FALSE); |
1543 | 1515 |
1544 gtk_box_pack_start(GTK_BOX(hbox), box, FALSE, FALSE, 0); | 1516 gtk_box_pack_start(GTK_BOX(hbox), box, FALSE, FALSE, 0); |
1545 g_object_set_data(G_OBJECT(hbox), "lean-view", box); | 1517 g_object_set_data(G_OBJECT(hbox), "lean-view", box); |
1546 gtk_widget_show(box); | 1518 gtk_widget_show(box); |
1547 | 1519 |
1618 } | 1590 } |
1619 | 1591 |
1620 void gtk_imhtmltoolbar_switch_active_conversation(GtkIMHtmlToolbar *toolbar, | 1592 void gtk_imhtmltoolbar_switch_active_conversation(GtkIMHtmlToolbar *toolbar, |
1621 PurpleConversation *conv) | 1593 PurpleConversation *conv) |
1622 { | 1594 { |
1623 PurpleConnection *gc = purple_conversation_get_gc(conv); | 1595 PurpleConnection *gc = purple_conversation_get_connection(conv); |
1624 PurplePlugin *prpl = purple_connection_get_prpl(gc); | 1596 PurplePlugin *prpl = purple_connection_get_prpl(gc); |
1625 GtkWidget *attention = | |
1626 g_object_get_data(G_OBJECT(toolbar), "attention"); | |
1627 | 1597 |
1628 g_object_set_data(G_OBJECT(toolbar), "active_conv", conv); | 1598 g_object_set_data(G_OBJECT(toolbar), "active_conv", conv); |
1629 | 1599 |
1630 /* gray out attention button on protocols that don't support it | 1600 /* gray out attention button on protocols that don't support it |
1631 for the time being it is always disabled for chats */ | 1601 for the time being it is always disabled for chats */ |
1632 gtk_widget_set_sensitive(attention, | 1602 gtk_widget_set_sensitive(toolbar->attention, |
1633 conv && prpl && purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM && | 1603 conv && prpl && purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM && |
1634 PURPLE_PLUGIN_PROTOCOL_INFO(prpl)->send_attention != NULL); | 1604 PURPLE_PLUGIN_PROTOCOL_INFO(prpl)->send_attention != NULL); |
1635 } | 1605 } |
1636 | 1606 |