aboutsummaryrefslogtreecommitdiffstats
path: root/embed
diff options
context:
space:
mode:
authorClaudio Saavedra <csaavedra@igalia.com>2012-08-20 18:54:32 +0800
committerClaudio Saavedra <csaavedra@igalia.com>2012-09-01 02:34:01 +0800
commit38b410011b97e995ee7feb1c448e903d2f323098 (patch)
tree89bb6152c2937509d03d782528b0f627704362fd /embed
parent7e8d47c21673696915cf7770e4f48a71aaf06e98 (diff)
downloadgsoc2013-epiphany-38b410011b97e995ee7feb1c448e903d2f323098.tar
gsoc2013-epiphany-38b410011b97e995ee7feb1c448e903d2f323098.tar.gz
gsoc2013-epiphany-38b410011b97e995ee7feb1c448e903d2f323098.tar.bz2
gsoc2013-epiphany-38b410011b97e995ee7feb1c448e903d2f323098.tar.lz
gsoc2013-epiphany-38b410011b97e995ee7feb1c448e903d2f323098.tar.xz
gsoc2013-epiphany-38b410011b97e995ee7feb1c448e903d2f323098.tar.zst
gsoc2013-epiphany-38b410011b97e995ee7feb1c448e903d2f323098.zip
ephy-embed: add the overview and a overview-mode property
Toggling this property will toggle visibility of the overview and the paned with the normal embed contents.
Diffstat (limited to 'embed')
-rw-r--r--embed/ephy-embed.c113
-rw-r--r--embed/ephy-embed.h5
2 files changed, 118 insertions, 0 deletions
diff --git a/embed/ephy-embed.c b/embed/ephy-embed.c
index 352294b99..1283acbc1 100644
--- a/embed/ephy-embed.c
+++ b/embed/ephy-embed.c
@@ -79,6 +79,8 @@ struct _EphyEmbedPrivate
GtkWidget *fullscreen_message_label;
char *fullscreen_string;
+ GtkWidget *overview;
+ guint overview_mode : 1;
GSList *messages;
GSList *keys;
@@ -96,6 +98,12 @@ struct _EphyEmbedPrivate
gulong progress_update_handler_id;
};
+enum
+{
+ PROP_0,
+ PROP_OVERVIEW_MODE,
+};
+
G_DEFINE_TYPE (EphyEmbed, ephy_embed, GTK_TYPE_BOX)
/* Portions of the following code based on GTK+.
@@ -431,6 +439,44 @@ ephy_embed_finalize (GObject *object)
}
static void
+ephy_embed_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EphyEmbed *embed = EPHY_EMBED (object);
+
+ switch (prop_id)
+ {
+ case PROP_OVERVIEW_MODE:
+ ephy_embed_set_overview_mode (embed, g_value_get_boolean (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+ephy_embed_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EphyEmbed *embed = EPHY_EMBED (object);
+
+ switch (prop_id)
+ {
+ case PROP_OVERVIEW_MODE:
+ g_value_set_boolean (value, ephy_embed_get_overview_mode (embed));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
ephy_embed_class_init (EphyEmbedClass *klass)
{
GObjectClass *object_class = (GObjectClass *)klass;
@@ -439,8 +485,18 @@ ephy_embed_class_init (EphyEmbedClass *klass)
object_class->constructed = ephy_embed_constructed;
object_class->finalize = ephy_embed_finalize;
object_class->dispose = ephy_embed_dispose;
+ object_class->set_property = ephy_embed_set_property;
+ object_class->get_property = ephy_embed_get_property;
widget_class->grab_focus = ephy_embed_grab_focus;
+ g_object_class_install_property (object_class,
+ PROP_OVERVIEW_MODE,
+ g_param_spec_boolean ("overview-mode",
+ "Overview mode",
+ "Whether the embed is showing the overview",
+ FALSE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
g_type_class_add_private (G_OBJECT_CLASS (klass), sizeof(EphyEmbedPrivate));
}
@@ -919,6 +975,22 @@ ephy_embed_constructed (GObject *object)
NULL);
#endif
+ /* The overview */
+ priv->overview = ephy_overview_new ();
+ gtk_box_pack_start (GTK_BOX (embed),
+ GTK_WIDGET (priv->overview),
+ TRUE, TRUE, 0);
+ g_object_bind_property (embed, "overview-mode",
+ priv->overview, "visible",
+ G_BINDING_SYNC_CREATE
+ | G_BINDING_BIDIRECTIONAL);
+
+ g_object_bind_property (embed, "overview-mode",
+ paned, "visible",
+ G_BINDING_SYNC_CREATE
+ | G_BINDING_INVERT_BOOLEAN
+ | G_BINDING_BIDIRECTIONAL);
+
ephy_embed_prefs_add_embed (embed);
}
@@ -1012,3 +1084,44 @@ ephy_embed_remove_top_widget (EphyEmbed *embed, GtkWidget *widget)
gtk_container_remove (GTK_CONTAINER (embed->priv->top_widgets_vbox),
GTK_WIDGET (widget));
}
+
+void
+ephy_embed_set_overview_mode (EphyEmbed *embed, gboolean overview_mode)
+{
+ EphyEmbedPrivate *priv;
+
+ g_return_if_fail (EPHY_IS_EMBED (embed));
+
+ priv = embed->priv;
+
+ if (priv->overview_mode == overview_mode)
+ return;
+
+ priv->overview_mode = overview_mode;
+
+ g_object_notify (G_OBJECT (embed), "overview-mode");
+}
+
+gboolean
+ephy_embed_get_overview_mode (EphyEmbed *embed)
+{
+ g_return_val_if_fail (EPHY_IS_EMBED (embed), FALSE);
+
+ return embed->priv->overview_mode;
+}
+
+/**
+ * ephy_embed_get_overview:
+ * @embed: a #EphyEmbed
+ *
+ * Gets the #EphyOverview in this @embed
+ *
+ * Returns: (transfer none): the overview widget
+ **/
+EphyOverview *
+ephy_embed_get_overview (EphyEmbed *embed)
+{
+ g_return_val_if_fail (EPHY_IS_EMBED (embed), NULL);
+
+ return EPHY_OVERVIEW (embed->priv->overview);
+}
diff --git a/embed/ephy-embed.h b/embed/ephy-embed.h
index 91fc06e57..7820318d8 100644
--- a/embed/ephy-embed.h
+++ b/embed/ephy-embed.h
@@ -22,6 +22,7 @@
#ifndef EPHY_EMBED_H
#define EPHY_EMBED_H
+#include "ephy-overview.h"
#include "ephy-web-view.h"
#include <gtk/gtk.h>
@@ -61,6 +62,10 @@ void ephy_embed_auto_download_url (EphyEmbed *embed,
const char *url);
void ephy_embed_entering_fullscreen (EphyEmbed *embed);
void ephy_embed_leaving_fullscreen (EphyEmbed *embed);
+void ephy_embed_set_overview_mode (EphyEmbed *embed,
+ gboolean overview_mode);
+gboolean ephy_embed_get_overview_mode (EphyEmbed *embed);
+EphyOverview*ephy_embed_get_overview (EphyEmbed *embed);
G_END_DECLS