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