[gnome-todo/wip/selection-mode] project: add initial selection mode prototype



commit 93b61e12e76ac1667005c67b401ffc8234c4290c
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Fri Aug 21 21:59:24 2015 -0300

    project: add initial selection mode prototype
    
    This initial prototyped selection mode actually doesn't
    do anything useful besides selecting the task lists and
    turning the window blue.

 data/theme/Adwaita.css    |    4 +
 data/ui/task-list-item.ui |   20 +----
 data/ui/window.ui         |   19 +++---
 src/gtd-enums.h           |    1 -
 src/gtd-task-list-item.c  |  111 +++++++++++++++++++++++++----
 src/gtd-task-list-item.h  |    5 ++
 src/gtd-window.c          |  176 ++++++++++++++++++++++++++++++++++++++++-----
 src/gtd-window.h          |    5 ++
 8 files changed, 282 insertions(+), 59 deletions(-)
---
diff --git a/data/theme/Adwaita.css b/data/theme/Adwaita.css
index 9e658d2..411f81a 100644
--- a/data/theme/Adwaita.css
+++ b/data/theme/Adwaita.css
@@ -14,6 +14,10 @@ GtdTaskListItem.thumbnail {
     font-size: 9px;
 }
 
+GtdTaskListItem {
+    background-color: transparent;
+}
+
 GtdTaskListItem,
 GtdTaskListView GtdTaskRow {
     color: #000003;
diff --git a/data/ui/task-list-item.ui b/data/ui/task-list-item.ui
index a132b00..d700551 100644
--- a/data/ui/task-list-item.ui
+++ b/data/ui/task-list-item.ui
@@ -7,6 +7,10 @@
     <property name="height_request">80</property>
     <property name="visible">True</property>
     <property name="can_focus">True</property>
+    <style>
+      <class name="view" />
+      <class name="content-view" />
+    </style>
     <child>
       <object class="GtkBox" id="box">
         <property name="visible">True</property>
@@ -48,22 +52,6 @@
                     <property name="position">0</property>
                   </packing>
                 </child>
-                <child>
-                  <object class="GtkCheckButton" id="selection_check">
-                    <property name="width_request">32</property>
-                    <property name="height_request">32</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="draw_indicator">True</property>
-                  </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">True</property>
-                    <property name="position">1</property>
-                  </packing>
-                </child>
               </object>
             </child>
             <style>
diff --git a/data/ui/window.ui b/data/ui/window.ui
index 2a5504b..e62f572 100644
--- a/data/ui/window.ui
+++ b/data/ui/window.ui
@@ -243,16 +243,12 @@
           </object>
         </child>
         <child>
-          <object class="GtkButton" id="share_button">
+          <object class="GtkButton" id="cancel_selection_button">
+            <property name="visible" bind-source="select_button" bind-property="active" 
bind-flags="default|sync-create"/>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
-            <child>
-              <object class="GtkImage" id="share_button_image">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="icon_name">send-to-symbolic</property>
-              </object>
-            </child>
+            <property name="label" translatable="yes">Cancel</property>
+            <signal name="clicked" handler="gtd_window__cancel_selection_button_clicked" object="GtdWindow" 
swapped="no" />
           </object>
           <packing>
             <property name="pack_type">end</property>
@@ -261,8 +257,11 @@
         </child>
         <child>
           <object class="GtkToggleButton" id="select_button">
+            <property name="visible" bind-source="back_button" bind-property="visible" 
bind-flags="invert-boolean|sync-create"/>
+            <property name="visible" bind-source="select_button" bind-property="active" 
bind-flags="invert-boolean|sync-create"/>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
+            <signal name="toggled" handler="gtd_window__select_button_toggled" object="GtdWindow" 
swapped="no" />
             <child>
               <object class="GtkImage" id="select_button_image">
                 <property name="visible">True</property>
@@ -273,7 +272,7 @@
           </object>
           <packing>
             <property name="pack_type">end</property>
-            <property name="position">2</property>
+            <property name="position">3</property>
           </packing>
         </child>
         <child>
@@ -291,7 +290,7 @@
           </object>
           <packing>
             <property name="pack_type">end</property>
-            <property name="position">3</property>
+            <property name="position">4</property>
           </packing>
         </child>
         <child>
diff --git a/src/gtd-enums.h b/src/gtd-enums.h
index 2b0f095..86c5c2f 100644
--- a/src/gtd-enums.h
+++ b/src/gtd-enums.h
@@ -26,7 +26,6 @@ G_BEGIN_DECLS
 typedef enum
 {
   GTD_WINDOW_MODE_NORMAL,
-  GTD_WINDOW_MODE_SEARCH,
   GTD_WINDOW_MODE_SELECTION
 } GtdWindowMode;
 
diff --git a/src/gtd-task-list-item.c b/src/gtd-task-list-item.c
index 0a0b60a..03786c0 100644
--- a/src/gtd-task-list-item.c
+++ b/src/gtd-task-list-item.c
@@ -16,6 +16,7 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include "gtd-enum-types.h"
 #include "gtd-task.h"
 #include "gtd-task-list.h"
 #include "gtd-task-list-item.h"
@@ -24,7 +25,6 @@
 
 typedef struct
 {
-  GtkCheckButton            *selection_check;
   GtkImage                  *icon_image;
   GtkLabel                  *subtitle_label;
   GtkLabel                  *title_label;
@@ -34,6 +34,9 @@ typedef struct
   GtdTaskList               *list;
   GtdWindowMode              mode;
 
+  /* flags */
+  gint                      selected : 1;
+
 } GtdTaskListItemPrivate;
 
 struct _GtdTaskListItem
@@ -49,10 +52,12 @@ G_DEFINE_TYPE_WITH_PRIVATE (GtdTaskListItem, gtd_task_list_item, GTK_TYPE_FLOW_B
 #define LUMINANCE(c)              (0.299 * c->red + 0.587 * c->green + 0.114 * c->blue)
 
 #define THUMBNAIL_SIZE            192
+#define CHECK_SIZE                40
 
 enum {
   PROP_0,
   PROP_MODE,
+  PROP_SELECTED,
   PROP_TASK_LIST,
   LAST_PROP
 };
@@ -247,6 +252,22 @@ gtd_task_list_item__render_thumbnail (GtdTaskListItem *item)
   pango_font_description_free (font_desc);
   g_object_unref (layout);
 
+  /* Draws the selection checkbox */
+  if (item->priv->mode == GTD_WINDOW_MODE_SELECTION)
+    {
+      gtk_style_context_add_class (context, GTK_STYLE_CLASS_CHECK);
+
+      if (item->priv->selected)
+        gtk_style_context_set_state (context, GTK_STATE_FLAG_CHECKED);
+
+      gtk_render_check (context,
+                        cr,
+                        THUMBNAIL_SIZE - CHECK_SIZE * 1.5,
+                        THUMBNAIL_SIZE - CHECK_SIZE,
+                        CHECK_SIZE,
+                        CHECK_SIZE);
+    }
+
   /* Retrieves the pixbuf from the drawed image */
   pix = gdk_pixbuf_get_from_surface (surface,
                                      0,
@@ -331,7 +352,11 @@ gtd_task_list_item_get_property (GObject    *object,
   switch (prop_id)
     {
     case PROP_MODE:
-      g_value_set_int (value, self->priv->mode);
+      g_value_set_enum (value, self->priv->mode);
+      break;
+
+    case PROP_SELECTED:
+      g_value_set_boolean (value, self->priv->selected);
       break;
 
     case PROP_TASK_LIST:
@@ -355,9 +380,12 @@ gtd_task_list_item_set_property (GObject      *object,
   switch (prop_id)
     {
     case PROP_MODE:
-      priv->mode = g_value_get_int (value);
-      gtk_widget_set_visible (GTK_WIDGET (priv->selection_check),
-                              priv->mode == GTD_WINDOW_MODE_SELECTION);
+      priv->mode = g_value_get_enum (value);
+      gtd_task_list_item__update_thumbnail (self);
+      break;
+
+    case PROP_SELECTED:
+      gtd_task_list_item_set_selected (self, g_value_get_boolean (value));
       break;
 
     case PROP_TASK_LIST:
@@ -429,13 +457,26 @@ gtd_task_list_item_class_init (GtdTaskListItemClass *klass)
   g_object_class_install_property (
         object_class,
         PROP_MODE,
-        g_param_spec_int ("mode",
-                          _("Mode of this item"),
-                          _("The mode of this item, inherited from the parent's mode"),
-                          GTD_WINDOW_MODE_NORMAL,
-                          GTD_WINDOW_MODE_SELECTION,
-                          GTD_WINDOW_MODE_NORMAL,
-                          G_PARAM_READWRITE));
+        g_param_spec_enum ("mode",
+                           _("Mode of this item"),
+                           _("The mode of this item, inherited from the parent's mode"),
+                           GTD_TYPE_WINDOW_MODE,
+                           GTD_WINDOW_MODE_NORMAL,
+                           G_PARAM_READWRITE));
+
+  /**
+   * GtdTaskListItem::selected:
+   *
+   * Whether this item is selected when in %GTD_WINDOW_MODE_SELECTION.
+   */
+  g_object_class_install_property (
+        object_class,
+        PROP_SELECTED,
+        g_param_spec_boolean ("selected",
+                              _("Whether the task list is selected"),
+                              _("Whether the task list is selected when in selection mode"),
+                              FALSE,
+                              G_PARAM_READWRITE));
 
   /**
    * GtdTaskListItem::task-list:
@@ -455,7 +496,6 @@ gtd_task_list_item_class_init (GtdTaskListItemClass *klass)
   gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/todo/ui/task-list-item.ui");
 
   gtk_widget_class_bind_template_child_private (widget_class, GtdTaskListItem, icon_image);
-  gtk_widget_class_bind_template_child_private (widget_class, GtdTaskListItem, selection_check);
   gtk_widget_class_bind_template_child_private (widget_class, GtdTaskListItem, spinner);
   gtk_widget_class_bind_template_child_private (widget_class, GtdTaskListItem, subtitle_label);
   gtk_widget_class_bind_template_child_private (widget_class, GtdTaskListItem, title_label);
@@ -484,3 +524,48 @@ gtd_task_list_item_get_list (GtdTaskListItem *item)
 
   return item->priv->list;
 }
+
+/**
+ * gtd_task_list_item_get_selected:
+ * @item: a #GtdTaskListItem
+ *
+ * Retrieves whether @item is selected or not.
+ *
+ * Returns: %TRUE if @item is selected, %FALSE otherwise
+ */
+gboolean
+gtd_task_list_item_get_selected (GtdTaskListItem *item)
+{
+  g_return_val_if_fail (GTD_IS_TASK_LIST_ITEM (item), FALSE);
+
+  return item->priv->selected;
+}
+
+/**
+ * gtd_task_list_item_set_selected:
+ * @item: a #GtdTaskListItem
+ * @selected: %TRUE if @item is selected, %FALSE otherwise
+ *
+ * Sets whether @item is selected or not.
+ *
+ * Returns:
+ */
+void
+gtd_task_list_item_set_selected (GtdTaskListItem *item,
+                                 gboolean         selected)
+{
+  GtdTaskListItemPrivate *priv;
+
+  g_return_if_fail (GTD_IS_TASK_LIST_ITEM (item));
+
+  priv = item->priv;
+
+  if (priv->selected != selected)
+    {
+      priv->selected = selected;
+
+      gtd_task_list_item__update_thumbnail (item);
+
+      g_object_notify (G_OBJECT (item), "selected");
+    }
+}
diff --git a/src/gtd-task-list-item.h b/src/gtd-task-list-item.h
index 224daed..5d92936 100644
--- a/src/gtd-task-list-item.h
+++ b/src/gtd-task-list-item.h
@@ -33,6 +33,11 @@ GtkWidget*              gtd_task_list_item_new                (GtdTaskList
 
 GtdTaskList*            gtd_task_list_item_get_list           (GtdTaskListItem      *item);
 
+gboolean                gtd_task_list_item_get_selected       (GtdTaskListItem      *item);
+
+void                    gtd_task_list_item_set_selected       (GtdTaskListItem      *item,
+                                                               gboolean              selected);
+
 G_END_DECLS
 
 #endif /* GTD_TASK_LIST_ITEM_H */
diff --git a/src/gtd-window.c b/src/gtd-window.c
index 85f96f9..a7dc758 100644
--- a/src/gtd-window.c
+++ b/src/gtd-window.c
@@ -17,6 +17,7 @@
  */
 
 #include "gtd-application.h"
+#include "gtd-enum-types.h"
 #include "gtd-task-list-view.h"
 #include "gtd-manager.h"
 #include "gtd-notification.h"
@@ -31,17 +32,20 @@
 
 typedef struct
 {
+  GtkWidget                     *action_bar;
   GtkButton                     *back_button;
   GtkColorButton                *color_button;
   GtkHeaderBar                  *headerbar;
   GtkFlowBox                    *lists_flowbox;
   GtkStack                      *main_stack;
+  GtkWidget                     *new_list_button;
   GtkWidget                     *new_list_popover;
   GtdNotificationWidget         *notification_widget;
   GtdTaskListView               *scheduled_list_view;
   GtkSearchBar                  *search_bar;
   GtkToggleButton               *search_button;
   GtkSearchEntry                *search_entry;
+  GtkWidget                     *select_button;
   GtkStack                      *stack;
   GtkStackSwitcher              *stack_switcher;
   GtdStorageDialog              *storage_dialog;
@@ -78,6 +82,7 @@ static const GActionEntry gtd_window_entries[] = {
 enum {
   PROP_0,
   PROP_MANAGER,
+  PROP_MODE,
   LAST_PROP
 };
 
@@ -96,6 +101,20 @@ gtd_window__stack_visible_child_cb (GtdWindow *window)
 }
 
 static void
+gtd_window__select_button_toggled (GtkToggleButton *button,
+                                   GtdWindow       *window)
+{
+  gtd_window_set_mode (window, gtk_toggle_button_get_active (button) ? GTD_WINDOW_MODE_SELECTION : 
GTD_WINDOW_MODE_NORMAL);
+}
+
+static void
+gtd_window__cancel_selection_button_clicked (GtkWidget *button,
+                                             GtdWindow *window)
+{
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (window->priv->select_button), FALSE);
+}
+
+static void
 gtd_window_update_list_counters (GtdTaskList *list,
                                  GtdTask     *task,
                                  GtdWindow   *window)
@@ -311,30 +330,42 @@ gtd_window__list_selected (GtkFlowBox      *flowbox,
   g_return_if_fail (GTD_IS_WINDOW (user_data));
   g_return_if_fail (GTD_IS_TASK_LIST_ITEM (item));
 
-  list = gtd_task_list_item_get_list (item);
-  list_color = gtd_task_list_get_color (list);
+  switch (priv->mode)
+    {
+    case GTD_WINDOW_MODE_SELECTION:
+      gtd_task_list_item_set_selected (item, !gtd_task_list_item_get_selected (item));
+      break;
+
+    case GTD_WINDOW_MODE_NORMAL:
+      list = gtd_task_list_item_get_list (item);
+      list_color = gtd_task_list_get_color (list);
 
-  g_signal_handlers_block_by_func (priv->color_button,
-                                   gtd_window__list_color_set,
-                                   user_data);
+      g_signal_handlers_block_by_func (priv->color_button,
+                                       gtd_window__list_color_set,
+                                       user_data);
 
-  gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER (priv->color_button), list_color);
+      gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER (priv->color_button), list_color);
 
-  gtk_stack_set_visible_child_name (priv->main_stack, "tasks");
-  gtk_header_bar_set_title (priv->headerbar, gtd_task_list_get_name (list));
-  gtk_header_bar_set_subtitle (priv->headerbar, gtd_task_list_get_origin (list));
-  gtk_header_bar_set_custom_title (priv->headerbar, NULL);
-  gtk_search_bar_set_search_mode (priv->search_bar, FALSE);
-  gtd_task_list_view_set_task_list (priv->list_view, list);
-  gtd_task_list_view_set_show_completed (priv->list_view, FALSE);
-  gtk_widget_show (GTK_WIDGET (priv->back_button));
-  gtk_widget_show (GTK_WIDGET (priv->color_button));
+      gtk_stack_set_visible_child_name (priv->main_stack, "tasks");
+      gtk_header_bar_set_title (priv->headerbar, gtd_task_list_get_name (list));
+      gtk_header_bar_set_subtitle (priv->headerbar, gtd_task_list_get_origin (list));
+      gtk_header_bar_set_custom_title (priv->headerbar, NULL);
+      gtk_search_bar_set_search_mode (priv->search_bar, FALSE);
+      gtd_task_list_view_set_task_list (priv->list_view, list);
+      gtd_task_list_view_set_show_completed (priv->list_view, FALSE);
+      gtk_widget_show (GTK_WIDGET (priv->back_button));
+      gtk_widget_show (GTK_WIDGET (priv->color_button));
 
-  g_signal_handlers_unblock_by_func (priv->color_button,
-                                     gtd_window__list_color_set,
-                                     user_data);
+      g_signal_handlers_unblock_by_func (priv->color_button,
+                                         gtd_window__list_color_set,
+                                         user_data);
 
-  gdk_rgba_free (list_color);
+      gdk_rgba_free (list_color);
+      break;
+
+    default:
+      g_assert_not_reached ();
+    }
 }
 
 static void
@@ -346,6 +377,13 @@ gtd_window__list_added (GtdManager  *manager,
   GtkWidget *item;
 
   item = gtd_task_list_item_new (list);
+
+  g_object_bind_property (user_data,
+                          "mode",
+                          item,
+                          "mode",
+                          G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE);
+
   gtk_widget_show (item);
 
   gtk_flow_box_insert (priv->lists_flowbox,
@@ -411,6 +449,10 @@ gtd_window_get_property (GObject    *object,
       g_value_set_object (value, self->priv->manager);
       break;
 
+    case PROP_MODE:
+      g_value_set_enum (value, self->priv->mode);
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
     }
@@ -488,6 +530,10 @@ gtd_window_set_property (GObject      *object,
       g_object_notify (object, "manager");
       break;
 
+    case PROP_MODE:
+      gtd_window_set_mode (self, g_value_get_enum (value));
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
     }
@@ -518,14 +564,31 @@ gtd_window_class_init (GtdWindowClass *klass)
                              GTD_TYPE_MANAGER,
                              G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
 
+  /**
+   * GtdWindow::mode:
+   *
+   * The current interaction mode of the window.
+   */
+  g_object_class_install_property (
+        object_class,
+        PROP_MODE,
+        g_param_spec_enum ("mode",
+                           _("Mode of this window"),
+                           _("The interaction mode of the window"),
+                           GTD_TYPE_WINDOW_MODE,
+                           GTD_WINDOW_MODE_NORMAL,
+                           G_PARAM_READWRITE));
+
   gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/todo/ui/window.ui");
 
+  gtk_widget_class_bind_template_child_private (widget_class, GtdWindow, action_bar);
   gtk_widget_class_bind_template_child_private (widget_class, GtdWindow, back_button);
   gtk_widget_class_bind_template_child_private (widget_class, GtdWindow, color_button);
   gtk_widget_class_bind_template_child_private (widget_class, GtdWindow, headerbar);
   gtk_widget_class_bind_template_child_private (widget_class, GtdWindow, lists_flowbox);
   gtk_widget_class_bind_template_child_private (widget_class, GtdWindow, list_view);
   gtk_widget_class_bind_template_child_private (widget_class, GtdWindow, main_stack);
+  gtk_widget_class_bind_template_child_private (widget_class, GtdWindow, new_list_button);
   gtk_widget_class_bind_template_child_private (widget_class, GtdWindow, new_list_popover);
   gtk_widget_class_bind_template_child_private (widget_class, GtdWindow, notification_widget);
   gtk_widget_class_bind_template_child_private (widget_class, GtdWindow, scheduled_list_view);
@@ -533,14 +596,17 @@ gtd_window_class_init (GtdWindowClass *klass)
   gtk_widget_class_bind_template_child_private (widget_class, GtdWindow, search_bar);
   gtk_widget_class_bind_template_child_private (widget_class, GtdWindow, search_button);
   gtk_widget_class_bind_template_child_private (widget_class, GtdWindow, search_entry);
+  gtk_widget_class_bind_template_child_private (widget_class, GtdWindow, select_button);
   gtk_widget_class_bind_template_child_private (widget_class, GtdWindow, stack_switcher);
   gtk_widget_class_bind_template_child_private (widget_class, GtdWindow, storage_dialog);
   gtk_widget_class_bind_template_child_private (widget_class, GtdWindow, today_list_view);
 
   gtk_widget_class_bind_template_callback (widget_class, gtd_window__back_button_clicked);
+  gtk_widget_class_bind_template_callback (widget_class, gtd_window__cancel_selection_button_clicked);
   gtk_widget_class_bind_template_callback (widget_class, gtd_window__list_color_set);
   gtk_widget_class_bind_template_callback (widget_class, gtd_window__list_selected);
   gtk_widget_class_bind_template_callback (widget_class, gtd_window__on_key_press_event);
+  gtk_widget_class_bind_template_callback (widget_class, gtd_window__select_button_toggled);
   gtk_widget_class_bind_template_callback (widget_class, gtd_window__stack_visible_child_cb);
 }
 
@@ -620,3 +686,75 @@ gtd_window_cancel_notification (GtdWindow       *window,
 
   gtd_notification_widget_cancel (priv->notification_widget, notification);
 }
+
+/**
+ * gtd_window_get_mode:
+ * @window: a #GtdWindow
+ *
+ * Retrieves the current mode of @window.
+ *
+ * Returns: the #GtdWindow::mode property value
+ */
+GtdWindowMode
+gtd_window_get_mode (GtdWindow *window)
+{
+  g_return_val_if_fail (GTD_IS_WINDOW (window), GTD_WINDOW_MODE_NORMAL);
+
+  return window->priv->mode;
+}
+
+/**
+ * gtd_window_set_mode:
+ * @window: a #GtdWindow
+ * @mode: a #GtdWindowMode
+ *
+ * Sets the current window mode to @mode.
+ *
+ * Returns:
+ */
+void
+gtd_window_set_mode (GtdWindow     *window,
+                     GtdWindowMode  mode)
+{
+  GtdWindowPrivate *priv;
+
+  g_return_if_fail (GTD_IS_WINDOW (window));
+
+  priv = window->priv;
+
+  if (priv->mode != mode)
+    {
+      GtkStyleContext *context;
+      gboolean is_selection_mode;
+
+      priv->mode = mode;
+      context = gtk_widget_get_style_context (GTK_WIDGET (priv->headerbar));
+      is_selection_mode = (mode == GTD_WINDOW_MODE_SELECTION);
+
+      gtk_widget_set_visible (priv->select_button, is_selection_mode);
+      gtk_widget_set_visible (GTK_WIDGET (priv->new_list_button), !is_selection_mode);
+      gtk_widget_set_visible (GTK_WIDGET (priv->action_bar), is_selection_mode);
+      gtk_header_bar_set_show_close_button (priv->headerbar, !is_selection_mode);
+      gtk_header_bar_set_subtitle (priv->headerbar, NULL);
+
+      if (is_selection_mode)
+        {
+          gtk_style_context_add_class (context, "selection-mode");
+          gtk_header_bar_set_custom_title (priv->headerbar, NULL);
+          gtk_header_bar_set_title (priv->headerbar, _("Click a task list to select"));
+        }
+      else
+        {
+          /* Unselect all items when leaving selection mode */
+          gtk_container_foreach (GTK_CONTAINER (priv->lists_flowbox),
+                                 (GtkCallback) gtd_task_list_item_set_selected,
+                                 FALSE);
+
+          gtk_style_context_remove_class (context, "selection-mode");
+          gtk_header_bar_set_custom_title (priv->headerbar, GTK_WIDGET (priv->stack_switcher));
+          gtk_header_bar_set_title (priv->headerbar, _("To Do"));
+        }
+
+      g_object_notify (G_OBJECT (window), "mode");
+    }
+}
diff --git a/src/gtd-window.h b/src/gtd-window.h
index 901f2ce..2c96d36 100644
--- a/src/gtd-window.h
+++ b/src/gtd-window.h
@@ -40,6 +40,11 @@ void                      gtd_window_notify               (GtdWindow
 void                      gtd_window_cancel_notification  (GtdWindow             *window,
                                                            GtdNotification      *notification);
 
+GtdWindowMode             gtd_window_get_mode             (GtdWindow             *window);
+
+void                      gtd_window_set_mode             (GtdWindow             *window,
+                                                           GtdWindowMode          mode);
+
 G_END_DECLS
 
 #endif /* GTD_WINDOW_H */


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