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:
commit
4201a57a83
@ -47,6 +47,8 @@ struct _GtkEventControllerKey
|
|||||||
GtkIMContext *im_context;
|
GtkIMContext *im_context;
|
||||||
GHashTable *pressed_keys;
|
GHashTable *pressed_keys;
|
||||||
|
|
||||||
|
GdkModifierType state;
|
||||||
|
|
||||||
const GdkEvent *current_event;
|
const GdkEvent *current_event;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -87,10 +89,10 @@ gtk_event_controller_key_handle_event (GtkEventController *controller,
|
|||||||
{
|
{
|
||||||
GtkEventControllerKey *key = GTK_EVENT_CONTROLLER_KEY (controller);
|
GtkEventControllerKey *key = GTK_EVENT_CONTROLLER_KEY (controller);
|
||||||
GdkEventType event_type = gdk_event_get_event_type (event);
|
GdkEventType event_type = gdk_event_get_event_type (event);
|
||||||
gboolean handled;
|
|
||||||
GdkModifierType state;
|
GdkModifierType state;
|
||||||
guint16 keycode;
|
guint16 keycode;
|
||||||
guint keyval;
|
guint keyval;
|
||||||
|
gboolean handled = FALSE;
|
||||||
|
|
||||||
if (event_type == GDK_FOCUS_CHANGE)
|
if (event_type == GDK_FOCUS_CHANGE)
|
||||||
{
|
{
|
||||||
@ -112,23 +114,15 @@ gtk_event_controller_key_handle_event (GtkEventController *controller,
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!gdk_event_get_state (event, &state) || !event->key.is_modifier)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
key->current_event = event;
|
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)
|
gboolean unused;
|
||||||
g_signal_emit (controller, signals[MODIFIERS], 0, state, &handled);
|
|
||||||
else
|
|
||||||
handled = TRUE;
|
|
||||||
|
|
||||||
if (handled == TRUE)
|
key->state = state;
|
||||||
{
|
g_signal_emit (controller, signals[MODIFIERS], 0, state, &unused);
|
||||||
key->current_event = NULL;
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gdk_event_get_keycode (event, &keycode);
|
gdk_event_get_keycode (event, &keycode);
|
||||||
@ -206,11 +200,11 @@ gtk_event_controller_key_class_init (GtkEventControllerKeyClass *klass)
|
|||||||
GTK_TYPE_EVENT_CONTROLLER_KEY,
|
GTK_TYPE_EVENT_CONTROLLER_KEY,
|
||||||
G_SIGNAL_RUN_LAST,
|
G_SIGNAL_RUN_LAST,
|
||||||
0, NULL, NULL,
|
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_TYPE_NONE, 3, G_TYPE_UINT, G_TYPE_UINT, GDK_TYPE_MODIFIER_TYPE);
|
||||||
g_signal_set_va_marshaller (signals[KEY_RELEASED],
|
g_signal_set_va_marshaller (signals[KEY_RELEASED],
|
||||||
G_TYPE_FROM_CLASS (klass),
|
G_TYPE_FROM_CLASS (klass),
|
||||||
_gtk_marshal_BOOLEAN__UINT_UINT_FLAGSv);
|
_gtk_marshal_VOID__UINT_UINT_FLAGSv);
|
||||||
|
|
||||||
signals[MODIFIERS] =
|
signals[MODIFIERS] =
|
||||||
g_signal_new (I_("modifiers"),
|
g_signal_new (I_("modifiers"),
|
||||||
|
@ -115,6 +115,7 @@ VOID:STRING,UINT,FLAGS
|
|||||||
VOID:STRING,UINT,FLAGS,UINT
|
VOID:STRING,UINT,FLAGS,UINT
|
||||||
VOID:UINT,FLAGS,BOXED
|
VOID:UINT,FLAGS,BOXED
|
||||||
VOID:UINT,UINT
|
VOID:UINT,UINT
|
||||||
|
VOID:UINT,UINT,FLAGS
|
||||||
VOID:UINT,STRING
|
VOID:UINT,STRING
|
||||||
VOID:UINT,BOXED,UINT,FLAGS,FLAGS
|
VOID:UINT,BOXED,UINT,FLAGS,FLAGS
|
||||||
VOID:UINT,OBJECT,UINT,FLAGS,FLAGS
|
VOID:UINT,OBJECT,UINT,FLAGS,FLAGS
|
||||||
|
@ -7206,6 +7206,10 @@ static gboolean
|
|||||||
gtk_widget_real_key_press_event (GtkWidget *widget,
|
gtk_widget_real_key_press_event (GtkWidget *widget,
|
||||||
GdkEventKey *event)
|
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);
|
return gtk_bindings_activate_event (G_OBJECT (widget), event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -7213,6 +7217,10 @@ static gboolean
|
|||||||
gtk_widget_real_key_release_event (GtkWidget *widget,
|
gtk_widget_real_key_release_event (GtkWidget *widget,
|
||||||
GdkEventKey *event)
|
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);
|
return gtk_bindings_activate_event (G_OBJECT (widget), event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user