#include "gtklabel.h"
#include "gtkmain.h"
#include "gtkmarshalers.h"
-#include "gtksignal.h"
#include "gtkwindow.h"
#include "gdk/gdkkeysyms.h"
#include "gtkclipboard.h"
static void gtk_label_recalculate (GtkLabel *label);
static void gtk_label_hierarchy_changed (GtkWidget *widget,
GtkWidget *old_toplevel);
+static void gtk_label_screen_changed (GtkWidget *widget,
+ GdkScreen *old_screen);
static void gtk_label_create_window (GtkLabel *label);
static void gtk_label_destroy_window (GtkLabel *label);
static GtkMiscClass *parent_class = NULL;
-GtkType
+GType
gtk_label_get_type (void)
{
- static GtkType label_type = 0;
+ static GType label_type = 0;
if (!label_type)
{
(GInstanceInitFunc) gtk_label_init,
};
- label_type = g_type_register_static (GTK_TYPE_MISC, "GtkLabel", &label_info, 0);
+ label_type = g_type_register_static (GTK_TYPE_MISC, "GtkLabel",
+ &label_info, 0);
}
return label_type;
gtk_binding_entry_add_signal (binding_set, keyval, modmask,
"move_cursor", 3,
- GTK_TYPE_ENUM, step,
+ G_TYPE_ENUM, step,
G_TYPE_INT, count,
- G_TYPE_BOOLEAN, FALSE);
+ G_TYPE_BOOLEAN, FALSE);
/* Selection-extending version */
gtk_binding_entry_add_signal (binding_set, keyval, modmask | GDK_SHIFT_MASK,
"move_cursor", 3,
- GTK_TYPE_ENUM, step,
+ G_TYPE_ENUM, step,
G_TYPE_INT, count,
- G_TYPE_BOOLEAN, TRUE);
+ G_TYPE_BOOLEAN, TRUE);
}
static void
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
GtkBindingSet *binding_set;
- parent_class = gtk_type_class (GTK_TYPE_MISC);
+ parent_class = g_type_class_peek_parent (class);
gobject_class->set_property = gtk_label_set_property;
gobject_class->get_property = gtk_label_get_property;
widget_class->button_release_event = gtk_label_button_release;
widget_class->motion_notify_event = gtk_label_motion;
widget_class->hierarchy_changed = gtk_label_hierarchy_changed;
+ widget_class->screen_changed = gtk_label_screen_changed;
widget_class->mnemonic_activate = gtk_label_mnemonic_activate;
widget_class->focus = gtk_label_focus;
class->copy_clipboard = gtk_label_copy_clipboard;
signals[MOVE_CURSOR] =
- gtk_signal_new ("move_cursor",
- GTK_RUN_LAST | GTK_RUN_ACTION,
- GTK_CLASS_TYPE (object_class),
- GTK_SIGNAL_OFFSET (GtkLabelClass, move_cursor),
- _gtk_marshal_VOID__ENUM_INT_BOOLEAN,
- GTK_TYPE_NONE, 3, GTK_TYPE_MOVEMENT_STEP, GTK_TYPE_INT, GTK_TYPE_BOOL);
+ g_signal_new ("move_cursor",
+ G_OBJECT_CLASS_TYPE (gobject_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (GtkLabelClass, move_cursor),
+ NULL, NULL,
+ _gtk_marshal_VOID__ENUM_INT_BOOLEAN,
+ G_TYPE_NONE, 3,
+ GTK_TYPE_MOVEMENT_STEP,
+ G_TYPE_INT,
+ G_TYPE_BOOLEAN);
signals[COPY_CLIPBOARD] =
- gtk_signal_new ("copy_clipboard",
- GTK_RUN_LAST | GTK_RUN_ACTION,
- GTK_CLASS_TYPE (object_class),
- GTK_SIGNAL_OFFSET (GtkLabelClass, copy_clipboard),
- _gtk_marshal_VOID__VOID,
- GTK_TYPE_NONE, 0);
+ g_signal_new ("copy_clipboard",
+ G_OBJECT_CLASS_TYPE (gobject_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (GtkLabelClass, copy_clipboard),
+ NULL, NULL,
+ _gtk_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
signals[POPULATE_POPUP] =
- gtk_signal_new ("populate_popup",
- GTK_RUN_LAST,
- GTK_CLASS_TYPE (object_class),
- GTK_SIGNAL_OFFSET (GtkLabelClass, populate_popup),
- _gtk_marshal_VOID__OBJECT,
- GTK_TYPE_NONE, 1, GTK_TYPE_MENU);
-
- g_object_class_install_property (G_OBJECT_CLASS(object_class),
+ g_signal_new ("populate_popup",
+ G_OBJECT_CLASS_TYPE (gobject_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GtkLabelClass, populate_popup),
+ NULL, NULL,
+ _gtk_marshal_VOID__OBJECT,
+ G_TYPE_NONE, 1,
+ GTK_TYPE_MENU);
+
+ g_object_class_install_property (gobject_class,
PROP_LABEL,
g_param_spec_string ("label",
_("Label"),
case PROP_CURSOR_POSITION:
if (label->select_info)
{
- gint offset = g_utf8_pointer_to_offset (label->label,
- label->label + label->select_info->selection_end);
+ gint offset = g_utf8_pointer_to_offset (label->text,
+ label->text + label->select_info->selection_end);
g_value_set_int (value, offset);
}
else
case PROP_SELECTION_BOUND:
if (label->select_info)
{
- gint offset = g_utf8_pointer_to_offset (label->label,
- label->label + label->select_info->selection_anchor);
+ gint offset = g_utf8_pointer_to_offset (label->text,
+ label->text + label->select_info->selection_anchor);
g_value_set_int (value, offset);
}
else
{
GtkLabel *label;
- label = gtk_type_new (GTK_TYPE_LABEL);
+ label = g_object_new (GTK_TYPE_LABEL, NULL);
if (str && *str)
gtk_label_set_text (label, str);
{
GtkLabel *label;
- label = gtk_type_new (GTK_TYPE_LABEL);
+ label = g_object_new (GTK_TYPE_LABEL, NULL);
if (str && *str)
gtk_label_set_text_with_mnemonic (label, str);
{
GtkLabel *label = GTK_LABEL (widget);
- /* in case the label has been reparented to another screen */
- gtk_label_clear_layout (label);
-
gtk_label_setup_mnemonic (label, label->mnemonic_keyval);
}
+static void
+gtk_label_screen_changed (GtkWidget *widget,
+ GdkScreen *old_screen)
+{
+ gtk_label_clear_layout (GTK_LABEL (widget));
+}
+
+static void
+label_mnemonic_widget_weak_notify (gpointer data,
+ GObject *where_the_object_was)
+{
+ GtkLabel *label = data;
+
+ label->mnemonic_widget = NULL;
+ g_object_notify (G_OBJECT (label), "mnemonic_widget");
+}
/**
* gtk_label_set_mnemonic_widget:
g_return_if_fail (GTK_IS_WIDGET (widget));
if (label->mnemonic_widget)
- gtk_widget_unref (label->mnemonic_widget);
+ g_object_weak_unref (G_OBJECT (label->mnemonic_widget),
+ label_mnemonic_widget_weak_notify,
+ label);
label->mnemonic_widget = widget;
if (label->mnemonic_widget)
- gtk_widget_ref (label->mnemonic_widget);
+ g_object_weak_ref (G_OBJECT (label->mnemonic_widget),
+ label_mnemonic_widget_weak_notify,
+ label);
g_object_notify (G_OBJECT (label), "mnemonic_widget");
}
g_free (label->text);
if (label->layout)
- g_object_unref (G_OBJECT (label->layout));
+ g_object_unref (label->layout);
if (label->attrs)
pango_attr_list_unref (label->attrs);
{
if (label->layout)
{
- g_object_unref (G_OBJECT (label->layout));
+ g_object_unref (label->layout);
label->layout = NULL;
}
}
g_return_if_fail (GTK_IS_LABEL (label));
g_return_if_fail (str != NULL);
- /* Convert text to wide characters */
-
+ /* Split text into the base text and a separate pattern
+ * of underscores.
+ */
+
new_str = g_new (gchar, strlen (str) + 1);
pattern = g_new (gchar, g_utf8_strlen (str, -1) + 1);
if (event->type == GDK_3BUTTON_PRESS)
{
- gtk_label_select_region_index (label, 0, strlen (label->label));
+ gtk_label_select_region_index (label, 0, strlen (label->text));
return TRUE;
}
else
{
if (event->type == GDK_3BUTTON_PRESS)
- gtk_label_select_region_index (label, 0, strlen (label->label));
+ gtk_label_select_region_index (label, 0, strlen (label->text));
else if (event->type == GDK_2BUTTON_PRESS)
gtk_label_select_word (label);
else
gint start,
gint count)
{
- gint offset = g_utf8_pointer_to_offset (label->label,
- label->label + start);
+ gint offset = g_utf8_pointer_to_offset (label->text,
+ label->text + start);
- if (label->label)
+ if (label->text)
{
PangoLogAttr *log_attrs;
gint n_attrs;
gtk_label_ensure_layout (label);
- length = g_utf8_strlen (label->label, -1);
+ length = g_utf8_strlen (label->text, -1);
pango_layout_get_log_attrs (label->layout, &log_attrs, &n_attrs);
g_free (log_attrs);
}
- return g_utf8_offset_to_pointer (label->label, offset) - label->label;
+ return g_utf8_offset_to_pointer (label->text, offset) - label->text;
}
static gint
index = new_index;
while (new_trailing--)
- index = g_utf8_next_char (label->label + new_index) - label->label;
+ index = g_utf8_next_char (label->text + new_index) - label->text;
}
return index;
gtk_label_move_forward_word (GtkLabel *label,
gint start)
{
- gint new_pos = g_utf8_pointer_to_offset (label->label,
- label->label + start);
+ gint new_pos = g_utf8_pointer_to_offset (label->text,
+ label->text + start);
gint length;
- length = g_utf8_strlen (label->label, -1);
+ length = g_utf8_strlen (label->text, -1);
if (new_pos < length)
{
PangoLogAttr *log_attrs;
g_free (log_attrs);
}
- return g_utf8_offset_to_pointer (label->label, new_pos) - label->label;
+ return g_utf8_offset_to_pointer (label->text, new_pos) - label->text;
}
gtk_label_move_backward_word (GtkLabel *label,
gint start)
{
- gint new_pos = g_utf8_pointer_to_offset (label->label,
- label->label + start);
+ gint new_pos = g_utf8_pointer_to_offset (label->text,
+ label->text + start);
gint length;
- length = g_utf8_strlen (label->label, -1);
+ length = g_utf8_strlen (label->text, -1);
if (new_pos > 0)
{
g_free (log_attrs);
}
- return g_utf8_offset_to_pointer (label->label, new_pos) - label->label;
+ return g_utf8_offset_to_pointer (label->text, new_pos) - label->text;
}
static void
case GTK_MOVEMENT_PARAGRAPH_ENDS:
case GTK_MOVEMENT_BUFFER_ENDS:
/* FIXME: Can do better here */
- new_pos = count < 0 ? 0 : strlen (label->label);
+ new_pos = count < 0 ? 0 : strlen (label->text);
break;
case GTK_MOVEMENT_DISPLAY_LINES:
case GTK_MOVEMENT_PARAGRAPHS:
case GTK_MOVEMENT_PARAGRAPH_ENDS:
case GTK_MOVEMENT_BUFFER_ENDS:
/* FIXME: Can do better here */
- new_pos = count < 0 ? 0 : strlen (label->label);
+ new_pos = count < 0 ? 0 : strlen (label->text);
break;
case GTK_MOVEMENT_DISPLAY_LINES:
case GTK_MOVEMENT_PARAGRAPHS:
static void
gtk_label_select_all (GtkLabel *label)
{
- gtk_label_select_region_index (label, 0, strlen (label->label));
+ gtk_label_select_region_index (label, 0, strlen (label->text));
}
/* Quick hack of a popup menu
activate_cb (GtkWidget *menuitem,
GtkLabel *label)
{
- const gchar *signal = gtk_object_get_data (GTK_OBJECT (menuitem), "gtk-signal");
- gtk_signal_emit_by_name (GTK_OBJECT (label), signal);
+ const gchar *signal = g_object_get_data (G_OBJECT (menuitem), "gtk-signal");
+ g_signal_emit_by_name (label, signal);
}
static void
{
GtkWidget *menuitem = gtk_image_menu_item_new_from_stock (stock_id, NULL);
- gtk_object_set_data (GTK_OBJECT (menuitem), "gtk-signal", (char *)signal);
- gtk_signal_connect (GTK_OBJECT (menuitem), "activate",
- GTK_SIGNAL_FUNC (activate_cb), label);
+ g_object_set_data (G_OBJECT (menuitem), "gtk-signal", (char *)signal);
+ g_signal_connect (menuitem, "activate",
+ G_CALLBACK (activate_cb), label);
gtk_widget_set_sensitive (menuitem, sensitive);
FALSE);
menuitem = gtk_menu_item_new_with_label (_("Select All"));
- gtk_signal_connect_object (GTK_OBJECT (menuitem), "activate",
- GTK_SIGNAL_FUNC (gtk_label_select_all), label);
+ g_signal_connect_swapped (menuitem, "activate",
+ G_CALLBACK (gtk_label_select_all), label);
gtk_widget_show (menuitem);
gtk_menu_shell_append (GTK_MENU_SHELL (label->select_info->popup_menu), menuitem);
gtk_widget_set_sensitive (menuitem, FALSE);
gtk_menu_shell_append (GTK_MENU_SHELL (label->select_info->popup_menu), menuitem);
- gtk_signal_emit (GTK_OBJECT (label),
- signals[POPULATE_POPUP],
- label->select_info->popup_menu);
+ g_signal_emit (label,
+ signals[POPULATE_POPUP],
+ 0,
+ label->select_info->popup_menu);
if (event)
gtk_menu_popup (GTK_MENU (label->select_info->popup_menu), NULL, NULL,