[bijiben] Do not display all items at startup. Offer to display more.



commit f2e91d2081853c0b0ec0df817c280849c4aaa3f3
Author: Pierre-Yves Luyten <py luyten fr>
Date:   Sat May 18 21:49:14 2013 +0200

    Do not display all items at startup. Offer to display more.
    
    Controller displays 48 items at startup. Main view displays
    a button to load more while there are more.
    
    48 allows to have full rows for 3 or 4 items wide windows.

 po/POTFILES.in                   |    1 +
 src/Makefile.am                  |    2 +
 src/bjb-controller.c             |  135 ++++++++++++++++------
 src/bjb-controller.h             |    3 +
 src/bjb-load-more-button.c       |  236 ++++++++++++++++++++++++++++++++++++++
 src/bjb-load-more-button.h       |   78 +++++++++++++
 src/bjb-main-toolbar.c           |   41 +++++---
 src/bjb-main-view.c              |   11 ++-
 src/libbiji/biji-marshalers.list |    1 +
 9 files changed, 458 insertions(+), 50 deletions(-)
---
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 826f7bc..0cee28a 100755
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -5,6 +5,7 @@ src/bjb-color-button.c
 src/bjb-editor-toolbar.c
 src/bjb-empty-results-box.c
 src/bjb-import-dialog.c
+src/bjb-load-more-button.c
 src/bjb-main-toolbar.c
 src/bjb-note-tag-dialog.c
 src/bjb-note-view.c
diff --git a/src/Makefile.am b/src/Makefile.am
index 17767f8..c88a31a 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -60,6 +60,8 @@ bijiben_SOURCES = \
        bjb-empty-results-box.h \
        bjb-import-dialog.h \
        bjb-import-dialog.c \
+       bjb-load-more-button.c \
+       bjb-load-more-button.h \
        bjb-main.c \
        bjb-main-toolbar.c \
        bjb-main-toolbar.h \
diff --git a/src/bjb-controller.c b/src/bjb-controller.c
index 34b9da3..b2c7678 100644
--- a/src/bjb-controller.c
+++ b/src/bjb-controller.c
@@ -28,6 +28,15 @@
 #include "bjb-main-view.h"
 #include "bjb-window-base.h"
 
+
+/*
+ * The start-up number of items to show,
+ * and its incrementation
+ */
+
+#define BJB_ITEMS_SLICE 48
+
+
 /* Gobject */
 
 struct _BjbControllerPrivate
@@ -42,10 +51,14 @@ struct _BjbControllerPrivate
 
   /*  Private  */
   GList          *items_to_show;
+  gint            n_items_to_show;
+  gboolean        remaining_items;
+
   gboolean        connected;
   gulong          book_change;
 };
 
+
 enum {
   PROP_0,
   PROP_BOOK,
@@ -79,10 +92,8 @@ bjb_controller_init (BjbController *self)
   GtkListStore     *store ;
   GtkListStore     *completion ;
 
-  self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, 
-                                            BJB_TYPE_CONTROLLER, 
-                                            BjbControllerPrivate);
-  priv = self->priv ;
+  priv = self->priv = G_TYPE_INSTANCE_GET_PRIVATE
+    (self, BJB_TYPE_CONTROLLER, BjbControllerPrivate);
 
   /* Create the columns */
   store = gtk_list_store_new (GD_MAIN_COLUMN_LAST,
@@ -96,6 +107,7 @@ bjb_controller_init (BjbController *self)
 
   priv->model = GTK_TREE_MODEL(store) ;
   priv->items_to_show = NULL;
+  priv->n_items_to_show = BJB_ITEMS_SLICE;
   priv->needle = NULL;
   priv->collection = NULL;
   priv->connected = FALSE;
@@ -379,21 +391,36 @@ most_recent_item_first (gconstpointer a, gconstpointer b)
   return result;
 }
 
+
+
+static void
+sort_items (GList **to_show)
+{
+  *to_show = g_list_sort (*to_show, most_recent_item_first);
+}
+
+
 static void
-sort_items (BjbController *self)
+notify_displayed_items_changed (BjbController *self)
 {
-  self->priv->items_to_show = g_list_sort (self->priv->items_to_show,
-                                           most_recent_item_first);
+  /*gboolean shown;
+
+  shown = (self->priv->items_to_show != NULL);*/
+  g_signal_emit (G_OBJECT (self),
+                 bjb_controller_signals[DISPLAY_NOTES_CHANGED],
+                 0,
+                 //shown,
+                 (self->priv->items_to_show != NULL),
+                 self->priv->remaining_items);  
 }
 
 static void
-sort_and_update (BjbController *self)
+update (BjbController *self)
 {
-  sort_items (self);
   bjb_window_base_switch_to (self->priv->window, BJB_WINDOW_BASE_MAIN_VIEW);
   bjb_controller_update_view (self);
 
-  g_signal_emit (G_OBJECT (self), bjb_controller_signals[DISPLAY_NOTES_CHANGED],0);
+  notify_displayed_items_changed (self);
 }
 
 
@@ -402,15 +429,43 @@ update_controller_callback (GList *result,
                             gpointer user_data)
 {
   BjbController *self;
+  BjbControllerPrivate *priv;
+  GList *l;
+  gint i;
 
   self = BJB_CONTROLLER (user_data);
-  self->priv->items_to_show = result;
+  priv = self->priv;
+  priv->remaining_items = FALSE;
 
   if (!result)
-    bjb_window_base_switch_to (self->priv->window, BJB_WINDOW_BASE_NO_RESULT);
+  {
+    bjb_window_base_switch_to (priv->window, BJB_WINDOW_BASE_NO_RESULT);
+    return;
+  }
 
-  else
-    sort_and_update (self);
+  sort_items (&result);
+  i = 0;
+
+  /* We are supposed to show n items. While not reach,
+   * add to the list. As soon as reached, keep in mind that */
+
+  for (l=result ; l!= NULL ; l=l->next)
+  {
+    if (i< priv->n_items_to_show)
+    {
+      priv->items_to_show = g_list_prepend (priv->items_to_show, l->data);
+      i ++;
+    }
+
+    else if (l->next != NULL)
+    {
+      priv->remaining_items = TRUE;
+      break;
+    }
+  }
+
+  priv->items_to_show = g_list_reverse (priv->items_to_show);
+  update (self);
 }
 
 void
@@ -418,26 +473,25 @@ bjb_controller_apply_needle (BjbController *self)
 {
   BjbControllerPrivate *priv = self->priv;
   gchar *needle;
+  GList *all_notes;
 
-  if (priv->items_to_show)
-    g_clear_pointer (&priv->items_to_show, g_list_free);
-  
   needle = priv->needle;
+  g_clear_pointer (&priv->items_to_show, g_list_free);
 
   /* Show all notes */
   if (needle == NULL || g_strcmp0 (needle,"") == 0)
   {
-    priv->items_to_show = biji_note_book_get_items (self->priv->book);
+    all_notes = biji_note_book_get_items (self->priv->book);
 
     /* If there are no note, report this */
-    if (!priv->items_to_show)
+    if (all_notes == NULL)
     {
       bjb_window_base_switch_to (self->priv->window, BJB_WINDOW_BASE_NO_NOTE);
       return;
     }
 
     /* Otherwise do show existing notes */
-    sort_and_update (self);
+    update_controller_callback (all_notes, self);
     return;
   }
 
@@ -510,8 +564,9 @@ on_book_changed (BijiNoteBook           *book,
             p_iter = NULL;
 
           bjb_controller_add_item_if_needed (self, item, TRUE, p_iter);
+          priv->n_items_to_show ++;
           priv->items_to_show = g_list_prepend (priv->items_to_show, note);
-          g_signal_emit (G_OBJECT (self), bjb_controller_signals[DISPLAY_NOTES_CHANGED],0);
+          notify_displayed_items_changed (self);
       break;
 
     /* Same comment, prepend but collection before note */
@@ -549,7 +604,7 @@ on_book_changed (BijiNoteBook           *book,
         gtk_list_store_remove (GTK_LIST_STORE (priv->model), p_iter);
 
       priv->items_to_show = g_list_remove (priv->items_to_show, note);
-      g_signal_emit (G_OBJECT (self), bjb_controller_signals[DISPLAY_NOTES_CHANGED],0);
+      notify_displayed_items_changed (self);
       break;
 
     default:
@@ -614,15 +669,17 @@ bjb_controller_class_init (BjbControllerClass *klass)
                                                   G_TYPE_NONE,
                                                   0);
 
-  bjb_controller_signals[DISPLAY_NOTES_CHANGED] = g_signal_new ( "display-notes-changed" ,
+  bjb_controller_signals[DISPLAY_NOTES_CHANGED] = g_signal_new ( "display-items-changed" ,
                                                   G_OBJECT_CLASS_TYPE (klass),
                                                   G_SIGNAL_RUN_LAST,
                                                   0, 
                                                   NULL, 
                                                   NULL,
-                                                  g_cclosure_marshal_VOID__BOOLEAN,
+                                                  _biji_marshal_VOID__BOOLEAN_BOOLEAN,
                                                   G_TYPE_NONE,
-                                                  0);
+                                                  2,
+                                                  G_TYPE_BOOLEAN,
+                                                  G_TYPE_BOOLEAN);
 
   properties[PROP_BOOK] = g_param_spec_object ("book",
                                                "Book",
@@ -713,16 +770,13 @@ bjb_controller_get_completion(BjbController *self)
   return self->priv->completion ;
 }
 
+
 gboolean
 bjb_controller_shows_item (BjbController *self)
 {
-  if (self->priv->items_to_show)
-    return TRUE;
-
-  return FALSE;
+  return (self->priv->items_to_show != NULL);
 }
 
-
 BijiCollection *
 bjb_controller_get_collection (BjbController *self)
 {
@@ -748,10 +802,8 @@ bjb_controller_set_collection (BjbController *self,
 
   /* Opening an __existing__ collection */
   bjb_window_base_switch_to (self->priv->window, BJB_WINDOW_BASE_SPINNER_VIEW);
-  g_list_free (self->priv->items_to_show);
-
-  if (self->priv->needle)
-    g_free (self->priv->needle);
+  g_clear_pointer (&self->priv->items_to_show, g_list_free);
+  g_clear_pointer (&self->priv->needle, g_free);
 
   self->priv->needle = g_strdup ("");
   self->priv->collection = coll;
@@ -760,3 +812,18 @@ bjb_controller_set_collection (BjbController *self,
                                         update_controller_callback,
                                         self);
 }
+
+
+void
+bjb_controller_show_more (BjbController *self)
+{
+  self->priv->n_items_to_show += BJB_ITEMS_SLICE;
+
+  /* FIXME: this method to refresh is just non sense */
+
+  if (self->priv->collection != NULL)
+    bjb_controller_set_collection (self, self->priv->collection);
+
+  else
+    on_needle_changed (self);
+}
diff --git a/src/bjb-controller.h b/src/bjb-controller.h
index 306fe77..666ffd3 100644
--- a/src/bjb-controller.h
+++ b/src/bjb-controller.h
@@ -78,6 +78,9 @@ BijiCollection * bjb_controller_get_collection (BjbController *self);
 
 void bjb_controller_set_collection (BjbController *self, BijiCollection *coll);
 
+
+void bjb_controller_show_more (BjbController *controller);
+
 G_END_DECLS
 
 #endif /* _BJB_CONTROLLER_H_ */
diff --git a/src/bjb-load-more-button.c b/src/bjb-load-more-button.c
new file mode 100644
index 0000000..2170a84
--- /dev/null
+++ b/src/bjb-load-more-button.c
@@ -0,0 +1,236 @@
+/*
+ * Bjb - access, organize and share your bjb on GNOME
+ * Copyright © 2013 Red Hat, Inc.
+ *
+ * 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ */
+
+/* Chained based on Photos, Documents */
+
+#include "config.h"
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <glib/gprintf.h>
+
+#include <libgd/gd-revealer.h>
+
+#include "bjb-load-more-button.h"
+
+struct _BjbLoadMoreButtonPrivate
+{
+  GtkWidget *revealer;
+  GtkWidget *label;
+  GtkWidget *spinner;
+
+  BjbController *controller;
+};
+
+
+
+enum
+{
+  PROP_0,
+  PROP_BJB_CONTROLLER,
+  NUM_PROPERTIES
+};
+
+static GParamSpec *properties[NUM_PROPERTIES] = { NULL, };
+
+
+G_DEFINE_TYPE (BjbLoadMoreButton, bjb_load_more_button, GTK_TYPE_BUTTON);
+
+
+static void
+on_displayed_items_changed (BjbController     *controller,
+                            gboolean          some_is_shown,
+                            gboolean          remaining,
+                            BjbLoadMoreButton *self)
+{
+  BjbLoadMoreButtonPrivate *priv;
+
+  priv = self->priv;
+  gtk_spinner_stop (GTK_SPINNER (priv->spinner));
+  gtk_widget_hide (priv->spinner);
+  gtk_label_set_label (GTK_LABEL (priv->label), _("Load More"));
+
+  gd_revealer_set_reveal_child (GD_REVEALER (priv->revealer), remaining);
+}
+
+
+static void
+bjb_load_more_button_clicked (GtkButton *button)
+{
+  BjbLoadMoreButton *self;
+  BjbLoadMoreButtonPrivate *priv;
+
+  self = BJB_LOAD_MORE_BUTTON (button);
+  priv = self->priv;
+
+  gtk_label_set_label (GTK_LABEL (priv->label), _("Loading..."));
+  gtk_widget_show (priv->spinner);
+  gtk_spinner_start (GTK_SPINNER (priv->spinner));
+
+  bjb_controller_show_more (self->priv->controller);
+}
+
+
+static void
+bjb_load_more_button_constructed (GObject *object)
+{
+  BjbLoadMoreButton *self;
+  BjbLoadMoreButtonPrivate *priv;
+
+  self = BJB_LOAD_MORE_BUTTON (object);
+  priv = self->priv;
+
+  g_signal_connect (priv->controller, "display-items-changed",
+                    G_CALLBACK (on_displayed_items_changed), self);
+
+  G_OBJECT_CLASS (bjb_load_more_button_parent_class)->constructed (object);
+}
+
+
+static void
+bjb_load_more_button_finalize (GObject *object)
+{
+  BjbLoadMoreButton *self;
+  BjbLoadMoreButtonPrivate *priv;
+
+  self = BJB_LOAD_MORE_BUTTON (object);
+  priv = self->priv;
+
+  if (priv->controller && BJB_IS_CONTROLLER (priv->controller))
+    g_signal_handlers_disconnect_by_func
+      (priv->controller, on_displayed_items_changed, self);
+}
+
+
+static void
+bjb_load_more_button_dispose (GObject *object)
+{
+  G_OBJECT_CLASS (bjb_load_more_button_parent_class)->dispose (object);
+}
+
+
+static void
+bjb_load_more_button_init (BjbLoadMoreButton *self)
+{
+  BjbLoadMoreButtonPrivate *priv;
+  GtkStyleContext *context;
+  GtkWidget *child;
+
+  priv = self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, BJB_TYPE_LOAD_MORE_BUTTON, 
BjbLoadMoreButtonPrivate);
+
+  context = gtk_widget_get_style_context (GTK_WIDGET (self));
+  gtk_style_context_add_class (context, "documents-load-more");
+
+  child = gtk_grid_new ();
+  gtk_widget_set_halign (child, GTK_ALIGN_CENTER);
+  gtk_widget_set_hexpand (child, TRUE);
+  gtk_widget_set_visible (child, TRUE);
+  gtk_grid_set_column_spacing (GTK_GRID (child), 10);
+  gtk_container_add (GTK_CONTAINER (self), child);
+
+  priv->spinner = gtk_spinner_new ();
+  gtk_widget_set_halign (priv->spinner, GTK_ALIGN_CENTER);
+  gtk_widget_set_no_show_all (priv->spinner, TRUE);
+  gtk_widget_set_size_request (priv->spinner, 16, 16);
+  gtk_container_add (GTK_CONTAINER (child), priv->spinner);
+
+  priv->label = gtk_label_new (_("Load More"));
+  gtk_widget_set_visible (priv->label, TRUE);
+  gtk_container_add (GTK_CONTAINER (child), priv->label);
+
+  priv->revealer = gd_revealer_new ();
+  gtk_container_add (GTK_CONTAINER (priv->revealer), GTK_WIDGET (self));
+}
+
+
+static void
+bjb_load_more_button_get_property (GObject      *object,
+                                   guint        prop_id,
+                                   GValue       *value,
+                                   GParamSpec   *pspec)
+{
+  BjbLoadMoreButton *self = BJB_LOAD_MORE_BUTTON (object);
+
+  switch (prop_id)
+  {
+    case PROP_BJB_CONTROLLER:
+      g_value_set_object (value, self->priv->controller);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+bjb_load_more_button_set_property (GObject        *object,
+                                   guint          prop_id,
+                                   const GValue   *value,
+                                   GParamSpec     *pspec)
+{
+  BjbLoadMoreButton *self = BJB_LOAD_MORE_BUTTON (object);
+
+  switch (prop_id)
+  {
+    case PROP_BJB_CONTROLLER:
+      self->priv->controller = g_value_get_object (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+
+static void
+bjb_load_more_button_class_init (BjbLoadMoreButtonClass *class)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (class);
+  GtkButtonClass *button_class = GTK_BUTTON_CLASS (class);
+
+  object_class->constructed = bjb_load_more_button_constructed;
+  object_class->dispose = bjb_load_more_button_dispose;
+  object_class->finalize = bjb_load_more_button_finalize;
+  object_class->get_property = bjb_load_more_button_get_property;
+  object_class->set_property = bjb_load_more_button_set_property;
+  button_class->clicked = bjb_load_more_button_clicked;
+
+  g_type_class_add_private (class, sizeof (BjbLoadMoreButtonPrivate));
+
+  properties[PROP_BJB_CONTROLLER] = g_param_spec_object ("controller",
+                                                         "Controller",
+                                                         "BjbController",
+                                                         BJB_TYPE_CONTROLLER,
+                                                         G_PARAM_READWRITE |
+                                                         G_PARAM_CONSTRUCT |
+                                                         G_PARAM_STATIC_STRINGS);
+
+  g_object_class_install_properties (object_class, NUM_PROPERTIES, properties);
+}
+
+
+GtkWidget *
+bjb_load_more_button_new (BjbController *controller)
+{
+  BjbLoadMoreButton *button;
+  
+  button = g_object_new (BJB_TYPE_LOAD_MORE_BUTTON, "controller", controller, NULL);
+  return button->priv->revealer;
+}
diff --git a/src/bjb-load-more-button.h b/src/bjb-load-more-button.h
new file mode 100644
index 0000000..fd2dc54
--- /dev/null
+++ b/src/bjb-load-more-button.h
@@ -0,0 +1,78 @@
+/*
+ * Bjb - access, organize and share your bjb on GNOME
+ * Copyright © 2013 Red Hat, Inc.
+ *
+ * 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ */
+
+/* Chained based on Photos, Documents */
+
+#ifndef BJB_LOAD_MORE_BUTTON_H
+#define BJB_LOAD_MORE_BUTTON_H
+
+#include <gtk/gtk.h>
+
+#include "bjb-controller.h"
+
+G_BEGIN_DECLS
+
+#define BJB_TYPE_LOAD_MORE_BUTTON (bjb_load_more_button_get_type ())
+
+#define BJB_LOAD_MORE_BUTTON(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+   BJB_TYPE_LOAD_MORE_BUTTON, BjbLoadMoreButton))
+
+#define BJB_LOAD_MORE_BUTTON_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST ((klass), \
+   BJB_TYPE_LOAD_MORE_BUTTON, BjbLoadMoreButtonClass))
+
+#define BJB_IS_LOAD_MORE_BUTTON(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+   BJB_TYPE_LOAD_MORE_BUTTON))
+
+#define BJB_IS_LOAD_MORE_BUTTON_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+   BJB_TYPE_LOAD_MORE_BUTTON))
+
+#define BJB_LOAD_MORE_BUTTON_GET_CLASS(obj) \
+  (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+   BJB_TYPE_LOAD_MORE_BUTTON, BjbLoadMoreButtonClass))
+
+typedef struct _BjbLoadMoreButton        BjbLoadMoreButton;
+typedef struct _BjbLoadMoreButtonClass   BjbLoadMoreButtonClass;
+typedef struct _BjbLoadMoreButtonPrivate BjbLoadMoreButtonPrivate;
+
+struct _BjbLoadMoreButton
+{
+  GtkButton parent_instance;
+  BjbLoadMoreButtonPrivate *priv;
+};
+
+struct _BjbLoadMoreButtonClass
+{
+  GtkButtonClass parent_class;
+};
+
+GType                  bjb_load_more_button_get_type               (void) G_GNUC_CONST;
+
+
+              /* Does not return self, but its revealer */
+
+GtkWidget             *bjb_load_more_button_new                    (BjbController *controller);
+
+G_END_DECLS
+
+#endif /* BJB_LOAD_MORE_BUTTON_H */
diff --git a/src/bjb-main-toolbar.c b/src/bjb-main-toolbar.c
index 265b423..3dea1aa 100644
--- a/src/bjb-main-toolbar.c
+++ b/src/bjb-main-toolbar.c
@@ -238,20 +238,23 @@ add_search_button (BjbMainToolbar *self)
                             G_CALLBACK (on_search_button_clicked), priv);
 }
 
+
 static void
-update_selection_buttons (BjbMainToolbarPrivate *priv)
+update_selection_buttons (BjbController *controller,
+                          gboolean some_item_is_visible,
+                          gboolean remaining,
+                          BjbMainToolbarPrivate *priv)
 {
-  gboolean some_note_is_visible = bjb_controller_shows_item (priv->controller);
-
   if (priv->grid)
-    gtk_widget_set_sensitive (priv->grid, some_note_is_visible);
+    gtk_widget_set_sensitive (priv->grid, some_item_is_visible);
 
   if (priv->list)
-    gtk_widget_set_sensitive (priv->list, some_note_is_visible);
+    gtk_widget_set_sensitive (priv->list, some_item_is_visible);
 
-  gtk_widget_set_sensitive (priv->select, some_note_is_visible);
+  gtk_widget_set_sensitive (priv->select, some_item_is_visible);
 }
 
+
 static void
 populate_bar_for_selection (BjbMainToolbar *self)
 {
@@ -304,10 +307,10 @@ update_label_for_standard (BjbMainToolbar *self)
   gd_main_toolbar_set_labels (GD_MAIN_TOOLBAR (self), label, NULL);
   g_free (label);
 
-  self->priv->display_notes = g_signal_connect_swapped (self->priv->controller,
-                                                        "display-notes-changed",
-                                                        G_CALLBACK (update_selection_buttons),
-                                                        self->priv);
+  self->priv->display_notes = g_signal_connect (self->priv->controller,
+                                                "display-items-changed",
+                                                G_CALLBACK (update_selection_buttons),
+                                                self->priv);
 }
 
 static void
@@ -741,9 +744,13 @@ populate_bar_for_note_view (BjbMainToolbar *self)
 }
 
 static void
-populate_bar_switch(BjbMainToolbar *self)
+populate_bar_switch (BjbMainToolbar *self)
 {
-  switch (self->priv->type)
+  BjbMainToolbarPrivate *priv;
+
+  priv = self->priv;
+
+  switch (priv->type)
   {
     case BJB_TOOLBAR_SELECT:
       populate_bar_for_selection (self);
@@ -752,13 +759,19 @@ populate_bar_switch(BjbMainToolbar *self)
     case BJB_TOOLBAR_STD_ICON:
       add_search_button (self);
       populate_bar_for_icon_view(self);
-      update_selection_buttons (self->priv);
+      update_selection_buttons (priv->controller,
+                                bjb_controller_shows_item (priv->controller),
+                                TRUE,
+                                self->priv);
       break;
 
     case BJB_TOOLBAR_STD_LIST:
       add_search_button (self);
       populate_bar_for_list_view(self);
-      update_selection_buttons (self->priv);
+      update_selection_buttons (priv->controller,
+                                bjb_controller_shows_item (priv->controller),
+                                TRUE,
+                                self->priv);
       break;
 
     case BJB_TOOLBAR_NOTE_VIEW:
diff --git a/src/bjb-main-view.c b/src/bjb-main-view.c
index c86e02c..81c204b 100644
--- a/src/bjb-main-view.c
+++ b/src/bjb-main-view.c
@@ -25,6 +25,7 @@
 #include "bjb-app-menu.h"
 #include "bjb-bijiben.h"
 #include "bjb-controller.h"
+#include "bjb-load-more-button.h"
 #include "bjb-main-toolbar.h"
 #include "bjb-main-view.h"
 #include "bjb-note-tag-dialog.h"
@@ -66,8 +67,9 @@ struct _BjbMainViewPriv {
   BjbSelectionToolbar  *select_bar;
 
   /* View Notes , model */
-  GdMainView       *view ; 
-  BjbController    *controller ;
+  GdMainView       *view ;
+  BjbController    *controller;
+  GtkWidget        *load_more;
 
   /* Signals */
   gulong key;
@@ -466,6 +468,7 @@ on_drag_data_received (GtkWidget        *widget,
   gtk_drag_finish (context, FALSE, FALSE, time);
 }
 
+
 void
 bjb_main_view_connect_signals (BjbMainView *self)
 {
@@ -520,6 +523,10 @@ bjb_main_view_constructed(GObject *o)
   gtk_container_add (GTK_CONTAINER (overlay), GTK_WIDGET (priv->view));
   gtk_box_pack_start (vbox, GTK_WIDGET (overlay), TRUE, TRUE, 0);
 
+  /* Load more */
+  priv->load_more = bjb_load_more_button_new (priv->controller);
+  gtk_box_pack_start (vbox, priv->load_more, FALSE, FALSE, 0);
+
   /* Selection Panel */
   priv->select_bar = bjb_selection_toolbar_new (priv->view, self);
   gtk_overlay_add_overlay (overlay, GTK_WIDGET (priv->select_bar));
diff --git a/src/libbiji/biji-marshalers.list b/src/libbiji/biji-marshalers.list
index 8d6795e..118a52f 100644
--- a/src/libbiji/biji-marshalers.list
+++ b/src/libbiji/biji-marshalers.list
@@ -1 +1,2 @@
 VOID:ENUM,POINTER
+VOID:BOOLEAN,BOOLEAN


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