[gnome-todo] task-row: split new task row
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-todo] task-row: split new task row
- Date: Mon, 13 Feb 2017 23:08:57 +0000 (UTC)
commit d1a434a919a12eb276181e80c433037ff63ba939
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Mon Feb 13 21:06:05 2017 -0200
task-row: split new task row
The new task mode is not working very well, and the
GtdTaskRow code is getting confusing and bloated.
Fix that by splitting the row code into GtdNewTaskRow,
and adapting GtdTaskListView to handle that.
data/Makefile.am | 1 +
data/todo.gresource.xml | 1 +
data/ui/list-view.ui | 4 +-
data/ui/new-task-row.ui | 65 +++++++++++
data/ui/task-row.ui | 263 +++++++++++++++++----------------------------
src/Makefile.am | 2 +
src/gtd-dnd-row.c | 17 ++--
src/gtd-dnd-row.h | 4 +-
src/gtd-new-task-row.c | 207 ++++++++++++++++++++++++++++++++++++
src/gtd-new-task-row.h | 40 +++++++
src/gtd-task-list-view.c | 120 ++++++++++++----------
src/gtd-task-row.c | 165 +----------------------------
src/gtd-task-row.h | 5 -
13 files changed, 499 insertions(+), 395 deletions(-)
---
diff --git a/data/Makefile.am b/data/Makefile.am
index 61c8835..6faa9a0 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -44,6 +44,7 @@ EXTRA_DIST= \
ui/list-selector-list-item.ui \
ui/list-selector-panel.ui \
ui/list-view.ui \
+ ui/new-task-row.ui \
ui/notification.ui \
ui/plugin-dialog.ui \
ui/plugin-row.ui \
diff --git a/data/todo.gresource.xml b/data/todo.gresource.xml
index c180086..c53e344 100644
--- a/data/todo.gresource.xml
+++ b/data/todo.gresource.xml
@@ -10,6 +10,7 @@
<file compressed="true" preprocess="xml-stripblanks">ui/list-selector-list-item.ui</file>
<file compressed="true" preprocess="xml-stripblanks">ui/list-selector-panel.ui</file>
<file compressed="true" preprocess="xml-stripblanks">ui/list-view.ui</file>
+ <file compressed="true" preprocess="xml-stripblanks">ui/new-task-row.ui</file>
<file compressed="true" preprocess="xml-stripblanks">ui/notification.ui</file>
<file compressed="true" preprocess="xml-stripblanks">ui/plugin-dialog.ui</file>
<file compressed="true" preprocess="xml-stripblanks">ui/plugin-row.ui</file>
diff --git a/data/ui/list-view.ui b/data/ui/list-view.ui
index 30bc6aa..d9f63ba 100644
--- a/data/ui/list-view.ui
+++ b/data/ui/list-view.ui
@@ -43,10 +43,10 @@
<signal name="drag-motion" handler="listbox_drag_motion" object="GtdTaskListView"
swapped="no" />
<signal name="row-activated" handler="listbox_row_activated"
object="GtdTaskListView" swapped="no" />
<child>
- <object class="GtdTaskRow" id="new_task_row">
+ <object class="GtdNewTaskRow" id="new_task_row">
<property name="visible">True</property>
- <property name="new-task-mode">True</property>
<signal name="create-task" handler="gtd_task_list_view__create_task"
object="GtdTaskListView" swapped="no" />
+ <signal name="enter" handler="task_row_entered_cb" object="GtdTaskListView"
swapped="yes" />
<signal name="exit" handler="task_row_exited_cb" object="GtdTaskListView"
swapped="yes" />
</object>
</child>
diff --git a/data/ui/new-task-row.ui b/data/ui/new-task-row.ui
new file mode 100644
index 0000000..806f01b
--- /dev/null
+++ b/data/ui/new-task-row.ui
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <requires lib="gtk+" version="3.16"/>
+ <template class="GtdNewTaskRow" parent="GtkListBoxRow">
+ <property name="width_request">100</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="activatable">True</property>
+ <property name="selectable">False</property>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin">6</property>
+ <property name="margin_start">24</property>
+ <property name="margin_end">24</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkImage" id="add_task_image">
+ <property name="width_request">16</property>
+ <property name="height_request">16</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="icon_name">list-add-symbolic</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkStack" id="stack">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="transition_type">crossfade</property>
+ <child>
+ <object class="GtkLabel" id="label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">New task…</property>
+ <property name="xalign">0</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="name">label</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <signal name="activate" handler="entry_activated_cb" object="GtdNewTaskRow" swapped="yes" />
+ </object>
+ <packing>
+ <property name="name">entry</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/data/ui/task-row.ui b/data/ui/task-row.ui
index 89b32f7..8a01fe0 100644
--- a/data/ui/task-row.ui
+++ b/data/ui/task-row.ui
@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.18.1 -->
<interface>
<requires lib="gtk+" version="3.16"/>
<template class="GtdTaskRow" parent="GtkListBoxRow">
@@ -15,223 +14,159 @@
<property name="transition_type">slide-down</property>
<property name="transition_duration">200</property>
<child>
- <object class="GtkStack" id="stack">
+ <object class="GtkBox" id="task_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="border_width">6</property>
<property name="margin_start">18</property>
<property name="margin_end">18</property>
+ <property name="spacing">12</property>
<child>
- <object class="GtkBox" id="task_box">
+ <object class="GtkBox" id="dnd_box">
<property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="spacing">12</property>
<child>
- <object class="GtkBox" id="dnd_box">
+ <object class="GtkEventBox" id="dnd_event_box">
<property name="visible">True</property>
+ <signal name="button-press-event" handler="button_press_event" object="GtdTaskRow"
swapped="no" />
+ <signal name="drag-begin" handler="drag_begin_cb" object="GtdTaskRow" swapped="no" />
+ <signal name="enter-notify-event" handler="mouse_over_event" object="GtdTaskRow"
swapped="no" />
+ <signal name="leave-notify-event" handler="mouse_out_event" object="GtdTaskRow"
swapped="no" />
<child>
- <object class="GtkEventBox" id="dnd_event_box">
+ <object class="GtkImage" id="dnd_icon">
<property name="visible">True</property>
- <signal name="button-press-event" handler="button_press_event" object="GtdTaskRow"
swapped="no" />
- <signal name="drag-begin" handler="drag_begin_cb" object="GtdTaskRow" swapped="no" />
- <signal name="enter-notify-event" handler="mouse_over_event" object="GtdTaskRow"
swapped="no" />
- <signal name="leave-notify-event" handler="mouse_out_event" object="GtdTaskRow"
swapped="no" />
- <child>
- <object class="GtkImage" id="dnd_icon">
- <property name="visible">True</property>
- <property name="icon-name">open-menu-symbolic</property>
- <property name="pixel-size">12</property>
- <style>
- <class name="dim-label" />
- </style>
- </object>
- </child>
+ <property name="icon-name">open-menu-symbolic</property>
+ <property name="pixel-size">12</property>
+ <style>
+ <class name="dim-label" />
+ </style>
</object>
</child>
</object>
</child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="done_check">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="vexpand">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkStack" id="task_stack">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="transition_type">crossfade</property>
+ <property name="hexpand">True</property>
<child>
- <object class="GtkCheckButton" id="done_check">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="halign">center</property>
- <property name="valign">center</property>
- <property name="vexpand">True</property>
- <property name="draw_indicator">True</property>
- </object>
- </child>
- <child>
- <object class="GtkStack" id="task_stack">
+ <object class="GtkBox" id="title_label_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="transition_type">crossfade</property>
- <property name="hexpand">True</property>
+ <property name="spacing">12</property>
<child>
- <object class="GtkBox" id="title_label_box">
+ <object class="GtkLabel" id="title_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkLabel" id="title_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="label" bind-source="title_entry" bind-property="text" />
- </object>
- </child>
- <child>
- <object class="GtkSpinner" id="task_loading_spinner">
- <property name="visible">False</property>
- <property name="can_focus">False</property>
- <property name="active">True</property>
- <property name="halign">start</property>
- </object>
- </child>
+ <property name="xalign">0</property>
+ <property name="label" bind-source="title_entry" bind-property="text" />
</object>
- <packing>
- <property name="name">label</property>
- </packing>
</child>
<child>
- <object class="GtkEntry" id="title_entry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hexpand">True</property>
+ <object class="GtkSpinner" id="task_loading_spinner">
+ <property name="visible">False</property>
+ <property name="can_focus">False</property>
+ <property name="active">True</property>
+ <property name="halign">start</property>
</object>
- <packing>
- <property name="name">title</property>
- <property name="position">1</property>
- </packing>
</child>
</object>
<packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
+ <property name="name">label</property>
</packing>
</child>
<child>
- <object class="GtkBox" id="task_extras_box">
- <property name="visible">False</property>
- <property name="can_focus">False</property>
- <property name="halign">end</property>
- <property name="valign">center</property>
- <property name="hexpand">True</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkButton" id="task_attachment_button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="relief">none</property>
- <child>
- <object class="GtkImage" id="task_attachment_button_image">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="icon_name">text-x-generic-symbolic</property>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkButton" id="task_alarm_button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="relief">none</property>
- <child>
- <object class="GtkImage" id="task_alarm_button_image">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="icon_name">alarm-symbolic</property>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkLabel" id="task_date_label">
+ <object class="GtkEntry" id="title_entry">
<property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">1</property>
- <style>
- <class name="dim-label"/>
- </style>
- </object>
- </child>
- <child>
- <object class="GtkLabel" id="task_list_label">
- <property name="visible">False</property>
- <property name="can_focus">False</property>
- <property name="xalign">1</property>
- <property name="width_chars">18</property>
- <property name="max_width_chars">18</property>
- <property name="ellipsize">middle</property>
- <style>
- <class name="dim-label"/>
- </style>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
</object>
+ <packing>
+ <property name="name">title</property>
+ <property name="position">1</property>
+ </packing>
</child>
</object>
<packing>
- <property name="name">task</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
</packing>
</child>
<child>
- <object class="GtkBox" id="new_task_box">
- <property name="visible">True</property>
+ <object class="GtkBox" id="task_extras_box">
+ <property name="visible">False</property>
<property name="can_focus">False</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkImage" id="add_task_image">
- <property name="width_request">16</property>
- <property name="height_request">16</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="halign">center</property>
- <property name="valign">center</property>
- <property name="icon_name">list-add-symbolic</property>
- </object>
- </child>
+ <property name="halign">end</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="spacing">6</property>
<child>
- <object class="GtkStack" id="new_task_stack">
+ <object class="GtkButton" id="task_attachment_button">
<property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="hexpand">True</property>
- <property name="transition_type">crossfade</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="relief">none</property>
<child>
- <object class="GtkLabel" id="new_task_label">
+ <object class="GtkImage" id="task_attachment_button_image">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="label" translatable="yes">New task…</property>
- <property name="xalign">0</property>
- <style>
- <class name="dim-label"/>
- </style>
+ <property name="icon_name">text-x-generic-symbolic</property>
</object>
- <packing>
- <property name="name">label</property>
- </packing>
</child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="task_alarm_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="relief">none</property>
<child>
- <object class="GtkEntry" id="new_task_entry">
+ <object class="GtkImage" id="task_alarm_button_image">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <signal name="activate" handler="gtd_task_row__entry_activated" object="GtdTaskRow"
swapped="no" />
+ <property name="can_focus">False</property>
+ <property name="icon_name">alarm-symbolic</property>
</object>
- <packing>
- <property name="name">entry</property>
- <property name="position">1</property>
- </packing>
</child>
</object>
</child>
</object>
- <packing>
- <property name="name">new</property>
- <property name="position">1</property>
- </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="task_date_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">1</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="task_list_label">
+ <property name="visible">False</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">1</property>
+ <property name="width_chars">18</property>
+ <property name="max_width_chars">18</property>
+ <property name="ellipsize">middle</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
</child>
</object>
</child>
diff --git a/src/Makefile.am b/src/Makefile.am
index f6d1194..edf4e6a 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -71,6 +71,8 @@ gnome_todo_SOURCES = \
gtd-enums.h \
gtd-initial-setup-window.c \
gtd-initial-setup-window.h \
+ gtd-new-task-row.c \
+ gtd-new-task-row.h \
gtd-object.c \
gtd-object.h \
gtd-plugin-dialog.c \
diff --git a/src/gtd-dnd-row.c b/src/gtd-dnd-row.c
index fbe7291..11c9a4a 100644
--- a/src/gtd-dnd-row.c
+++ b/src/gtd-dnd-row.c
@@ -17,6 +17,7 @@
*/
#include "gtd-dnd-row.h"
+#include "gtd-new-task-row.h"
#include "gtd-provider.h"
#include "gtd-task.h"
#include "gtd-task-list.h"
@@ -31,7 +32,7 @@ struct _GtdDndRow
GtkWidget *box;
GtkWidget *icon;
- GtdTaskRow *row_above;
+ GtkListBoxRow *row_above;
gint depth;
};
@@ -51,7 +52,7 @@ get_real_task_for_depth (GtdDndRow *self)
GtdTask *task;
gint i, task_depth;
- task = self->row_above ? gtd_task_row_get_task (self->row_above) : NULL;
+ task = self->row_above ? gtd_task_row_get_task (GTD_TASK_ROW (self->row_above)) : NULL;
task_depth = task ? gtd_task_get_depth (task) : -1;
/* Find the real parent */
@@ -153,7 +154,7 @@ gtd_dnd_row_new (void)
return g_object_new (GTD_TYPE_DND_ROW, NULL);
}
-GtdTaskRow*
+GtkListBoxRow*
gtd_dnd_row_get_row_above (GtdDndRow *self)
{
g_return_val_if_fail (GTD_IS_DND_ROW (self), NULL);
@@ -162,8 +163,8 @@ gtd_dnd_row_get_row_above (GtdDndRow *self)
}
void
-gtd_dnd_row_set_row_above (GtdDndRow *self,
- GtdTaskRow *row)
+gtd_dnd_row_set_row_above (GtdDndRow *self,
+ GtkListBoxRow *row)
{
g_return_if_fail (GTD_IS_DND_ROW (self));
@@ -186,12 +187,12 @@ gtd_dnd_row_drag_motion (GtkWidget *widget,
self = GTD_DND_ROW (widget);
- if (self->row_above)
+ if (self->row_above && GTD_IS_TASK_ROW (self->row_above))
{
GtdTask *task;
gint offset;
- task = gtd_task_row_get_task (self->row_above);
+ task = gtd_task_row_get_task (GTD_TASK_ROW (self->row_above));
offset = gtk_widget_get_margin_start (self->box) + gtk_widget_get_allocated_width (self->icon) + 12;
self->depth = CLAMP (floor ((x - offset) / 32),
0,
@@ -245,7 +246,7 @@ gtd_dnd_row_drag_drop (GtkWidget *widget,
gtk_widget_show (row);
/* Do not allow dropping on itself, nor on the new task row */
- if (!row || row == widget || gtd_task_row_get_new_task_mode (GTD_TASK_ROW (row)))
+ if (!row || row == widget || GTD_IS_NEW_TASK_ROW (row))
{
gdk_drag_status (context, 0, time);
return FALSE;
diff --git a/src/gtd-dnd-row.h b/src/gtd-dnd-row.h
index 4c6da9b..ca1b4cc 100644
--- a/src/gtd-dnd-row.h
+++ b/src/gtd-dnd-row.h
@@ -31,10 +31,10 @@ G_DECLARE_FINAL_TYPE (GtdDndRow, gtd_dnd_row, GTD, DND_ROW, GtkListBoxRow)
GtkWidget* gtd_dnd_row_new (void);
-GtdTaskRow* gtd_dnd_row_get_row_above (GtdDndRow *self);
+GtkListBoxRow* gtd_dnd_row_get_row_above (GtdDndRow *self);
void gtd_dnd_row_set_row_above (GtdDndRow *self,
- GtdTaskRow *row);
+ GtkListBoxRow *row);
gboolean gtd_dnd_row_drag_drop (GtkWidget *widget,
diff --git a/src/gtd-new-task-row.c b/src/gtd-new-task-row.c
new file mode 100644
index 0000000..e0bc40e
--- /dev/null
+++ b/src/gtd-new-task-row.c
@@ -0,0 +1,207 @@
+/* gtd-new-task-row.c
+ *
+ * Copyright (C) 2017 Georges Basile Stavracas Neto <georges stavracas gmail com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "gtd-new-task-row.h"
+#include "gtd-task.h"
+
+struct _GtdNewTaskRow
+{
+ GtkListBoxRow parent;
+
+ GtkEntry *entry;
+ GtkStack *stack;
+};
+
+G_DEFINE_TYPE (GtdNewTaskRow, gtd_new_task_row, GTK_TYPE_LIST_BOX_ROW)
+
+enum
+{
+ ENTER,
+ EXIT,
+ CREATE_TASK,
+ NUM_SIGNALS
+};
+
+enum
+{
+ PROP_0,
+ N_PROPS
+};
+
+static guint signals [NUM_SIGNALS] = { 0, };
+
+/*
+ * Auxiliary methods
+ */
+
+static gboolean
+gtd_new_task_row_focus_in_event (GtkWidget *widget,
+ GdkEventFocus *event)
+{
+ GtdNewTaskRow *self = GTD_NEW_TASK_ROW (widget);
+
+ gtd_new_task_row_set_active (self, TRUE);
+
+ return GDK_EVENT_PROPAGATE;
+}
+
+/*
+ * Callbacks
+ */
+
+static void
+entry_activated_cb (GtdNewTaskRow *self)
+{
+ GtdTask *new_task;
+
+ /* Cannot create empty tasks */
+ if (gtk_entry_get_text_length (self->entry) == 0)
+ return;
+
+ new_task = gtd_task_new (NULL);
+ gtd_task_set_title (new_task, gtk_entry_get_text (self->entry));
+ gtd_task_save (new_task);
+
+ g_signal_emit (self, signals[CREATE_TASK], 0, new_task);
+
+ gtk_entry_set_text (self->entry, "");
+}
+
+static void
+gtd_new_task_row_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+}
+
+static void
+gtd_new_task_row_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+}
+
+static void
+gtd_new_task_row_class_init (GtdNewTaskRowClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ object_class->get_property = gtd_new_task_row_get_property;
+ object_class->set_property = gtd_new_task_row_set_property;
+
+ widget_class->focus_in_event = gtd_new_task_row_focus_in_event;
+
+ /**
+ * GtdNewTaskRow::enter:
+ *
+ * Emitted when the row is focused and in the editing state.
+ */
+ signals[ENTER] = g_signal_new ("enter",
+ GTD_TYPE_NEW_TASK_ROW,
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL,
+ NULL,
+ NULL,
+ G_TYPE_NONE,
+ 0);
+
+ /**
+ * GtdNewTaskRow::exit:
+ *
+ * Emitted when the row is unfocused and leaves the editing state.
+ */
+ signals[EXIT] = g_signal_new ("exit",
+ GTD_TYPE_NEW_TASK_ROW,
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL,
+ NULL,
+ NULL,
+ G_TYPE_NONE,
+ 0);
+
+ /**
+ * GtdNewTaskRow::create-task:
+ *
+ * Emitted when the row wants the parent widget to create a new task.
+ */
+ signals[CREATE_TASK] = g_signal_new ("create-task",
+ GTD_TYPE_NEW_TASK_ROW,
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL,
+ NULL,
+ NULL,
+ G_TYPE_NONE,
+ 1,
+ GTD_TYPE_TASK);
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/todo/ui/new-task-row.ui");
+
+ gtk_widget_class_bind_template_child (widget_class, GtdNewTaskRow, entry);
+ gtk_widget_class_bind_template_child (widget_class, GtdNewTaskRow, stack);
+
+ gtk_widget_class_bind_template_callback (widget_class, entry_activated_cb);
+
+ gtk_widget_class_set_css_name (widget_class, "taskrow");
+}
+
+static void
+gtd_new_task_row_init (GtdNewTaskRow *self)
+{
+ gtk_widget_init_template (GTK_WIDGET (self));
+}
+
+GtkWidget*
+gtd_new_task_row_new (void)
+{
+ return g_object_new (GTD_TYPE_NEW_TASK_ROW, NULL);
+}
+
+gboolean
+gtd_new_task_row_get_active (GtdNewTaskRow *self)
+{
+ g_return_val_if_fail (GTD_IS_NEW_TASK_ROW (self), FALSE);
+
+ return g_str_equal (gtk_stack_get_visible_child_name (self->stack), "entry");
+}
+
+void
+gtd_new_task_row_set_active (GtdNewTaskRow *self,
+ gboolean active)
+{
+ g_return_if_fail (GTD_IS_NEW_TASK_ROW (self));
+
+ if (active)
+ {
+ gtk_stack_set_visible_child_name (self->stack, "entry");
+ gtk_widget_grab_focus (GTK_WIDGET (self->entry));
+ g_signal_emit (self, signals[ENTER], 0);
+ }
+ else
+ {
+ gtk_stack_set_visible_child_name (self->stack, "label");
+ gtk_widget_grab_focus (GTK_WIDGET (self->entry));
+ }
+}
diff --git a/src/gtd-new-task-row.h b/src/gtd-new-task-row.h
new file mode 100644
index 0000000..0b96933
--- /dev/null
+++ b/src/gtd-new-task-row.h
@@ -0,0 +1,40 @@
+/* gtd-new-task-row.h
+ *
+ * Copyright (C) 2017 Georges Basile Stavracas Neto <georges stavracas gmail com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GTD_NEW_TASK_ROW_H
+#define GTD_NEW_TASK_ROW_H
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define GTD_TYPE_NEW_TASK_ROW (gtd_new_task_row_get_type())
+
+G_DECLARE_FINAL_TYPE (GtdNewTaskRow, gtd_new_task_row, GTD, NEW_TASK_ROW, GtkListBoxRow)
+
+GtkWidget* gtd_new_task_row_new (void);
+
+gboolean gtd_new_task_row_get_active (GtdNewTaskRow *self);
+
+void gtd_new_task_row_set_active (GtdNewTaskRow *self,
+ gboolean active);
+
+G_END_DECLS
+
+#endif /* GTD_NEW_TASK_ROW_H */
+
diff --git a/src/gtd-task-list-view.c b/src/gtd-task-list-view.c
index f790728..a878b41 100644
--- a/src/gtd-task-list-view.c
+++ b/src/gtd-task-list-view.c
@@ -22,6 +22,7 @@
#include "gtd-empty-list-widget.h"
#include "gtd-task-list-view.h"
#include "gtd-manager.h"
+#include "gtd-new-task-row.h"
#include "gtd-notification.h"
#include "gtd-provider.h"
#include "gtd-task.h"
@@ -69,7 +70,7 @@ typedef struct
GtkRevealer *edit_revealer;
GtkWidget *empty_box;
GtkListBox *listbox;
- GtdTaskRow *new_task_row;
+ GtkListBoxRow *new_task_row;
GtkRevealer *revealer;
GtkImage *done_image;
GtkLabel *done_label;
@@ -178,12 +179,22 @@ set_active_row (GtdTaskListView *self,
return;
if (priv->active_row)
- gtd_task_row_set_active (GTD_TASK_ROW (priv->active_row), FALSE);
+ {
+ if (GTD_IS_TASK_ROW (priv->active_row))
+ gtd_task_row_set_active (GTD_TASK_ROW (priv->active_row), FALSE);
+ else
+ gtd_new_task_row_set_active (GTD_NEW_TASK_ROW (priv->active_row), FALSE);
+ }
priv->active_row = row;
if (row)
- gtd_task_row_set_active (GTD_TASK_ROW (row), TRUE);
+ {
+ if (GTD_IS_TASK_ROW (row))
+ gtd_task_row_set_active (GTD_TASK_ROW (row), TRUE);
+ else
+ gtd_new_task_row_set_active (GTD_NEW_TASK_ROW (row), TRUE);
+ }
}
/*
@@ -330,34 +341,41 @@ undo_remove_task_action (GtdNotification *notification,
* Default sorting functions
*/
static gint
-compare_task_rows (GtdTaskRow *row1,
- GtdTaskRow *row2)
+compare_task_rows (GtkListBoxRow *row1,
+ GtkListBoxRow *row2)
{
- if (gtd_task_row_get_new_task_mode (row1))
- return 1;
- else if (gtd_task_row_get_new_task_mode (row2))
- return -1;
+ if (GTD_IS_NEW_TASK_ROW (row1))
+ {
+ return 1;
+ }
+ else if (GTD_IS_NEW_TASK_ROW (row2))
+ {
+ return -1;
+ }
else
- return gtd_task_compare (gtd_task_row_get_task (row1), gtd_task_row_get_task (row2));
+ {
+ return gtd_task_compare (gtd_task_row_get_task (GTD_TASK_ROW (row1)),
+ gtd_task_row_get_task (GTD_TASK_ROW (row2)));
+ }
}
static gint
compare_dnd_rows (GtkListBoxRow *row1,
GtkListBoxRow *row2)
{
- GtdTaskRow *row_above, *current_row;
+ GtkListBoxRow *row_above, *current_row;
gboolean reverse;
if (GTD_IS_DND_ROW (row1))
{
row_above = gtd_dnd_row_get_row_above (GTD_DND_ROW (row1));
- current_row = GTD_TASK_ROW (row2);
+ current_row = row2;
reverse = FALSE;
}
else
{
row_above = gtd_dnd_row_get_row_above (GTD_DND_ROW (row2));
- current_row = GTD_TASK_ROW (row1);
+ current_row = row1;
reverse = TRUE;
}
@@ -379,15 +397,15 @@ gtd_task_list_view__listbox_sort_func (GtkListBoxRow *row1,
if (GTD_IS_DND_ROW (row1) || GTD_IS_DND_ROW (row2))
return compare_dnd_rows (row1, row2);
- return compare_task_rows (GTD_TASK_ROW (row1), GTD_TASK_ROW (row2));
+ return compare_task_rows (row1, row2);
}
/*
* Custom sorting functions
*/
static void
-internal_header_func (GtdTaskRow *row,
- GtdTaskRow *before,
+internal_header_func (GtkListBoxRow *row,
+ GtkListBoxRow *before,
GtdTaskListView *view)
{
GtdTask *row_task;
@@ -398,11 +416,11 @@ internal_header_func (GtdTaskRow *row,
row_task = before_task = NULL;
- if (row)
- row_task = gtd_task_row_get_task (row);
+ if (row && GTD_IS_TASK_ROW (row))
+ row_task = gtd_task_row_get_task (GTD_TASK_ROW (row));
- if (before)
- before_task = gtd_task_row_get_task (before);
+ if (before && GTD_IS_TASK_ROW (row))
+ before_task = gtd_task_row_get_task (GTD_TASK_ROW (before));
view->priv->header_func (GTK_LIST_BOX_ROW (row),
row_task,
@@ -413,23 +431,23 @@ internal_header_func (GtdTaskRow *row,
static gint
internal_compare_task_rows (GtdTaskListView *self,
- GtdTaskRow *row1,
- GtdTaskRow *row2)
+ GtkListBoxRow *row1,
+ GtkListBoxRow *row2)
{ GtdTask *row1_task;
GtdTask *row2_task;
- if (gtd_task_row_get_new_task_mode (row1))
+ if (row1 == self->priv->new_task_row)
return 1;
- else if (gtd_task_row_get_new_task_mode (row2))
+ else if (row2 == self->priv->new_task_row)
return -1;
row1_task = row2_task = NULL;
if (row1)
- row1_task = gtd_task_row_get_task (row1);
+ row1_task = gtd_task_row_get_task (GTD_TASK_ROW (row1));
if (row2)
- row2_task = gtd_task_row_get_task (row2);
+ row2_task = gtd_task_row_get_task (GTD_TASK_ROW (row2));
return self->priv->sort_func (GTK_LIST_BOX_ROW (row1),
row1_task,
@@ -443,19 +461,19 @@ internal_compare_dnd_rows (GtdTaskListView *self,
GtkListBoxRow *row1,
GtkListBoxRow *row2)
{
- GtdTaskRow *row_above, *current_row;
+ GtkListBoxRow *row_above, *current_row;
gboolean reverse;
if (GTD_IS_DND_ROW (row1))
{
row_above = gtd_dnd_row_get_row_above (GTD_DND_ROW (row1));
- current_row = GTD_TASK_ROW (row2);
+ current_row = row2;
reverse = FALSE;
}
else
{
row_above = gtd_dnd_row_get_row_above (GTD_DND_ROW (row2));
- current_row = GTD_TASK_ROW (row1);
+ current_row = row1;
reverse = TRUE;
}
@@ -473,18 +491,13 @@ internal_sort_func (GtkListBoxRow *a,
GtkListBoxRow *b,
GtdTaskListView *view)
{
- GtdTaskRow *row1, *row2;
-
if (!view->priv->sort_func)
return 0;
if (GTD_IS_DND_ROW (a) || GTD_IS_DND_ROW (b))
return internal_compare_dnd_rows (view, a, b);
- row1 = GTD_TASK_ROW (a);
- row2 = GTD_TASK_ROW (b);
-
- return internal_compare_task_rows (view, row1, row2);
+ return internal_compare_task_rows (view, a, b);
}
static void
@@ -812,9 +825,6 @@ task_row_entered_cb (GtdTaskListView *self,
GtdTaskListViewPrivate *priv = self->priv;
GtdTask *old_task;
- if (row == priv->new_task_row)
- return;
-
old_task = gtd_edit_pane_get_task (priv->edit_pane);
/* Save the task previously edited */
@@ -824,12 +834,19 @@ task_row_entered_cb (GtdTaskListView *self,
real_save_task (self, old_task);
}
+ set_active_row (self, GTK_WIDGET (row));
+
+ /* If we focused the new task row, only activate it */
+ if (GTD_IS_NEW_TASK_ROW (row))
+ {
+ gtk_revealer_set_reveal_child (priv->edit_revealer, FALSE);
+ return;
+ }
+
gtd_edit_pane_set_task (priv->edit_pane, gtd_task_row_get_task (row));
gtk_revealer_set_reveal_child (priv->edit_revealer, TRUE);
gtd_arrow_frame_set_row (priv->arrow_frame, row);
-
- set_active_row (self, GTK_WIDGET (row));
}
static void
@@ -1010,8 +1027,7 @@ gtd_task_list_view__remove_row_for_task (GtdTaskListView *view,
if (!GTD_IS_TASK_ROW (l->data))
continue;
- if (!gtd_task_row_get_new_task_mode (l->data) &&
- gtd_task_row_get_task (l->data) == task)
+ if (gtd_task_row_get_task (l->data) == task)
{
destroy_task_row (view, l->data);
break;
@@ -1352,7 +1368,8 @@ listbox_drag_motion (GtkListBox *listbox,
{
GtdTaskListViewPrivate *priv;
GtkListBoxRow *hovered_row;
- GtdTaskRow *task_row, *row_above_dnd;
+ GtkListBoxRow *task_row;
+ GtkListBoxRow *row_above_dnd;
gint row_x, row_y, row_height;
priv = gtd_task_list_view_get_instance_private (self);
@@ -1379,7 +1396,7 @@ listbox_drag_motion (GtkListBox *listbox,
goto success;
row_above_dnd = NULL;
- task_row = GTD_TASK_ROW (hovered_row);
+ task_row = hovered_row;
row_height = gtk_widget_get_allocated_height (GTK_WIDGET (hovered_row));
gtk_widget_translate_coordinates (GTK_WIDGET (listbox),
GTK_WIDGET (hovered_row),
@@ -1393,7 +1410,7 @@ listbox_drag_motion (GtkListBox *listbox,
* the previous row. Also, when hovering the new task row, only show
* the dnd row over it (never below).
*/
- if (row_y < row_height / 2 || gtd_task_row_get_new_task_mode (task_row))
+ if (row_y < row_height / 2 || GTD_IS_NEW_TASK_ROW (task_row))
{
gint row_index, i;
@@ -1407,15 +1424,12 @@ listbox_drag_motion (GtkListBox *listbox,
aux = gtk_list_box_get_row_at_index (GTK_LIST_BOX (priv->listbox), i);
/* Skip DnD, New task and hidden rows */
- if (GTD_IS_DND_ROW (aux) ||
- gtd_task_row_get_new_task_mode (GTD_TASK_ROW (aux)) ||
- (aux && !gtk_widget_get_visible (GTK_WIDGET (aux))))
+ if (!GTD_IS_TASK_ROW (aux) || (aux && !gtk_widget_get_visible (GTK_WIDGET (aux))))
{
continue;
}
-
- row_above_dnd = GTD_TASK_ROW (aux);
+ row_above_dnd = aux;
break;
}
@@ -1434,7 +1448,7 @@ listbox_drag_motion (GtkListBox *listbox,
dnd_widget = gtk_drag_get_source_widget (context);
dnd_row = gtk_widget_get_ancestor (dnd_widget, GTK_TYPE_LIST_BOX_ROW);
dnd_task = gtd_task_row_get_task (GTD_TASK_ROW (dnd_row));
- row_above_task = gtd_task_row_get_task (row_above_dnd);
+ row_above_task = gtd_task_row_get_task (GTD_TASK_ROW (row_above_dnd));
/* Forbid DnD'ing a row into a subtask */
if (row_above_task && gtd_task_is_subtask (dnd_task, row_above_task))
@@ -1624,6 +1638,7 @@ gtd_task_list_view_class_init (GtdTaskListViewClass *klass)
gtk_widget_class_bind_template_callback (widget_class, listbox_drag_leave);
gtk_widget_class_bind_template_callback (widget_class, listbox_drag_motion);
gtk_widget_class_bind_template_callback (widget_class, listbox_row_activated);
+ gtk_widget_class_bind_template_callback (widget_class, task_row_entered_cb);
gtk_widget_class_bind_template_callback (widget_class, task_row_exited_cb);
gtk_widget_class_set_css_name (widget_class, "task-list-view");
@@ -2012,9 +2027,6 @@ gtd_task_list_view_set_show_completed (GtdTaskListView *view,
if (!GTD_IS_TASK_ROW (l->data))
continue;
- if (gtd_task_row_get_new_task_mode (l->data))
- continue;
-
task = gtd_task_row_get_task (l->data);
/* Remove completed tasks, and also tasks with a completed parent */
diff --git a/src/gtd-task-row.c b/src/gtd-task-row.c
index 1b21cb1..ed299ea 100644
--- a/src/gtd-task-row.c
+++ b/src/gtd-task-row.c
@@ -30,12 +30,9 @@ struct _GtdTaskRow
/*<private>*/
GtkRevealer *revealer;
- GtkStack *stack;
/* new task widgets */
GtkStack *done_check;
- GtkEntry *new_task_entry;
- GtkStack *new_task_stack;
/* task widgets */
GtkEntry *title_entry;
@@ -55,7 +52,6 @@ struct _GtdTaskRow
gboolean handle_subtasks : 1;
/* data */
- gboolean new_task_mode;
GtdTask *task;
gint destroy_row_timeout_id;
@@ -71,14 +67,12 @@ G_DEFINE_TYPE (GtdTaskRow, gtd_task_row, GTK_TYPE_LIST_BOX_ROW)
enum {
ENTER,
EXIT,
- CREATE_TASK,
NUM_SIGNALS
};
enum {
PROP_0,
PROP_HANDLE_SUBTASKS,
- PROP_NEW_TASK_MODE,
PROP_TASK,
LAST_PROP
};
@@ -336,17 +330,6 @@ gtd_task_row__date_changed_binding (GBinding *binding,
return TRUE;
}
-static GtdTask*
-gtd_task_row__create_task_for_name (const gchar *name)
-{
- GtdTask *task = gtd_task_new (NULL);
-
- gtd_task_set_title (task, name);
- gtd_task_save (task);
-
- return task;
-}
-
static gboolean
gtd_task_row__destroy_cb (GtkWidget *row)
{
@@ -373,17 +356,7 @@ gtd_task_row__key_press_event (GtkWidget *row,
!(event->state & (GDK_SHIFT_MASK|GDK_CONTROL_MASK))) // No modifiers together
{
self->active = FALSE;
-
- if (self->new_task_mode)
- {
- gtk_stack_set_visible_child_name (self->new_task_stack, "label");
- gtk_entry_set_text (self->new_task_entry, "");
- return TRUE;
- }
- else
- {
- g_signal_emit (row, signals[EXIT], 0);
- }
+ g_signal_emit (row, signals[EXIT], 0);
}
return FALSE;
@@ -399,31 +372,6 @@ gtd_task_row_focus_in_event (GtkWidget *widget,
}
static void
-gtd_task_row__entry_activated (GtkEntry *entry,
- gpointer user_data)
-{
- GtdTaskRow *self = GTD_TASK_ROW (user_data);
-
- g_return_if_fail (GTD_IS_TASK_ROW (user_data));
- g_return_if_fail (GTK_IS_ENTRY (entry));
-
- if (entry == self->new_task_entry)
- {
- GtdTask *new_task;
-
- /* Cannot create empty tasks */
- if (gtk_entry_get_text_length (self->new_task_entry) == 0)
- return;
-
- new_task = gtd_task_row__create_task_for_name (gtk_entry_get_text (self->new_task_entry));
-
- g_signal_emit (user_data, signals[CREATE_TASK], 0, new_task);
-
- gtk_entry_set_text (self->new_task_entry, "");
- }
-}
-
-static void
gtd_task_row_finalize (GObject *object)
{
GtdTaskRow *self = GTD_TASK_ROW (object);
@@ -474,10 +422,6 @@ gtd_task_row_get_property (GObject *object,
g_value_set_boolean (value, self->handle_subtasks);
break;
- case PROP_NEW_TASK_MODE:
- g_value_set_boolean (value, self->new_task_mode);
- break;
-
case PROP_TASK:
g_value_set_object (value, self->task);
break;
@@ -501,10 +445,6 @@ gtd_task_row_set_property (GObject *object,
gtd_task_row_set_handle_subtasks (self, g_value_get_boolean (value));
break;
- case PROP_NEW_TASK_MODE:
- gtd_task_row_set_new_task_mode (self, g_value_get_boolean (value));
- break;
-
case PROP_TASK:
gtd_task_row_set_task (self, g_value_get_object (value));
break;
@@ -543,20 +483,6 @@ gtd_task_row_class_init (GtdTaskRowClass *klass)
G_PARAM_READWRITE));
/**
- * GtdTaskRow::new-task-mode:
- *
- * If the row is used to add new tasks.
- */
- g_object_class_install_property (
- object_class,
- PROP_NEW_TASK_MODE,
- g_param_spec_boolean ("new-task-mode",
- "If the row is used to add a new task",
- "Whether the row is used to add a new task",
- FALSE,
- G_PARAM_READWRITE));
-
- /**
* GtdTaskRow::task:
*
* The task that this row represents, or %NULL.
@@ -600,31 +526,12 @@ gtd_task_row_class_init (GtdTaskRowClass *klass)
G_TYPE_NONE,
0);
- /**
- * GtdTaskRow::create-task:
- *
- * Emitted when the row wants the parent widget to create a new task.
- */
- signals[CREATE_TASK] = g_signal_new ("create-task",
- GTD_TYPE_TASK_ROW,
- G_SIGNAL_RUN_LAST,
- 0,
- NULL,
- NULL,
- NULL,
- G_TYPE_NONE,
- 1,
- GTD_TYPE_TASK);
-
gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/todo/ui/task-row.ui");
gtk_widget_class_bind_template_child (widget_class, GtdTaskRow, dnd_box);
gtk_widget_class_bind_template_child (widget_class, GtdTaskRow, dnd_event_box);
gtk_widget_class_bind_template_child (widget_class, GtdTaskRow, dnd_icon);
gtk_widget_class_bind_template_child (widget_class, GtdTaskRow, done_check);
- gtk_widget_class_bind_template_child (widget_class, GtdTaskRow, stack);
- gtk_widget_class_bind_template_child (widget_class, GtdTaskRow, new_task_entry);
- gtk_widget_class_bind_template_child (widget_class, GtdTaskRow, new_task_stack);
gtk_widget_class_bind_template_child (widget_class, GtdTaskRow, revealer);
gtk_widget_class_bind_template_child (widget_class, GtdTaskRow, task_date_label);
gtk_widget_class_bind_template_child (widget_class, GtdTaskRow, task_list_label);
@@ -637,7 +544,6 @@ gtd_task_row_class_init (GtdTaskRowClass *klass)
gtk_widget_class_bind_template_callback (widget_class, drag_begin_cb);
gtk_widget_class_bind_template_callback (widget_class, mouse_out_event);
gtk_widget_class_bind_template_callback (widget_class, mouse_over_event);
- gtk_widget_class_bind_template_callback (widget_class, gtd_task_row__entry_activated);
gtk_widget_class_set_css_name (widget_class, "taskrow");
}
@@ -658,54 +564,6 @@ gtd_task_row_init (GtdTaskRow *self)
}
/**
- * gtd_task_row_get_new_task_mode:
- * @row: a #GtdTaskRow
- *
- * Whether @row is in new task mode.
- *
- * Returns: %TRUE if @row is in new task mode, %FALSE otherwise
- */
-gboolean
-gtd_task_row_get_new_task_mode (GtdTaskRow *row)
-{
- g_return_val_if_fail (GTD_IS_TASK_ROW (row), FALSE);
-
- return row->new_task_mode;
-}
-
-/**
- * gtd_task_row_set_new_task_mode:
- * @row: a #GtdTaskRow
- * @new_task_mode: %TRUE to set new task mode, %FALSE otherwise
- *
- * Sets @row new task mode to @new_task_mode. It is up to the caller
- * to set GtdTaskRow::task to %NULL.
- */
-void
-gtd_task_row_set_new_task_mode (GtdTaskRow *row,
- gboolean new_task_mode)
-{
- g_return_if_fail (GTD_IS_TASK_ROW (row));
-
- if (row->new_task_mode != new_task_mode)
- {
- row->new_task_mode = new_task_mode;
-
- if (new_task_mode)
- {
- gtk_stack_set_visible_child_name (GTK_STACK (row->stack), "new");
- gtd_task_row_reveal (row);
- }
- else
- {
- gtk_stack_set_visible_child_name (GTK_STACK (row->stack), "task");
- }
-
- g_object_notify (G_OBJECT (row), "new-task-mode");
- }
-}
-
-/**
* gtd_task_row_get_task:
* @row: a #GtdTaskRow
*
@@ -907,26 +765,13 @@ gtd_task_row_set_active (GtdTaskRow *self,
if (active)
{
- if (self->new_task_mode)
- {
- gtk_stack_set_visible_child_name (self->new_task_stack, "entry");
- gtk_widget_grab_focus (GTK_WIDGET (self->new_task_entry));
+ gtk_stack_set_visible_child_name (self->task_stack, "title");
+ gtk_widget_grab_focus (GTK_WIDGET (self->title_entry));
- g_signal_emit (self, signals[EXIT], 0);
- }
- else
- {
- gtk_stack_set_visible_child_name (self->task_stack, "title");
- gtk_widget_grab_focus (GTK_WIDGET (self->title_entry));
-
- g_signal_emit (self, signals[ENTER], 0);
- }
+ g_signal_emit (self, signals[ENTER], 0);
}
else
{
- if (self->new_task_mode)
- gtk_stack_set_visible_child_name (self->new_task_stack, "label");
- else
- gtk_stack_set_visible_child_name (self->task_stack, "label");
+ gtk_stack_set_visible_child_name (self->task_stack, "label");
}
}
diff --git a/src/gtd-task-row.h b/src/gtd-task-row.h
index d934670..4437ae8 100644
--- a/src/gtd-task-row.h
+++ b/src/gtd-task-row.h
@@ -32,11 +32,6 @@ G_DECLARE_FINAL_TYPE (GtdTaskRow, gtd_task_row, GTD, TASK_ROW, GtkListBoxRow)
GtkWidget* gtd_task_row_new (GtdTask *task);
-gboolean gtd_task_row_get_new_task_mode (GtdTaskRow *row);
-
-void gtd_task_row_set_new_task_mode (GtdTaskRow *row,
- gboolean new_task_mode);
-
GtdTask* gtd_task_row_get_task (GtdTaskRow *row);
void gtd_task_row_set_task (GtdTaskRow *row,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]