*
* TODO: Can we improve grab breaking to fix this?
*/
- _gdk_macos_display_send_button_event ([self gdkDisplay], event);
+ _gdk_macos_display_send_event ([self gdkDisplay], event);
_gdk_macos_display_break_all_grabs (GDK_MACOS_DISPLAY (display), time);
- (void)draggingSession:(NSDraggingSession *)session movedToPoint:(NSPoint)screenPoint
{
NSInteger sequence_number = [session draggingSequenceNumber];
- GdkDisplay *display = gdk_surface_get_display (GDK_SURFACE (gdk_surface));
+ GdkMacosDisplay *display = GDK_MACOS_DISPLAY (gdk_surface_get_display (GDK_SURFACE (gdk_surface)));
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_send_event (display, [NSApp currentEvent]);
- _gdk_macos_display_from_display_coords (GDK_MACOS_DISPLAY (display), screenPoint.x, screenPoint.y, &x, &y);
+ _gdk_macos_display_from_display_coords (display, screenPoint.x, screenPoint.y, &x, &y);
_gdk_macos_drag_surface_move (GDK_MACOS_DRAG (drag), x, y);
}
- (void)draggingSession:(NSDraggingSession *)session endedAtPoint:(NSPoint)screenPoint operation:(NSDragOperation)operation
{
NSInteger sequence_number = [session draggingSequenceNumber];
- GdkDisplay *display = gdk_surface_get_display (GDK_SURFACE (gdk_surface));
- GdkDrag *drag = _gdk_macos_display_find_drag (GDK_MACOS_DISPLAY (display), sequence_number);
+ GdkMacosDisplay *display = GDK_MACOS_DISPLAY (gdk_surface_get_display (GDK_SURFACE (gdk_surface)));
+ GdkDrag *drag = _gdk_macos_display_find_drag (display, sequence_number);
- _gdk_macos_event_source_queue_event ([NSApp currentEvent]);
+ _gdk_macos_display_send_event (display, [NSApp currentEvent]);
gdk_drag_set_selected_action (drag, _gdk_macos_drag_ns_operation_to_action (operation));
if (gdk_drag_get_selected_action (drag) != 0)
else
gdk_drag_cancel (drag, GDK_DRAG_CANCEL_NO_TARGET);
- _gdk_macos_display_set_drag (GDK_MACOS_DISPLAY (display), [session draggingSequenceNumber], NULL);
+ _gdk_macos_display_set_drag (display, [session draggingSequenceNumber], NULL);
}
// end
return g_steal_pointer (&ret);
}
+
+static GdkEvent *
+fill_event (GdkMacosDisplay *self,
+ GdkMacosWindow *window,
+ NSEvent *nsevent,
+ int x,
+ int y)
+{
+ GdkMacosSurface *surface = [window gdkSurface];
+ NSEventType event_type = [nsevent type];
+ GdkEvent *ret = NULL;
+
+ switch ((int)event_type)
+ {
+ case NSEventTypeLeftMouseDown:
+ case NSEventTypeRightMouseDown:
+ case NSEventTypeOtherMouseDown:
+ case NSEventTypeLeftMouseUp:
+ case NSEventTypeRightMouseUp:
+ case NSEventTypeOtherMouseUp:
+ ret = fill_button_event (self, surface, nsevent, x, y);
+ break;
+
+ case NSEventTypeLeftMouseDragged:
+ case NSEventTypeRightMouseDragged:
+ case NSEventTypeOtherMouseDragged:
+ case NSEventTypeMouseMoved:
+ ret = fill_motion_event (self, surface, nsevent, x, y);
+ break;
+
+ case NSEventTypeMagnify:
+ case NSEventTypeRotate:
+ ret = fill_pinch_event (self, surface, nsevent, x, y);
+ break;
+
+ case NSEventTypeMouseExited:
+ case NSEventTypeMouseEntered:
+ {
+ GdkSeat *seat = gdk_display_get_default_seat (GDK_DISPLAY (self));
+ GdkDevice *pointer = gdk_seat_get_pointer (seat);
+ GdkDeviceGrabInfo *grab = _gdk_display_get_last_device_grab (GDK_DISPLAY (self), pointer);
+
+ if ([(GdkMacosWindow *)window isInManualResizeOrMove])
+ {
+ ret = GDK_MACOS_EVENT_DROP;
+ }
+ else if (grab == NULL)
+ {
+ if (event_type == NSEventTypeMouseExited)
+ [[NSCursor arrowCursor] set];
+
+ ret = synthesize_crossing_event (self, surface, nsevent, x, y);
+ }
+ }
+
+ break;
+
+ case NSEventTypeKeyDown:
+ case NSEventTypeKeyUp:
+ case NSEventTypeFlagsChanged: {
+ GdkEventType type = _gdk_macos_keymap_get_event_type (nsevent);
+
+ if (type)
+ ret = fill_key_event (self, surface, nsevent, type);
+
+ break;
+ }
+
+ case NSEventTypeScrollWheel:
+ ret = fill_scroll_event (self, surface, nsevent, x, y);
+ break;
+
+ default:
+ break;
+ }
+
+ return ret;
+}
+
static gboolean
is_mouse_button_press_event (NSEventType type)
{
GdkMacosWindow *window;
NSEventType event_type;
NSWindow *event_window;
- GdkEvent *ret = NULL;
int x;
int y;
_gdk_macos_display_clear_sorting (self);
}
}
-
- switch ((int)event_type)
- {
- case NSEventTypeLeftMouseDown:
- case NSEventTypeRightMouseDown:
- case NSEventTypeOtherMouseDown:
- case NSEventTypeLeftMouseUp:
- case NSEventTypeRightMouseUp:
- case NSEventTypeOtherMouseUp:
- ret = fill_button_event (self, surface, nsevent, x, y);
- break;
-
- case NSEventTypeLeftMouseDragged:
- case NSEventTypeRightMouseDragged:
- case NSEventTypeOtherMouseDragged:
- case NSEventTypeMouseMoved:
- ret = fill_motion_event (self, surface, nsevent, x, y);
- break;
-
- case NSEventTypeMagnify:
- case NSEventTypeRotate:
- ret = fill_pinch_event (self, surface, nsevent, x, y);
- break;
-
- case NSEventTypeMouseExited:
- case NSEventTypeMouseEntered:
- {
- GdkSeat *seat = gdk_display_get_default_seat (GDK_DISPLAY (self));
- GdkDevice *pointer = gdk_seat_get_pointer (seat);
- GdkDeviceGrabInfo *grab = _gdk_display_get_last_device_grab (GDK_DISPLAY (self), pointer);
-
- if ([(GdkMacosWindow *)window isInManualResizeOrMove])
- {
- ret = GDK_MACOS_EVENT_DROP;
- }
- else if (grab == NULL)
- {
- if (event_type == NSEventTypeMouseExited)
- [[NSCursor arrowCursor] set];
-
- ret = synthesize_crossing_event (self, surface, nsevent, x, y);
- }
- }
-
- break;
-
- case NSEventTypeKeyDown:
- case NSEventTypeKeyUp:
- case NSEventTypeFlagsChanged: {
- GdkEventType type = _gdk_macos_keymap_get_event_type (nsevent);
-
- if (type)
- ret = fill_key_event (self, surface, nsevent, type);
-
- break;
- }
-
- case NSEventTypeScrollWheel:
- ret = fill_scroll_event (self, surface, nsevent, x, y);
- break;
-
- default:
- break;
- }
-
- return ret;
+ return fill_event (self, window, nsevent, x, y);
}
void
-_gdk_macos_display_send_button_event (GdkMacosDisplay *self,
- NSEvent *nsevent)
+_gdk_macos_display_send_event (GdkMacosDisplay *self,
+ NSEvent *nsevent)
{
GdkMacosSurface *surface;
+ GdkMacosWindow *window;
GdkEvent *event;
int x;
int y;
g_return_if_fail (nsevent != NULL);
if ((surface = find_surface_for_ns_event (self, nsevent, &x, &y)) &&
- (event = fill_button_event (self, surface, nsevent, x, y)))
+ (window = (GdkMacosWindow *)_gdk_macos_surface_get_native (surface)) &&
+ (event = fill_event (self, window, nsevent, x, y)))
_gdk_windowing_got_event (GDK_DISPLAY (self),
_gdk_event_queue_append (GDK_DISPLAY (self), event),
event,