[gtk+] Set vertical/horizontal class on all widgets overriding GtkOrientable::orientation



commit efae64be666e7d7489f1a7b8b19d6a9d760a6cda
Author: Carlos Garnacho <carlosg gnome org>
Date:   Wed Jan 12 22:28:43 2011 +0100

    Set vertical/horizontal class on all widgets overriding GtkOrientable::orientation
    
    This is so g_object_set() on that property leaves widgets' style in
    a meaningful state. Fully fixes bug 639157.

 gtk/gtkcellareabox.c |   21 +++++++++++++++++++++
 gtk/gtkcellview.c    |   21 +++++++++++++++++++++
 gtk/gtkgrid.c        |   13 +++++++++++++
 gtk/gtkprogressbar.c |   13 +++++++++++++
 gtk/gtkseparator.c   |   20 ++++++++++++++++++++
 gtk/gtktoolpalette.c |   20 ++++++++++++++++++++
 6 files changed, 108 insertions(+), 0 deletions(-)
---
diff --git a/gtk/gtkcellareabox.c b/gtk/gtkcellareabox.c
index cc9e8f2..ea3a3c8 100644
--- a/gtk/gtkcellareabox.c
+++ b/gtk/gtkcellareabox.c
@@ -1050,6 +1050,25 @@ gtk_cell_area_box_dispose (GObject *object)
 }
 
 static void
+reset_orientation_style (GtkCellAreaBox *box)
+{
+  GtkStyleContext *context;
+
+  context = gtk_widget_get_style_context (GTK_WIDGET (box));
+
+  if (box->priv->orientation == GTK_ORIENTATION_VERTICAL)
+    {
+      gtk_style_context_add_class (context, GTK_STYLE_CLASS_VERTICAL);
+      gtk_style_context_remove_class (context, GTK_STYLE_CLASS_HORIZONTAL);
+    }
+  else
+    {
+      gtk_style_context_add_class (context, GTK_STYLE_CLASS_HORIZONTAL);
+      gtk_style_context_remove_class (context, GTK_STYLE_CLASS_VERTICAL);
+    }
+}
+
+static void
 gtk_cell_area_box_set_property (GObject       *object,
                                 guint          prop_id,
                                 const GValue  *value,
@@ -1064,6 +1083,8 @@ gtk_cell_area_box_set_property (GObject       *object,
 
       /* Notify that size needs to be requested again */
       reset_contexts (box);
+      reset_orientation_style (box);
+
       break;
     case PROP_SPACING:
       gtk_cell_area_box_set_spacing (box, g_value_get_int (value));
diff --git a/gtk/gtkcellview.c b/gtk/gtkcellview.c
index 168bf04..87c56ed 100644
--- a/gtk/gtkcellview.c
+++ b/gtk/gtkcellview.c
@@ -415,6 +415,25 @@ gtk_cell_view_get_property (GObject    *object,
 }
 
 static void
+reset_orientation_style (GtkCellView *view)
+{
+  GtkStyleContext *context;
+
+  context = gtk_widget_get_style_context (GTK_WIDGET (view));
+
+  if (view->priv->orientation == GTK_ORIENTATION_VERTICAL)
+    {
+      gtk_style_context_add_class (context, GTK_STYLE_CLASS_VERTICAL);
+      gtk_style_context_remove_class (context, GTK_STYLE_CLASS_HORIZONTAL);
+    }
+  else
+    {
+      gtk_style_context_add_class (context, GTK_STYLE_CLASS_HORIZONTAL);
+      gtk_style_context_remove_class (context, GTK_STYLE_CLASS_VERTICAL);
+    }
+}
+
+static void
 gtk_cell_view_set_property (GObject      *object,
                             guint         param_id,
                             const GValue *value,
@@ -430,6 +449,8 @@ gtk_cell_view_set_property (GObject      *object,
       view->priv->orientation = g_value_get_enum (value);
       if (view->priv->context)
 	gtk_cell_area_context_reset (view->priv->context);
+
+      reset_orientation_style (view);
       break;
     case PROP_BACKGROUND:
       {
diff --git a/gtk/gtkgrid.c b/gtk/gtkgrid.c
index 3557c16..525f970 100644
--- a/gtk/gtkgrid.c
+++ b/gtk/gtkgrid.c
@@ -187,10 +187,23 @@ gtk_grid_set_orientation (GtkGrid        *grid,
                           GtkOrientation  orientation)
 {
   GtkGridPrivate *priv = grid->priv;
+  GtkStyleContext *context;
 
   if (priv->orientation != orientation)
     {
       priv->orientation = orientation;
+      context = gtk_widget_get_style_context (GTK_WIDGET (grid));
+
+      if (grid->priv->orientation == GTK_ORIENTATION_VERTICAL)
+        {
+          gtk_style_context_add_class (context, GTK_STYLE_CLASS_VERTICAL);
+          gtk_style_context_remove_class (context, GTK_STYLE_CLASS_HORIZONTAL);
+        }
+      else
+        {
+          gtk_style_context_add_class (context, GTK_STYLE_CLASS_HORIZONTAL);
+          gtk_style_context_remove_class (context, GTK_STYLE_CLASS_VERTICAL);
+        }
 
       g_object_notify (G_OBJECT (grid), "orientation");
     }
diff --git a/gtk/gtkprogressbar.c b/gtk/gtkprogressbar.c
index 3cc366c..9c8fd92 100644
--- a/gtk/gtkprogressbar.c
+++ b/gtk/gtkprogressbar.c
@@ -1204,10 +1204,23 @@ gtk_progress_bar_set_orientation (GtkProgressBar *pbar,
                                   GtkOrientation  orientation)
 {
   GtkProgressBarPrivate *priv = pbar->priv;
+  GtkStyleContext *context;
 
   if (priv->orientation != orientation)
     {
       priv->orientation = orientation;
+      context = gtk_widget_get_style_context (GTK_WIDGET (pbar));
+
+      if (pbar->priv->orientation == GTK_ORIENTATION_VERTICAL)
+        {
+          gtk_style_context_add_class (context, GTK_STYLE_CLASS_VERTICAL);
+          gtk_style_context_remove_class (context, GTK_STYLE_CLASS_HORIZONTAL);
+        }
+      else
+        {
+          gtk_style_context_add_class (context, GTK_STYLE_CLASS_HORIZONTAL);
+          gtk_style_context_remove_class (context, GTK_STYLE_CLASS_VERTICAL);
+        }
 
       if (gtk_widget_is_drawable (GTK_WIDGET (pbar)))
         gtk_widget_queue_resize (GTK_WIDGET (pbar));
diff --git a/gtk/gtkseparator.c b/gtk/gtkseparator.c
index 1de28a1..b30292f 100644
--- a/gtk/gtkseparator.c
+++ b/gtk/gtkseparator.c
@@ -113,6 +113,25 @@ gtk_separator_init (GtkSeparator *separator)
 }
 
 static void
+reset_orientation_style (GtkSeparator *separator)
+{
+  GtkStyleContext *context;
+
+  context = gtk_widget_get_style_context (GTK_WIDGET (separator));
+
+  if (separator->priv->orientation == GTK_ORIENTATION_VERTICAL)
+    {
+      gtk_style_context_add_class (context, GTK_STYLE_CLASS_VERTICAL);
+      gtk_style_context_remove_class (context, GTK_STYLE_CLASS_HORIZONTAL);
+    }
+  else
+    {
+      gtk_style_context_add_class (context, GTK_STYLE_CLASS_HORIZONTAL);
+      gtk_style_context_remove_class (context, GTK_STYLE_CLASS_VERTICAL);
+    }
+}
+
+static void
 gtk_separator_set_property (GObject      *object,
                             guint         prop_id,
                             const GValue *value,
@@ -125,6 +144,7 @@ gtk_separator_set_property (GObject      *object,
     {
     case PROP_ORIENTATION:
       private->orientation = g_value_get_enum (value);
+      reset_orientation_style (separator);
       gtk_widget_queue_resize (GTK_WIDGET (object));
       break;
     default:
diff --git a/gtk/gtktoolpalette.c b/gtk/gtktoolpalette.c
index e35bf81..491cf9e 100644
--- a/gtk/gtktoolpalette.c
+++ b/gtk/gtktoolpalette.c
@@ -234,6 +234,25 @@ gtk_tool_palette_reconfigured (GtkToolPalette *palette)
 }
 
 static void
+reset_orientation_style (GtkToolPalette *palette)
+{
+  GtkStyleContext *context;
+
+  context = gtk_widget_get_style_context (GTK_WIDGET (palette));
+
+  if (palette->priv->orientation == GTK_ORIENTATION_VERTICAL)
+    {
+      gtk_style_context_add_class (context, GTK_STYLE_CLASS_VERTICAL);
+      gtk_style_context_remove_class (context, GTK_STYLE_CLASS_HORIZONTAL);
+    }
+  else
+    {
+      gtk_style_context_add_class (context, GTK_STYLE_CLASS_HORIZONTAL);
+      gtk_style_context_remove_class (context, GTK_STYLE_CLASS_VERTICAL);
+    }
+}
+
+static void
 gtk_tool_palette_set_property (GObject      *object,
                                guint         prop_id,
                                const GValue *value,
@@ -263,6 +282,7 @@ gtk_tool_palette_set_property (GObject      *object,
         if ((guint) g_value_get_enum (value) != palette->priv->orientation)
           {
             palette->priv->orientation = g_value_get_enum (value);
+            reset_orientation_style (palette);
             gtk_tool_palette_reconfigured (palette);
           }
         break;



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