* 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,
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)
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)
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);
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,
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)
{
}
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;
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
{
}
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
if (label->textutil)
g_object_unref (label->textutil);
- G_OBJECT_CLASS (parent_class)->finalize (object);
+ G_OBJECT_CLASS (gail_label_parent_class)->finalize (object);
}
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)
*/
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))
{
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
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
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;