]> Pileus Git - ~andy/gtk/blobdiff - modules/other/gail/gaillabel.c
Deprecate widget flag: GTK_WIDGET_MAPPED
[~andy/gtk] / modules / other / gail / gaillabel.c
index f9c12ee26cf107b4c0b4473f5f96debcaccfff08..b7e06eb45b72597a9c6b75bbf5dc230da8d324a3 100644 (file)
  * Boston, MA 02111-1307, USA.
  */
 
+#include "config.h"
+
 #include <string.h>
+
+#undef GTK_DISABLE_DEPRECATED
+
 #include <gtk/gtk.h>
 #include "gaillabel.h"
 #include "gailwindow.h"
 #include <libgail-util/gailmisc.h>
 
 static void       gail_label_class_init            (GailLabelClass    *klass);
+static void       gail_label_init                  (GailLabel         *label);
 static void      gail_label_real_initialize       (AtkObject         *obj,
                                                     gpointer         data);
 static void      gail_label_real_notify_gtk       (GObject           *obj,
@@ -101,43 +107,8 @@ static AtkAttributeSet* gail_label_get_run_attributes
 static AtkAttributeSet* gail_label_get_default_attributes
                                                    (AtkText           *text);
 
-static GailWidgetClass *parent_class = NULL;
-
-GType
-gail_label_get_type (void)
-{
-  static GType type = 0;
-
-  if (!type)
-    {
-      static const GTypeInfo tinfo =
-      {
-        sizeof (GailLabelClass),
-        (GBaseInitFunc) NULL, /* base init */
-        (GBaseFinalizeFunc) NULL, /* base finalize */
-        (GClassInitFunc) gail_label_class_init, /* class init */
-        (GClassFinalizeFunc) NULL, /* class finalize */
-        NULL, /* class data */
-        sizeof (GailLabel), /* instance size */
-        0, /* nb preallocs */
-        (GInstanceInitFunc) NULL, /* instance init */
-        NULL /* value table */
-      };
-
-      static const GInterfaceInfo atk_text_info =
-      {
-        (GInterfaceInitFunc) atk_text_interface_init,
-        (GInterfaceFinalizeFunc) NULL,
-        NULL
-      };
-
-      type = g_type_register_static (GAIL_TYPE_WIDGET,
-                                     "GailLabel", &tinfo, 0);
-      g_type_add_interface_static (type, ATK_TYPE_TEXT,
-                                   &atk_text_info);
-    }
-  return type;
-}
+G_DEFINE_TYPE_WITH_CODE (GailLabel, gail_label, GAIL_TYPE_WIDGET,
+                         G_IMPLEMENT_INTERFACE (ATK_TYPE_TEXT, atk_text_interface_init))
 
 static void
 gail_label_class_init (GailLabelClass *klass)
@@ -151,14 +122,17 @@ gail_label_class_init (GailLabelClass *klass)
   widget_class = (GailWidgetClass*)klass;
   widget_class->notify_gtk = gail_label_real_notify_gtk;
 
-  parent_class = g_type_class_peek_parent (klass);
-
   class->get_name = gail_label_get_name;
   class->ref_state_set = gail_label_ref_state_set;
   class->ref_relation_set = gail_label_ref_relation_set;
   class->initialize = gail_label_real_initialize;
 }
 
+static void
+gail_label_init (GailLabel *label)
+{
+}
+
 static void
 gail_label_real_initialize (AtkObject *obj,
                             gpointer  data)
@@ -166,7 +140,7 @@ gail_label_real_initialize (AtkObject *obj,
   GtkWidget  *widget;
   GailLabel *gail_label;
 
-  ATK_OBJECT_CLASS (parent_class)->initialize (obj, data);
+  ATK_OBJECT_CLASS (gail_label_parent_class)->initialize (obj, data);
   
   gail_label = GAIL_LABEL (obj);
 
@@ -179,7 +153,7 @@ gail_label_real_initialize (AtkObject *obj,
   
   widget = GTK_WIDGET (data);
 
-  if (GTK_WIDGET_MAPPED (widget))
+  if (gtk_widget_get_mapped (widget))
     gail_label_init_text_util (gail_label, widget);
   else
     g_signal_connect (widget,
@@ -237,22 +211,6 @@ gail_label_init_text_util (GailLabel *gail_label,
     gail_label->label_length = g_utf8_strlen (label_text, -1);
 }
 
-AtkObject* 
-gail_label_new (GtkWidget *widget)
-{
-  GObject *object;
-  AtkObject *accessible;
-
-  g_return_val_if_fail (GTK_IS_LABEL (widget), NULL);
-
-  object = g_object_new (GAIL_TYPE_LABEL, NULL);
-
-  accessible = ATK_OBJECT (object);
-  atk_object_initialize (accessible, widget);
-
-  return accessible;
-}
-
 static void
 notify_name_change (AtkObject *atk_obj)
 {
@@ -370,23 +328,35 @@ gail_label_real_notify_gtk (GObject           *obj,
     }
   else if (strcmp (pspec->name, "cursor-position") == 0)
     {
-      gint start, end;
+      gint start, end, tmp;
       gboolean text_caret_moved = FALSE;
       gboolean selection_changed = FALSE;
-      gboolean is_start = TRUE;
 
       gail_obj = G_OBJECT (atk_obj);
       label = GTK_LABEL (widget);
 
+      if (gail_label->selection_bound != -1 && gail_label->selection_bound < gail_label->cursor_position)
+        {
+          tmp = gail_label->selection_bound;
+          gail_label->selection_bound = gail_label->cursor_position;
+          gail_label->cursor_position = tmp;
+        }
+
       if (gtk_label_get_selection_bounds (label, &start, &end))
         {
           if (start != gail_label->cursor_position ||
               end != gail_label->selection_bound)
             {
               if (end != gail_label->selection_bound)
-                is_start = FALSE;
-              gail_label->selection_bound = end;
-              gail_label->cursor_position = start;
+                {
+                  gail_label->selection_bound = start;
+                  gail_label->cursor_position = end;
+                }
+              else
+                {
+                  gail_label->selection_bound = end;
+                  gail_label->cursor_position = start;
+                }
               text_caret_moved = TRUE;
               if (start != end)
                 selection_changed = TRUE;
@@ -403,10 +373,14 @@ gail_label_real_notify_gtk (GObject           *obj,
               if (gail_label->selection_bound != -1 && end != gail_label->selection_bound)
                 {
                   text_caret_moved = TRUE;
-                  is_start = FALSE;
+                  gail_label->cursor_position = end;
+                  gail_label->selection_bound = start;
+                }
+              else
+                {
+                  gail_label->cursor_position = start;
+                  gail_label->selection_bound = end;
                 }
-              gail_label->cursor_position = start;
-              gail_label->selection_bound = end;
             }
           else
             {
@@ -420,13 +394,13 @@ gail_label_real_notify_gtk (GObject           *obj,
         }
         if (text_caret_moved)
           g_signal_emit_by_name (gail_obj, "text_caret_moved", 
-                                 is_start ? gail_label->cursor_position : gail_label->selection_bound);
+                                 gail_label->cursor_position);
         if (selection_changed)
           g_signal_emit_by_name (gail_obj, "text_selection_changed");
 
     }
   else
-    parent_class->notify_gtk (obj, pspec);
+    GAIL_WIDGET_CLASS (gail_label_parent_class)->notify_gtk (obj, pspec);
 }
 
 static void
@@ -436,7 +410,7 @@ gail_label_finalize (GObject            *object)
 
   if (label->textutil)
     g_object_unref (label->textutil);
-  G_OBJECT_CLASS (parent_class)->finalize (object);
+  G_OBJECT_CLASS (gail_label_parent_class)->finalize (object);
 }
 
 
@@ -448,7 +422,7 @@ gail_label_ref_state_set (AtkObject *accessible)
   AtkStateSet *state_set;
   GtkWidget *widget;
 
-  state_set = ATK_OBJECT_CLASS (parent_class)->ref_state_set (accessible);
+  state_set = ATK_OBJECT_CLASS (gail_label_parent_class)->ref_state_set (accessible);
   widget = GTK_ACCESSIBLE (accessible)->widget;
 
   if (widget == NULL)
@@ -474,7 +448,7 @@ gail_label_ref_relation_set (AtkObject *obj)
      */
     return NULL;
 
-  relation_set = ATK_OBJECT_CLASS (parent_class)->ref_relation_set (obj);
+  relation_set = ATK_OBJECT_CLASS (gail_label_parent_class)->ref_relation_set (obj);
 
   if (!atk_relation_set_contains (relation_set, ATK_RELATION_LABEL_FOR))
     {
@@ -490,7 +464,7 @@ gail_label_ref_relation_set (AtkObject *obj)
           AtkObject *accessible_array[1];
           AtkRelation* relation;
 
-          if (!GTK_WIDGET_CAN_FOCUS (mnemonic_widget))
+          if (!gtk_widget_get_can_focus (mnemonic_widget))
             {
             /*
              * Handle the case where a GtkFileChooserButton is specified as the 
@@ -568,7 +542,7 @@ gail_label_get_name (AtkObject *accessible)
 
   g_return_val_if_fail (GAIL_IS_LABEL (accessible), NULL);
 
-  name = ATK_OBJECT_CLASS (parent_class)->get_name (accessible);
+  name = ATK_OBJECT_CLASS (gail_label_parent_class)->get_name (accessible);
   if (name != NULL)
     return name;
   else
@@ -596,7 +570,6 @@ gail_label_get_name (AtkObject *accessible)
 static void
 atk_text_interface_init (AtkTextIface *iface)
 {
-  g_return_if_fail (iface != NULL);
   iface->get_text = gail_label_get_text;
   iface->get_character_at_offset = gail_label_get_character_at_offset;
   iface->get_text_before_offset = gail_label_get_text_before_offset;