]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtkorientable.c
GtkEntry: Sanity check the end_pos value in _get_display_text()
[~andy/gtk] / gtk / gtkorientable.c
index 5bd163878cedb677ebd3abd443849d206df246fd..0f72542473a24979c6ee1f234ba0ac392dce9bcc 100644 (file)
  * 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 <http://www.gnu.org/licenses/>.
  */
 
 #include "config.h"
 
-#include "gtkorientable.h"
+#include "gtkorientableprivate.h"
 #include "gtkprivate.h"
+#include "gtktypebuiltins.h"
 #include "gtkintl.h"
-#include "gtkalias.h"
 
 
-static void   gtk_orientable_base_init (GtkOrientableIface *iface);
+/**
+ * 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.
+ */
 
 
-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;
-}
+typedef GtkOrientableIface GtkOrientableInterface;
+G_DEFINE_INTERFACE (GtkOrientable, gtk_orientable, G_TYPE_OBJECT)
 
 static void
-gtk_orientable_base_init (GtkOrientableIface *iface)
+gtk_orientable_default_init (GtkOrientableInterface *iface)
 {
-  static gboolean initialized = FALSE;
-
-  if (initialized)
-    return;
-
   /**
    * GtkOrientable:orientation:
    *
@@ -76,8 +63,6 @@ gtk_orientable_base_init (GtkOrientableIface *iface)
                                                           GTK_TYPE_ORIENTATION,
                                                           GTK_ORIENTATION_HORIZONTAL,
                                                           GTK_PARAM_READWRITE));
-
-  initialized = TRUE;
 }
 
 /**
@@ -98,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);
 }
 
 /**
@@ -125,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);
+    }
+}