#include "gdkmacosdisplay-private.h"
#include "gdkmacosdrag-private.h"
#include "gdkmacosdrop-private.h"
+#include "gdkmacoseventsource-private.h"
#include "gdkmacosmonitor-private.h"
#include "gdkmacospasteboard-private.h"
#include "gdkmacossurface-private.h"
GdkDrag *drag = _gdk_macos_display_find_drag (GDK_MACOS_DISPLAY (display), sequence_number);
int x, y;
+ _gdk_macos_event_source_queue_event ([NSApp currentEvent]);
+
_gdk_macos_display_from_display_coords (GDK_MACOS_DISPLAY (display), screenPoint.x, screenPoint.y, &x, &y);
_gdk_macos_drag_surface_move (GDK_MACOS_DRAG (drag), x, y);
}
GdkDisplay *display = gdk_surface_get_display (GDK_SURFACE (gdk_surface));
GdkDrag *drag = _gdk_macos_display_find_drag (GDK_MACOS_DISPLAY (display), sequence_number);
+ _gdk_macos_event_source_queue_event ([NSApp currentEvent]);
+
if (gdk_drag_get_selected_action (drag) != 0)
g_signal_emit_by_name (drag, "drop-performed");
else
GSource *_gdk_macos_event_source_new (GdkMacosDisplay *display);
NSEvent *_gdk_macos_event_source_get_pending (void);
gboolean _gdk_macos_event_source_check_pending (void);
+void _gdk_macos_event_source_queue_event (NSEvent *event);
G_END_DECLS
return event;
}
+void
+_gdk_macos_event_source_queue_event (NSEvent *event)
+{
+ /* Just used to wake us up; if an event and a FD arrived at the same
+ * time; could have come from a previous iteration in some cases,
+ * but the spurious wake up is harmless if a little inefficient.
+ */
+ if (!event ||
+ ([event type] == NSEventTypeApplicationDefined &&
+ [event subtype] == GDK_MACOS_EVENT_SUBTYPE_EVENTLOOP))
+ return;
+
+ if (!current_events)
+ current_events = g_queue_new ();
+ g_queue_push_head (current_events, [event retain]);
+}
+
static gboolean
gdk_macos_event_source_prepare (GSource *source,
int *timeout)
if (last_ufds == ufds && n_ready < 0)
n_ready = select_thread_collect_poll (ufds, nfds);
- if (event &&
- [event type] == NSEventTypeApplicationDefined &&
- [event subtype] == GDK_MACOS_EVENT_SUBTYPE_EVENTLOOP)
- {
- /* Just used to wake us up; if an event and a FD arrived at the same
- * time; could have come from a previous iteration in some cases,
- * but the spurious wake up is harmless if a little inefficient.
- */
- event = NULL;
- }
-
- if (event)
- {
- if (!current_events)
- current_events = g_queue_new ();
- g_queue_push_head (current_events, [event retain]);
- }
+ _gdk_macos_event_source_queue_event (event);
return n_ready;
}