[gtk/ebassi/for-master: 1/3] Add private accessor for GdkKeyEvent.translated



commit 0cf5b66e7b0fda0857f18be602184e2891d9b6ae
Author: Emmanuele Bassi <ebassi gnome org>
Date:   Fri May 22 12:35:58 2020 +0100

    Add private accessor for GdkKeyEvent.translated
    
    Avoid accessing the event structure directly, even from within GTK.

 gdk/gdkevents.c        | 26 ++++++++++++++++++++++++++
 gdk/gdkeventsprivate.h |  3 +++
 2 files changed, 29 insertions(+)
---
diff --git a/gdk/gdkevents.c b/gdk/gdkevents.c
index 5495d5e6ca..cc26f2f085 100644
--- a/gdk/gdkevents.c
+++ b/gdk/gdkevents.c
@@ -1466,6 +1466,32 @@ gdk_key_event_new (GdkEventType      type,
   return event;
 }
 
+/*< private >
+ * gdk_key_event_get_translated_key:
+ * @event: (type GdkKeyEvent): a key event
+ * @no_lock: whether the translated key should take the event
+ *   state into account
+ *
+ * Extracts the translated key from a key event.
+ *
+ * Returns: (transfer none): the translated key
+ */
+GdkTranslatedKey *
+gdk_key_event_get_translated_key (GdkEvent *event,
+                                  gboolean  no_lock)
+{
+  GdkKeyEvent *self = (GdkKeyEvent *) event;
+
+  g_return_val_if_fail (GDK_IS_EVENT (event), NULL);
+  g_return_val_if_fail (GDK_IS_EVENT_TYPE (event, GDK_KEY_PRESS) ||
+                        GDK_IS_EVENT_TYPE (event, GDK_KEY_RELEASE), NULL);
+
+  if (no_lock)
+    return &(self->translated[1]);
+
+  return &(self->translated[0]);
+}
+
 /**
  * gdk_key_event_get_keyval:
  * @event: (type GdkKeyEvent): a key event
diff --git a/gdk/gdkeventsprivate.h b/gdk/gdkeventsprivate.h
index 0a7b1300cd..eca81486d2 100644
--- a/gdk/gdkeventsprivate.h
+++ b/gdk/gdkeventsprivate.h
@@ -612,6 +612,9 @@ GdkEvent * gdk_grab_broken_event_new    (GdkSurface      *surface,
                                          GdkSurface      *grab_surface,
                                          gboolean         implicit);
 
+GdkTranslatedKey *      gdk_key_event_get_translated_key        (GdkEvent *event,
+                                                                 gboolean  no_lock);
+
 G_END_DECLS
 
 #endif /* __GDK_EVENTS_PRIVATE_H__ */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]