summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Dywan <christian.dywan@canonical.com>2013-06-22 00:16:56 +0200
committerChristian Dywan <christian.dywan@canonical.com>2013-06-22 00:16:56 +0200
commit5bc839b7c0155ca37dccc2cbb9996657825ec0c0 (patch)
treec55057a61ca662afd466d412f97e44536c5cb161
parent6e28509f4a573b694e018483931ff4ec0332f4f0 (diff)
downloadmidori-5bc839b7c0155ca37dccc2cbb9996657825ec0c0.tar.gz
Consistently open windows/ tabs in external browser/ new process
-rw-r--r--midori/midori-browser.c31
-rw-r--r--midori/midori-view.c4
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);
}