aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--embed/ephy-web-view.c18
-rw-r--r--src/ephy-shell.c1
-rw-r--r--src/ephy-window.c24
3 files changed, 30 insertions, 13 deletions
diff --git a/embed/ephy-web-view.c b/embed/ephy-web-view.c
index 1a9ce6439..6b717a061 100644
--- a/embed/ephy-web-view.c
+++ b/embed/ephy-web-view.c
@@ -1943,6 +1943,20 @@ load_status_cb (WebKitWebView *web_view,
}
}
+static gboolean
+close_web_view_cb (WebKitWebView *web_view,
+ gpointer user_data)
+{
+ EphyEmbedContainer *window;
+ GtkWidget *widget = gtk_widget_get_toplevel (GTK_WIDGET (web_view));
+ window = EPHY_EMBED_CONTAINER (widget);
+
+ if (ephy_embed_container_get_is_popup (window))
+ gtk_widget_destroy (GTK_WIDGET (window));
+
+ return TRUE;
+}
+
static void
ephy_web_view_init (EphyWebView *web_view)
{
@@ -1978,6 +1992,10 @@ ephy_web_view_init (EphyWebView *web_view)
G_CALLBACK (load_status_cb),
NULL);
+ g_signal_connect (web_view, "close-web-view",
+ G_CALLBACK (close_web_view_cb),
+ NULL);
+
g_signal_connect_object (web_view, "icon-loaded",
G_CALLBACK (favicon_cb),
web_view, (GConnectFlags)0);
diff --git a/src/ephy-shell.c b/src/ephy-shell.c
index c3551f861..e75030e9a 100644
--- a/src/ephy-shell.c
+++ b/src/ephy-shell.c
@@ -445,7 +445,6 @@ ephy_shell_new_tab_full (EphyShell *shell,
if (flags & EPHY_NEW_TAB_IN_EXISTING_WINDOW) in_new_window = FALSE;
in_new_window = in_new_window && !eel_gconf_get_boolean (CONF_LOCKDOWN_FULLSCREEN);
- g_return_val_if_fail (in_new_window || !is_popup, NULL);
g_return_val_if_fail (open_page == (gboolean)(request != NULL), NULL);
jump_to = (flags & EPHY_NEW_TAB_JUMP) != 0;
diff --git a/src/ephy-window.c b/src/ephy-window.c
index 91b163ed1..4d339ca83 100644
--- a/src/ephy-window.c
+++ b/src/ephy-window.c
@@ -2434,6 +2434,17 @@ ephy_window_visibility_cb (EphyEmbed *embed, GParamSpec *pspec, EphyWindow *wind
gtk_widget_hide (GTK_WIDGET (window));
}
+static void
+ephy_window_set_is_popup (EphyWindow *window,
+ gboolean is_popup)
+{
+ EphyWindowPrivate *priv = window->priv;
+
+ priv->is_popup = is_popup;
+
+ g_object_notify (G_OBJECT (window), "is-popup");
+}
+
static gboolean
web_view_ready_cb (WebKitWebView *web_view,
gpointer user_data)
@@ -2519,7 +2530,7 @@ create_web_view_cb (WebKitWebView *web_view,
NULL, NULL,
flags,
EPHY_WEB_VIEW_CHROME_ALL,
- FALSE,
+ TRUE, /* is popup? */
0);
using_new_window = parent_window == NULL;
@@ -3255,17 +3266,6 @@ ephy_window_set_chrome (EphyWindow *window, EphyWebViewChrome mask)
}
static void
-ephy_window_set_is_popup (EphyWindow *window,
- gboolean is_popup)
-{
- EphyWindowPrivate *priv = window->priv;
-
- priv->is_popup = is_popup;
-
- g_object_notify (G_OBJECT (window), "is-popup");
-}
-
-static void
ephy_window_dispose (GObject *object)
{
EphyWindow *window = EPHY_WINDOW (object);