aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorXan Lopez <xan@src.gnome.org>2008-11-30 03:14:21 +0800
committerXan Lopez <xan@src.gnome.org>2008-11-30 03:14:21 +0800
commit3c970a2230d2bc841e26f55d9bacc707e8bc9529 (patch)
treecd6cd2876a9c744e723d6c532d8a5760dd5c0eaa /src
parent06eb49ff9adc6a5038abe630da95ffa2f99d91a9 (diff)
downloadgsoc2013-epiphany-3c970a2230d2bc841e26f55d9bacc707e8bc9529.tar.gz
gsoc2013-epiphany-3c970a2230d2bc841e26f55d9bacc707e8bc9529.tar.zst
gsoc2013-epiphany-3c970a2230d2bc841e26f55d9bacc707e8bc9529.zip
ephy-window: use new webkit API to create windows on request.
svn path=/trunk/; revision=8620
Diffstat (limited to 'src')
-rw-r--r--src/ephy-window.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/ephy-window.c b/src/ephy-window.c
index a3ccffbdf..4176d78cb 100644
--- a/src/ephy-window.c
+++ b/src/ephy-window.c
@@ -2407,6 +2407,46 @@ ephy_window_visibility_cb (EphyEmbed *embed, GParamSpec *pspec, EphyWindow *wind
gtk_widget_hide (GTK_WIDGET (window));
}
+static gboolean
+web_view_ready_cb (WebKitWebView *web_view,
+ EphyEmbed *embed)
+{
+ WebKitWebWindowFeatures *features;
+ GtkWidget *window;
+ int width, height;
+
+ window = gtk_widget_get_toplevel (GTK_WIDGET (web_view));
+ features = webkit_web_view_get_window_features (web_view);
+ /* FIXME: apply all features when appropriate */
+ g_object_get (features,
+ "width", &width,
+ "height", &height,
+ NULL);
+
+ gtk_window_set_default_size (GTK_WINDOW (window), width, height);
+ gtk_widget_show (window);
+
+ return TRUE;
+}
+
+static WebKitWebView*
+create_web_view_cb (WebKitWebView *web_view,
+ WebKitWebFrame *frame,
+ EphyWindow *window)
+{
+ EphyEmbed *embed;
+
+ embed = ephy_shell_new_tab_full (ephy_shell_get_default (),
+ NULL, NULL, NULL,
+ EPHY_NEW_TAB_IN_NEW_WINDOW |
+ EPHY_NEW_TAB_DONT_SHOW_WINDOW,
+ EPHY_EMBED_CHROME_ALL,
+ FALSE,
+ 0);
+
+ return EPHY_GET_WEBKIT_WEB_VIEW_FROM_EMBED (embed);
+}
+
static void
ephy_window_set_active_tab (EphyWindow *window, EphyEmbed *new_embed)
{
@@ -2433,6 +2473,12 @@ ephy_window_set_active_tab (EphyWindow *window, EphyEmbed *new_embed)
g_signal_handlers_disconnect_by_func (web_view,
G_CALLBACK (scroll_event_cb),
window);
+ g_signal_handlers_disconnect_by_func (web_view,
+ G_CALLBACK (create_web_view_cb),
+ window);
+ g_signal_handlers_disconnect_by_func (web_view,
+ G_CALLBACK (web_view_ready_cb),
+ NULL);
g_signal_handlers_disconnect_by_func (embed,
G_CALLBACK (sync_tab_popup_windows),
@@ -2514,6 +2560,12 @@ ephy_window_set_active_tab (EphyWindow *window, EphyEmbed *new_embed)
g_signal_connect_object (web_view, "scroll-event",
G_CALLBACK (scroll_event_cb),
window, 0);
+ g_signal_connect_object (web_view, "create-web-view",
+ G_CALLBACK (create_web_view_cb),
+ window, 0);
+ g_signal_connect_object (web_view, "web-view-ready",
+ G_CALLBACK (web_view_ready_cb),
+ NULL, 0);
g_signal_connect_object (embed, "notify::hidden-popup-count",
G_CALLBACK (sync_tab_popup_windows),