diff options
author | Diego Escalante Urrelo <descalante@igalia.com> | 2010-11-07 07:24:16 +0800 |
---|---|---|
committer | Diego Escalante Urrelo <descalante@igalia.com> | 2010-12-06 23:50:00 +0800 |
commit | a7754510a01e60d856b20946e2a479b5cf149ff2 (patch) | |
tree | 8b8ef21c814e4214cd8a07a23cc83b3ac54533bf | |
parent | 5ca644b3023b74aff98995a2829cc7281088e756 (diff) | |
download | gsoc2013-epiphany-a7754510a01e60d856b20946e2a479b5cf149ff2.tar gsoc2013-epiphany-a7754510a01e60d856b20946e2a479b5cf149ff2.tar.gz gsoc2013-epiphany-a7754510a01e60d856b20946e2a479b5cf149ff2.tar.bz2 gsoc2013-epiphany-a7754510a01e60d856b20946e2a479b5cf149ff2.tar.lz gsoc2013-epiphany-a7754510a01e60d856b20946e2a479b5cf149ff2.tar.xz gsoc2013-epiphany-a7754510a01e60d856b20946e2a479b5cf149ff2.tar.zst gsoc2013-epiphany-a7754510a01e60d856b20946e2a479b5cf149ff2.zip |
ephy-embed: clean up embed widget skeleton
The inspector embedding breaks some assumptions about the internal embed
widgetry, mainly breaking EPHY_GET_EMBED_FROM_EPHY_WEB_VIEW macro.
The embed now has the main EphyWebView in a GtkPaned permanently.
Bug #628459
-rw-r--r-- | embed/ephy-embed-utils.h | 2 | ||||
-rw-r--r-- | embed/ephy-embed.c | 100 |
2 files changed, 37 insertions, 65 deletions
diff --git a/embed/ephy-embed-utils.h b/embed/ephy-embed-utils.h index 28ba0a96c..b1ee9adeb 100644 --- a/embed/ephy-embed-utils.h +++ b/embed/ephy-embed-utils.h @@ -36,7 +36,7 @@ G_BEGIN_DECLS #define EPHY_GET_WEBKIT_WEB_VIEW_FROM_EMBED(embed) (WEBKIT_WEB_VIEW (ephy_embed_get_web_view (embed))) -#define EPHY_GET_EMBED_FROM_EPHY_WEB_VIEW(view) (EPHY_EMBED (gtk_widget_get_parent (gtk_widget_get_parent (GTK_WIDGET (view))))) +#define EPHY_GET_EMBED_FROM_EPHY_WEB_VIEW(view) (EPHY_EMBED (gtk_widget_get_parent (gtk_widget_get_parent (gtk_widget_get_parent (GTK_WIDGET (view)))))) #define EPHY_WEBKIT_BACK_FORWARD_LIMIT 100 diff --git a/embed/ephy-embed.c b/embed/ephy-embed.c index 7605d9284..07e6ed25a 100644 --- a/embed/ephy-embed.c +++ b/embed/ephy-embed.c @@ -67,6 +67,7 @@ struct _EphyEmbedPrivate WebKitWebView *web_view; EphyHistory *history; GtkWidget *inspector_window; + GtkWidget *inspector_web_view; GtkWidget *inspector_scrolled_window; gboolean inspector_attached; guint is_setting_zoom : 1; @@ -292,18 +293,10 @@ ephy_embed_class_init (EphyEmbedClass *klass) static WebKitWebView * ephy_embed_inspect_web_view_cb (WebKitWebInspector *inspector, - WebKitWebView *web_view, - gpointer data) + WebKitWebView *web_view, + EphyEmbed *embed) { - GtkWidget *inspector_sw = GTK_WIDGET (data); - GtkWidget *inspector_web_view; - - inspector_web_view = ephy_web_view_new (); - gtk_container_add (GTK_CONTAINER (inspector_sw), inspector_web_view); - - gtk_widget_show_all (gtk_widget_get_toplevel (inspector_sw)); - - return WEBKIT_WEB_VIEW (inspector_web_view); + return WEBKIT_WEB_VIEW (embed->priv->inspector_web_view); } static gboolean @@ -315,38 +308,12 @@ ephy_embed_attach_inspector_cb (WebKitWebInspector *inspector, embed->priv->inspector_attached = TRUE; - if (embed->priv->paned == NULL) - { - embed->priv->paned = GTK_PANED (gtk_paned_new (GTK_ORIENTATION_VERTICAL)); - g_object_ref_sink (embed->priv->paned); - } - - /* Main view */ - g_object_ref (embed->priv->scrolled_window); - gtk_container_remove (GTK_CONTAINER (embed), - GTK_WIDGET (embed->priv->scrolled_window)); - gtk_paned_pack1 (embed->priv->paned, - GTK_WIDGET (embed->priv->scrolled_window), - TRUE, FALSE); - g_object_unref (embed->priv->scrolled_window); - /* Set a sane position for the mover */ gtk_paned_set_position (embed->priv->paned, allocation.height * 0.5); - /* The inspector */ - g_object_ref (embed->priv->inspector_scrolled_window); - gtk_container_remove (GTK_CONTAINER (embed->priv->inspector_window), - GTK_WIDGET (embed->priv->inspector_scrolled_window)); - gtk_paned_pack2 (embed->priv->paned, - GTK_WIDGET (embed->priv->inspector_scrolled_window), - FALSE, TRUE); - g_object_unref (embed->priv->inspector_scrolled_window); - - /* Add the paned to the embed, show it, and hide the inspector window */ - gtk_container_add (GTK_CONTAINER (embed), GTK_WIDGET (embed->priv->paned)); - gtk_widget_show_all (GTK_WIDGET (embed->priv->paned)); - gtk_widget_hide (embed->priv->inspector_window); + gtk_widget_reparent (GTK_WIDGET (embed->priv->inspector_scrolled_window), + GTK_WIDGET (embed->priv->paned)); return TRUE; } @@ -357,23 +324,10 @@ ephy_embed_detach_inspector_cb (WebKitWebInspector *inspector, { embed->priv->inspector_attached = FALSE; - gtk_container_remove (GTK_CONTAINER (embed), - GTK_WIDGET (embed->priv->paned)); - - /* Main view */ - gtk_widget_reparent (GTK_WIDGET (embed->priv->scrolled_window), - GTK_WIDGET (embed)); - - /* The inspector */ gtk_widget_reparent (GTK_WIDGET (embed->priv->inspector_scrolled_window), GTK_WIDGET (embed->priv->inspector_window)); - /* Get the view and the inspector back to their places */ - gtk_widget_destroy (GTK_WIDGET (embed->priv->paned)); - embed->priv->paned = NULL; - gtk_widget_show_all (embed->priv->inspector_window); - gtk_widget_show_all (embed->priv->inspector_scrolled_window); return TRUE; } @@ -382,8 +336,11 @@ static gboolean ephy_embed_inspect_show_cb (WebKitWebInspector *inspector, EphyEmbed *embed) { - if (!embed->priv->inspector_attached) + if (!embed->priv->inspector_attached) { + gtk_widget_show_all (embed->priv->inspector_window); gtk_window_present (GTK_WINDOW (embed->priv->inspector_window)); + } else + gtk_widget_show (embed->priv->inspector_scrolled_window); return TRUE; } @@ -394,6 +351,8 @@ ephy_embed_inspect_close_cb (WebKitWebInspector *inspector, { if (!embed->priv->inspector_attached) gtk_widget_hide (embed->priv->inspector_window); + else + gtk_widget_hide (embed->priv->inspector_scrolled_window); return TRUE; } @@ -886,22 +845,30 @@ ephy_embed_constructed (GObject *object) { EphyEmbed *embed = (EphyEmbed*)object; GtkWidget *scrolled_window; + GtkWidget *paned; WebKitWebView *web_view; WebKitWebInspector *inspector; - embed->priv->top_widgets_vbox = GTK_BOX (gtk_vbox_new (FALSE, 0)); - gtk_box_pack_start (GTK_BOX (embed), GTK_WIDGET (embed->priv->top_widgets_vbox), - FALSE, FALSE, 0); - gtk_widget_show (GTK_WIDGET (embed->priv->top_widgets_vbox)); - + /* Skeleton */ + web_view = WEBKIT_WEB_VIEW (ephy_web_view_new ()); scrolled_window = GTK_WIDGET (embed->priv->scrolled_window); - gtk_container_add (GTK_CONTAINER (embed), scrolled_window); - gtk_widget_show (scrolled_window); + paned = GTK_WIDGET (embed->priv->paned); - web_view = WEBKIT_WEB_VIEW (ephy_web_view_new ()); embed->priv->web_view = web_view; - gtk_container_add (GTK_CONTAINER (embed->priv->scrolled_window), GTK_WIDGET (web_view)); + + gtk_container_add (GTK_CONTAINER (embed->priv->scrolled_window), + GTK_WIDGET (web_view)); + gtk_paned_pack1 (GTK_PANED (paned), GTK_WIDGET (scrolled_window), + TRUE, FALSE); + + gtk_box_pack_start (GTK_BOX (embed), + GTK_WIDGET (embed->priv->top_widgets_vbox), + FALSE, FALSE, 0); + gtk_container_add (GTK_CONTAINER (embed), paned); + + gtk_widget_show (GTK_WIDGET (embed->priv->top_widgets_vbox)); gtk_widget_show (GTK_WIDGET (web_view)); + gtk_widget_show_all (paned); g_object_connect (web_view, "signal::notify::load-status", G_CALLBACK (load_status_changed_cb), embed, @@ -910,6 +877,8 @@ ephy_embed_constructed (GObject *object) "signal::notify::zoom-level", G_CALLBACK (zoom_changed_cb), embed, NULL); + /* The inspector */ + embed->priv->inspector_web_view = ephy_web_view_new (); embed->priv->inspector_window = gtk_window_new (GTK_WINDOW_TOPLEVEL); inspector = webkit_web_view_get_inspector (web_view); @@ -918,6 +887,8 @@ ephy_embed_constructed (GObject *object) GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add (GTK_CONTAINER (embed->priv->inspector_window), embed->priv->inspector_scrolled_window); + gtk_container_add (GTK_CONTAINER (embed->priv->inspector_scrolled_window), + embed->priv->inspector_web_view); gtk_window_set_title (GTK_WINDOW (embed->priv->inspector_window), _("Web Inspector")); @@ -930,7 +901,7 @@ ephy_embed_constructed (GObject *object) g_object_connect (inspector, "signal::inspect-web-view", G_CALLBACK (ephy_embed_inspect_web_view_cb), - embed->priv->inspector_scrolled_window, + embed, "signal::show-window", G_CALLBACK (ephy_embed_inspect_show_cb), embed, "signal::close-window", G_CALLBACK (ephy_embed_inspect_close_cb), @@ -956,7 +927,8 @@ ephy_embed_init (EphyEmbed *embed) embed->priv = EPHY_EMBED_GET_PRIVATE (embed); embed->priv->scrolled_window = GTK_SCROLLED_WINDOW (gtk_scrolled_window_new (NULL, NULL)); - embed->priv->paned = NULL; + embed->priv->paned = GTK_PANED (gtk_vpaned_new ()); + embed->priv->top_widgets_vbox = GTK_BOX (gtk_vbox_new (FALSE, 0)); gtk_scrolled_window_set_policy (embed->priv->scrolled_window, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); |