[gnome-todo] task-row: allow editing task name



commit 31c4487a6f34b294dfaa16230844ece9d7fa20ad
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Thu Aug 27 09:56:11 2015 -0300

    task-row: allow editing task name

 data/ui/task-row.ui |    1 +
 src/gtd-task-row.c  |   35 ++++++++++++++++++++++++++++-------
 2 files changed, 29 insertions(+), 7 deletions(-)
---
diff --git a/data/ui/task-row.ui b/data/ui/task-row.ui
index 1f63613..0571ac7 100644
--- a/data/ui/task-row.ui
+++ b/data/ui/task-row.ui
@@ -77,6 +77,7 @@
                       <object class="GtkEntry" id="title_entry">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
+                        <signal name="focus_out_event" handler="gtd_task_row__entry_focus_out" 
object="GtdTaskRow" swapped="no" />
                       </object>
                       <packing>
                         <property name="name">title</property>
diff --git a/src/gtd-task-row.c b/src/gtd-task-row.c
index e64253a..23f1a05 100644
--- a/src/gtd-task-row.c
+++ b/src/gtd-task-row.c
@@ -37,6 +37,7 @@ typedef struct
   GtkEntry                  *title_entry;
   GtkLabel                  *task_date_label;
   GtkLabel                  *task_list_label;
+  GtkStack                  *task_stack;
   GtkSpinner                *task_loading_spinner;
   GtkLabel                  *title_label;
 
@@ -205,9 +206,9 @@ gtd_task_row__entry_focus_out (GtkWidget     *widget,
   g_return_val_if_fail (GTD_IS_TASK_ROW (user_data), FALSE);
 
   if (priv->new_task_mode)
-    {
-      gtk_stack_set_visible_child_name (priv->new_task_stack, "label");
-    }
+    gtk_stack_set_visible_child_name (priv->new_task_stack, "label");
+  else
+    gtk_stack_set_visible_child_name (priv->task_stack, "label");
 
   return FALSE;
 }
@@ -225,6 +226,11 @@ gtd_task_row__focus_in (GtkWidget *widget,
       gtk_stack_set_visible_child_name (priv->new_task_stack, "entry");
       gtk_widget_grab_focus (GTK_WIDGET (priv->new_task_entry));
     }
+  else
+    {
+      gtk_stack_set_visible_child_name (priv->task_stack, "title");
+      gtk_widget_grab_focus (GTK_WIDGET (priv->title_entry));
+    }
 
   return FALSE;
 }
@@ -452,6 +458,7 @@ gtd_task_row_class_init (GtdTaskRowClass *klass)
   gtk_widget_class_bind_template_child_private (widget_class, GtdTaskRow, revealer);
   gtk_widget_class_bind_template_child_private (widget_class, GtdTaskRow, task_date_label);
   gtk_widget_class_bind_template_child_private (widget_class, GtdTaskRow, task_list_label);
+  gtk_widget_class_bind_template_child_private (widget_class, GtdTaskRow, task_stack);
   gtk_widget_class_bind_template_child_private (widget_class, GtdTaskRow, task_loading_spinner);
   gtk_widget_class_bind_template_child_private (widget_class, GtdTaskRow, title_entry);
   gtk_widget_class_bind_template_child_private (widget_class, GtdTaskRow, title_label);
@@ -549,16 +556,30 @@ void
 gtd_task_row_set_task (GtdTaskRow *row,
                        GtdTask    *task)
 {
+  GtdTaskRowPrivate *priv;
+
   g_return_if_fail (GTD_IS_TASK_ROW (row));
 
+  priv = row->priv;
+
   if (row->priv->task != task)
     {
       row->priv->task = task;
 
       if (task)
         {
-          gtk_entry_set_text (row->priv->title_entry, gtd_task_get_title (task));
-          gtk_label_set_label (row->priv->task_list_label, gtd_task_list_get_name (gtd_task_get_list 
(task)));
+          g_object_bind_property (task,
+                                  "title",
+                                  priv->title_entry,
+                                  "text",
+                                  G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+
+          g_object_bind_property (task,
+                                  "title",
+                                  priv->task_list_label,
+                                  "label",
+                                  G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE);
+
           g_object_bind_property (task,
                                   "complete",
                                   row->priv->done_check,
@@ -567,13 +588,13 @@ gtd_task_row_set_task (GtdTaskRow *row,
 
           g_object_bind_property (task,
                                   "ready",
-                                  row->priv->task_loading_spinner,
+                                  priv->task_loading_spinner,
                                   "visible",
                                   G_BINDING_INVERT_BOOLEAN | G_BINDING_SYNC_CREATE);
 
           g_object_bind_property_full (task,
                                        "due-date",
-                                       row->priv->task_date_label,
+                                       priv->task_date_label,
                                        "label",
                                        G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE,
                                        gtd_task_row__date_changed_binding,


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