[gtk+] GtkListBox: Refactor ::activatable implementation



commit 83e9e0bd8ffdfca31e6dd5c37dbe6474ce7854e6
Author: Matthias Clasen <mclasen redhat com>
Date:   Tue Jul 15 22:42:29 2014 -0400

    GtkListBox: Refactor ::activatable implementation
    
    Store the value in the row struct, and split the style updating
    out into a separate function.

 gtk/gtklistbox.c |   43 ++++++++++++++++++++++++-------------------
 1 files changed, 24 insertions(+), 19 deletions(-)
---
diff --git a/gtk/gtklistbox.c b/gtk/gtklistbox.c
index ba09ad3..6c3d2a3 100644
--- a/gtk/gtklistbox.c
+++ b/gtk/gtklistbox.c
@@ -101,8 +101,9 @@ typedef struct
   GtkWidget *header;
   gint y;
   gint height;
-  gboolean visible;
-  gboolean selected;
+  guint visible     :1;
+  guint selected    :1;
+  guint activatable :1;
 } GtkListBoxRowPrivate;
 
 enum {
@@ -2828,6 +2829,8 @@ gtk_list_box_row_init (GtkListBoxRow *row)
   gtk_widget_set_can_focus (GTK_WIDGET (row), TRUE);
   gtk_widget_set_redraw_on_allocate (GTK_WIDGET (row), TRUE);
 
+  ROW_PRIV (row)->activatable = TRUE;
+
   context = gtk_widget_get_style_context (GTK_WIDGET (row));
   gtk_style_context_add_class (context, GTK_STYLE_CLASS_LIST_ROW);
   gtk_style_context_add_class (context, GTK_STYLE_CLASS_BUTTON);
@@ -3222,6 +3225,18 @@ gtk_list_box_row_is_selected (GtkListBoxRow *row)
   return ROW_PRIV (row)->selected;
 }
 
+static void
+update_row_style (GtkListBoxRow *row)
+{
+  GtkStyleContext *context;
+
+  context = gtk_widget_get_style_context (GTK_WIDGET (row));
+  if (ROW_PRIV (row)->activatable)
+    gtk_style_context_add_class (context, GTK_STYLE_CLASS_BUTTON);
+  else
+    gtk_style_context_remove_class (context, GTK_STYLE_CLASS_BUTTON);
+}
+
 /**
  * gtk_list_box_row_set_activatable:
  * @row: a #GTkListBoxrow
@@ -3235,23 +3250,17 @@ void
 gtk_list_box_row_set_activatable (GtkListBoxRow *row,
                                   gboolean       activatable)
 {
-  GtkStyleContext *context;
-
   g_return_if_fail (GTK_IS_LIST_BOX_ROW (row));
 
   activatable = activatable != FALSE;
 
-  if (activatable == gtk_list_box_row_get_activatable (row))
-    return;
-
-  context = gtk_widget_get_style_context (GTK_WIDGET (row));
-
-  if (activatable)
-    gtk_style_context_add_class (context, GTK_STYLE_CLASS_BUTTON);
-  else
-    gtk_style_context_remove_class (context, GTK_STYLE_CLASS_BUTTON);
+  if (ROW_PRIV (row)->activatable != activatable)
+    {
+      ROW_PRIV (row)->activatable = activatable;
 
-  g_object_notify (G_OBJECT (row), "activatable");
+      update_row_style (row);
+      g_object_notify (G_OBJECT (row), "activatable");
+    }
 }
 
 /**
@@ -3268,13 +3277,9 @@ gtk_list_box_row_set_activatable (GtkListBoxRow *row,
 gboolean
 gtk_list_box_row_get_activatable (GtkListBoxRow *row)
 {
-  GtkStyleContext *context;
-
   g_return_val_if_fail (GTK_IS_LIST_BOX_ROW (row), TRUE);
 
-  context = gtk_widget_get_style_context (GTK_WIDGET (row));
-
-  return gtk_style_context_has_class (context, GTK_STYLE_CLASS_BUTTON);
+  return ROW_PRIV (row)->activatable;
 }
 
 static void


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