GtkShadowType shadow_type;
GtkWidget *popup_menu;
+ GdkDevice *device;
+
GdkDevice *completion_device;
GdkWindow *text_area;
GdkEventButton *event);
static gboolean gtk_entry_mnemonic_activate (GtkWidget *widget,
gboolean group_cycling);
+static void gtk_entry_grab_notify (GtkWidget *widget,
+ gboolean was_grabbed);
static void gtk_entry_check_cursor_blink (GtkEntry *entry);
static void gtk_entry_pend_cursor_blink (GtkEntry *entry);
static void gtk_entry_reset_blink_time (GtkEntry *entry);
widget_class->state_flags_changed = gtk_entry_state_flags_changed;
widget_class->screen_changed = gtk_entry_screen_changed;
widget_class->mnemonic_activate = gtk_entry_mnemonic_activate;
+ widget_class->grab_notify = gtk_entry_grab_notify;
widget_class->drag_drop = gtk_entry_drag_drop;
widget_class->drag_motion = gtk_entry_drag_motion;
gtk_entry_reset_blink_time (entry);
priv->button = event->button;
-
+ priv->device = gdk_event_get_device ((GdkEvent *) event);
+
if (!gtk_widget_has_focus (widget))
{
priv->in_click = TRUE;
{
gtk_entry_do_popup (entry, event);
priv->button = 0; /* Don't wait for release, since the menu will gtk_grab_add */
+ priv->device = NULL;
return TRUE;
}
priv->in_drag = 0;
}
-
+
priv->button = 0;
-
+ priv->device = NULL;
+
gtk_entry_update_primary_selection (entry);
return TRUE;
priv->in_drag = FALSE;
priv->button = 0;
-
+ priv->device = NULL;
+
gtk_target_list_unref (target_list);
}
}
return TRUE;
}
+static void
+gtk_entry_grab_notify (GtkWidget *widget,
+ gboolean was_grabbed)
+{
+ GtkEntryPrivate *priv;
+
+ priv = GTK_ENTRY (widget)->priv;
+
+ if (priv->device &&
+ gtk_widget_device_is_shadowed (widget, priv->device))
+ {
+ /* Unset button so we don't expect
+ * a button release anymore
+ */
+ priv->button = 0;
+ priv->device = NULL;
+ priv->in_drag = FALSE;
+ }
+}
+
static void
append_action_signal (GtkEntry *entry,
GtkWidget *menu,