[devhelp/gnome-2-32] Re-populate search combo if book manager updated



commit acd07e66d67306514dcde62c330b48e868be1e34
Author: Aleksander Morgado <aleksander lanedo com>
Date:   Thu May 20 13:17:44 2010 +0200

    Re-populate search combo if book manager updated

 src/dh-book-manager.c |    2 +-
 src/dh-book.c         |   19 +--------------
 src/dh-search.c       |   60 ++++++++++++++++++++++++++++++++++--------------
 3 files changed, 44 insertions(+), 37 deletions(-)
---
diff --git a/src/dh-book-manager.c b/src/dh-book-manager.c
index a9415e4..23374c9 100644
--- a/src/dh-book-manager.c
+++ b/src/dh-book-manager.c
@@ -85,7 +85,7 @@ dh_book_manager_class_init (DhBookManagerClass *klass)
         object_class->finalize = book_manager_finalize;
 
         signals[DISABLED_BOOK_LIST_UPDATED] =
-                g_signal_new ("open-link",
+                g_signal_new ("disabled-book-list-updated",
                               G_TYPE_FROM_CLASS (klass),
                               G_SIGNAL_RUN_LAST,
                               G_STRUCT_OFFSET (DhBookManagerClass, disabled_book_list_updated),
diff --git a/src/dh-book.c b/src/dh-book.c
index 28c9735..baa45a2 100644
--- a/src/dh-book.c
+++ b/src/dh-book.c
@@ -114,22 +114,6 @@ unref_node_link (GNode *node,
         dh_link_unref (node->data);
 }
 
-static gchar *
-book_get_name_from_path (const gchar *path)
-{
-        gchar *name;
-        gchar *aux;
-
-        g_return_val_if_fail (path, NULL);
-
-        name = g_path_get_basename (path);
-        aux = strrchr (name, '.');
-        if (aux) {
-                *aux = '\0';
-        }
-        return name;
-}
-
 DhBook *
 dh_book_new (const gchar  *book_path)
 {
@@ -164,8 +148,7 @@ dh_book_new (const gchar  *book_path)
         priv->title = g_strdup (dh_link_get_name ((DhLink *)priv->tree->data));
 
         /* Setup name */
-        priv->name = book_get_name_from_path (book_path);
-
+        priv->name = g_strdup (dh_link_get_book_id ((DhLink *)priv->tree->data));
 
         return book;
 }
diff --git a/src/dh-search.c b/src/dh-search.c
index 3dc60a0..4afd8c4 100644
--- a/src/dh-search.c
+++ b/src/dh-search.c
@@ -489,19 +489,19 @@ search_combo_row_separator_func (GtkTreeModel *model,
         return result;
 }
 
-static GtkWidget *
-search_combo_create (DhSearch *search)
+static void
+search_combo_populate (DhSearch *search)
 {
-        GtkTreeIter      iter;
-        GtkListStore    *store;
-        GtkWidget       *combo;
-        GtkCellRenderer *cell;
-        GList           *l;
-        DhSearchPriv    *priv;
+        DhSearchPriv *priv;
+        GtkListStore *store;
+        GtkTreeIter   iter;
+        GList        *l;
 
         priv = GET_PRIVATE (search);
 
-        store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
+        store = GTK_LIST_STORE (gtk_combo_box_get_model (GTK_COMBO_BOX (priv->book_combo)));
+
+        gtk_list_store_clear (store);
 
         gtk_list_store_append (store, &iter);
         gtk_list_store_set (store, &iter,
@@ -536,24 +536,36 @@ search_combo_create (DhSearch *search)
                 }
         }
 
-        combo = gtk_combo_box_new_with_model (GTK_TREE_MODEL (store));
+        gtk_combo_box_set_active (GTK_COMBO_BOX (priv->book_combo), 0);
+}
+
+
+static void
+search_combo_create (DhSearch *search)
+{
+        GtkListStore    *store;
+        GtkCellRenderer *cell;
+        DhSearchPriv    *priv;
+
+        priv = GET_PRIVATE (search);
+
+        store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
+        priv->book_combo = gtk_combo_box_new_with_model (GTK_TREE_MODEL (store));
         g_object_unref (store);
 
-        gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combo),
+        search_combo_populate (search);
+
+        gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (priv->book_combo),
                                               search_combo_row_separator_func,
                                               NULL, NULL);
 
         cell = gtk_cell_renderer_text_new ();
-        gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo),
+        gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (priv->book_combo),
                                     cell,
                                     TRUE);
-        gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (combo),
+        gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (priv->book_combo),
                                        cell,
                                        "text", 0);
-
-        gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0);
-
-        return combo;
 }
 
 static void
@@ -579,6 +591,14 @@ completion_add_items (DhSearch *search)
         }
 }
 
+static void
+book_manager_disabled_book_list_changed_cb (DhBookManager *book_manager,
+                                            gpointer user_data)
+{
+        DhSearch *search = user_data;
+        search_combo_populate (search);
+}
+
 GtkWidget *
 dh_search_new (DhBookManager *book_manager)
 {
@@ -595,10 +615,14 @@ dh_search_new (DhBookManager *book_manager)
         priv = GET_PRIVATE (search);
 
         priv->book_manager = g_object_ref (book_manager);
+        g_signal_connect (priv->book_manager,
+                          "disabled-book-list-updated",
+                          G_CALLBACK (book_manager_disabled_book_list_changed_cb),
+                          search);
 
         gtk_container_set_border_width (GTK_CONTAINER (search), 2);
 
-        priv->book_combo = search_combo_create (search);
+        search_combo_create (search);
         g_signal_connect (priv->book_combo, "changed",
                           G_CALLBACK (search_combo_changed_cb),
                           search);



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