Merge lp:~ivaldi/midori/outsource-webinspector into lp:midori
- outsource-webinspector
- Merge into trunk
Proposed by
André Stösel
Status: | Work in progress | ||||
---|---|---|---|---|---|
Proposed branch: | lp:~ivaldi/midori/outsource-webinspector | ||||
Merge into: | lp:midori | ||||
Diff against target: |
490 lines (+126/-254) 3 files modified
extensions/webinspector.vala (+126/-0) midori/midori-browser.c (+0/-75) midori/midori-view.c (+0/-179) |
||||
To merge this branch: | bzr merge lp:~ivaldi/midori/outsource-webinspector | ||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Cris Dywan | Needs Fixing | ||
Review via email: mp+194256@code.launchpad.net |
Commit message
Description of the change
To post a comment you must log in.
- 6468. By André Stösel
-
use wrapper object to launch the web inspector
- 6469. By André Stösel
-
remove unused hit test property
Unmerged revisions
- 6469. By André Stösel
-
remove unused hit test property
- 6468. By André Stösel
-
use wrapper object to launch the web inspector
- 6467. By André Stösel
-
set coordinates for "inspect element"
- 6466. By André Stösel
-
add property for view->hit_test
- 6465. By André Stösel
-
new webinspector extension
- 6464. By André Stösel
-
remove webinspector from core
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === added file 'extensions/webinspector.vala' |
2 | --- extensions/webinspector.vala 1970-01-01 00:00:00 +0000 |
3 | +++ extensions/webinspector.vala 2013-11-28 20:51:46 +0000 |
4 | @@ -0,0 +1,126 @@ |
5 | +/* |
6 | + Copyright (C) 2013 André Stösel <andre@stoesel.de> |
7 | + |
8 | + This library is free software; you can redistribute it and/or |
9 | + modify it under the terms of the GNU Lesser General Public |
10 | + License as published by the Free Software Foundation; either |
11 | + version 2.1 of the License, or (at your option) any later version. |
12 | + |
13 | + See the file COPYING for the full license text. |
14 | +*/ |
15 | + |
16 | +namespace WebInspector { |
17 | + private class Launcher : GLib.Object { |
18 | + private GLib.Value v; |
19 | + private Midori.App app; |
20 | + |
21 | + public Launcher (Midori.App app, WebKit.HitTestResult hit_test_result) { |
22 | + this.app = app; |
23 | + this.v = new GLib.Value (typeof (WebKit.HitTestResult)); |
24 | + this.v.set_object (hit_test_result); |
25 | + } |
26 | + |
27 | + public void inspect_element (Gtk.Action action) { |
28 | + Midori.Browser browser = this.app.browser; |
29 | + Midori.View view = browser.tab as Midori.View; |
30 | + |
31 | + WebKit.WebInspector inspector = view.web_view.web_inspector; |
32 | + |
33 | + WebKit.HitTestResult hit_test_result = this.v.get_object () as WebKit.HitTestResult; |
34 | + |
35 | + int x, y; |
36 | + hit_test_result.get("x", out x); |
37 | + hit_test_result.get("y", out y); |
38 | + |
39 | + inspector.inspect_coordinates (x, y); |
40 | + inspector.show(); |
41 | + |
42 | + this.unref (); |
43 | + } |
44 | + } |
45 | + |
46 | + private class Manager : Midori.Extension { |
47 | + private unowned WebKit.WebView inspector_inspect_web_view (WebKit.WebView web_view) { |
48 | + Gtk.Widget inspector_view = new WebKit.WebView (); |
49 | + Gtk.Window window = new Gtk.Window (); |
50 | + window.add (inspector_view); |
51 | + window.show_all (); |
52 | + return inspector_view as WebKit.WebView; |
53 | + } |
54 | + |
55 | + private bool inspector_show_window (WebKit.WebInspector inspector) { |
56 | + Gtk.Widget inspector_view = inspector.web_view as Gtk.Widget; |
57 | + Gtk.Widget window = inspector_view.get_toplevel (); |
58 | + window.show (); |
59 | + return true; |
60 | + } |
61 | + |
62 | + private void context_menu (WebKit.HitTestResult hit_test_result, Midori.ContextAction menu) { |
63 | + Launcher launcher = new Launcher (this.get_app (), hit_test_result); |
64 | + launcher.ref (); |
65 | + menu.add_simple ("InspectElement", _("Inspect _Element"), null, null, launcher.inspect_element); |
66 | + } |
67 | + |
68 | + private void tab_added (Midori.Browser browser, Midori.View view) { |
69 | + view.context_menu.connect (this.context_menu); |
70 | + |
71 | + view.web_view.web_inspector.show_window.connect (this.inspector_show_window); |
72 | + view.web_view.web_inspector.inspect_web_view.connect (this.inspector_inspect_web_view); |
73 | + } |
74 | + |
75 | + private void tab_removed (Midori.Browser browser, Midori.View view) { |
76 | + view.context_menu.disconnect (this.context_menu); |
77 | + } |
78 | + |
79 | + private void browser_added (Midori.Browser browser) { |
80 | + foreach (Midori.View tab in browser.get_tabs ()) { |
81 | + this.tab_added (browser, tab); |
82 | + } |
83 | + |
84 | + browser.add_tab.connect (this.tab_added); |
85 | + browser.remove_tab.connect (this.tab_removed); |
86 | + } |
87 | + |
88 | + private void browser_removed (Midori.Browser browser) { |
89 | + foreach (Midori.View tab in browser.get_tabs ()) { |
90 | + this.tab_removed (browser, tab); |
91 | + } |
92 | + |
93 | + browser.add_tab.disconnect (this.tab_added); |
94 | + browser.remove_tab.disconnect (this.tab_removed); |
95 | + } |
96 | + |
97 | + private void activated (Midori.App app) { |
98 | + foreach (Midori.Browser browser in app.get_browsers ()) { |
99 | + this.browser_added (browser); |
100 | + } |
101 | + |
102 | + app.add_browser.connect (this.browser_added); |
103 | + app.remove_browser.connect (this.browser_removed); |
104 | + } |
105 | + |
106 | + private void deactivated () { |
107 | + Midori.App app = this.get_app (); |
108 | + foreach (Midori.Browser browser in app.get_browsers ()) { |
109 | + this.browser_removed (browser); |
110 | + } |
111 | + |
112 | + app.add_browser.disconnect (this.browser_added); |
113 | + app.remove_browser.disconnect (this.browser_removed); |
114 | + } |
115 | + |
116 | + internal Manager () { |
117 | + GLib.Object (name: _("WebInspector"), |
118 | + description: _("WebInspector support"), |
119 | + version: "0.1" + Midori.VERSION_SUFFIX, |
120 | + authors: "André Stösel <andre@stoesel.de>"); |
121 | + |
122 | + this.activate.connect (this.activated); |
123 | + this.deactivate.connect (this.deactivated); |
124 | + } |
125 | + } |
126 | +} |
127 | + |
128 | +public Midori.Extension extension_init () { |
129 | + return new WebInspector.Manager (); |
130 | +} |
131 | |
132 | === modified file 'midori/midori-browser.c' |
133 | --- midori/midori-browser.c 2013-11-27 09:47:37 +0000 |
134 | +++ midori/midori-browser.c 2013-11-28 20:51:46 +0000 |
135 | @@ -71,9 +71,6 @@ |
136 | GtkWidget* panel; |
137 | GtkWidget* notebook; |
138 | |
139 | - GtkWidget* inspector; |
140 | - GtkWidget* inspector_view; |
141 | - |
142 | GtkWidget* find; |
143 | |
144 | GtkWidget* statusbar; |
145 | @@ -1401,41 +1398,6 @@ |
146 | } |
147 | |
148 | static void |
149 | -midori_view_attach_inspector_cb (GtkWidget* view, |
150 | - GtkWidget* inspector_view, |
151 | - MidoriBrowser* browser) |
152 | -{ |
153 | - GtkWidget* toplevel = gtk_widget_get_toplevel (inspector_view); |
154 | - GtkWidget* scrolled = gtk_widget_get_parent (browser->inspector_view); |
155 | - if (browser->inspector_view == inspector_view) |
156 | - return; |
157 | - |
158 | - gtk_widget_hide (toplevel); |
159 | - gtk_widget_destroy (browser->inspector_view); |
160 | - gtk_widget_reparent (inspector_view, scrolled); |
161 | - gtk_widget_show_all (browser->inspector); |
162 | - browser->inspector_view = inspector_view; |
163 | - gtk_widget_destroy (toplevel); |
164 | - if (!katze_object_get_boolean (browser->settings, "last-inspector-attached")) |
165 | - g_object_set (browser->settings, "last-inspector-attached", TRUE, NULL); |
166 | -} |
167 | - |
168 | -static void |
169 | -midori_view_detach_inspector_cb (GtkWidget* view, |
170 | - GtkWidget* inspector_view, |
171 | - MidoriBrowser* browser) |
172 | -{ |
173 | - GtkWidget* scrolled = gtk_widget_get_parent (GTK_WIDGET (inspector_view)); |
174 | - GtkWidget* paned = gtk_widget_get_parent (scrolled); |
175 | - browser->inspector_view = gtk_viewport_new (NULL, NULL); |
176 | - gtk_container_remove (GTK_CONTAINER (scrolled), GTK_WIDGET (inspector_view)); |
177 | - gtk_container_add (GTK_CONTAINER (scrolled), browser->inspector_view); |
178 | - gtk_widget_hide (paned); |
179 | - if (katze_object_get_boolean (browser->settings, "last-inspector-attached")) |
180 | - g_object_set (browser->settings, "last-inspector-attached", FALSE, NULL); |
181 | -} |
182 | - |
183 | -static void |
184 | midori_browser_view_copy_history (GtkWidget* view_to, |
185 | GtkWidget* view_from, |
186 | gboolean omit_last) |
187 | @@ -1904,10 +1866,6 @@ |
188 | midori_view_notify_zoom_level_cb, browser, |
189 | "signal::notify::statusbar-text", |
190 | midori_view_notify_statusbar_text_cb, browser, |
191 | - "signal::attach-inspector", |
192 | - midori_view_attach_inspector_cb, browser, |
193 | - "signal::detach-inspector", |
194 | - midori_view_detach_inspector_cb, browser, |
195 | "signal::new-tab", |
196 | midori_view_new_tab_cb, browser, |
197 | "signal::new-window", |
198 | @@ -1979,10 +1937,6 @@ |
199 | midori_view_notify_zoom_level_cb, browser, |
200 | "any_signal", |
201 | midori_view_notify_statusbar_text_cb, browser, |
202 | - "any_signal::attach-inspector", |
203 | - midori_view_attach_inspector_cb, browser, |
204 | - "any_signal::detach-inspector", |
205 | - midori_view_detach_inspector_cb, browser, |
206 | "any_signal::new-tab", |
207 | midori_view_new_tab_cb, browser, |
208 | "any_signal::new-window", |
209 | @@ -3227,7 +3181,6 @@ |
210 | midori_context_action_add_action_group (menu, browser->action_group); |
211 | midori_context_action_add_by_name (menu, "ManageSearchEngines"); |
212 | midori_context_action_add_by_name (menu, "ClearPrivateData"); |
213 | - midori_context_action_add_by_name (menu, "InspectPage"); |
214 | g_signal_emit (browser, signals[POPULATE_TOOL_MENU], 0, default_menu); |
215 | midori_context_action_add (menu, NULL); |
216 | gsize j = 0; |
217 | @@ -4702,16 +4655,6 @@ |
218 | } |
219 | |
220 | static void |
221 | -_action_inspect_page_activate (GtkAction* action, |
222 | - MidoriBrowser* browser) |
223 | -{ |
224 | - GtkWidget* view = midori_browser_get_current_tab (browser); |
225 | - WebKitWebView* web_view = WEBKIT_WEB_VIEW (midori_view_get_web_view (MIDORI_VIEW (view))); |
226 | - WebKitWebInspector* inspector = webkit_web_view_get_inspector (web_view); |
227 | - webkit_web_inspector_show (inspector); |
228 | -} |
229 | - |
230 | -static void |
231 | _action_tab_move_activate (GtkAction* action, |
232 | MidoriBrowser* browser) |
233 | { |
234 | @@ -5515,9 +5458,6 @@ |
235 | { "ClearPrivateData", NULL, |
236 | N_("_Clear Private Data…"), "<Ctrl><Shift>Delete", |
237 | NULL, G_CALLBACK (_action_clear_private_data_activate) }, |
238 | - { "InspectPage", NULL, |
239 | - N_("_Inspect Page"), "<Ctrl><Shift>i", |
240 | - NULL, G_CALLBACK (_action_inspect_page_activate) }, |
241 | |
242 | { "TabPrevious", GTK_STOCK_GO_BACK, |
243 | N_("_Previous Tab"), "<Ctrl>Page_Up", |
244 | @@ -5893,7 +5833,6 @@ |
245 | "<menuitem action='UndoTabClose'/>" |
246 | "<menuitem action='TrashEmpty'/>" |
247 | "<menuitem action='Preferences'/>" |
248 | - "<menuitem action='InspectPage'/>" |
249 | "<menuitem action='ReloadUncached'/>" |
250 | "<menuitem action='CaretBrowsing'/>" |
251 | "</menu>" |
252 | @@ -6079,7 +6018,6 @@ |
253 | GtkSettings* gtk_settings; |
254 | GtkWidget* hpaned; |
255 | GtkWidget* vpaned; |
256 | - GtkWidget* scrolled; |
257 | KatzeArray* dummy_array; |
258 | |
259 | browser->settings = midori_web_settings_new (); |
260 | @@ -6464,19 +6402,6 @@ |
261 | #endif |
262 | gtk_widget_show (browser->notebook); |
263 | |
264 | - /* Inspector container */ |
265 | - browser->inspector = gtk_vbox_new (FALSE, 0); |
266 | - gtk_paned_pack2 (GTK_PANED (vpaned), browser->inspector, FALSE, FALSE); |
267 | - scrolled = gtk_scrolled_window_new (NULL, NULL); |
268 | - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled), |
269 | - GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); |
270 | - gtk_widget_set_can_focus (scrolled, TRUE); |
271 | - gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled), |
272 | - GTK_SHADOW_ETCHED_IN); |
273 | - gtk_box_pack_start (GTK_BOX (browser->inspector), scrolled, TRUE, TRUE, 0); |
274 | - browser->inspector_view = gtk_viewport_new (NULL, NULL); |
275 | - gtk_container_add (GTK_CONTAINER (scrolled), browser->inspector_view); |
276 | - |
277 | /* Incremental findbar */ |
278 | browser->find = g_object_new (MIDORI_TYPE_FINDBAR, NULL); |
279 | gtk_box_pack_start (GTK_BOX (vbox), browser->find, FALSE, FALSE, 0); |
280 | |
281 | === modified file 'midori/midori-view.c' |
282 | --- midori/midori-view.c 2013-11-22 18:03:14 +0000 |
283 | +++ midori/midori-view.c 2013-11-28 20:51:46 +0000 |
284 | @@ -2300,21 +2300,6 @@ |
285 | #endif |
286 | |
287 | static void |
288 | -midori_view_inspect_element_activate_cb (GtkAction* action, |
289 | - gpointer user_data) |
290 | -{ |
291 | - MidoriView* view = user_data; |
292 | - WebKitWebInspector* inspector = webkit_web_view_get_inspector (WEBKIT_WEB_VIEW (view->web_view)); |
293 | - #ifndef HAVE_WEBKIT2 |
294 | - WebKitHitTestResult* hit_test_result = view->hit_test; |
295 | - gint x = katze_object_get_int (hit_test_result, "x"); |
296 | - gint y = katze_object_get_int (hit_test_result, "y"); |
297 | - webkit_web_inspector_inspect_coordinates (inspector, x, y); |
298 | - #endif |
299 | - webkit_web_inspector_show (inspector); |
300 | -} |
301 | - |
302 | -static void |
303 | midori_view_add_search_engine_cb (GtkWidget* widget, |
304 | MidoriView* view) |
305 | { |
306 | @@ -2569,10 +2554,6 @@ |
307 | midori_context_action_add_by_name (menu, "Fullscreen"); |
308 | } |
309 | |
310 | - if (katze_object_get_boolean (view->settings, "enable-developer-extras")) |
311 | - midori_context_action_add_simple (menu, "InspectElement", _("Inspect _Element"), NULL, NULL, |
312 | - midori_view_inspect_element_activate_cb, view); |
313 | - |
314 | g_signal_emit_by_name (view, "context-menu", hit_test_result, menu); |
315 | return menu; |
316 | } |
317 | @@ -3383,152 +3364,6 @@ |
318 | return midori_tab_get_progress (MIDORI_TAB (view)); |
319 | } |
320 | |
321 | -#ifndef HAVE_WEBKIT2 |
322 | -static gboolean |
323 | -midori_view_inspector_window_key_press_event_cb (GtkWidget* window, |
324 | - GdkEventKey* event, |
325 | - gpointer user_data) |
326 | -{ |
327 | - /* Close window on Ctrl+W */ |
328 | - if (event->keyval == 'w' && (event->state & GDK_CONTROL_MASK)) |
329 | - gtk_widget_destroy (window); |
330 | - |
331 | - return FALSE; |
332 | -} |
333 | - |
334 | -static void |
335 | -midori_view_web_inspector_construct_window (gpointer inspector, |
336 | - WebKitWebView* web_view, |
337 | - GtkWidget* inspector_view, |
338 | - MidoriView* view) |
339 | -{ |
340 | - gchar* title; |
341 | - const gchar* label; |
342 | - GtkWidget* window; |
343 | - GtkWidget* toplevel; |
344 | - const gchar* icon_name; |
345 | - GtkIconTheme* icon_theme; |
346 | - GdkPixbuf* icon; |
347 | - GdkPixbuf* gray_icon; |
348 | - |
349 | - label = midori_view_get_display_title (view); |
350 | - title = g_strdup_printf (_("Inspect page - %s"), label); |
351 | - window = gtk_window_new (GTK_WINDOW_TOPLEVEL); |
352 | - gtk_window_set_title (GTK_WINDOW (window), title); |
353 | - g_free (title); |
354 | - |
355 | - toplevel = gtk_widget_get_toplevel (GTK_WIDGET (view)); |
356 | - if (gtk_widget_is_toplevel (toplevel)) |
357 | - { |
358 | - gtk_window_set_screen (GTK_WINDOW (window), gtk_window_get_screen (GTK_WINDOW (toplevel))); |
359 | - katze_window_set_sensible_default_size (GTK_WINDOW (window)); |
360 | - } |
361 | - |
362 | - /* Attempt to make a gray version of the icon on the fly */ |
363 | - icon_name = gtk_window_get_icon_name (GTK_WINDOW (toplevel)); |
364 | - icon_theme = gtk_icon_theme_get_for_screen ( |
365 | - gtk_widget_get_screen (GTK_WIDGET (view))); |
366 | - icon = gtk_icon_theme_load_icon (icon_theme, icon_name, 32, |
367 | - GTK_ICON_LOOKUP_USE_BUILTIN, NULL); |
368 | - if (icon) |
369 | - { |
370 | - gray_icon = gdk_pixbuf_copy (icon); |
371 | - if (gray_icon) |
372 | - { |
373 | - gdk_pixbuf_saturate_and_pixelate (gray_icon, gray_icon, 0.1f, FALSE); |
374 | - gtk_window_set_icon (GTK_WINDOW (window), gray_icon); |
375 | - g_object_unref (gray_icon); |
376 | - } |
377 | - g_object_unref (icon); |
378 | - } |
379 | - else |
380 | - gtk_window_set_icon_name (GTK_WINDOW (window), icon_name); |
381 | - #if GTK_CHECK_VERSION (3, 4, 0) |
382 | - gtk_window_set_hide_titlebar_when_maximized (GTK_WINDOW (window), TRUE); |
383 | - #endif |
384 | - gtk_container_add (GTK_CONTAINER (window), inspector_view); |
385 | - gtk_widget_show_all (inspector_view); |
386 | - |
387 | - g_signal_connect (window, "key-press-event", |
388 | - G_CALLBACK (midori_view_inspector_window_key_press_event_cb), NULL); |
389 | - |
390 | - /* FIXME: Update window title with URI */ |
391 | -} |
392 | - |
393 | -static WebKitWebView* |
394 | -midori_view_web_inspector_inspect_web_view_cb (gpointer inspector, |
395 | - WebKitWebView* web_view, |
396 | - MidoriView* view) |
397 | -{ |
398 | - GtkWidget* inspector_view = webkit_web_view_new (); |
399 | - midori_view_web_inspector_construct_window (inspector, |
400 | - web_view, inspector_view, view); |
401 | - return WEBKIT_WEB_VIEW (inspector_view); |
402 | -} |
403 | - |
404 | -static gboolean |
405 | -midori_view_web_inspector_show_window_cb (WebKitWebInspector* inspector, |
406 | - MidoriView* view) |
407 | -{ |
408 | - GtkWidget* inspector_view = GTK_WIDGET (webkit_web_inspector_get_web_view (inspector)); |
409 | - GtkWidget* window = gtk_widget_get_toplevel (inspector_view); |
410 | - if (!window) |
411 | - return FALSE; |
412 | - if (katze_object_get_boolean (view->settings, "last-inspector-attached")) |
413 | - { |
414 | - gboolean handled = FALSE; |
415 | - g_signal_emit_by_name (inspector, "attach-window", &handled); |
416 | - } |
417 | - else |
418 | - { |
419 | - gtk_widget_show (window); |
420 | - gtk_window_present (GTK_WINDOW (window)); |
421 | - } |
422 | - return TRUE; |
423 | -} |
424 | - |
425 | -static gboolean |
426 | -midori_view_web_inspector_attach_window_cb (gpointer inspector, |
427 | - MidoriView* view) |
428 | -{ |
429 | - GtkWidget* inspector_view = GTK_WIDGET (webkit_web_inspector_get_web_view (inspector)); |
430 | - g_signal_emit_by_name (view, "attach-inspector", inspector_view); |
431 | - return TRUE; |
432 | -} |
433 | - |
434 | -static gboolean |
435 | -midori_view_web_inspector_detach_window_cb (gpointer inspector, |
436 | - MidoriView* view) |
437 | -{ |
438 | - GtkWidget* inspector_view = GTK_WIDGET (webkit_web_inspector_get_web_view (inspector)); |
439 | - GtkWidget* parent = gtk_widget_get_parent (inspector_view); |
440 | - if (GTK_IS_WINDOW (parent)) |
441 | - return FALSE; |
442 | - |
443 | - gtk_widget_hide (parent); |
444 | - g_signal_emit_by_name (view, "detach-inspector", inspector_view); |
445 | - midori_view_web_inspector_construct_window (inspector, |
446 | - WEBKIT_WEB_VIEW (view->web_view), inspector_view, view); |
447 | - return TRUE; |
448 | -} |
449 | - |
450 | -static gboolean |
451 | -midori_view_web_inspector_close_window_cb (gpointer inspector, |
452 | - MidoriView* view) |
453 | -{ |
454 | - GtkWidget* inspector_view = GTK_WIDGET (webkit_web_inspector_get_web_view (inspector)); |
455 | - #ifdef HAVE_WEBKIT2 |
456 | - GtkWidget* scrolled = inspector_view; |
457 | - #else |
458 | - GtkWidget* scrolled = gtk_widget_get_parent (inspector_view); |
459 | - #endif |
460 | - if (!scrolled) |
461 | - return FALSE; |
462 | - gtk_widget_hide (gtk_widget_get_parent (scrolled)); |
463 | - return TRUE; |
464 | -} |
465 | -#endif |
466 | - |
467 | static GObject* |
468 | midori_view_constructor (GType type, |
469 | guint n_construct_properties, |
470 | @@ -3670,20 +3505,6 @@ |
471 | |
472 | #ifndef HAVE_WEBKIT2 |
473 | gtk_container_add (GTK_CONTAINER (view->scrolled_window), view->web_view); |
474 | - |
475 | - gpointer inspector = webkit_web_view_get_inspector ((WebKitWebView*)view->web_view); |
476 | - g_object_connect (inspector, |
477 | - "signal::inspect-web-view", |
478 | - midori_view_web_inspector_inspect_web_view_cb, view, |
479 | - "signal::show-window", |
480 | - midori_view_web_inspector_show_window_cb, view, |
481 | - "signal::attach-window", |
482 | - midori_view_web_inspector_attach_window_cb, view, |
483 | - "signal::detach-window", |
484 | - midori_view_web_inspector_detach_window_cb, view, |
485 | - "signal::close-window", |
486 | - midori_view_web_inspector_close_window_cb, view, |
487 | - NULL); |
488 | #endif |
489 | gtk_widget_show_all (view->scrolled_window); |
490 | return object; |
I dislike saving the hit test result because it is racy and you will eventually encounter a situation where it's not set, this is what happened before with regard to the URI below the mouse pointer and the selected text.
How about taking the hit test result in the context menu event and storing it in the action, in a subclass maybe, which is added to the menu?