]> Pileus Git - ~andy/gtk/blobdiff - modules/other/gail/gaillabel.c
gail: use const instead G_CONST_RETURN
[~andy/gtk] / modules / other / gail / gaillabel.c
index 36b6c1380b598f8a463c620a841fe7f5a95445fe..1961e8842121cc920494371393dec3a4cd99f38f 100644 (file)
  * Boston, MA 02111-1307, USA.
  */
 
+#include "config.h"
+
 #include <string.h>
+
 #include <gtk/gtk.h>
 #include "gaillabel.h"
 #include "gailwindow.h"
@@ -39,7 +42,7 @@ static void       atk_text_interface_init          (AtkTextIface      *iface);
 
 /* atkobject.h */
 
-static G_CONST_RETURN gchar* gail_label_get_name         (AtkObject         *accessible);
+static const gchar* gail_label_get_name         (AtkObject         *accessible);
 static AtkStateSet*          gail_label_ref_state_set   (AtkObject         *accessible);
 static AtkRelationSet*       gail_label_ref_relation_set (AtkObject         *accessible);
 
@@ -148,7 +151,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,
@@ -206,22 +209,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)
 {
@@ -230,7 +217,7 @@ notify_name_change (AtkObject *atk_obj)
   GtkWidget *widget;
   GObject *gail_obj;
 
-  widget = GTK_ACCESSIBLE (atk_obj)->widget;
+  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (atk_obj));
   if (widget == NULL)
     /*
      * State is defunct
@@ -339,23 +326,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;
@@ -372,10 +371,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
             {
@@ -389,7 +392,7 @@ 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");
 
@@ -418,7 +421,7 @@ gail_label_ref_state_set (AtkObject *accessible)
   GtkWidget *widget;
 
   state_set = ATK_OBJECT_CLASS (gail_label_parent_class)->ref_state_set (accessible);
-  widget = GTK_ACCESSIBLE (accessible)->widget;
+  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible));
 
   if (widget == NULL)
     return state_set;
@@ -436,7 +439,7 @@ gail_label_ref_relation_set (AtkObject *obj)
 
   g_return_val_if_fail (GAIL_IS_LABEL (obj), NULL);
 
-  widget = GTK_ACCESSIBLE (obj)->widget;
+  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj));
   if (widget == NULL)
     /*
      * State is defunct
@@ -452,14 +455,14 @@ gail_label_ref_relation_set (AtkObject *obj)
        *
        * The relation set is not updated if the mnemonic widget is changed
        */
-      GtkWidget *mnemonic_widget = GTK_LABEL (widget)->mnemonic_widget;
+      GtkWidget *mnemonic_widget = gtk_label_get_mnemonic_widget (GTK_LABEL (widget));
 
       if (mnemonic_widget)
         {
           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 
@@ -497,7 +500,7 @@ gail_label_ref_relation_set (AtkObject *obj)
                         {
                           GtkWidget *temp_widget;
 
-                          temp_widget = GTK_BIN (list->data)->child;
+                          temp_widget = gtk_bin_get_child (GTK_BIN (list->data));
                           if (GTK_IS_BUTTON (temp_widget))
                             mnemonic_widget = temp_widget;
                         }
@@ -508,10 +511,6 @@ gail_label_ref_relation_set (AtkObject *obj)
                           temp_widget = GTK_WIDGET (list->data);
                           g_list_free (list);
                           list = gtk_container_get_children (GTK_CONTAINER (temp_widget));
-                          if (GTK_IS_COMBO (list->data))
-                            {
-                              mnemonic_widget = GTK_WIDGET (list->data);
-                            }
                         }
                     }
                   g_list_free (list);
@@ -530,10 +529,10 @@ gail_label_ref_relation_set (AtkObject *obj)
   return relation_set;
 }
 
-static G_CONST_RETURN gchar*
+static const gchar*
 gail_label_get_name (AtkObject *accessible)
 {
-  G_CONST_RETURN gchar *name;
+  const gchar *name;
 
   g_return_val_if_fail (GAIL_IS_LABEL (accessible), NULL);
 
@@ -547,7 +546,7 @@ gail_label_get_name (AtkObject *accessible)
        */
       GtkWidget *widget;
 
-      widget = GTK_ACCESSIBLE (accessible)->widget;
+      widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible));
       if (widget == NULL)
         /*
          * State is defunct
@@ -594,7 +593,7 @@ gail_label_get_text (AtkText *text,
 
   const gchar *label_text;
 
-  widget = GTK_ACCESSIBLE (text)->widget;
+  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
   if (widget == NULL)
     /* State is defunct */
     return NULL;
@@ -624,7 +623,7 @@ gail_label_get_text_before_offset (AtkText         *text,
   GtkWidget *widget;
   GtkLabel *label;
   
-  widget = GTK_ACCESSIBLE (text)->widget;
+  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
   
   if (widget == NULL)
     /* State is defunct */
@@ -648,7 +647,7 @@ gail_label_get_text_at_offset (AtkText         *text,
   GtkWidget *widget;
   GtkLabel *label;
  
-  widget = GTK_ACCESSIBLE (text)->widget;
+  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
   
   if (widget == NULL)
     /* State is defunct */
@@ -672,7 +671,7 @@ gail_label_get_text_after_offset (AtkText         *text,
   GtkWidget *widget;
   GtkLabel *label;
 
-  widget = GTK_ACCESSIBLE (text)->widget;
+  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
   
   if (widget == NULL)
   {
@@ -694,7 +693,7 @@ gail_label_get_character_count (AtkText *text)
   GtkWidget *widget;
   GtkLabel  *label;
 
-  widget = GTK_ACCESSIBLE (text)->widget;
+  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
   if (widget == NULL)
     /* State is defunct */
     return 0;
@@ -716,7 +715,7 @@ gail_label_set_caret_offset (AtkText *text,
   GtkWidget *widget;
   GtkLabel  *label;
 
-  widget = GTK_ACCESSIBLE (text)->widget;
+  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
   if (widget == NULL)
     /* State is defunct */
     return 0;
@@ -725,7 +724,7 @@ gail_label_set_caret_offset (AtkText *text,
 
   if (gtk_label_get_selectable (label) &&
       offset >= 0 &&
-      offset <= g_utf8_strlen (label->text, -1))
+      offset <= g_utf8_strlen (gtk_label_get_text (label), -1))
     {
       gtk_label_select_region (label, offset, offset);
       return TRUE;
@@ -741,7 +740,7 @@ gail_label_get_n_selections (AtkText *text)
   GtkLabel  *label;
   gint start, end;
 
-  widget = GTK_ACCESSIBLE (text)->widget;
+  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
   if (widget == NULL)
     /* State is defunct */
     return 0;
@@ -766,7 +765,7 @@ gail_label_get_selection (AtkText *text,
   GtkWidget *widget;
   GtkLabel  *label;
 
-  widget = GTK_ACCESSIBLE (text)->widget;
+  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
   if (widget == NULL)
     /* State is defunct */
     return NULL;
@@ -802,7 +801,7 @@ gail_label_add_selection (AtkText *text,
   GtkLabel  *label;
   gint start, end;
 
-  widget = GTK_ACCESSIBLE (text)->widget;
+  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
   if (widget == NULL)
     /* State is defunct */
     return FALSE;
@@ -829,7 +828,7 @@ gail_label_remove_selection (AtkText *text,
   GtkLabel  *label;
   gint start, end;
 
-  widget = GTK_ACCESSIBLE (text)->widget;
+  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
   if (widget == NULL)
     /* State is defunct */
     return FALSE;
@@ -861,7 +860,7 @@ gail_label_set_selection (AtkText *text,
   GtkLabel  *label;
   gint start, end;
 
-  widget = GTK_ACCESSIBLE (text)->widget;
+  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
   if (widget == NULL)
     /* State is defunct */
     return FALSE;
@@ -895,9 +894,10 @@ gail_label_get_character_extents (AtkText      *text,
   GtkWidget *widget;
   GtkLabel *label;
   PangoRectangle char_rect;
+  const gchar *label_text;
   gint index, x_layout, y_layout;
  
-  widget = GTK_ACCESSIBLE (text)->widget;
+  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
 
   if (widget == NULL)
     /* State is defunct */
@@ -906,7 +906,8 @@ gail_label_get_character_extents (AtkText      *text,
   label = GTK_LABEL (widget);
   
   gtk_label_get_layout_offsets (label, &x_layout, &y_layout);
-  index = g_utf8_offset_to_pointer (label->text, offset) - label->text;
+  label_text = gtk_label_get_text (label);
+  index = g_utf8_offset_to_pointer (label_text, offset) - label_text;
   pango_layout_index_to_pos (gtk_label_get_layout (label), index, &char_rect);
   
   gail_misc_get_extents_from_pango_rectangle (widget, &char_rect, 
@@ -921,9 +922,10 @@ gail_label_get_offset_at_point (AtkText      *text,
 { 
   GtkWidget *widget;
   GtkLabel *label;
+  const gchar *label_text;
   gint index, x_layout, y_layout;
 
-  widget = GTK_ACCESSIBLE (text)->widget;
+  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
   if (widget == NULL)
     /* State is defunct */
     return -1;
@@ -934,15 +936,16 @@ gail_label_get_offset_at_point (AtkText      *text,
   index = gail_misc_get_index_at_point_in_layout (widget, 
                                               gtk_label_get_layout (label), 
                                               x_layout, y_layout, x, y, coords);
+  label_text = gtk_label_get_text (label);
   if (index == -1)
     {
       if (coords == ATK_XY_WINDOW || coords == ATK_XY_SCREEN)
-        return g_utf8_strlen (label->text, -1);
+        return g_utf8_strlen (label_text, -1);
 
       return index;  
     }
   else
-    return g_utf8_pointer_to_offset (label->text, label->text + index);  
+    return g_utf8_pointer_to_offset (label_text, label_text + index);
 }
 
 static AtkAttributeSet*
@@ -957,7 +960,7 @@ gail_label_get_run_attributes (AtkText        *text,
   GtkJustification justify;
   GtkTextDirection dir;
 
-  widget = GTK_ACCESSIBLE (text)->widget;
+  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
   if (widget == NULL)
     /* State is defunct */
     return NULL;
@@ -982,7 +985,7 @@ gail_label_get_run_attributes (AtkText        *text,
 
   at_set = gail_misc_layout_get_run_attributes (at_set,
                                                 gtk_label_get_layout (label),
-                                                label->text,
+                                                gtk_label_get_text (label),
                                                 offset,
                                                 start_offset,
                                                 end_offset);
@@ -996,7 +999,7 @@ gail_label_get_default_attributes (AtkText        *text)
   GtkLabel *label;
   AtkAttributeSet *at_set = NULL;
 
-  widget = GTK_ACCESSIBLE (text)->widget;
+  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
   if (widget == NULL)
     /* State is defunct */
     return NULL;
@@ -1018,7 +1021,7 @@ gail_label_get_character_at_offset (AtkText                *text,
   const gchar *string;
   gchar *index;
 
-  widget = GTK_ACCESSIBLE (text)->widget;
+  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
   if (widget == NULL)
     /* State is defunct */
     return '\0';