diff --git a/ChangeLog b/ChangeLog index b7a1a02eb4..fc9a92d740 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2008-09-30 Michael Natterer + + Bug 541009 – Get rid of separate subclasses for horizontal and + vertical orientation: + + * gtk/Makefile.am + * gtk/gtk.symbols + * gtk/gtk.h + * gtk/gtkorientable.[ch]: add new interface GtkOrientable which + will be implemented by everything that can switch orientation. + 2008-09-30 Christian Dywan Fix a typo in the tutorial. diff --git a/gtk/Makefile.am b/gtk/Makefile.am index d17f59c322..a3e9eedc3a 100644 --- a/gtk/Makefile.am +++ b/gtk/Makefile.am @@ -240,6 +240,7 @@ gtk_public_h_sources = \ gtkmountoperation.h \ gtknotebook.h \ gtkobject.h \ + gtkorientable.h \ gtkpagesetup.h \ gtkpaned.h \ gtkpapersize.h \ @@ -498,6 +499,7 @@ gtk_base_c_sources = \ gtkmountoperation.c \ gtknotebook.c \ gtkobject.c \ + gtkorientable.c \ gtkpagesetup.c \ gtkpaned.c \ gtkpapersize.c \ diff --git a/gtk/gtk.h b/gtk/gtk.h index 624a3a462f..6bd28f41ad 100644 --- a/gtk/gtk.h +++ b/gtk/gtk.h @@ -128,6 +128,7 @@ #include #include #include +#include #include #include #include diff --git a/gtk/gtk.symbols b/gtk/gtk.symbols index ebe20d4b8e..537be335ca 100644 --- a/gtk/gtk.symbols +++ b/gtk/gtk.symbols @@ -2548,6 +2548,14 @@ gtk_object_get_type G_GNUC_CONST #endif #endif +#if IN_HEADER(__GTK_ORIENTABLE_H__) +#if IN_FILE(__GTK_ORIENTABLE_C__) +gtk_orientable_get_type +gtk_orientable_get_orientation +gtk_orientable_set_orientation +#endif +#endif + #if IN_HEADER(__GTK_OLD_EDITABLE_H__) #if IN_FILE(__GTK_OLD_EDITABLE_C__) gtk_old_editable_changed diff --git a/gtk/gtkorientable.c b/gtk/gtkorientable.c new file mode 100644 index 0000000000..5bd163878c --- /dev/null +++ b/gtk/gtkorientable.c @@ -0,0 +1,129 @@ +/* GTK - The GIMP Toolkit + * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald + * + * gtkorientable.c + * Copyright (C) 2008 Imendio AB + * Contact: Michael Natterer + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * 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. + */ + +#include "config.h" + +#include "gtkorientable.h" +#include "gtkprivate.h" +#include "gtkintl.h" +#include "gtkalias.h" + + +static void gtk_orientable_base_init (GtkOrientableIface *iface); + + +GType +gtk_orientable_get_type (void) +{ + static GType orientable_type = 0; + + if (! orientable_type) + { + const GTypeInfo orientable_info = + { + sizeof (GtkOrientableIface), + (GBaseInitFunc) gtk_orientable_base_init, + (GBaseFinalizeFunc) NULL, + }; + + orientable_type = g_type_register_static (G_TYPE_INTERFACE, + I_("GtkOrientable"), + &orientable_info, 0); + } + + return orientable_type; +} + +static void +gtk_orientable_base_init (GtkOrientableIface *iface) +{ + static gboolean initialized = FALSE; + + if (initialized) + return; + + /** + * GtkOrientable:orientation: + * + * The orientation of the orientable. + * + * Since: 2.16 + **/ + g_object_interface_install_property (iface, + g_param_spec_enum ("orientation", + P_("Orientation"), + P_("The orientation of the orientable"), + GTK_TYPE_ORIENTATION, + GTK_ORIENTATION_HORIZONTAL, + GTK_PARAM_READWRITE)); + + initialized = TRUE; +} + +/** + * gtk_orientable_set_orientation: + * @orientable: a #GtkOrientable + * @orientation: the orientable's new orientation. + * + * Sets the orientation of the @orientable. + * + * Since: 2.16 + **/ +void +gtk_orientable_set_orientation (GtkOrientable *orientable, + GtkOrientation orientation) +{ + g_return_if_fail (GTK_IS_ORIENTABLE (orientable)); + + g_object_set (orientable, + "orientation", orientation, + NULL); +} + +/** + * gtk_orientable_get_orientation: + * @orientable: a #GtkOrientable + * + * Retrieves the orientation of the @orientable. + * + * Return value: the orientation of the @orientable. + * + * Since: 2.16 + **/ +GtkOrientation +gtk_orientable_get_orientation (GtkOrientable *orientable) +{ + GtkOrientation orientation; + + g_return_val_if_fail (GTK_IS_ORIENTABLE (orientable), + GTK_ORIENTATION_HORIZONTAL); + + g_object_get (orientable, + "orientation", &orientation, + NULL); + + return orientation; +} + +#define __GTK_ORIENTABLE_C__ +#include "gtkaliasdef.c" diff --git a/gtk/gtkorientable.h b/gtk/gtkorientable.h new file mode 100644 index 0000000000..fa2c85bf08 --- /dev/null +++ b/gtk/gtkorientable.h @@ -0,0 +1,60 @@ +/* GTK - The GIMP Toolkit + * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald + * + * gtkorientable.h + * Copyright (C) 2008 Imendio AB + * Contact: Michael Natterer + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * 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. + */ + +#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION) +#error "Only can be included directly." +#endif + +#ifndef __GTK_ORIENTABLE_H__ +#define __GTK_ORIENTABLE_H__ + +#include + +G_BEGIN_DECLS + +#define GTK_TYPE_ORIENTABLE (gtk_orientable_get_type ()) +#define GTK_ORIENTABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_ORIENTABLE, GtkOrientable)) +#define GTK_ORIENTABLE_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), GTK_TYPE_ORIENTABLE, GtkOrientableIface)) +#define GTK_IS_ORIENTABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_ORIENTABLE)) +#define GTK_IS_ORIENTABLE_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), GTK_TYPE_ORIENTABLE)) +#define GTK_ORIENTABLE_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GTK_TYPE_ORIENTABLE, GtkOrientableIface)) + + +typedef struct _GtkOrientable GtkOrientable; /* Dummy typedef */ +typedef struct _GtkOrientableIface GtkOrientableIface; + +struct _GtkOrientableIface +{ + GTypeInterface base_iface; +}; + + +GType gtk_orientable_get_type (void) G_GNUC_CONST; + +void gtk_orientable_set_orientation (GtkOrientable *orientable, + GtkOrientation orientation); +GtkOrientation gtk_orientable_get_orientation (GtkOrientable *orientable); + +G_END_DECLS + +#endif /* __GTK_ORIENTABLE_H__ */