diff options
author | Christian Dywan <christian.dywan@canonical.com> | 2013-06-22 00:16:56 +0200 |
---|---|---|
committer | Christian Dywan <christian.dywan@canonical.com> | 2013-06-22 00:16:56 +0200 |
commit | 5bc839b7c0155ca37dccc2cbb9996657825ec0c0 (patch) | |
tree | c55057a61ca662afd466d412f97e44536c5cb161 | |
parent | 6e28509f4a573b694e018483931ff4ec0332f4f0 (diff) | |
download | midori-5bc839b7c0155ca37dccc2cbb9996657825ec0c0.tar.gz |
Consistently open windows/ tabs in external browser/ new process
-rw-r--r-- | midori/midori-browser.c | 31 | ||||
-rw-r--r-- | midori/midori-view.c | 4 |
2 files changed, 30 insertions, 5 deletions
diff --git a/midori/midori-browser.c b/midori/midori-browser.c index 21a1006a..4a8c7c36 100644 --- a/midori/midori-browser.c +++ b/midori/midori-browser.c @@ -1323,12 +1323,29 @@ midori_browser_notify_new_tab (MidoriBrowser* browser) } } +static bool +midori_view_forward_external (GtkWidget* view, + const gchar* uri) +{ + if (midori_paths_get_runtime_mode () == MIDORI_RUNTIME_MODE_APP) + return sokoke_show_uri (gtk_widget_get_screen (view), uri, 0, NULL); + else if (midori_paths_get_runtime_mode () == MIDORI_RUNTIME_MODE_PRIVATE) + { + sokoke_spawn_app (uri, TRUE); + return TRUE; + } + return FALSE; +} + static void midori_view_new_tab_cb (GtkWidget* view, const gchar* uri, gboolean background, MidoriBrowser* browser) { + if (midori_view_forward_external (view, uri)) + return; + GtkWidget* new_view = midori_browser_add_uri (browser, uri); midori_browser_view_copy_history (new_view, view, FALSE); @@ -1343,12 +1360,13 @@ midori_view_new_window_cb (GtkWidget* view, const gchar* uri, MidoriBrowser* browser) { + if (midori_view_forward_external (view, uri)) + return; + MidoriBrowser* new_browser; g_signal_emit (browser, signals[NEW_WINDOW], 0, NULL, &new_browser); - if (new_browser) - midori_browser_add_uri (new_browser, uri); - else /* No MidoriApp, so this is app or private mode */ - sokoke_spawn_app (uri, TRUE); + g_assert (new_browser != NULL); + midori_view_new_tab_cb (view, uri, FALSE, new_browser); } static void @@ -1358,11 +1376,16 @@ midori_view_new_view_cb (GtkWidget* view, gboolean user_initiated, MidoriBrowser* browser) { + if (midori_view_forward_external (new_view, + katze_item_get_uri (midori_view_get_proxy_item (MIDORI_VIEW (new_view))))) + return; + midori_browser_view_copy_history (new_view, view, TRUE); if (where == MIDORI_NEW_VIEW_WINDOW) { MidoriBrowser* new_browser; g_signal_emit (browser, signals[NEW_WINDOW], 0, NULL, &new_browser); + g_assert (new_browser != NULL); midori_browser_add_tab (new_browser, new_view); midori_browser_set_current_tab (new_browser, new_view); } diff --git a/midori/midori-view.c b/midori/midori-view.c index e9fa1cd1..ba316e05 100644 --- a/midori/midori-view.c +++ b/midori/midori-view.c @@ -2837,7 +2837,9 @@ webkit_web_view_create_web_view_cb (GtkWidget* web_view, new_view = view; else { - new_view = (MidoriView*)midori_view_new_with_item (NULL, view->settings); + KatzeItem* item = katze_item_new (); + item->uri = g_strdup (webkit_web_frame_get_uri (web_frame)); + new_view = (MidoriView*)midori_view_new_with_item (item, view->settings); g_signal_connect (new_view->web_view, "web-view-ready", G_CALLBACK (webkit_web_view_web_view_ready_cb), view); } |