| 129 |
129 |
| 130 /* Smileys */ |
130 /* Smileys */ |
| 131 char *protocol_name; |
131 char *protocol_name; |
| 132 GHashTable *smiley_data; |
132 GHashTable *smiley_data; |
| 133 GtkSmileyTree *default_smilies; |
133 GtkSmileyTree *default_smilies; |
| |
134 |
| |
135 /* WebKit inspector */ |
| |
136 WebKitWebView *inspector_view; |
| |
137 GtkWindow *inspector_win; |
| 134 } GtkWebViewPriv; |
138 } GtkWebViewPriv; |
| 135 |
139 |
| 136 /****************************************************************************** |
140 /****************************************************************************** |
| 137 * Globals |
141 * Globals |
| 138 *****************************************************************************/ |
142 *****************************************************************************/ |
| 835 if (priv->loader == 0) |
839 if (priv->loader == 0) |
| 836 priv->loader = g_idle_add((GSourceFunc)process_load_queue, webview); |
840 priv->loader = g_idle_add((GSourceFunc)process_load_queue, webview); |
| 837 } |
841 } |
| 838 |
842 |
| 839 static void |
843 static void |
| 840 webview_show_inspector_cb(GtkWidget *item, GtkWebViewInspectData *data) |
844 webview_inspector_inspect_element(GtkWidget *item, GtkWebViewInspectData *data) |
| 841 { |
845 { |
| 842 webkit_web_inspector_inspect_node(data->inspector, data->node); |
846 webkit_web_inspector_inspect_node(data->inspector, data->node); |
| |
847 } |
| |
848 |
| |
849 static WebKitWebView * |
| |
850 webview_inspector_create(WebKitWebInspector *inspector, |
| |
851 WebKitWebView *webview, gpointer _unused) |
| |
852 { |
| |
853 GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview); |
| |
854 |
| |
855 if (priv->inspector_view != NULL) |
| |
856 return priv->inspector_view; |
| |
857 |
| |
858 priv->inspector_win = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL)); |
| |
859 gtk_window_set_title(priv->inspector_win, _("WebKit inspector")); |
| |
860 gtk_window_set_default_size(priv->inspector_win, 600, 400); |
| |
861 |
| |
862 priv->inspector_view = WEBKIT_WEB_VIEW(webkit_web_view_new()); |
| |
863 gtk_container_add(GTK_CONTAINER(priv->inspector_win), |
| |
864 GTK_WIDGET(priv->inspector_view)); |
| |
865 |
| |
866 return priv->inspector_view; |
| |
867 } |
| |
868 |
| |
869 static gboolean |
| |
870 webview_inspector_show(WebKitWebInspector *inspector, GtkWidget *webview) |
| |
871 { |
| |
872 GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview); |
| |
873 |
| |
874 gtk_widget_show_all(GTK_WIDGET(priv->inspector_win)); |
| |
875 |
| |
876 return TRUE; |
| 843 } |
877 } |
| 844 |
878 |
| 845 static GtkWebViewProtocol * |
879 static GtkWebViewProtocol * |
| 846 webview_find_protocol(const char *url, gboolean reverse) |
880 webview_find_protocol(const char *url, gboolean reverse) |
| 847 { |
881 { |
| 995 do_popup_menu(WebKitWebView *webview, int button, int time, int context, |
1029 do_popup_menu(WebKitWebView *webview, int button, int time, int context, |
| 996 WebKitDOMNode *node, const char *uri) |
1030 WebKitDOMNode *node, const char *uri) |
| 997 { |
1031 { |
| 998 GtkWidget *menu; |
1032 GtkWidget *menu; |
| 999 GtkWidget *cut, *copy, *paste, *delete, *select; |
1033 GtkWidget *cut, *copy, *paste, *delete, *select; |
| 1000 WebKitWebSettings *settings; |
|
| 1001 gboolean inspector; |
|
| 1002 |
1034 |
| 1003 menu = gtk_menu_new(); |
1035 menu = gtk_menu_new(); |
| 1004 g_signal_connect(menu, "selection-done", |
1036 g_signal_connect(menu, "selection-done", |
| 1005 G_CALLBACK(gtk_widget_destroy), NULL); |
1037 G_CALLBACK(gtk_widget_destroy), NULL); |
| 1006 |
1038 |
| 1075 webkit_web_view_can_paste_clipboard(webview)); |
1107 webkit_web_view_can_paste_clipboard(webview)); |
| 1076 gtk_widget_set_sensitive(delete, |
1108 gtk_widget_set_sensitive(delete, |
| 1077 webkit_web_view_can_cut_clipboard(webview)); |
1109 webkit_web_view_can_cut_clipboard(webview)); |
| 1078 } |
1110 } |
| 1079 |
1111 |
| 1080 settings = webkit_web_view_get_settings(webview); |
1112 if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT |
| 1081 g_object_get(G_OBJECT(settings), "enable-developer-extras", &inspector, NULL); |
1113 "/webview/inspector_enabled")) |
| 1082 if (inspector) { |
1114 { |
| |
1115 WebKitWebSettings *settings; |
| 1083 GtkWidget *inspect; |
1116 GtkWidget *inspect; |
| 1084 GtkWebViewInspectData *data; |
1117 GtkWebViewInspectData *data; |
| |
1118 |
| |
1119 settings = webkit_web_view_get_settings(webview); |
| |
1120 g_object_set(G_OBJECT(settings), "enable-developer-extras", TRUE, NULL); |
| 1085 |
1121 |
| 1086 data = g_new0(GtkWebViewInspectData, 1); |
1122 data = g_new0(GtkWebViewInspectData, 1); |
| 1087 data->inspector = webkit_web_view_get_inspector(webview); |
1123 data->inspector = webkit_web_view_get_inspector(webview); |
| 1088 data->node = node; |
1124 data->node = node; |
| 1089 |
1125 |
| 1090 pidgin_separator(menu); |
1126 pidgin_separator(menu); |
| 1091 |
1127 |
| 1092 inspect = pidgin_new_item_from_stock(menu, _("Inspect _Element"), NULL, |
1128 inspect = pidgin_new_item_from_stock(menu, _("Inspect _Element"), NULL, |
| 1093 NULL, NULL, 0, 0, NULL); |
1129 NULL, NULL, 0, 0, NULL); |
| 1094 g_signal_connect_data(G_OBJECT(inspect), "activate", |
1130 g_signal_connect_data(G_OBJECT(inspect), "activate", |
| 1095 G_CALLBACK(webview_show_inspector_cb), |
1131 G_CALLBACK(webview_inspector_inspect_element), |
| 1096 data, (GClosureNotify)g_free, 0); |
1132 data, (GClosureNotify)g_free, 0); |
| 1097 } |
1133 } |
| 1098 |
1134 |
| 1099 if (webkit_web_view_get_editable(webview)) { |
1135 if (webkit_web_view_get_editable(webview)) { |
| 1100 GtkWidget *im = get_input_methods_menu(webview); |
1136 GtkWidget *im = get_input_methods_menu(webview); |
| 1490 GTK_WEBVIEW_SHRINK); |
1529 GTK_WEBVIEW_SHRINK); |
| 1491 |
1530 |
| 1492 binding_set = gtk_binding_set_by_class(klass); |
1531 binding_set = gtk_binding_set_by_class(klass); |
| 1493 gtk_binding_entry_add_signal(binding_set, GDK_KEY_r, GDK_CONTROL_MASK, |
1532 gtk_binding_entry_add_signal(binding_set, GDK_KEY_r, GDK_CONTROL_MASK, |
| 1494 "format-cleared", 0); |
1533 "format-cleared", 0); |
| |
1534 |
| |
1535 purple_prefs_add_none(PIDGIN_PREFS_ROOT "/webview"); |
| |
1536 purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/webview/inspector_enabled", FALSE); |
| 1495 } |
1537 } |
| 1496 |
1538 |
| 1497 static void |
1539 static void |
| 1498 gtk_webview_init(GtkWebView *webview, gpointer userdata) |
1540 gtk_webview_init(GtkWebView *webview, gpointer userdata) |
| 1499 { |
1541 { |
| 1500 GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview); |
1542 GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview); |
| |
1543 WebKitWebInspector *inspector; |
| 1501 |
1544 |
| 1502 priv->load_queue = g_queue_new(); |
1545 priv->load_queue = g_queue_new(); |
| 1503 |
1546 |
| 1504 priv->smiley_data = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, |
1547 priv->smiley_data = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, |
| 1505 (GDestroyNotify)gtk_smiley_tree_destroy); |
1548 (GDestroyNotify)gtk_smiley_tree_destroy); |
| 1520 g_signal_connect(G_OBJECT(webview), "load-finished", |
1563 g_signal_connect(G_OBJECT(webview), "load-finished", |
| 1521 G_CALLBACK(webview_load_finished), NULL); |
1564 G_CALLBACK(webview_load_finished), NULL); |
| 1522 |
1565 |
| 1523 g_signal_connect(G_OBJECT(webview), "resource-request-starting", |
1566 g_signal_connect(G_OBJECT(webview), "resource-request-starting", |
| 1524 G_CALLBACK(webview_resource_loading), NULL); |
1567 G_CALLBACK(webview_resource_loading), NULL); |
| |
1568 |
| |
1569 inspector = webkit_web_view_get_inspector(WEBKIT_WEB_VIEW(webview)); |
| |
1570 g_signal_connect(G_OBJECT(inspector), "inspect-web-view", |
| |
1571 G_CALLBACK(webview_inspector_create), NULL); |
| |
1572 g_signal_connect(G_OBJECT(inspector), "show-window", |
| |
1573 G_CALLBACK(webview_inspector_show), webview); |
| 1525 } |
1574 } |
| 1526 |
1575 |
| 1527 GType |
1576 GType |
| 1528 gtk_webview_get_type(void) |
1577 gtk_webview_get_type(void) |
| 1529 { |
1578 { |