[epiphany] ephy-session: add can-undo-tab-closed boolean property



commit 946292f704d24d3e82761a97bc4666df3458bc5b
Author: Claudio Saavedra <csaavedra igalia com>
Date:   Mon Jan 28 13:18:02 2013 +0200

    ephy-session: add can-undo-tab-closed boolean property
    
    https://bugzilla.gnome.org/show_bug.cgi?id=128184

 src/ephy-session.c |   63 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/ephy-session.h |    2 +
 2 files changed, 65 insertions(+), 0 deletions(-)
---
diff --git a/src/ephy-session.c b/src/ephy-session.c
index fecfee2..3ad9dbb 100644
--- a/src/ephy-session.c
+++ b/src/ephy-session.c
@@ -62,6 +62,12 @@ struct _EphySessionPrivate
 #define SESSION_STATE		"type:session_state"
 #define MAX_CLOSED_TABS		10
 
+enum
+{
+	PROP_0,
+	PROP_CAN_UNDO_TAB_CLOSED
+};
+
 G_DEFINE_TYPE (EphySession, ephy_session, G_TYPE_OBJECT)
 
 /* Helper functions */
@@ -315,6 +321,9 @@ ephy_session_undo_close_tab (EphySession *session)
 	}
 #endif
 	closed_tab_free (tab);
+
+	if (g_queue_is_empty (priv->closed_tabs))
+		g_object_notify (G_OBJECT (session), "can-undo-tab-closed");
 }
 
 static void
@@ -364,10 +373,21 @@ ephy_session_tab_closed (EphySession *session,
 
 	g_queue_push_head (priv->closed_tabs, tab);
 
+	if (g_queue_get_length (priv->closed_tabs) == 1)
+		g_object_notify (G_OBJECT (session), "can-undo-tab-closed");
+
 	LOG ("Added: %s to the list (%d elements)",
 	     address, g_queue_get_legth (priv->closed_tabs));
 }
 
+gboolean
+ephy_session_get_can_undo_tab_closed (EphySession *session)
+{
+	g_return_val_if_fail (EPHY_IS_SESSION (session), FALSE);
+
+	return g_queue_is_empty (session->priv->closed_tabs) == FALSE;
+}
+
 static void
 notebook_page_added_cb (GtkWidget *notebook,
 			EphyEmbed *embed,
@@ -504,10 +524,53 @@ ephy_session_init (EphySession *session)
 }
 
 static void
+ephy_session_dispose (GObject *object)
+{
+	EphySession *session = EPHY_SESSION (object);
+
+	LOG ("EphySession disposing");
+
+	g_queue_free_full (session->priv->closed_tabs,
+			   (GDestroyNotify)closed_tab_free);
+
+	G_OBJECT_CLASS (ephy_session_parent_class)->dispose (object);
+}
+
+static void
+ephy_session_get_property (GObject        *object,
+			   guint           property_id,
+			   GValue         *value,
+			   GParamSpec     *pspec)
+{
+	EphySession *session = EPHY_SESSION (object);
+
+	switch (property_id)
+	{
+	case PROP_CAN_UNDO_TAB_CLOSED:
+		g_value_set_boolean (value,
+				     ephy_session_get_can_undo_tab_closed (session));
+		break;
+	default:
+		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+	}
+}
+
+static void
 ephy_session_class_init (EphySessionClass *class)
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (class);
 
+	object_class->dispose = ephy_session_dispose;
+	object_class->get_property = ephy_session_get_property;
+
+	g_object_class_install_property (object_class,
+					 PROP_CAN_UNDO_TAB_CLOSED,
+					 g_param_spec_boolean ("can-undo-tab-closed",
+							       "Can undo tab close",
+							       "Session can undo a tab closure",
+							       FALSE,
+							       G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
 	g_type_class_add_private (object_class, sizeof (EphySessionPrivate));
 }
 
diff --git a/src/ephy-session.h b/src/ephy-session.h
index e6d0ab2..a26baa2 100644
--- a/src/ephy-session.h
+++ b/src/ephy-session.h
@@ -97,6 +97,8 @@ void             ephy_session_close                   (EphySession *session);
 
 void             ephy_session_undo_close_tab          (EphySession *session);
 
+gboolean         ephy_session_get_can_undo_tab_closed (EphySession *session);
+
 G_END_DECLS
 
 #endif


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]