Merge branch 'master' into native-layout
This commit is contained in:
@@ -454,7 +454,8 @@ update_context_from_dragging_info (id <NSDraggingInfo> sender)
|
||||
|
||||
- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender
|
||||
{
|
||||
GdkEvent event;
|
||||
GdkEvent *event;
|
||||
GdkWindow *window;
|
||||
|
||||
if (current_context)
|
||||
g_object_unref (current_context);
|
||||
@@ -462,13 +463,22 @@ update_context_from_dragging_info (id <NSDraggingInfo> sender)
|
||||
current_context = gdk_drag_context_new ();
|
||||
update_context_from_dragging_info (sender);
|
||||
|
||||
event.dnd.type = GDK_DRAG_ENTER;
|
||||
event.dnd.window = g_object_ref ([[self contentView] gdkWindow]);
|
||||
event.dnd.send_event = FALSE;
|
||||
event.dnd.context = current_context;
|
||||
event.dnd.time = GDK_CURRENT_TIME;
|
||||
window = [[self contentView] gdkWindow];
|
||||
|
||||
(*_gdk_event_func) (&event, _gdk_event_data);
|
||||
gdk_drag_context_set_device (current_context,
|
||||
gdk_display_get_core_pointer (gdk_display_get_default ()));
|
||||
|
||||
event = gdk_event_new (GDK_DRAG_ENTER);
|
||||
event->dnd.window = g_object_ref (window);
|
||||
event->dnd.send_event = FALSE;
|
||||
event->dnd.context = g_object_ref (current_context);
|
||||
event->dnd.time = GDK_CURRENT_TIME;
|
||||
|
||||
gdk_event_set_device (event, gdk_drag_context_get_device (current_context));
|
||||
|
||||
(*_gdk_event_func) (event, _gdk_event_data);
|
||||
|
||||
gdk_event_free (event);
|
||||
|
||||
return NSDragOperationNone;
|
||||
}
|
||||
@@ -486,15 +496,19 @@ update_context_from_dragging_info (id <NSDraggingInfo> sender)
|
||||
|
||||
- (void)draggingExited:(id <NSDraggingInfo>)sender
|
||||
{
|
||||
GdkEvent event;
|
||||
GdkEvent *event;
|
||||
|
||||
event.dnd.type = GDK_DRAG_LEAVE;
|
||||
event.dnd.window = g_object_ref ([[self contentView] gdkWindow]);
|
||||
event.dnd.send_event = FALSE;
|
||||
event.dnd.context = current_context;
|
||||
event.dnd.time = GDK_CURRENT_TIME;
|
||||
event = gdk_event_new (GDK_DRAG_LEAVE);
|
||||
event->dnd.window = g_object_ref ([[self contentView] gdkWindow]);
|
||||
event->dnd.send_event = FALSE;
|
||||
event->dnd.context = g_object_ref (current_context);
|
||||
event->dnd.time = GDK_CURRENT_TIME;
|
||||
|
||||
(*_gdk_event_func) (&event, _gdk_event_data);
|
||||
gdk_event_set_device (event, gdk_drag_context_get_device (current_context));
|
||||
|
||||
(*_gdk_event_func) (event, _gdk_event_data);
|
||||
|
||||
gdk_event_free (event);
|
||||
|
||||
g_object_unref (current_context);
|
||||
current_context = NULL;
|
||||
@@ -504,23 +518,25 @@ update_context_from_dragging_info (id <NSDraggingInfo> sender)
|
||||
{
|
||||
NSPoint point = [sender draggingLocation];
|
||||
NSPoint screen_point = [self convertBaseToScreen:point];
|
||||
GdkEvent event;
|
||||
GdkEvent *event;
|
||||
int gx, gy;
|
||||
|
||||
update_context_from_dragging_info (sender);
|
||||
_gdk_quartz_window_nspoint_to_gdk_xy (screen_point, &gx, &gy);
|
||||
|
||||
event.dnd.type = GDK_DRAG_MOTION;
|
||||
event.dnd.window = g_object_ref ([[self contentView] gdkWindow]);
|
||||
event.dnd.send_event = FALSE;
|
||||
event.dnd.context = current_context;
|
||||
event.dnd.time = GDK_CURRENT_TIME;
|
||||
event.dnd.x_root = gx;
|
||||
event.dnd.y_root = gy;
|
||||
event = gdk_event_new (GDK_DRAG_MOTION);
|
||||
event->dnd.window = g_object_ref ([[self contentView] gdkWindow]);
|
||||
event->dnd.send_event = FALSE;
|
||||
event->dnd.context = g_object_ref (current_context);
|
||||
event->dnd.time = GDK_CURRENT_TIME;
|
||||
event->dnd.x_root = gx;
|
||||
event->dnd.y_root = gy;
|
||||
|
||||
(*_gdk_event_func) (&event, _gdk_event_data);
|
||||
gdk_event_set_device (event, gdk_drag_context_get_device (current_context));
|
||||
|
||||
g_object_unref (event.dnd.window);
|
||||
(*_gdk_event_func) (event, _gdk_event_data);
|
||||
|
||||
gdk_event_free (event);
|
||||
|
||||
return drag_action_to_drag_operation (current_context->action);
|
||||
}
|
||||
@@ -529,23 +545,25 @@ update_context_from_dragging_info (id <NSDraggingInfo> sender)
|
||||
{
|
||||
NSPoint point = [sender draggingLocation];
|
||||
NSPoint screen_point = [self convertBaseToScreen:point];
|
||||
GdkEvent event;
|
||||
GdkEvent *event;
|
||||
int gy, gx;
|
||||
|
||||
update_context_from_dragging_info (sender);
|
||||
_gdk_quartz_window_nspoint_to_gdk_xy (screen_point, &gx, &gy);
|
||||
|
||||
event.dnd.type = GDK_DROP_START;
|
||||
event.dnd.window = g_object_ref ([[self contentView] gdkWindow]);
|
||||
event.dnd.send_event = FALSE;
|
||||
event.dnd.context = current_context;
|
||||
event.dnd.time = GDK_CURRENT_TIME;
|
||||
event.dnd.x_root = gx;
|
||||
event.dnd.y_root = gy;
|
||||
event = gdk_event_new (GDK_DROP_START);
|
||||
event->dnd.window = g_object_ref ([[self contentView] gdkWindow]);
|
||||
event->dnd.send_event = FALSE;
|
||||
event->dnd.context = g_object_ref (current_context);
|
||||
event->dnd.time = GDK_CURRENT_TIME;
|
||||
event->dnd.x_root = gx;
|
||||
event->dnd.y_root = gy;
|
||||
|
||||
(*_gdk_event_func) (&event, _gdk_event_data);
|
||||
gdk_event_set_device (event, gdk_drag_context_get_device (current_context));
|
||||
|
||||
g_object_unref (event.dnd.window);
|
||||
(*_gdk_event_func) (event, _gdk_event_data);
|
||||
|
||||
gdk_event_free (event);
|
||||
|
||||
g_object_unref (current_context);
|
||||
current_context = NULL;
|
||||
@@ -560,18 +578,21 @@ update_context_from_dragging_info (id <NSDraggingInfo> sender)
|
||||
|
||||
- (void)draggedImage:(NSImage *)anImage endedAt:(NSPoint)aPoint operation:(NSDragOperation)operation
|
||||
{
|
||||
GdkEvent event;
|
||||
GdkEvent *event;
|
||||
|
||||
g_assert (_gdk_quartz_drag_source_context != NULL);
|
||||
|
||||
event.dnd.type = GDK_DROP_FINISHED;
|
||||
event.dnd.window = g_object_ref ([[self contentView] gdkWindow]);
|
||||
event.dnd.send_event = FALSE;
|
||||
event.dnd.context = _gdk_quartz_drag_source_context;
|
||||
event = gdk_event_new (GDK_DROP_FINISHED);
|
||||
event->dnd.window = g_object_ref ([[self contentView] gdkWindow]);
|
||||
event->dnd.send_event = FALSE;
|
||||
event->dnd.context = g_object_ref (_gdk_quartz_drag_source_context);
|
||||
|
||||
(*_gdk_event_func) (&event, _gdk_event_data);
|
||||
gdk_event_set_device (event,
|
||||
gdk_drag_context_get_device (_gdk_quartz_drag_source_context));
|
||||
|
||||
g_object_unref (event.dnd.window);
|
||||
(*_gdk_event_func) (event, _gdk_event_data);
|
||||
|
||||
gdk_event_free (event);
|
||||
|
||||
g_object_unref (_gdk_quartz_drag_source_context);
|
||||
_gdk_quartz_drag_source_context = NULL;
|
||||
|
||||
@@ -87,6 +87,56 @@ gdk_drag_context_new (void)
|
||||
return (GdkDragContext *)g_object_new (gdk_drag_context_get_type (), NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_drag_context_set_device:
|
||||
* @context: a #GdkDragContext
|
||||
* @device: a #GdkDevice
|
||||
*
|
||||
* Associates a #GdkDevice to @context, so all Drag and Drop events
|
||||
* for @context are emitted as if they came from this device.
|
||||
**/
|
||||
void
|
||||
gdk_drag_context_set_device (GdkDragContext *context,
|
||||
GdkDevice *device)
|
||||
{
|
||||
GdkDragContextPrivate *private;
|
||||
|
||||
g_return_if_fail (GDK_IS_DRAG_CONTEXT (context));
|
||||
g_return_if_fail (GDK_IS_DEVICE (device));
|
||||
|
||||
private = GDK_DRAG_CONTEXT_PRIVATE (context);
|
||||
|
||||
if (private->device)
|
||||
{
|
||||
g_object_unref (private->device);
|
||||
private->device = NULL;
|
||||
}
|
||||
|
||||
if (device)
|
||||
private->device = g_object_ref (device);
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_drag_context_get_device:
|
||||
* @context: a #GdkDragContext
|
||||
*
|
||||
* Returns the #GdkDevice associated to the drag context.
|
||||
*
|
||||
* Returns: The #GdkDevice associated to @context.
|
||||
**/
|
||||
GdkDevice *
|
||||
gdk_drag_context_get_device (GdkDragContext *context)
|
||||
{
|
||||
GdkDragContextPrivate *private;
|
||||
|
||||
g_return_val_if_fail (GDK_IS_DRAG_CONTEXT (context), NULL);
|
||||
|
||||
private = GDK_DRAG_CONTEXT_PRIVATE (context);
|
||||
|
||||
return private->device;
|
||||
}
|
||||
|
||||
|
||||
GdkDragContext *_gdk_quartz_drag_source_context = NULL;
|
||||
|
||||
GdkDragContext *
|
||||
@@ -104,6 +154,9 @@ gdk_drag_begin (GdkWindow *window,
|
||||
/* Create fake context */
|
||||
_gdk_quartz_drag_source_context = gdk_drag_context_new ();
|
||||
_gdk_quartz_drag_source_context->is_source = TRUE;
|
||||
|
||||
gdk_drag_context_set_device (_gdk_quartz_drag_source_context,
|
||||
gdk_display_get_core_pointer (gdk_display_get_default ()));
|
||||
|
||||
return _gdk_quartz_drag_source_context;
|
||||
}
|
||||
|
||||
@@ -94,6 +94,7 @@ struct _GdkCursorPrivate
|
||||
struct _GdkDragContextPrivate
|
||||
{
|
||||
id <NSDraggingInfo> dragging_info;
|
||||
GdkDevice *device;
|
||||
};
|
||||
|
||||
extern GdkDisplay *_gdk_display;
|
||||
|
||||
@@ -132,7 +132,7 @@ gdk_window_impl_quartz_get_context (GdkDrawable *drawable,
|
||||
cg_rects[i].size.height = cairo_rect.height;
|
||||
}
|
||||
|
||||
CGContextClipToRects (context, cg_rects, n_rects);
|
||||
CGContextClipToRects (cg_context, cg_rects, n_rects);
|
||||
|
||||
if (cg_rects != &rect)
|
||||
g_free (cg_rects);
|
||||
@@ -289,7 +289,7 @@ gdk_window_impl_quartz_begin_paint_region (GdkPaintable *paintable,
|
||||
int x, y;
|
||||
int x_offset, y_offset;
|
||||
int width, height;
|
||||
cairo_int_rectangle_t rect;
|
||||
cairo_rectangle_int_t rect;
|
||||
GdkGC *gc;
|
||||
|
||||
x_offset = y_offset = 0;
|
||||
|
||||
Reference in New Issue
Block a user