Merge branch 'wip/carlosg/key-controller-fixes' into 'gtk-3-24'

key controller fixes

See merge request GNOME/gtk!1144
This commit is contained in:
Emmanuele Bassi 2019-10-21 22:33:55 +00:00
commit 4201a57a83
3 changed files with 19 additions and 16 deletions

View File

@ -47,6 +47,8 @@ struct _GtkEventControllerKey
GtkIMContext *im_context;
GHashTable *pressed_keys;
GdkModifierType state;
const GdkEvent *current_event;
};
@ -87,10 +89,10 @@ gtk_event_controller_key_handle_event (GtkEventController *controller,
{
GtkEventControllerKey *key = GTK_EVENT_CONTROLLER_KEY (controller);
GdkEventType event_type = gdk_event_get_event_type (event);
gboolean handled;
GdkModifierType state;
guint16 keycode;
guint keyval;
gboolean handled = FALSE;
if (event_type == GDK_FOCUS_CHANGE)
{
@ -112,23 +114,15 @@ gtk_event_controller_key_handle_event (GtkEventController *controller,
return TRUE;
}
if (!gdk_event_get_state (event, &state) || !event->key.is_modifier)
return FALSE;
key->current_event = event;
if (event->key.is_modifier)
gdk_event_get_state (event, &state);
if (key->state != state)
{
if (event_type == GDK_KEY_PRESS)
g_signal_emit (controller, signals[MODIFIERS], 0, state, &handled);
else
handled = TRUE;
gboolean unused;
if (handled == TRUE)
{
key->current_event = NULL;
return TRUE;
}
key->state = state;
g_signal_emit (controller, signals[MODIFIERS], 0, state, &unused);
}
gdk_event_get_keycode (event, &keycode);
@ -206,11 +200,11 @@ gtk_event_controller_key_class_init (GtkEventControllerKeyClass *klass)
GTK_TYPE_EVENT_CONTROLLER_KEY,
G_SIGNAL_RUN_LAST,
0, NULL, NULL,
_gtk_marshal_BOOLEAN__UINT_UINT_FLAGS,
_gtk_marshal_VOID__UINT_UINT_FLAGS,
G_TYPE_NONE, 3, G_TYPE_UINT, G_TYPE_UINT, GDK_TYPE_MODIFIER_TYPE);
g_signal_set_va_marshaller (signals[KEY_RELEASED],
G_TYPE_FROM_CLASS (klass),
_gtk_marshal_BOOLEAN__UINT_UINT_FLAGSv);
_gtk_marshal_VOID__UINT_UINT_FLAGSv);
signals[MODIFIERS] =
g_signal_new (I_("modifiers"),

View File

@ -115,6 +115,7 @@ VOID:STRING,UINT,FLAGS
VOID:STRING,UINT,FLAGS,UINT
VOID:UINT,FLAGS,BOXED
VOID:UINT,UINT
VOID:UINT,UINT,FLAGS
VOID:UINT,STRING
VOID:UINT,BOXED,UINT,FLAGS,FLAGS
VOID:UINT,OBJECT,UINT,FLAGS,FLAGS

View File

@ -7206,6 +7206,10 @@ static gboolean
gtk_widget_real_key_press_event (GtkWidget *widget,
GdkEventKey *event)
{
if (_gtk_widget_run_controllers (widget, (GdkEvent *) event,
GTK_PHASE_BUBBLE))
return GDK_EVENT_STOP;
return gtk_bindings_activate_event (G_OBJECT (widget), event);
}
@ -7213,6 +7217,10 @@ static gboolean
gtk_widget_real_key_release_event (GtkWidget *widget,
GdkEventKey *event)
{
if (_gtk_widget_run_controllers (widget, (GdkEvent *) event,
GTK_PHASE_BUBBLE))
return GDK_EVENT_STOP;
return gtk_bindings_activate_event (G_OBJECT (widget), event);
}