[Xfce4-commits] <thunar:nick/gseal+clean> Drop usage of GtkObject and use GObject.

Nick Schermer noreply at xfce.org
Sun Sep 16 20:17:00 CEST 2012


Updating branch refs/heads/nick/gseal+clean
         to 0bf9ab24e8a4cb578bd24d80d67de97ff06755cf (commit)
       from 57ff06dc5b27dc8e1d40561a747c785ef68cf526 (commit)

commit 0bf9ab24e8a4cb578bd24d80d67de97ff06755cf
Author: Nick Schermer <nick at xfce.org>
Date:   Fri May 25 19:23:37 2012 +0200

    Drop usage of GtkObject and use GObject.
    
    Implement the destroy signal in ThunarFolder so we can
    drop the usage of GtkObject.

 thunar/thunar-folder.c |   78 ++++++++++++++++++++++++++++++++++++++++++-----
 thunar/thunar-folder.h |    2 +
 2 files changed, 71 insertions(+), 9 deletions(-)

diff --git a/thunar/thunar-folder.c b/thunar/thunar-folder.c
index 9ea6939..e9da360 100644
--- a/thunar/thunar-folder.c
+++ b/thunar/thunar-folder.c
@@ -44,6 +44,7 @@ enum
 /* signal identifiers */
 enum
 {
+  DESTROY,
   ERROR,
   FILES_ADDED,
   FILES_REMOVED,
@@ -52,6 +53,7 @@ enum
 
 
 
+static void     thunar_folder_dispose                     (GObject                *object);
 static void     thunar_folder_finalize                    (GObject                *object);
 static void     thunar_folder_get_property                (GObject                *object,
                                                            guint                   prop_id,
@@ -61,6 +63,7 @@ static void     thunar_folder_set_property                (GObject
                                                            guint                   prop_uid,
                                                            const GValue           *value,
                                                            GParamSpec             *pspec);
+static void     thunar_folder_real_destroy                (ThunarFolder           *folder);
 static void     thunar_folder_error                       (ExoJob                 *job,
                                                            GError                 *error,
                                                            ThunarFolder           *folder);
@@ -85,9 +88,10 @@ static void     thunar_folder_monitor                     (GFileMonitor
 
 struct _ThunarFolderClass
 {
-  GtkObjectClass __parent__;
+  GObjectClass __parent__;
 
   /* signals */
+  void (*destroy)       (ThunarFolder *folder);
   void (*error)         (ThunarFolder *folder,
                          const GError *error);
   void (*files_added)   (ThunarFolder *folder,
@@ -98,7 +102,7 @@ struct _ThunarFolderClass
 
 struct _ThunarFolder
 {
-  GtkObject __parent__;
+  GObject __parent__;
 
   ThunarJob         *job;
 
@@ -106,6 +110,8 @@ struct _ThunarFolder
   GList             *new_files;
   GList             *files;
 
+  guint              in_destruction : 1;
+
   ThunarFileMonitor *file_monitor;
 
   GFileMonitor      *monitor;
@@ -118,7 +124,7 @@ static GQuark thunar_folder_quark;
 
 
 
-G_DEFINE_TYPE (ThunarFolder, thunar_folder, GTK_TYPE_OBJECT)
+G_DEFINE_TYPE (ThunarFolder, thunar_folder, G_TYPE_OBJECT)
 
 
 
@@ -128,10 +134,13 @@ thunar_folder_class_init (ThunarFolderClass *klass)
   GObjectClass *gobject_class;
 
   gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->dispose = thunar_folder_dispose;
   gobject_class->finalize = thunar_folder_finalize;
   gobject_class->get_property = thunar_folder_get_property;
   gobject_class->set_property = thunar_folder_set_property;
 
+  klass->destroy = thunar_folder_real_destroy;
+
   /**
    * ThunarFolder::corresponding-file:
    *
@@ -143,7 +152,7 @@ thunar_folder_class_init (ThunarFolderClass *klass)
                                                         "corresponding-file",
                                                         "corresponding-file",
                                                         THUNAR_TYPE_FILE,
-                                                        G_PARAM_READABLE 
+                                                        G_PARAM_READABLE
                                                         | G_PARAM_WRITABLE
                                                         | G_PARAM_CONSTRUCT_ONLY));
 
@@ -160,6 +169,20 @@ thunar_folder_class_init (ThunarFolderClass *klass)
                                                          "loading",
                                                          FALSE,
                                                          EXO_PARAM_READABLE));
+  /**
+   * ThunarFolder::destroy:
+   * @folder : a #ThunarFolder.
+   *
+   * Emitted when the #ThunarFolder is destroyed.
+   **/
+  folder_signals[DESTROY] =
+    g_signal_new (I_("destroy"),
+                  G_TYPE_FROM_CLASS (gobject_class),
+                  G_SIGNAL_RUN_CLEANUP | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS,
+                  G_STRUCT_OFFSET (ThunarFolderClass, destroy),
+                  NULL, NULL,
+                  g_cclosure_marshal_VOID__VOID,
+                  G_TYPE_NONE, 0);
 
   /**
    * ThunarFolder::error:
@@ -227,6 +250,23 @@ thunar_folder_init (ThunarFolder *folder)
 
 
 static void
+thunar_folder_dispose (GObject *object)
+{
+  ThunarFolder *folder = THUNAR_FOLDER (object);
+
+  if (!folder->in_destruction)
+    {
+      folder->in_destruction = TRUE;
+      g_signal_emit (G_OBJECT (folder), folder_signals[DESTROY], 0);
+      folder->in_destruction = FALSE;
+    }
+
+  (*G_OBJECT_CLASS (thunar_folder_parent_class)->dispose) (object);
+}
+
+
+
+static void
 thunar_folder_finalize (GObject *object)
 {
   ThunarFolder *folder = THUNAR_FOLDER (object);
@@ -323,6 +363,14 @@ thunar_folder_set_property (GObject      *object,
 
 
 static void
+thunar_folder_real_destroy (ThunarFolder *folder)
+{
+  g_signal_handlers_destroy (G_OBJECT (folder));
+}
+
+
+
+static void
 thunar_folder_error (ExoJob       *job,
                      GError       *error,
                      ThunarFolder *folder)
@@ -445,7 +493,7 @@ thunar_folder_finished (ExoJob       *job,
   folder->job = NULL;
 
   /* add us to the file alteration monitor */
-  folder->monitor = g_file_monitor_directory (thunar_file_get_file (folder->corresponding_file), 
+  folder->monitor = g_file_monitor_directory (thunar_file_get_file (folder->corresponding_file),
                                               G_FILE_MONITOR_NONE, NULL, NULL);
   if (G_LIKELY (folder->monitor != NULL))
     g_signal_connect (folder->monitor, "changed", G_CALLBACK (thunar_folder_monitor), folder);
@@ -491,7 +539,7 @@ thunar_folder_file_destroyed (ThunarFileMonitor *file_monitor,
   if (G_UNLIKELY (folder->corresponding_file == file))
     {
       /* the folder is useless now */
-      gtk_object_destroy (GTK_OBJECT (folder));
+      thunar_folder_destroy (folder);
     }
   else
     {
@@ -674,9 +722,6 @@ thunar_folder_get_for_file (ThunarFile *file)
       /* allocate the new instance */
       folder = g_object_new (THUNAR_TYPE_FOLDER, "corresponding-file", file, NULL);
 
-      /* drop the floating reference */
-      g_object_ref_sink (G_OBJECT (folder));
-
       /* connect the folder to the file */
       g_object_set_qdata (G_OBJECT (file), thunar_folder_quark, folder);
 
@@ -792,4 +837,19 @@ thunar_folder_reload (ThunarFolder *folder)
 
 
 
+/**
+ * thunar_folder_destroy:
+ * @folder : a #ThunarFolder instance.
+ *
+ * Destroy the @folder, this is a replacement for
+ * the old gtk_object_destroy function which has been
+ * removed from gtk3.
+ **/
+void
+thunar_folder_destroy (ThunarFolder *folder)
+{
+  _thunar_return_if_fail (THUNAR_IS_FOLDER (folder));
 
+  if (!folder->in_destruction)
+    g_object_run_dispose (G_OBJECT (folder));
+}
diff --git a/thunar/thunar-folder.h b/thunar/thunar-folder.h
index a111b62..2d9c465 100644
--- a/thunar/thunar-folder.h
+++ b/thunar/thunar-folder.h
@@ -44,6 +44,8 @@ gboolean      thunar_folder_get_loading            (const ThunarFolder *folder);
 
 void          thunar_folder_reload                 (ThunarFolder       *folder);
 
+void          thunar_folder_destroy                (ThunarFolder       *folder);
+
 G_END_DECLS;
 
 #endif /* !__THUNAR_FOLDER_H__ */


More information about the Xfce4-commits mailing list