[gnome-photos] base-manager: Add a set_active_object virtual method



commit 3dc50d73f49acfb56345e2a1f8c315d5d19ae9a0
Author: Debarshi Ray <debarshir gnome org>
Date:   Thu May 3 15:15:52 2012 +0200

    base-manager: Add a set_active_object virtual method
    
    PhotosItemManager overrides this virtual method instead of having its
    own photos_item_manager_set_active_item.

 src/photos-base-manager.c |   36 +++++++++++++++++++++-------------
 src/photos-base-manager.h |    4 +++
 src/photos-item-manager.c |   47 +++++++++++++++++++++++++++-----------------
 src/photos-item-manager.h |    3 --
 4 files changed, 55 insertions(+), 35 deletions(-)
---
diff --git a/src/photos-base-manager.c b/src/photos-base-manager.c
index 0a118a8..cc52b7a 100644
--- a/src/photos-base-manager.c
+++ b/src/photos-base-manager.c
@@ -46,6 +46,26 @@ static guint signals[LAST_SIGNAL] = { 0 };
 G_DEFINE_TYPE (PhotosBaseManager, photos_base_manager, G_TYPE_OBJECT);
 
 
+static gboolean
+photos_base_manager_default_set_active_object (PhotosBaseManager *self, GObject *object)
+{
+  PhotosBaseManagerPrivate *priv = self->priv;
+
+  if (object == priv->active_object)
+    return FALSE;
+
+  if (priv->active_object != NULL)
+    g_object_unref (priv->active_object);
+
+  if (object != NULL)
+    g_object_ref (object);
+
+  priv->active_object = object;
+  g_signal_emit (self, signals[ACTIVE_CHANGED], 0, object);
+  return TRUE;
+}
+
+
 static void
 photos_base_manager_dispose (GObject *object)
 {
@@ -82,6 +102,7 @@ photos_base_manager_class_init (PhotosBaseManagerClass *class)
   GObjectClass *object_class = G_OBJECT_CLASS (class);
 
   object_class->dispose = photos_base_manager_dispose;
+  class->set_active_object = photos_base_manager_default_set_active_object;
 
   signals[ACTIVE_CHANGED] = g_signal_new ("active-changed",
                                           G_TYPE_FROM_CLASS (class),
@@ -208,20 +229,7 @@ photos_base_manager_remove_object_by_id (PhotosBaseManager *self, const gchar *i
 gboolean
 photos_base_manager_set_active_object (PhotosBaseManager *self, GObject *object)
 {
-  PhotosBaseManagerPrivate *priv = self->priv;
-
-  if (object == priv->active_object)
-    return FALSE;
-
-  if (priv->active_object != NULL)
-    g_object_unref (priv->active_object);
-
-  if (object != NULL)
-    g_object_ref (object);
-
-  priv->active_object = object;
-  g_signal_emit (self, signals[ACTIVE_CHANGED], 0, object);
-  return TRUE;
+  return PHOTOS_BASE_MANAGER_GET_CLASS (self)->set_active_object (self, object);
 }
 
 
diff --git a/src/photos-base-manager.h b/src/photos-base-manager.h
index 61619a4..4348f13 100644
--- a/src/photos-base-manager.h
+++ b/src/photos-base-manager.h
@@ -61,6 +61,10 @@ struct _PhotosBaseManagerClass
 {
   GObjectClass parent_class;
 
+  /* virtual methods */
+  gboolean (*set_active_object)    (PhotosBaseManager *self, GObject *object);
+
+  /* signals */
   void (*active_changed)   (PhotosBaseManager *self);
   void (*object_added)     (PhotosBaseManager *self);
   void (*object_removed)   (PhotosBaseManager *self);
diff --git a/src/photos-item-manager.c b/src/photos-item-manager.c
index 9b68b36..2a1398d 100644
--- a/src/photos-item-manager.c
+++ b/src/photos-item-manager.c
@@ -36,6 +36,33 @@ struct _PhotosItemManagerPrivate
 G_DEFINE_TYPE (PhotosItemManager, photos_item_manager, PHOTOS_TYPE_BASE_MANAGER);
 
 
+static gboolean
+photos_item_manager_set_active_object (PhotosBaseManager *manager, GObject *object)
+{
+  gboolean ret_val;
+
+  g_return_val_if_fail (PHOTOS_IS_BASE_ITEM (object), FALSE);
+
+  ret_val = PHOTOS_BASE_MANAGER_CLASS (photos_item_manager_parent_class)->set_active_object (manager, object);
+
+  if (!ret_val)
+    goto out;
+
+  if (object != NULL)
+    {
+      GtkRecentManager *recent;
+      const gchar *uri;
+
+      recent = gtk_recent_manager_get_default ();
+      uri = photos_base_item_get_uri (PHOTOS_BASE_ITEM (object));
+      gtk_recent_manager_add_item (recent, uri);
+    }
+
+ out:
+  return ret_val;
+}
+
+
 static GObject *
 photos_item_manager_constructor (GType                  type,
                                  guint                  n_construct_params,
@@ -79,9 +106,11 @@ static void
 photos_item_manager_class_init (PhotosItemManagerClass *class)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (class);
+  PhotosBaseManagerClass *base_manager_class = PHOTOS_BASE_MANAGER_CLASS (class);
 
   object_class->constructor = photos_item_manager_constructor;
   object_class->dispose = photos_item_manager_dispose;
+  base_manager_class->set_active_object = photos_item_manager_set_active_object;
 
   g_type_class_add_private (class, sizeof (PhotosItemManagerPrivate));
 }
@@ -128,21 +157,3 @@ photos_item_manager_get_model (PhotosItemManager *self)
 {
   return self->priv->model;
 }
-
-
-void
-photos_item_manager_set_active_item (PhotosItemManager *self, PhotosBaseItem *item)
-{
-  if (!photos_base_manager_set_active_object (PHOTOS_BASE_MANAGER (self), G_OBJECT (item)))
-    return;
-
-  if (item != NULL)
-    {
-      GtkRecentManager *recent;
-      const gchar *uri;
-
-      recent = gtk_recent_manager_get_default ();
-      uri = photos_base_item_get_uri (item);
-      gtk_recent_manager_add_item (recent, uri);
-    }
-}
diff --git a/src/photos-item-manager.h b/src/photos-item-manager.h
index 065e031..b5e4e30 100644
--- a/src/photos-item-manager.h
+++ b/src/photos-item-manager.h
@@ -78,9 +78,6 @@ PhotosBaseItem           *photos_item_manager_create_item        (PhotosItemMana
 
 GtkListStore             *photos_item_manager_get_model          (PhotosItemManager *self);
 
-void                      photos_item_manager_set_active_item    (PhotosItemManager *self,
-                                                                  PhotosBaseItem *item);
-
 G_END_DECLS
 
 #endif /* PHOTOS_ITEM_MANAGER_H */



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