[bijiben] mainToolbar: show a search button



commit 95d6dfae9ae3e601edf43019437bbd116974a13b
Author: Pierre-Yves Luyten <py luyten fr>
Date:   Sat Apr 20 11:31:59 2013 +0200

    mainToolbar: show a search button
    
    See #698245 : make search feature visible.

 src/bjb-main-toolbar.c   | 60 ++++++++++++++++++++++++++++++++++++++++++++----
 src/bjb-main-toolbar.h   |  2 ++
 src/bjb-main-view.c      | 16 +++++++++++++
 src/bjb-main-view.h      |  5 ++++
 src/bjb-search-toolbar.c | 40 +++++++++++++++++++++++++++++++-
 src/bjb-search-toolbar.h |  4 ++++
 6 files changed, 122 insertions(+), 5 deletions(-)
---
diff --git a/src/bjb-main-toolbar.c b/src/bjb-main-toolbar.c
index 18adbcf..39ce019 100644
--- a/src/bjb-main-toolbar.c
+++ b/src/bjb-main-toolbar.c
@@ -44,6 +44,7 @@ struct _BjbMainToolbarPrivate
   GtkWidget      *list;
   GtkWidget      *grid;
   GtkWidget      *select;
+  GtkWidget      *search;
 
   /* Signal Handlers */
   gulong         finish_sig;
@@ -162,6 +163,37 @@ on_button_press (GtkWidget* widget,
 }
 
 static void
+on_search_button_clicked (BjbMainToolbarPrivate *priv)
+{
+  BjbSearchToolbar *bar;
+
+  bar = bjb_main_view_get_search_toolbar (priv->parent);
+
+  if (bar == NULL)
+    return;
+
+  if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->search)))
+    bjb_search_toolbar_fade_in (bar);
+
+  else
+    bjb_search_toolbar_fade_out (bar);
+}
+
+static void
+add_search_button (BjbMainToolbar *self)
+{
+  BjbMainToolbarPrivate *priv = self->priv;
+
+  priv->search = gd_main_toolbar_add_toggle (GD_MAIN_TOOLBAR (self),
+                                             "edit-find-symbolic",
+                                             NULL,
+                                             FALSE);
+
+  g_signal_connect_swapped (priv->search, "clicked",
+                            G_CALLBACK (on_search_button_clicked), priv);
+}
+
+static void
 update_selection_buttons (BjbMainToolbarPrivate *priv)
 {
   gboolean some_note_is_visible = bjb_controller_shows_notes (priv->controller);
@@ -203,6 +235,10 @@ populate_bar_for_selection (BjbMainToolbar *self)
   BjbMainToolbarPrivate *priv = self->priv;
   GtkStyleContext *context;
 
+  /* Search button */
+  add_search_button (self);
+
+  /* Select */
   priv->select = gd_main_toolbar_add_button (GD_MAIN_TOOLBAR (self),
                                              NULL,"Done", FALSE);
   context = gtk_widget_get_style_context (priv->select);
@@ -226,7 +262,7 @@ update_label_for_standard (BjbMainToolbar *self)
   BjbMainToolbarPrivate *priv = self->priv;
   gchar *needle = bjb_controller_get_needle (priv->controller);
   gchar *label ;
-  
+
   if (needle && g_strcmp0 (needle, "") !=0)
     label = g_strdup_printf (_("Results for %s"), needle);
 
@@ -327,11 +363,13 @@ populate_bar_switch(BjbMainToolbar *self)
       break;
 
     case BJB_TOOLBAR_STD_ICON:
+      add_search_button (self);
       populate_bar_for_icon_view(self);
       update_selection_buttons (self->priv);
       break;
 
     case BJB_TOOLBAR_STD_LIST:
+      add_search_button (self);
       populate_bar_for_list_view(self);
       update_selection_buttons (self->priv);
       break;
@@ -391,9 +429,13 @@ static void
 bjb_main_toolbar_init (BjbMainToolbar *self)
 {
   self->priv = BJB_MAIN_TOOLBAR_GET_PRIVATE(self);
-  self->priv->type = BJB_TOOLBAR_0 ;
-  self->priv->grid = NULL;
-  self->priv->list = NULL;
+  BjbMainToolbarPrivate *priv = self->priv;
+
+  priv->type = BJB_TOOLBAR_0 ;
+  priv->grid = NULL;
+  priv->list = NULL;
+  priv->search = NULL;
+
   g_signal_connect (self, "button-press-event", G_CALLBACK (on_button_press), NULL);
 }
 
@@ -521,3 +563,13 @@ bjb_main_toolbar_set_view (BjbMainToolbar *self, GdMainView *view)
 {
   self->priv->view = view ;
 }
+
+void
+bjb_main_toolbar_set_search_toggle_state (BjbMainToolbar *self,
+                                          gboolean active)
+{
+  g_return_if_fail (BJB_IS_MAIN_TOOLBAR (self));
+
+  if (self->priv->search)
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (self->priv->search), active);
+}
diff --git a/src/bjb-main-toolbar.h b/src/bjb-main-toolbar.h
index 6e892c9..f77a512 100644
--- a/src/bjb-main-toolbar.h
+++ b/src/bjb-main-toolbar.h
@@ -59,6 +59,8 @@ void on_selection_mode_changed (BjbMainToolbar *self);
 
 void bjb_main_toolbar_set_view (BjbMainToolbar *self, GdMainView *view);
 
+void bjb_main_toolbar_set_search_toggle_state (BjbMainToolbar *self, gboolean active);
+
 G_END_DECLS
 
 #endif /* _BJB_MAIN_TOOLBAR_H_ */
diff --git a/src/bjb-main-view.c b/src/bjb-main-view.c
index fa16ca1..e7d3b50 100644
--- a/src/bjb-main-view.c
+++ b/src/bjb-main-view.c
@@ -570,3 +570,19 @@ bjb_main_view_update_model (BjbMainView *self)
   bjb_controller_set_main_view (priv->controller,priv->view);
   gd_main_view_set_model(priv->view,bjb_controller_get_model(priv->controller));
 }
+
+BjbSearchToolbar *
+bjb_main_view_get_search_toolbar (BjbMainView *view)
+{
+  g_return_val_if_fail (BJB_IS_MAIN_VIEW (view), NULL);
+
+  return view->priv->search_bar;
+}
+
+gpointer
+bjb_main_view_get_main_toolbar (BjbMainView *view)
+{
+  g_return_val_if_fail (BJB_IS_MAIN_VIEW (view), NULL);
+
+  return (gpointer) view->priv->main_toolbar;
+}
diff --git a/src/bjb-main-view.h b/src/bjb-main-view.h
index 6a99af3..bc8fcca 100644
--- a/src/bjb-main-view.h
+++ b/src/bjb-main-view.h
@@ -23,6 +23,7 @@
 #include <libbiji/libbiji.h>
 
 #include "bjb-controller.h"
+#include "bjb-search-toolbar.h"
 
 G_BEGIN_DECLS
 
@@ -81,6 +82,10 @@ void switch_to_note_view(BjbMainView *view,BijiNoteObj *note) ;
 
 void bjb_main_view_update_model (BjbMainView *view);
 
+BjbSearchToolbar *bjb_main_view_get_search_toolbar (BjbMainView *view);
+
+gpointer bjb_main_view_get_main_toolbar (BjbMainView *view);
+
 G_END_DECLS
 
 #endif /* _MAIN_VIEW_H_ */
diff --git a/src/bjb-search-toolbar.c b/src/bjb-search-toolbar.c
index d3b6a9c..2d8355e 100644
--- a/src/bjb-search-toolbar.c
+++ b/src/bjb-search-toolbar.c
@@ -30,7 +30,10 @@
 #include <libgd/gd-entry-focus-hack.h>
 
 #include "bjb-controller.h"
+#include "bjb-main-toolbar.h"
+#include "bjb-main-view.h"
 #include "bjb-search-toolbar.h"
+#include "bjb-window-base.h"
 
 enum
 {
@@ -66,26 +69,61 @@ struct _BjbSearchToolbarPrivate
 G_DEFINE_TYPE (BjbSearchToolbar, bjb_search_toolbar, GTK_TYPE_TOOLBAR);
 
 static void
+bjb_search_toolbar_toggle_search_button (BjbSearchToolbar *self,
+                                         gboolean state)
+{
+  BjbMainView *view;
+  BjbMainToolbar *bar;
+
+  view = bjb_window_base_get_main_view (BJB_WINDOW_BASE (self->priv->window));
+  if (view)
+  {
+    bar = bjb_main_view_get_main_toolbar (view);
+    if (bar)
+      bjb_main_toolbar_set_search_toggle_state (bar, state);
+  }
+}
+
+void
 bjb_search_toolbar_fade_in (BjbSearchToolbar *self)
 {
   if (!gd_revealer_get_child_revealed (self->priv->revealer))
   {
     GdkDevice *device;
+
+
+    /* show the search */
     gd_revealer_set_reveal_child (self->priv->revealer, TRUE);
 
+    /* focus */
     device = gtk_get_current_event_device ();
     if (device)
       gd_entry_focus_hack (self->priv->search_entry, device);
+
+    /* manually toggle search button */
+    bjb_search_toolbar_toggle_search_button (self, TRUE);
   }
 }
 
-static void
+void
 bjb_search_toolbar_fade_out (BjbSearchToolbar *self)
 {
   if (gd_revealer_get_child_revealed (self->priv->revealer))
+  {
+    /* clear the search before hiding */
+    gtk_entry_set_text (GTK_ENTRY(self->priv->search_entry),"");
+    bjb_controller_set_needle (self->priv->controller,"");
+
+    /* hide */
     gd_revealer_set_reveal_child (self->priv->revealer, FALSE);
+
+    /* manually toggle search button */
+    bjb_search_toolbar_toggle_search_button (self, FALSE);
+  }
 }
 
+
+
 /* If some text has been input, handle position */
 static gboolean
 on_key_released (GtkWidget *widget,GdkEvent  *event,gpointer user_data)
diff --git a/src/bjb-search-toolbar.h b/src/bjb-search-toolbar.h
index c1100fb..018f955 100644
--- a/src/bjb-search-toolbar.h
+++ b/src/bjb-search-toolbar.h
@@ -53,6 +53,10 @@ GType bjb_search_toolbar_get_type (void) G_GNUC_CONST;
 
 BjbSearchToolbar * bjb_search_toolbar_new (GtkWidget *window, BjbController *controller);
 
+void bjb_search_toolbar_fade_in (BjbSearchToolbar *self);
+
+void bjb_search_toolbar_fade_out (BjbSearchToolbar *self);
+
 GdRevealer * bjb_search_toolbar_get_revealer (BjbSearchToolbar *self);
 
 void bjb_search_toolbar_disconnect (BjbSearchToolbar *self);


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