entry: Make DnD coordinate calculation compensate for entry icons

This made DnD have effect farther on the left when dragging text over
any entry with icons in it.

https://bugzilla.gnome.org/show_bug.cgi?id=725866
This commit is contained in:
Carlos Garnacho 2014-03-07 01:21:50 +01:00 committed by Matthias Clasen
parent adf39dd291
commit 43b0eee81d

View File

@ -9762,6 +9762,7 @@ gtk_entry_drag_motion (GtkWidget *widget,
{ {
GtkEntry *entry = GTK_ENTRY (widget); GtkEntry *entry = GTK_ENTRY (widget);
GtkEntryPrivate *priv = entry->priv; GtkEntryPrivate *priv = entry->priv;
GtkAllocation primary, secondary;
GtkStyleContext *style_context; GtkStyleContext *style_context;
GtkWidget *source_widget; GtkWidget *source_widget;
GdkDragAction suggested_action; GdkDragAction suggested_action;
@ -9774,6 +9775,13 @@ gtk_entry_drag_motion (GtkWidget *widget,
x -= padding.left; x -= padding.left;
y -= padding.top; y -= padding.top;
get_icon_allocations (entry, &primary, &secondary);
if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL)
x -= secondary.width;
else
x -= primary.width;
old_position = priv->dnd_position; old_position = priv->dnd_position;
new_position = gtk_entry_find_position (entry, x + priv->scroll_offset); new_position = gtk_entry_find_position (entry, x + priv->scroll_offset);
@ -9832,6 +9840,7 @@ gtk_entry_drag_data_received (GtkWidget *widget,
GtkEntry *entry = GTK_ENTRY (widget); GtkEntry *entry = GTK_ENTRY (widget);
GtkEntryPrivate *priv = entry->priv; GtkEntryPrivate *priv = entry->priv;
GtkEditable *editable = GTK_EDITABLE (widget); GtkEditable *editable = GTK_EDITABLE (widget);
GtkAllocation primary, secondary;
GtkStyleContext *style_context; GtkStyleContext *style_context;
GtkBorder padding; GtkBorder padding;
gchar *str; gchar *str;
@ -9843,6 +9852,13 @@ gtk_entry_drag_data_received (GtkWidget *widget,
x -= padding.left; x -= padding.left;
y -= padding.top; y -= padding.top;
get_icon_allocations (entry, &primary, &secondary);
if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL)
x -= secondary.width;
else
x -= primary.width;
if (str && priv->editable) if (str && priv->editable)
{ {
gint new_position; gint new_position;