[gnome-todo] task-row: refactor row destruction code



commit 09d2522a9fe601eb5206d0cf76375fd27e857f9c
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Sun May 8 19:13:34 2016 -0300

    task-row: refactor row destruction code
    
    Instead of exposing a new function that may very well
    confuse us in the future, override GtkWidgetClass->destroy
    and rearrange the code to fit in there.

 src/gtd-task-list-view.c |    4 +-
 src/gtd-task-row.c       |   55 ++++++++++++++++++++++-----------------------
 src/gtd-task-row.h       |    2 -
 3 files changed, 29 insertions(+), 32 deletions(-)
---
diff --git a/src/gtd-task-list-view.c b/src/gtd-task-list-view.c
index 75176ce..3722b71 100644
--- a/src/gtd-task-list-view.c
+++ b/src/gtd-task-list-view.c
@@ -582,7 +582,7 @@ gtd_task_list_view__remove_row_for_task (GtdTaskListView *view,
       if (!gtd_task_row_get_new_task_mode (l->data) &&
           gtd_task_row_get_task (l->data) == task)
         {
-          gtd_task_row_destroy (l->data);
+          gtk_widget_destroy (l->data);
         }
     }
 
@@ -1255,7 +1255,7 @@ gtd_task_list_view_set_show_completed (GtdTaskListView *view,
               if (!gtd_task_row_get_new_task_mode (l->data) &&
                   gtd_task_get_complete (gtd_task_row_get_task (l->data)))
                 {
-                  gtd_task_row_destroy (l->data);
+                  gtk_widget_destroy (l->data);
                 }
             }
 
diff --git a/src/gtd-task-row.c b/src/gtd-task-row.c
index 0c18576..af4c693 100644
--- a/src/gtd-task-row.c
+++ b/src/gtd-task-row.c
@@ -188,6 +188,12 @@ gtd_task_row__create_task_for_name (const gchar *name)
   return task;
 }
 
+static void
+gtd_task_row__destroy_cb (GtkWidget *widget)
+{
+  GTK_WIDGET_CLASS (gtd_task_row_parent_class)->destroy (widget);
+}
+
 GtkWidget*
 gtd_task_row_new (GtdTask *task)
 {
@@ -345,6 +351,26 @@ gtd_task_row_activate (GtkListBoxRow *row)
 }
 
 static void
+gtd_task_row_destroy (GtkWidget *widget)
+{
+  GtdTaskRow *row = GTD_TASK_ROW (widget);
+
+  if (!gtk_revealer_get_child_revealed (row->priv->revealer))
+    {
+      gtd_task_row__destroy_cb (GTK_WIDGET (row));
+    }
+  else
+    {
+      g_signal_connect_swapped (row->priv->revealer,
+                                "notify::child-revealed",
+                                G_CALLBACK (gtk_widget_destroy),
+                                row);
+
+      gtk_revealer_set_reveal_child (row->priv->revealer, FALSE);
+    }
+}
+
+static void
 gtd_task_row_class_init (GtdTaskRowClass *klass)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
@@ -355,6 +381,7 @@ gtd_task_row_class_init (GtdTaskRowClass *klass)
   object_class->get_property = gtd_task_row_get_property;
   object_class->set_property = gtd_task_row_set_property;
 
+  widget_class->destroy = gtd_task_row_destroy;
   widget_class->focus_in_event = gtd_task_row__focus_in;
   widget_class->key_press_event = gtd_task_row__key_press_event;
 
@@ -654,31 +681,3 @@ gtd_task_row_reveal (GtdTaskRow *row)
 
   gtk_revealer_set_reveal_child (row->priv->revealer, TRUE);
 }
-
-/**
- * gtd_task_row_destroy:
- * @row: a #GtdTaskRow
- *
- * Runs an animation and the destory @row.
- *
- * Returns:
- */
-void
-gtd_task_row_destroy (GtdTaskRow *row)
-{
-  g_return_if_fail (GTD_IS_TASK_ROW (row));
-
-  if (gtk_revealer_get_child_revealed (row->priv->revealer))
-    {
-      gtk_widget_destroy (GTK_WIDGET (row));
-    }
-  else
-    {
-      g_signal_connect_swapped (row->priv->revealer,
-                                "notify::child-revealed",
-                                G_CALLBACK (gtk_widget_destroy),
-                                row);
-
-      gtk_revealer_set_reveal_child (row->priv->revealer, FALSE);
-    }
-}
diff --git a/src/gtd-task-row.h b/src/gtd-task-row.h
index 4d536d1..7bfe200 100644
--- a/src/gtd-task-row.h
+++ b/src/gtd-task-row.h
@@ -47,8 +47,6 @@ void                      gtd_task_row_set_list_name_visible    (GtdTaskRow
 
 void                      gtd_task_row_reveal                   (GtdTaskRow          *row);
 
-void                      gtd_task_row_destroy                  (GtdTaskRow          *row);
-
 G_END_DECLS
 
 #endif /* GTD_TASK_ROW_H */


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