[gtk/wip/chergert/for-4-6: 42/56] macos: allow dropping NSEvent without propagation




commit 913f6d4a4fc63f2ba19c00b8db6d9c3ab268adc9
Author: Christian Hergert <christian hergert me>
Date:   Wed Mar 9 13:19:22 2022 -0800

    macos: allow dropping NSEvent without propagation
    
    There are cases we might want to consume a NSEvent without creating a
    GdkEvent or passing it along to the NSApplication for processing. This
    creates a new value we can use and check against to propagate that without
    having to do out parameters at the slightly odd invalid pointer value for
    a GdkEvent (similar to how MMAP_FAILED is done).

 gdk/macos/gdkmacosdisplay-private.h | 2 ++
 gdk/macos/gdkmacosdisplay.c         | 6 +++++-
 2 files changed, 7 insertions(+), 1 deletion(-)
---
diff --git a/gdk/macos/gdkmacosdisplay-private.h b/gdk/macos/gdkmacosdisplay-private.h
index ef17618d61..72b5f5cd57 100644
--- a/gdk/macos/gdkmacosdisplay-private.h
+++ b/gdk/macos/gdkmacosdisplay-private.h
@@ -43,6 +43,8 @@ G_BEGIN_DECLS
 #define GIC_FILTER_PASSTHRU  0
 #define GIC_FILTER_FILTERED  1
 
+#define GDK_MACOS_EVENT_DROP (GdkEvent *)GSIZE_TO_POINTER(1)
+
 struct _GdkMacosDisplay
 {
   GdkDisplay parent_instance;
diff --git a/gdk/macos/gdkmacosdisplay.c b/gdk/macos/gdkmacosdisplay.c
index bc58c2a6f3..9fbfac49ed 100644
--- a/gdk/macos/gdkmacosdisplay.c
+++ b/gdk/macos/gdkmacosdisplay.c
@@ -314,7 +314,11 @@ gdk_macos_display_queue_events (GdkDisplay *display)
     {
       GdkEvent *event = _gdk_macos_display_translate (self, nsevent);
 
-      if (event != NULL)
+      if (event == GDK_MACOS_EVENT_DROP)
+        {
+          [nsevent release];
+        }
+      else if (event != NULL)
         {
           push_nsevent (event, nsevent);
           _gdk_windowing_got_event (GDK_DISPLAY (self),


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