pidgin/gtkwebview.c

branch
soc.2013.gobjectification
changeset 34883
7d9d0d7b7b62
parent 34874
e03d555394c5
parent 34299
419c033e46b9
child 34892
65e25c679ca5
equal deleted inserted replaced
34882:8dc8663fbcd9 34883:7d9d0d7b7b62
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);
1388 static void 1424 static void
1389 gtk_webview_finalize(GObject *webview) 1425 gtk_webview_finalize(GObject *webview)
1390 { 1426 {
1391 GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview); 1427 GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview);
1392 gpointer temp; 1428 gpointer temp;
1429
1430 if (priv->inspector_win != NULL)
1431 gtk_widget_destroy(GTK_WIDGET(priv->inspector_win));
1393 1432
1394 if (priv->loader) 1433 if (priv->loader)
1395 g_source_remove(priv->loader); 1434 g_source_remove(priv->loader);
1396 1435
1397 while (!g_queue_is_empty(priv->load_queue)) { 1436 while (!g_queue_is_empty(priv->load_queue)) {
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 {

mercurial