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