pidgin/gtkwebviewtoolbar.c

changeset 39238
53cfb9400de8
parent 38859
ed15916ec9ed
child 39274
7acdb1d9797c
equal deleted inserted replaced
39237:8d0af3b47338 39238:53cfb9400de8
40 40
41 #include <gdk/gdkkeysyms.h> 41 #include <gdk/gdkkeysyms.h>
42 42
43 #include "gtk3compat.h" 43 #include "gtk3compat.h"
44 44
45 #define PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(obj) \
46 (G_TYPE_INSTANCE_GET_PRIVATE((obj), PIDGIN_TYPE_WEBVIEWTOOLBAR, PidginWebViewToolbarPriv))
47
48 #define PIDGIN_WEBVIEWTOOLBAR_DEFAULT_FONT "sans-serif" 45 #define PIDGIN_WEBVIEWTOOLBAR_DEFAULT_FONT "sans-serif"
49 #define PIDGIN_WEBVIEWTOOLBAR_DEFAULT_BGCOLOR "inherit" 46 #define PIDGIN_WEBVIEWTOOLBAR_DEFAULT_BGCOLOR "inherit"
50 #define PIDGIN_WEBVIEWTOOLBAR_DEFAULT_FGCOLOR "#000000" 47 #define PIDGIN_WEBVIEWTOOLBAR_DEFAULT_FGCOLOR "#000000"
51 48
52 /****************************************************************************** 49 /******************************************************************************
53 * Structs 50 * Structs
54 *****************************************************************************/ 51 *****************************************************************************/
55 52
56 typedef struct _PidginWebViewToolbarPriv { 53 typedef struct _PidginWebViewToolbarPrivate {
57 PurpleConversation *active_conv; 54 PurpleConversation *active_conv;
58 55
59 GtkWidget *wide_view; 56 GtkWidget *wide_view;
60 GtkWidget *lean_view; 57 GtkWidget *lean_view;
61 58
93 GtkWidget *link_dialog; 90 GtkWidget *link_dialog;
94 GtkWidget *smiley_dialog; 91 GtkWidget *smiley_dialog;
95 GtkWidget *image_dialog; 92 GtkWidget *image_dialog;
96 93
97 gboolean allow_smileys; 94 gboolean allow_smileys;
98 } PidginWebViewToolbarPriv; 95 } PidginWebViewToolbarPrivate;
99 96
100 /****************************************************************************** 97 /******************************************************************************
101 * Globals 98 * Globals
102 *****************************************************************************/ 99 *****************************************************************************/
103 100
104 static GtkBoxClass *parent_class = NULL; 101 G_DEFINE_TYPE_WITH_PRIVATE(PidginWebViewToolbar, pidgin_webviewtoolbar,
102 GTK_TYPE_BOX);
105 103
106 /****************************************************************************** 104 /******************************************************************************
107 * Prototypes 105 * Prototypes
108 *****************************************************************************/ 106 *****************************************************************************/
109 107
202 } 200 }
203 201
204 static void 202 static void
205 destroy_toolbar_font(PidginWebViewToolbar *toolbar) 203 destroy_toolbar_font(PidginWebViewToolbar *toolbar)
206 { 204 {
207 PidginWebViewToolbarPriv *priv = PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); 205 PidginWebViewToolbarPrivate *priv =
206 pidgin_webviewtoolbar_get_instance_private(toolbar);
208 207
209 if (priv->font_dialog != NULL) 208 if (priv->font_dialog != NULL)
210 { 209 {
211 gtk_widget_destroy(priv->font_dialog); 210 gtk_widget_destroy(priv->font_dialog);
212 priv->font_dialog = NULL; 211 priv->font_dialog = NULL;
246 } 245 }
247 246
248 static void 247 static void
249 toggle_font(GtkAction *font, PidginWebViewToolbar *toolbar) 248 toggle_font(GtkAction *font, PidginWebViewToolbar *toolbar)
250 { 249 {
251 PidginWebViewToolbarPriv *priv = PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); 250 PidginWebViewToolbarPrivate *priv =
251 pidgin_webviewtoolbar_get_instance_private(toolbar);
252 252
253 if (gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(font))) { 253 if (gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(font))) {
254 char *fontname = pidgin_webview_get_current_fontface(PIDGIN_WEBVIEW(toolbar->webview)); 254 char *fontname = pidgin_webview_get_current_fontface(PIDGIN_WEBVIEW(toolbar->webview));
255 255
256 if (!priv->font_dialog) { 256 if (!priv->font_dialog) {
286 286
287 static gboolean 287 static gboolean
288 destroy_toolbar_fgcolor(GtkWidget *widget, GdkEvent *event, 288 destroy_toolbar_fgcolor(GtkWidget *widget, GdkEvent *event,
289 PidginWebViewToolbar *toolbar) 289 PidginWebViewToolbar *toolbar)
290 { 290 {
291 PidginWebViewToolbarPriv *priv = 291 PidginWebViewToolbarPrivate *priv =
292 PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); 292 pidgin_webviewtoolbar_get_instance_private(toolbar);
293 293
294 if (widget != NULL) { 294 if (widget != NULL) {
295 pidgin_webview_toggle_forecolor( 295 pidgin_webview_toggle_forecolor(
296 PIDGIN_WEBVIEW(toolbar->webview), 296 PIDGIN_WEBVIEW(toolbar->webview),
297 PIDGIN_WEBVIEWTOOLBAR_DEFAULT_FGCOLOR); 297 PIDGIN_WEBVIEWTOOLBAR_DEFAULT_FGCOLOR);
327 } 327 }
328 328
329 static void 329 static void
330 toggle_fg_color(GtkAction *color, PidginWebViewToolbar *toolbar) 330 toggle_fg_color(GtkAction *color, PidginWebViewToolbar *toolbar)
331 { 331 {
332 PidginWebViewToolbarPriv *priv = 332 PidginWebViewToolbarPrivate *priv =
333 PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); 333 pidgin_webviewtoolbar_get_instance_private(toolbar);
334 334
335 if (gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(color))) { 335 if (gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(color))) {
336 GdkRGBA fgcolor; 336 GdkRGBA fgcolor;
337 gchar *color = pidgin_webview_get_current_forecolor( 337 gchar *color = pidgin_webview_get_current_forecolor(
338 PIDGIN_WEBVIEW(toolbar->webview)); 338 PIDGIN_WEBVIEW(toolbar->webview));
371 371
372 static gboolean 372 static gboolean
373 destroy_toolbar_bgcolor(GtkWidget *widget, GdkEvent *event, 373 destroy_toolbar_bgcolor(GtkWidget *widget, GdkEvent *event,
374 PidginWebViewToolbar *toolbar) 374 PidginWebViewToolbar *toolbar)
375 { 375 {
376 PidginWebViewToolbarPriv *priv = 376 PidginWebViewToolbarPrivate *priv =
377 PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); 377 pidgin_webviewtoolbar_get_instance_private(toolbar);
378 if (widget != NULL) { 378 if (widget != NULL) {
379 pidgin_webview_toggle_backcolor( 379 pidgin_webview_toggle_backcolor(
380 PIDGIN_WEBVIEW(toolbar->webview), 380 PIDGIN_WEBVIEW(toolbar->webview),
381 PIDGIN_WEBVIEWTOOLBAR_DEFAULT_BGCOLOR); 381 PIDGIN_WEBVIEWTOOLBAR_DEFAULT_BGCOLOR);
382 } 382 }
411 } 411 }
412 412
413 static void 413 static void
414 toggle_bg_color(GtkAction *color, PidginWebViewToolbar *toolbar) 414 toggle_bg_color(GtkAction *color, PidginWebViewToolbar *toolbar)
415 { 415 {
416 PidginWebViewToolbarPriv *priv = 416 PidginWebViewToolbarPrivate *priv =
417 PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); 417 pidgin_webviewtoolbar_get_instance_private(toolbar);
418 418
419 if (gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(color))) { 419 if (gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(color))) {
420 GdkRGBA bgcolor; 420 GdkRGBA bgcolor;
421 gchar *color = pidgin_webview_get_current_backcolor( 421 gchar *color = pidgin_webview_get_current_backcolor(
422 PIDGIN_WEBVIEW(toolbar->webview)); 422 PIDGIN_WEBVIEW(toolbar->webview));
459 } 459 }
460 460
461 static void 461 static void
462 cancel_link_cb(PidginWebViewToolbar *toolbar, PurpleRequestFields *fields) 462 cancel_link_cb(PidginWebViewToolbar *toolbar, PurpleRequestFields *fields)
463 { 463 {
464 PidginWebViewToolbarPriv *priv = PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); 464 PidginWebViewToolbarPrivate *priv =
465 pidgin_webviewtoolbar_get_instance_private(toolbar);
465 gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(priv->link), FALSE); 466 gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(priv->link), FALSE);
466 467
467 priv->link_dialog = NULL; 468 priv->link_dialog = NULL;
468 } 469 }
469 470
470 static void 471 static void
471 close_link_dialog(PidginWebViewToolbar *toolbar) 472 close_link_dialog(PidginWebViewToolbar *toolbar)
472 { 473 {
473 PidginWebViewToolbarPriv *priv = PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); 474 PidginWebViewToolbarPrivate *priv =
475 pidgin_webviewtoolbar_get_instance_private(toolbar);
474 if (priv->link_dialog != NULL) 476 if (priv->link_dialog != NULL)
475 { 477 {
476 purple_request_close(PURPLE_REQUEST_FIELDS, priv->link_dialog); 478 purple_request_close(PURPLE_REQUEST_FIELDS, priv->link_dialog);
477 priv->link_dialog = NULL; 479 priv->link_dialog = NULL;
478 } 480 }
479 } 481 }
480 482
481 static void 483 static void
482 do_insert_link_cb(PidginWebViewToolbar *toolbar, PurpleRequestFields *fields) 484 do_insert_link_cb(PidginWebViewToolbar *toolbar, PurpleRequestFields *fields)
483 { 485 {
484 PidginWebViewToolbarPriv *priv = PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); 486 PidginWebViewToolbarPrivate *priv =
487 pidgin_webviewtoolbar_get_instance_private(toolbar);
485 const char *url, *description; 488 const char *url, *description;
486 489
487 url = purple_request_fields_get_string(fields, "url"); 490 url = purple_request_fields_get_string(fields, "url");
488 if (pidgin_webview_get_format_functions(PIDGIN_WEBVIEW(toolbar->webview)) & PIDGIN_WEBVIEW_LINKDESC) 491 if (pidgin_webview_get_format_functions(PIDGIN_WEBVIEW(toolbar->webview)) & PIDGIN_WEBVIEW_LINKDESC)
489 description = purple_request_fields_get_string(fields, "description"); 492 description = purple_request_fields_get_string(fields, "description");
498 } 501 }
499 502
500 static void 503 static void
501 insert_link_cb(GtkAction *action, PidginWebViewToolbar *toolbar) 504 insert_link_cb(GtkAction *action, PidginWebViewToolbar *toolbar)
502 { 505 {
503 PidginWebViewToolbarPriv *priv = PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); 506 PidginWebViewToolbarPrivate *priv =
507 pidgin_webviewtoolbar_get_instance_private(toolbar);
504 508
505 if (gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(priv->link))) { 509 if (gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(priv->link))) {
506 PurpleRequestFields *fields; 510 PurpleRequestFields *fields;
507 PurpleRequestFieldGroup *group; 511 PurpleRequestFieldGroup *group;
508 PurpleRequestField *field; 512 PurpleRequestField *field;
552 } 556 }
553 557
554 static void 558 static void
555 do_insert_image_cb(GtkWidget *widget, int response, PidginWebViewToolbar *toolbar) 559 do_insert_image_cb(GtkWidget *widget, int response, PidginWebViewToolbar *toolbar)
556 { 560 {
557 PidginWebViewToolbarPriv *priv = PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); 561 PidginWebViewToolbarPrivate *priv =
562 pidgin_webviewtoolbar_get_instance_private(toolbar);
558 gchar *filename = NULL; 563 gchar *filename = NULL;
559 PurpleImage *img; 564 PurpleImage *img;
560 565
561 if (response == GTK_RESPONSE_ACCEPT) 566 if (response == GTK_RESPONSE_ACCEPT)
562 filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(widget)); 567 filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(widget));
590 } 595 }
591 596
592 static void 597 static void
593 insert_image_cb(GtkAction *action, PidginWebViewToolbar *toolbar) 598 insert_image_cb(GtkAction *action, PidginWebViewToolbar *toolbar)
594 { 599 {
595 PidginWebViewToolbarPriv *priv = PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); 600 PidginWebViewToolbarPrivate *priv =
601 pidgin_webviewtoolbar_get_instance_private(toolbar);
596 GtkWidget *window; 602 GtkWidget *window;
597 603
598 if (!priv->image_dialog) { 604 if (!priv->image_dialog) {
599 window = gtk_file_chooser_dialog_new(_("Insert Image"), NULL, 605 window = gtk_file_chooser_dialog_new(_("Insert Image"), NULL,
600 GTK_FILE_CHOOSER_ACTION_OPEN, 606 GTK_FILE_CHOOSER_ACTION_OPEN,
616 } 622 }
617 623
618 static void 624 static void
619 destroy_smiley_dialog(PidginWebViewToolbar *toolbar) 625 destroy_smiley_dialog(PidginWebViewToolbar *toolbar)
620 { 626 {
621 PidginWebViewToolbarPriv *priv = PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); 627 PidginWebViewToolbarPrivate *priv =
628 pidgin_webviewtoolbar_get_instance_private(toolbar);
622 if (priv->smiley_dialog != NULL) 629 if (priv->smiley_dialog != NULL)
623 { 630 {
624 gtk_widget_destroy(priv->smiley_dialog); 631 gtk_widget_destroy(priv->smiley_dialog);
625 priv->smiley_dialog = NULL; 632 priv->smiley_dialog = NULL;
626 } 633 }
627 } 634 }
628 635
629 static gboolean 636 static gboolean
630 close_smiley_dialog(PidginWebViewToolbar *toolbar) 637 close_smiley_dialog(PidginWebViewToolbar *toolbar)
631 { 638 {
632 PidginWebViewToolbarPriv *priv = PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); 639 PidginWebViewToolbarPrivate *priv =
640 pidgin_webviewtoolbar_get_instance_private(toolbar);
633 gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(priv->smiley), FALSE); 641 gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(priv->smiley), FALSE);
634 return FALSE; 642 return FALSE;
635 } 643 }
636 644
637 static void 645 static void
812 } 820 }
813 821
814 static void 822 static void
815 insert_smiley_cb(GtkAction *smiley, PidginWebViewToolbar *toolbar) 823 insert_smiley_cb(GtkAction *smiley, PidginWebViewToolbar *toolbar)
816 { 824 {
817 PidginWebViewToolbarPriv *priv = 825 PidginWebViewToolbarPrivate *priv =
818 PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); 826 pidgin_webviewtoolbar_get_instance_private(toolbar);
819 PurpleSmileyList *smileys_from_theme, *smileys_from_custom = NULL; 827 PurpleSmileyList *smileys_from_theme, *smileys_from_custom = NULL;
820 GList *theme_smileys = NULL, *custom_smileys = NULL, *it, *it_next; 828 GList *theme_smileys = NULL, *custom_smileys = NULL, *it, *it_next;
821 PidginWebViewButtons webview_format; 829 PidginWebViewButtons webview_format;
822 830
823 GtkWidget *dialog, *vbox; 831 GtkWidget *dialog, *vbox;
961 } 969 }
962 970
963 static void 971 static void
964 update_smiley_button(PidginWebViewToolbar *toolbar) 972 update_smiley_button(PidginWebViewToolbar *toolbar)
965 { 973 {
966 PidginWebViewToolbarPriv *priv = 974 PidginWebViewToolbarPrivate *priv =
967 PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); 975 pidgin_webviewtoolbar_get_instance_private(toolbar);
968 PurpleSmileyList *sl; 976 PurpleSmileyList *sl;
969 gboolean any_smileys; 977 gboolean any_smileys;
970 PidginWebViewButtons webview_format = 0; 978 PidginWebViewButtons webview_format = 0;
971 979
972 g_return_if_fail(priv != NULL); 980 g_return_if_fail(priv != NULL);
995 } 1003 }
996 1004
997 static void 1005 static void
998 send_attention_cb(GtkAction *attention, PidginWebViewToolbar *toolbar) 1006 send_attention_cb(GtkAction *attention, PidginWebViewToolbar *toolbar)
999 { 1007 {
1000 PidginWebViewToolbarPriv *priv = PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); 1008 PidginWebViewToolbarPrivate *priv =
1009 pidgin_webviewtoolbar_get_instance_private(toolbar);
1001 PurpleConversation *conv = priv->active_conv; 1010 PurpleConversation *conv = priv->active_conv;
1002 const gchar *who = purple_conversation_get_name(conv); 1011 const gchar *who = purple_conversation_get_name(conv);
1003 PurpleConnection *gc = purple_conversation_get_connection(conv); 1012 PurpleConnection *gc = purple_conversation_get_connection(conv);
1004 1013
1005 purple_protocol_send_attention(gc, who, 0); 1014 purple_protocol_send_attention(gc, who, 0);
1008 1017
1009 static void 1018 static void
1010 update_buttons_cb(PidginWebView *webview, PidginWebViewButtons buttons, 1019 update_buttons_cb(PidginWebView *webview, PidginWebViewButtons buttons,
1011 PidginWebViewToolbar *toolbar) 1020 PidginWebViewToolbar *toolbar)
1012 { 1021 {
1013 PidginWebViewToolbarPriv *priv = PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); 1022 PidginWebViewToolbarPrivate *priv =
1023 pidgin_webviewtoolbar_get_instance_private(toolbar);
1014 1024
1015 gtk_action_set_sensitive(priv->bold, buttons & PIDGIN_WEBVIEW_BOLD); 1025 gtk_action_set_sensitive(priv->bold, buttons & PIDGIN_WEBVIEW_BOLD);
1016 gtk_action_set_sensitive(priv->italic, buttons & PIDGIN_WEBVIEW_ITALIC); 1026 gtk_action_set_sensitive(priv->italic, buttons & PIDGIN_WEBVIEW_ITALIC);
1017 gtk_action_set_sensitive(priv->underline, buttons & PIDGIN_WEBVIEW_UNDERLINE); 1027 gtk_action_set_sensitive(priv->underline, buttons & PIDGIN_WEBVIEW_UNDERLINE);
1018 gtk_action_set_sensitive(priv->strike, buttons & PIDGIN_WEBVIEW_STRIKE); 1028 gtk_action_set_sensitive(priv->strike, buttons & PIDGIN_WEBVIEW_STRIKE);
1064 } 1074 }
1065 1075
1066 static void 1076 static void
1067 update_buttons(PidginWebViewToolbar *toolbar) 1077 update_buttons(PidginWebViewToolbar *toolbar)
1068 { 1078 {
1069 PidginWebViewToolbarPriv *priv = PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); 1079 PidginWebViewToolbarPrivate *priv =
1080 pidgin_webviewtoolbar_get_instance_private(toolbar);
1070 gboolean bold, italic, underline, strike; 1081 gboolean bold, italic, underline, strike;
1071 char *tmp, *color_str; 1082 char *tmp, *color_str;
1072 char *label; 1083 char *label;
1073 GdkRGBA color; 1084 GdkRGBA color;
1074 1085
1253 1264
1254 static gboolean 1265 static gboolean
1255 pidgin_webviewtoolbar_popup_menu(GtkWidget *widget, GdkEventButton *event, 1266 pidgin_webviewtoolbar_popup_menu(GtkWidget *widget, GdkEventButton *event,
1256 PidginWebViewToolbar *toolbar) 1267 PidginWebViewToolbar *toolbar)
1257 { 1268 {
1258 PidginWebViewToolbarPriv *priv = PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); 1269 PidginWebViewToolbarPrivate *priv =
1270 pidgin_webviewtoolbar_get_instance_private(toolbar);
1259 GtkWidget *menu; 1271 GtkWidget *menu;
1260 GtkWidget *item; 1272 GtkWidget *item;
1261 gboolean wide; 1273 gboolean wide;
1262 1274
1263 if (!gdk_event_triggers_context_menu((GdkEvent *)event)) 1275 if (!gdk_event_triggers_context_menu((GdkEvent *)event))
1287 1299
1288 static void 1300 static void
1289 webviewtoolbar_view_pref_changed(const char *name, PurplePrefType type, 1301 webviewtoolbar_view_pref_changed(const char *name, PurplePrefType type,
1290 gconstpointer value, gpointer toolbar) 1302 gconstpointer value, gpointer toolbar)
1291 { 1303 {
1292 PidginWebViewToolbarPriv *priv = PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); 1304 PidginWebViewToolbarPrivate *priv =
1305 pidgin_webviewtoolbar_get_instance_private(toolbar);
1293 if (value) { 1306 if (value) {
1294 gtk_widget_hide(priv->lean_view); 1307 gtk_widget_hide(priv->lean_view);
1295 gtk_widget_show_all(priv->wide_view); 1308 gtk_widget_show_all(priv->wide_view);
1296 } else { 1309 } else {
1297 gtk_widget_hide(priv->wide_view); 1310 gtk_widget_hide(priv->wide_view);
1305 1318
1306 static void 1319 static void
1307 pidgin_webviewtoolbar_finalize(GObject *object) 1320 pidgin_webviewtoolbar_finalize(GObject *object)
1308 { 1321 {
1309 PidginWebViewToolbar *toolbar = PIDGIN_WEBVIEWTOOLBAR(object); 1322 PidginWebViewToolbar *toolbar = PIDGIN_WEBVIEWTOOLBAR(object);
1310 PidginWebViewToolbarPriv *priv = PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); 1323 PidginWebViewToolbarPrivate *priv =
1324 pidgin_webviewtoolbar_get_instance_private(toolbar);
1311 1325
1312 if (priv->image_dialog != NULL) 1326 if (priv->image_dialog != NULL)
1313 { 1327 {
1314 gtk_widget_destroy(priv->image_dialog); 1328 gtk_widget_destroy(priv->image_dialog);
1315 priv->image_dialog = NULL; 1329 priv->image_dialog = NULL;
1339 if (priv->insert_menu) 1353 if (priv->insert_menu)
1340 gtk_widget_destroy(priv->insert_menu); 1354 gtk_widget_destroy(priv->insert_menu);
1341 1355
1342 purple_prefs_disconnect_by_handle(object); 1356 purple_prefs_disconnect_by_handle(object);
1343 1357
1344 G_OBJECT_CLASS(parent_class)->finalize(object); 1358 G_OBJECT_CLASS(pidgin_webviewtoolbar_parent_class)->finalize(object);
1345 } 1359 }
1346 1360
1347 static void 1361 static void
1348 pidgin_webviewtoolbar_class_init(gpointer _class, gpointer class_data) 1362 pidgin_webviewtoolbar_class_init(PidginWebViewToolbarClass *klass)
1349 { 1363 {
1350 PidginWebViewToolbarClass *class = _class; 1364 G_OBJECT_CLASS(klass)->finalize = pidgin_webviewtoolbar_finalize;
1351 GObjectClass *gobject_class = _class;
1352
1353 parent_class = g_type_class_ref(GTK_TYPE_BOX);
1354 gobject_class->finalize = pidgin_webviewtoolbar_finalize;
1355
1356 g_type_class_add_private(class, sizeof(PidginWebViewToolbarPriv));
1357 1365
1358 purple_prefs_add_none(PIDGIN_PREFS_ROOT "/conversations/toolbar"); 1366 purple_prefs_add_none(PIDGIN_PREFS_ROOT "/conversations/toolbar");
1359 purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/toolbar/wide", FALSE); 1367 purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/toolbar/wide", FALSE);
1360 } 1368 }
1361 1369
1362 static void 1370 static void
1363 pidgin_webviewtoolbar_create_actions(PidginWebViewToolbar *toolbar) 1371 pidgin_webviewtoolbar_create_actions(PidginWebViewToolbar *toolbar)
1364 { 1372 {
1365 PidginWebViewToolbarPriv *priv = PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); 1373 PidginWebViewToolbarPrivate *priv =
1374 pidgin_webviewtoolbar_get_instance_private(toolbar);
1366 GtkActionGroup *action_group; 1375 GtkActionGroup *action_group;
1367 gsize i; 1376 gsize i;
1368 struct { 1377 struct {
1369 GtkAction **action; 1378 GtkAction **action;
1370 char *name; 1379 char *name;
1418 } 1427 }
1419 1428
1420 static void 1429 static void
1421 pidgin_webviewtoolbar_create_wide_view(PidginWebViewToolbar *toolbar) 1430 pidgin_webviewtoolbar_create_wide_view(PidginWebViewToolbar *toolbar)
1422 { 1431 {
1423 PidginWebViewToolbarPriv *priv = PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); 1432 PidginWebViewToolbarPrivate *priv =
1433 pidgin_webviewtoolbar_get_instance_private(toolbar);
1424 GtkAction *layout[] = { 1434 GtkAction *layout[] = {
1425 priv->bold, 1435 priv->bold,
1426 priv->italic, 1436 priv->italic,
1427 priv->underline, 1437 priv->underline,
1428 priv->strike, 1438 priv->strike,
1474 } 1484 }
1475 1485
1476 static void 1486 static void
1477 pidgin_webviewtoolbar_create_lean_view(PidginWebViewToolbar *toolbar) 1487 pidgin_webviewtoolbar_create_lean_view(PidginWebViewToolbar *toolbar)
1478 { 1488 {
1479 PidginWebViewToolbarPriv *priv = PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); 1489 PidginWebViewToolbarPrivate *priv =
1490 pidgin_webviewtoolbar_get_instance_private(toolbar);
1480 GtkWidget *label; 1491 GtkWidget *label;
1481 GtkToolItem *sep; 1492 GtkToolItem *sep;
1482 GtkToolItem *font_button; 1493 GtkToolItem *font_button;
1483 GtkWidget *font_menu; 1494 GtkWidget *font_menu;
1484 GtkToolItem *insert_button; 1495 GtkToolItem *insert_button;
1575 } 1586 }
1576 1587
1577 static void 1588 static void
1578 pidgin_webviewtoolbar_init(PidginWebViewToolbar *toolbar) 1589 pidgin_webviewtoolbar_init(PidginWebViewToolbar *toolbar)
1579 { 1590 {
1580 PidginWebViewToolbarPriv *priv = PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); 1591 PidginWebViewToolbarPrivate *priv =
1592 pidgin_webviewtoolbar_get_instance_private(toolbar);
1581 GtkWidget *hbox = GTK_WIDGET(toolbar); 1593 GtkWidget *hbox = GTK_WIDGET(toolbar);
1582 1594
1583 pidgin_webviewtoolbar_create_actions(toolbar); 1595 pidgin_webviewtoolbar_create_actions(toolbar);
1584 pidgin_webviewtoolbar_create_wide_view(toolbar); 1596 pidgin_webviewtoolbar_create_wide_view(toolbar);
1585 pidgin_webviewtoolbar_create_lean_view(toolbar); 1597 pidgin_webviewtoolbar_create_lean_view(toolbar);
1611 1623
1612 GtkWidget * 1624 GtkWidget *
1613 pidgin_webviewtoolbar_new(void) 1625 pidgin_webviewtoolbar_new(void)
1614 { 1626 {
1615 return GTK_WIDGET(g_object_new(pidgin_webviewtoolbar_get_type(), NULL)); 1627 return GTK_WIDGET(g_object_new(pidgin_webviewtoolbar_get_type(), NULL));
1616 }
1617
1618 GType
1619 pidgin_webviewtoolbar_get_type(void)
1620 {
1621 static GType webviewtoolbar_type = 0;
1622
1623 if (!webviewtoolbar_type) {
1624 static const GTypeInfo webviewtoolbar_info = {
1625 sizeof(PidginWebViewToolbarClass),
1626 NULL,
1627 NULL,
1628 pidgin_webviewtoolbar_class_init,
1629 NULL,
1630 NULL,
1631 sizeof(PidginWebViewToolbar),
1632 0,
1633 (GInstanceInitFunc)pidgin_webviewtoolbar_init,
1634 NULL
1635 };
1636
1637 webviewtoolbar_type = g_type_register_static(GTK_TYPE_BOX,
1638 "PidginWebViewToolbar", &webviewtoolbar_info, 0);
1639 }
1640
1641 return webviewtoolbar_type;
1642 } 1628 }
1643 1629
1644 void 1630 void
1645 pidgin_webviewtoolbar_attach(PidginWebViewToolbar *toolbar, GtkWidget *webview) 1631 pidgin_webviewtoolbar_attach(PidginWebViewToolbar *toolbar, GtkWidget *webview)
1646 { 1632 {
1670 1656
1671 void 1657 void
1672 pidgin_webviewtoolbar_switch_active_conversation(PidginWebViewToolbar *toolbar, 1658 pidgin_webviewtoolbar_switch_active_conversation(PidginWebViewToolbar *toolbar,
1673 PurpleConversation *conv) 1659 PurpleConversation *conv)
1674 { 1660 {
1675 PidginWebViewToolbarPriv *priv = PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); 1661 PidginWebViewToolbarPrivate *priv =
1662 pidgin_webviewtoolbar_get_instance_private(toolbar);
1676 PurpleConnection *gc = purple_conversation_get_connection(conv); 1663 PurpleConnection *gc = purple_conversation_get_connection(conv);
1677 PurpleProtocol *protocol = purple_connection_get_protocol(gc); 1664 PurpleProtocol *protocol = purple_connection_get_protocol(gc);
1678 1665
1679 priv->active_conv = conv; 1666 priv->active_conv = conv;
1680 1667
1689 1676
1690 void 1677 void
1691 pidgin_webviewtoolbar_activate(PidginWebViewToolbar *toolbar, 1678 pidgin_webviewtoolbar_activate(PidginWebViewToolbar *toolbar,
1692 PidginWebViewAction action) 1679 PidginWebViewAction action)
1693 { 1680 {
1694 PidginWebViewToolbarPriv *priv; 1681 PidginWebViewToolbarPrivate *priv;
1695 GtkAction *act; 1682 GtkAction *act;
1696 1683
1697 g_return_if_fail(toolbar != NULL); 1684 g_return_if_fail(toolbar != NULL);
1698 1685
1699 priv = PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); 1686 priv = pidgin_webviewtoolbar_get_instance_private(toolbar);
1700 switch (action) { 1687 switch (action) {
1701 case PIDGIN_WEBVIEW_ACTION_BOLD: 1688 case PIDGIN_WEBVIEW_ACTION_BOLD:
1702 act = priv->bold; 1689 act = priv->bold;
1703 break; 1690 break;
1704 1691
1773 } 1760 }
1774 1761
1775 GtkWidget * 1762 GtkWidget *
1776 pidgin_webviewtoolbar_get_wide_view(PidginWebViewToolbar *toolbar) 1763 pidgin_webviewtoolbar_get_wide_view(PidginWebViewToolbar *toolbar)
1777 { 1764 {
1778 PidginWebViewToolbarPriv *priv = PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); 1765 PidginWebViewToolbarPrivate *priv =
1766 pidgin_webviewtoolbar_get_instance_private(toolbar);
1779 1767
1780 g_return_val_if_fail(toolbar != NULL, NULL); 1768 g_return_val_if_fail(toolbar != NULL, NULL);
1781 1769
1782 return priv->wide_view; 1770 return priv->wide_view;
1783 } 1771 }
1784 1772
1785 GtkWidget * 1773 GtkWidget *
1786 pidgin_webviewtoolbar_get_lean_view(PidginWebViewToolbar *toolbar) 1774 pidgin_webviewtoolbar_get_lean_view(PidginWebViewToolbar *toolbar)
1787 { 1775 {
1788 PidginWebViewToolbarPriv *priv = PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); 1776 PidginWebViewToolbarPrivate *priv =
1777 pidgin_webviewtoolbar_get_instance_private(toolbar);
1789 1778
1790 g_return_val_if_fail(toolbar != NULL, NULL); 1779 g_return_val_if_fail(toolbar != NULL, NULL);
1791 1780
1792 return priv->lean_view; 1781 return priv->lean_view;
1793 } 1782 }

mercurial