[gtk+] font chooser: Simplify some code



commit 1b05474979b35624d6b3f2619673b02863a562fb
Author: Matthias Clasen <mclasen redhat com>
Date:   Tue Dec 19 11:37:05 2017 -0500

    font chooser: Simplify some code
    
    Instead of separate handlers, just keep a single
    handler for both row-inserted and row-deleted.
    Slightly less work that way.

 gtk/gtkfontchooserwidget.c     |   35 ++++++++++-------------------------
 gtk/ui/gtkfontchooserwidget.ui |    4 ++--
 2 files changed, 12 insertions(+), 27 deletions(-)
---
diff --git a/gtk/gtkfontchooserwidget.c b/gtk/gtkfontchooserwidget.c
index 0803b43..b8ee15f 100644
--- a/gtk/gtkfontchooserwidget.c
+++ b/gtk/gtkfontchooserwidget.c
@@ -547,19 +547,7 @@ gtk_font_chooser_widget_update_preview_attributes (GtkFontChooserWidget *fontcho
 }
 
 static void
-row_inserted_cb (GtkTreeModel *model,
-                 GtkTreePath  *path,
-                 GtkTreeIter  *iter,
-                 gpointer      user_data)
-{
-  GtkFontChooserWidget *fontchooser = user_data;
-  GtkFontChooserWidgetPrivate *priv = fontchooser->priv;
-
-  gtk_stack_set_visible_child_name (GTK_STACK (priv->list_stack), "list");
-}
-
-static void
-row_deleted_cb  (GtkTreeModel *model,
+rows_changed_cb (GtkTreeModel *model,
                  GtkTreePath  *path,
                  gpointer      user_data)
 {
@@ -568,6 +556,8 @@ row_deleted_cb  (GtkTreeModel *model,
 
   if (gtk_tree_model_iter_n_children (model, NULL) == 0)
     gtk_stack_set_visible_child_name (GTK_STACK (priv->list_stack), "empty");
+  else
+    gtk_stack_set_visible_child_name (GTK_STACK (priv->list_stack), "list");
 }
 
 static void
@@ -670,9 +660,7 @@ gtk_font_chooser_widget_class_init (GtkFontChooserWidgetClass *klass)
   gtk_widget_class_bind_template_callback (widget_class, row_activated_cb);
   gtk_widget_class_bind_template_callback (widget_class, gtk_font_chooser_widget_set_cell_size);
   gtk_widget_class_bind_template_callback (widget_class, resize_by_scroll_cb);
-  gtk_widget_class_bind_template_callback (widget_class, row_deleted_cb);
-  gtk_widget_class_bind_template_callback (widget_class, row_inserted_cb);
-  gtk_widget_class_bind_template_callback (widget_class, row_deleted_cb);
+  gtk_widget_class_bind_template_callback (widget_class, rows_changed_cb);
   gtk_widget_class_bind_template_callback (widget_class, size_change_cb);
   gtk_widget_class_bind_template_callback (widget_class, output_cb);
 
@@ -788,10 +776,8 @@ gtk_font_chooser_widget_load_fonts (GtkFontChooserWidget *fontchooser,
   qsort (families, n_families, sizeof (PangoFontFamily *), cmp_families);
 
   g_signal_handlers_block_by_func (priv->family_face_list, cursor_changed_cb, fontchooser);
-  g_signal_handlers_block_by_func (priv->filter_model, row_deleted_cb, fontchooser);
+  g_signal_handlers_block_by_func (priv->filter_model, rows_changed_cb, fontchooser);
   gtk_list_store_clear (list_store);
-  g_signal_handlers_unblock_by_func (priv->filter_model, row_deleted_cb, fontchooser);
-  g_signal_handlers_unblock_by_func (priv->family_face_list, cursor_changed_cb, fontchooser);
 
   /* Iterate over families and faces */
   for (i = 0; i < n_families; i++)
@@ -829,17 +815,16 @@ gtk_font_chooser_widget_load_fonts (GtkFontChooserWidget *fontchooser,
 
   g_free (families);
 
+  rows_changed_cb (priv->filter_model, NULL, fontchooser);
+
+  g_signal_handlers_unblock_by_func (priv->filter_model, rows_changed_cb, fontchooser);
+  g_signal_handlers_unblock_by_func (priv->family_face_list, cursor_changed_cb, fontchooser);
+
   /* now make sure the font list looks right */
   if (!gtk_font_chooser_widget_find_font (fontchooser, priv->font_desc, &priv->font_iter))
     memset (&priv->font_iter, 0, sizeof (GtkTreeIter));
 
   gtk_font_chooser_widget_ensure_selection (fontchooser);
-
-  /* We block row_deleted_cb when reloading, now manually switch to the
-   * "empty" pane if the filter model is empty.
-   */
-  if (gtk_tree_model_iter_n_children (priv->filter_model, NULL) == 0)
-    gtk_stack_set_visible_child_name (GTK_STACK (priv->list_stack), "empty");
 }
 
 static gboolean
diff --git a/gtk/ui/gtkfontchooserwidget.ui b/gtk/ui/gtkfontchooserwidget.ui
index 7bf0fc9..8a3bf50 100644
--- a/gtk/ui/gtkfontchooserwidget.ui
+++ b/gtk/ui/gtkfontchooserwidget.ui
@@ -15,8 +15,8 @@
   </object>
   <object class="GtkTreeModelFilter" id="filter_model">
     <property name="child-model">model</property>
-    <signal name="row-deleted" handler="row_deleted_cb" swapped="no"/>
-    <signal name="row-inserted" handler="row_inserted_cb" swapped="no"/>
+    <signal name="row-deleted" handler="rows_changed_cb" swapped="no"/>
+    <signal name="row-inserted" handler="rows_changed_cb" swapped="no"/>
   </object>
   <object class="GtkAdjustment" id="slider_adjustment">
     <property name="upper">100</property>


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