X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkorientable.c;h=0f72542473a24979c6ee1f234ba0ac392dce9bcc;hb=fd51c8f5e9d6fb68c8e81b9b1e2ab80931f963f0;hp=712838619cb0f393824c44a8122f047bf5490ba0;hpb=9f6e03f2310762f437e298208182098e0fdad86d;p=~andy%2Fgtk diff --git a/gtk/gtkorientable.c b/gtk/gtkorientable.c index 712838619..0f7254247 100644 --- a/gtk/gtkorientable.c +++ b/gtk/gtkorientable.c @@ -16,21 +16,35 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * License along with this library. If not, see . */ #include "config.h" -#include "gtkorientable.h" +#include "gtkorientableprivate.h" #include "gtkprivate.h" +#include "gtktypebuiltins.h" #include "gtkintl.h" -#include "gtkalias.h" + + +/** + * SECTION:gtkorientable + * @Short_description: An interface for flippable widgets + * @Title: GtkOrientable + * + * The #GtkOrientable interface is implemented by all widgets that can be + * oriented horizontally or vertically. Historically, such widgets have been + * realized as subclasses of a common base class (e.g #GtkBox/#GtkHBox/#GtkVBox + * or #GtkScale/#GtkHScale/#GtkVScale). #GtkOrientable is more flexible in that + * it allows the orientation to be changed at runtime, allowing the widgets + * to 'flip'. + * + * #GtkOrientable was introduced in GTK+ 2.16. + */ typedef GtkOrientableIface GtkOrientableInterface; -G_DEFINE_INTERFACE (GtkOrientable, gtk_orientable, G_OBJECT_TYPE) +G_DEFINE_INTERFACE (GtkOrientable, gtk_orientable, G_TYPE_OBJECT) static void gtk_orientable_default_init (GtkOrientableInterface *iface) @@ -69,6 +83,9 @@ gtk_orientable_set_orientation (GtkOrientable *orientable, g_object_set (orientable, "orientation", orientation, NULL); + + if (GTK_IS_WIDGET (orientable)) + _gtk_orientable_set_style_classes (orientable); } /** @@ -96,5 +113,26 @@ gtk_orientable_get_orientation (GtkOrientable *orientable) return orientation; } -#define __GTK_ORIENTABLE_C__ -#include "gtkaliasdef.c" +void +_gtk_orientable_set_style_classes (GtkOrientable *orientable) +{ + GtkStyleContext *context; + GtkOrientation orientation; + + g_return_if_fail (GTK_IS_ORIENTABLE (orientable)); + g_return_if_fail (GTK_IS_WIDGET (orientable)); + + context = gtk_widget_get_style_context (GTK_WIDGET (orientable)); + orientation = gtk_orientable_get_orientation (orientable); + + if (orientation == GTK_ORIENTATION_HORIZONTAL) + { + gtk_style_context_add_class (context, GTK_STYLE_CLASS_HORIZONTAL); + gtk_style_context_remove_class (context, GTK_STYLE_CLASS_VERTICAL); + } + else + { + gtk_style_context_add_class (context, GTK_STYLE_CLASS_VERTICAL); + gtk_style_context_remove_class (context, GTK_STYLE_CLASS_HORIZONTAL); + } +}