From efae64be666e7d7489f1a7b8b19d6a9d760a6cda Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Wed, 12 Jan 2011 22:28:43 +0100 Subject: [PATCH] Set vertical/horizontal class on all widgets overriding GtkOrientable::orientation MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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(+) diff --git a/gtk/gtkcellareabox.c b/gtk/gtkcellareabox.c index cc9e8f298..ea3a3c8a8 100644 --- a/gtk/gtkcellareabox.c +++ b/gtk/gtkcellareabox.c @@ -1049,6 +1049,25 @@ gtk_cell_area_box_dispose (GObject *object) G_OBJECT_CLASS (gtk_cell_area_box_parent_class)->dispose (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, @@ -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 168bf04ea..87c56ed8b 100644 --- a/gtk/gtkcellview.c +++ b/gtk/gtkcellview.c @@ -414,6 +414,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, @@ -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 3557c1694..525f970df 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 3cc366c6a..9c8fd92e7 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 1de28a1a5..b30292fc5 100644 --- a/gtk/gtkseparator.c +++ b/gtk/gtkseparator.c @@ -112,6 +112,25 @@ gtk_separator_init (GtkSeparator *separator) private->orientation = GTK_ORIENTATION_HORIZONTAL; } +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, @@ -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 e35bf813f..491cf9e9a 100644 --- a/gtk/gtktoolpalette.c +++ b/gtk/gtktoolpalette.c @@ -233,6 +233,25 @@ gtk_tool_palette_reconfigured (GtkToolPalette *palette) gtk_widget_queue_resize_no_redraw (GTK_WIDGET (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, @@ -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; -- 2.43.2