mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-09-29 18:47:38 +00:00
GtkLabel: Create gestures only when needed
And move them into the GtkLabelSelectionInfo struct.
This commit is contained in:
parent
770feff302
commit
1db5ed0aae
@ -255,9 +255,6 @@ struct _GtkLabelPrivate
|
|||||||
PangoAttrList *markup_attrs;
|
PangoAttrList *markup_attrs;
|
||||||
PangoLayout *layout;
|
PangoLayout *layout;
|
||||||
|
|
||||||
GtkGesture *drag_gesture;
|
|
||||||
GtkGesture *multipress_gesture;
|
|
||||||
|
|
||||||
gchar *label;
|
gchar *label;
|
||||||
gchar *text;
|
gchar *text;
|
||||||
|
|
||||||
@ -336,6 +333,9 @@ struct _GtkLabelSelectionInfo
|
|||||||
GList *links;
|
GList *links;
|
||||||
GtkLabelLink *active_link;
|
GtkLabelLink *active_link;
|
||||||
|
|
||||||
|
GtkGesture *drag_gesture;
|
||||||
|
GtkGesture *multipress_gesture;
|
||||||
|
|
||||||
gint drag_start_x;
|
gint drag_start_x;
|
||||||
gint drag_start_y;
|
gint drag_start_y;
|
||||||
|
|
||||||
@ -1373,21 +1373,6 @@ gtk_label_init (GtkLabel *label)
|
|||||||
priv->mnemonics_visible = TRUE;
|
priv->mnemonics_visible = TRUE;
|
||||||
|
|
||||||
gtk_label_set_text (label, "");
|
gtk_label_set_text (label, "");
|
||||||
|
|
||||||
priv->drag_gesture = gtk_gesture_drag_new (GTK_WIDGET (label));
|
|
||||||
g_signal_connect (priv->drag_gesture, "drag-begin",
|
|
||||||
G_CALLBACK (gtk_label_drag_gesture_begin), label);
|
|
||||||
g_signal_connect (priv->drag_gesture, "drag-update",
|
|
||||||
G_CALLBACK (gtk_label_drag_gesture_update), label);
|
|
||||||
gtk_gesture_single_set_exclusive (GTK_GESTURE_SINGLE (priv->drag_gesture), TRUE);
|
|
||||||
|
|
||||||
priv->multipress_gesture = gtk_gesture_multi_press_new (GTK_WIDGET (label));
|
|
||||||
g_signal_connect (priv->multipress_gesture, "pressed",
|
|
||||||
G_CALLBACK (gtk_label_multipress_gesture_pressed), label);
|
|
||||||
g_signal_connect (priv->multipress_gesture, "released",
|
|
||||||
G_CALLBACK (gtk_label_multipress_gesture_released), label);
|
|
||||||
gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (priv->multipress_gesture), 0);
|
|
||||||
gtk_gesture_single_set_exclusive (GTK_GESTURE_SINGLE (priv->multipress_gesture), TRUE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -3285,12 +3270,15 @@ gtk_label_finalize (GObject *object)
|
|||||||
if (priv->markup_attrs)
|
if (priv->markup_attrs)
|
||||||
pango_attr_list_unref (priv->markup_attrs);
|
pango_attr_list_unref (priv->markup_attrs);
|
||||||
|
|
||||||
|
if (priv->select_info)
|
||||||
|
{
|
||||||
|
g_object_unref (priv->select_info->drag_gesture);
|
||||||
|
g_object_unref (priv->select_info->multipress_gesture);
|
||||||
|
}
|
||||||
|
|
||||||
gtk_label_clear_links (label);
|
gtk_label_clear_links (label);
|
||||||
g_free (priv->select_info);
|
g_free (priv->select_info);
|
||||||
|
|
||||||
g_object_unref (priv->drag_gesture);
|
|
||||||
g_object_unref (priv->multipress_gesture);
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (gtk_label_parent_class)->finalize (object);
|
G_OBJECT_CLASS (gtk_label_parent_class)->finalize (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5474,6 +5462,21 @@ gtk_label_ensure_select_info (GtkLabel *label)
|
|||||||
|
|
||||||
if (gtk_widget_get_mapped (GTK_WIDGET (label)))
|
if (gtk_widget_get_mapped (GTK_WIDGET (label)))
|
||||||
gdk_window_show (priv->select_info->window);
|
gdk_window_show (priv->select_info->window);
|
||||||
|
|
||||||
|
priv->select_info->drag_gesture = gtk_gesture_drag_new (GTK_WIDGET (label));
|
||||||
|
g_signal_connect (priv->select_info->drag_gesture, "drag-begin",
|
||||||
|
G_CALLBACK (gtk_label_drag_gesture_begin), label);
|
||||||
|
g_signal_connect (priv->select_info->drag_gesture, "drag-update",
|
||||||
|
G_CALLBACK (gtk_label_drag_gesture_update), label);
|
||||||
|
gtk_gesture_single_set_exclusive (GTK_GESTURE_SINGLE (priv->select_info->drag_gesture), TRUE);
|
||||||
|
|
||||||
|
priv->select_info->multipress_gesture = gtk_gesture_multi_press_new (GTK_WIDGET (label));
|
||||||
|
g_signal_connect (priv->select_info->multipress_gesture, "pressed",
|
||||||
|
G_CALLBACK (gtk_label_multipress_gesture_pressed), label);
|
||||||
|
g_signal_connect (priv->select_info->multipress_gesture, "released",
|
||||||
|
G_CALLBACK (gtk_label_multipress_gesture_released), label);
|
||||||
|
gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (priv->select_info->multipress_gesture), 0);
|
||||||
|
gtk_gesture_single_set_exclusive (GTK_GESTURE_SINGLE (priv->select_info->multipress_gesture), TRUE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5489,6 +5492,9 @@ gtk_label_clear_select_info (GtkLabel *label)
|
|||||||
{
|
{
|
||||||
gtk_label_destroy_window (label);
|
gtk_label_destroy_window (label);
|
||||||
|
|
||||||
|
g_object_unref (priv->select_info->drag_gesture);
|
||||||
|
g_object_unref (priv->select_info->multipress_gesture);
|
||||||
|
|
||||||
g_free (priv->select_info);
|
g_free (priv->select_info);
|
||||||
priv->select_info = NULL;
|
priv->select_info = NULL;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user