Add the GDK part of the DND implementation.
2006-03-21 Anders Carlsson <andersca@imendio.com> * gdk/quartz/GdkQuartzWindow.c: (drag_operation_to_drag_action): (drag_action_to_drag_operation): (update_context_from_dragging_info): (-[GdkQuartzWindow draggingEntered:]): (-[GdkQuartzWindow draggingEnded:]): (-[GdkQuartzWindow draggingExited:]): (-[GdkQuartzWindow draggingUpdated:]): (-[GdkQuartzWindow performDragOperation:]): (-[GdkQuartzWindow wantsPeriodicDraggingUpdates]): (-[GdkQuartzWindow draggedImage:endedAt:operation:]): * gdk/quartz/gdkdnd-quartz.c: (gdk_drag_context_finalize): (gdk_drag_context_init): (gdk_drag_context_class_init): (gdk_drag_begin): (gdk_drag_status): Add the GDK part of the DND implementation. * gdk/quartz/Makefile.am: Add some missing headers. * gdk/quartz/gdkdrawable-quartz.h: * gdk/quartz/gdkprivate-quartz.h: * gdk/quartz/gdkquartz.h: * gdk/quartz/gdkwindow-quartz.c: (gdk_quartz_window_get_nsview): New function, for use by the GTK part of the DND implementation
This commit is contained in:
committed by
Anders Carlsson
parent
ac3643d8f3
commit
6b1510bf23
31
ChangeLog
31
ChangeLog
@ -1,3 +1,34 @@
|
|||||||
|
2006-03-21 Anders Carlsson <andersca@imendio.com>
|
||||||
|
|
||||||
|
* gdk/quartz/GdkQuartzWindow.c:
|
||||||
|
(drag_operation_to_drag_action):
|
||||||
|
(drag_action_to_drag_operation):
|
||||||
|
(update_context_from_dragging_info):
|
||||||
|
(-[GdkQuartzWindow draggingEntered:]):
|
||||||
|
(-[GdkQuartzWindow draggingEnded:]):
|
||||||
|
(-[GdkQuartzWindow draggingExited:]):
|
||||||
|
(-[GdkQuartzWindow draggingUpdated:]):
|
||||||
|
(-[GdkQuartzWindow performDragOperation:]):
|
||||||
|
(-[GdkQuartzWindow wantsPeriodicDraggingUpdates]):
|
||||||
|
(-[GdkQuartzWindow draggedImage:endedAt:operation:]):
|
||||||
|
* gdk/quartz/gdkdnd-quartz.c:
|
||||||
|
(gdk_drag_context_finalize):
|
||||||
|
(gdk_drag_context_init):
|
||||||
|
(gdk_drag_context_class_init):
|
||||||
|
(gdk_drag_begin):
|
||||||
|
(gdk_drag_status):
|
||||||
|
Add the GDK part of the DND implementation.
|
||||||
|
|
||||||
|
* gdk/quartz/Makefile.am:
|
||||||
|
Add some missing headers.
|
||||||
|
|
||||||
|
* gdk/quartz/gdkdrawable-quartz.h:
|
||||||
|
* gdk/quartz/gdkprivate-quartz.h:
|
||||||
|
* gdk/quartz/gdkquartz.h:
|
||||||
|
* gdk/quartz/gdkwindow-quartz.c:
|
||||||
|
(gdk_quartz_window_get_nsview):
|
||||||
|
New function, for use by the GTK part of the DND implementation
|
||||||
|
|
||||||
2006-03-21 Anders Carlsson <andersca@imendio.com>
|
2006-03-21 Anders Carlsson <andersca@imendio.com>
|
||||||
|
|
||||||
* gdk/quartz/gdkdrawable-quartz.c:
|
* gdk/quartz/gdkdrawable-quartz.c:
|
||||||
|
|||||||
@ -1,3 +1,34 @@
|
|||||||
|
2006-03-21 Anders Carlsson <andersca@imendio.com>
|
||||||
|
|
||||||
|
* gdk/quartz/GdkQuartzWindow.c:
|
||||||
|
(drag_operation_to_drag_action):
|
||||||
|
(drag_action_to_drag_operation):
|
||||||
|
(update_context_from_dragging_info):
|
||||||
|
(-[GdkQuartzWindow draggingEntered:]):
|
||||||
|
(-[GdkQuartzWindow draggingEnded:]):
|
||||||
|
(-[GdkQuartzWindow draggingExited:]):
|
||||||
|
(-[GdkQuartzWindow draggingUpdated:]):
|
||||||
|
(-[GdkQuartzWindow performDragOperation:]):
|
||||||
|
(-[GdkQuartzWindow wantsPeriodicDraggingUpdates]):
|
||||||
|
(-[GdkQuartzWindow draggedImage:endedAt:operation:]):
|
||||||
|
* gdk/quartz/gdkdnd-quartz.c:
|
||||||
|
(gdk_drag_context_finalize):
|
||||||
|
(gdk_drag_context_init):
|
||||||
|
(gdk_drag_context_class_init):
|
||||||
|
(gdk_drag_begin):
|
||||||
|
(gdk_drag_status):
|
||||||
|
Add the GDK part of the DND implementation.
|
||||||
|
|
||||||
|
* gdk/quartz/Makefile.am:
|
||||||
|
Add some missing headers.
|
||||||
|
|
||||||
|
* gdk/quartz/gdkdrawable-quartz.h:
|
||||||
|
* gdk/quartz/gdkprivate-quartz.h:
|
||||||
|
* gdk/quartz/gdkquartz.h:
|
||||||
|
* gdk/quartz/gdkwindow-quartz.c:
|
||||||
|
(gdk_quartz_window_get_nsview):
|
||||||
|
New function, for use by the GTK part of the DND implementation
|
||||||
|
|
||||||
2006-03-21 Anders Carlsson <andersca@imendio.com>
|
2006-03-21 Anders Carlsson <andersca@imendio.com>
|
||||||
|
|
||||||
* gdk/quartz/gdkdrawable-quartz.c:
|
* gdk/quartz/gdkdrawable-quartz.c:
|
||||||
|
|||||||
@ -143,4 +143,153 @@
|
|||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GdkDragContext *current_context = NULL;
|
||||||
|
|
||||||
|
static GdkDragAction
|
||||||
|
drag_operation_to_drag_action (NSDragOperation operation)
|
||||||
|
{
|
||||||
|
GdkDragAction result = 0;
|
||||||
|
|
||||||
|
if (operation & NSDragOperationGeneric)
|
||||||
|
result |= GDK_ACTION_COPY;
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
static NSDragOperation
|
||||||
|
drag_action_to_drag_operation (GdkDragAction action)
|
||||||
|
{
|
||||||
|
NSDragOperation result = 0;
|
||||||
|
|
||||||
|
if (action & GDK_ACTION_COPY)
|
||||||
|
result |= NSDragOperationCopy;
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
update_context_from_dragging_info (id <NSDraggingInfo> sender)
|
||||||
|
{
|
||||||
|
g_assert (current_context != NULL);
|
||||||
|
|
||||||
|
GDK_DRAG_CONTEXT_PRIVATE (current_context)->dragging_info = sender;
|
||||||
|
current_context->suggested_action = drag_operation_to_drag_action ([sender draggingSourceOperationMask]);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender
|
||||||
|
{
|
||||||
|
GdkEvent event;
|
||||||
|
|
||||||
|
if (current_context)
|
||||||
|
g_object_unref (current_context);
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
(*_gdk_event_func) (&event, _gdk_event_data);
|
||||||
|
|
||||||
|
return NSDragOperationNone;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)draggingEnded:(id <NSDraggingInfo>)sender
|
||||||
|
{
|
||||||
|
g_object_unref (current_context);
|
||||||
|
current_context = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)draggingExited:(id <NSDraggingInfo>)sender
|
||||||
|
{
|
||||||
|
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;
|
||||||
|
|
||||||
|
(*_gdk_event_func) (&event, _gdk_event_data);
|
||||||
|
|
||||||
|
g_object_unref (current_context);
|
||||||
|
current_context = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSDragOperation)draggingUpdated:(id <NSDraggingInfo>)sender
|
||||||
|
{
|
||||||
|
NSPoint point = [sender draggingLocation];
|
||||||
|
NSPoint screen_point = [self convertBaseToScreen:point];
|
||||||
|
GdkEvent event;
|
||||||
|
|
||||||
|
update_context_from_dragging_info (sender);
|
||||||
|
|
||||||
|
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 = screen_point.x;
|
||||||
|
event.dnd.y_root = _gdk_quartz_get_inverted_screen_y (screen_point.y);
|
||||||
|
|
||||||
|
(*_gdk_event_func) (&event, _gdk_event_data);
|
||||||
|
|
||||||
|
g_object_unref (event.dnd.window);
|
||||||
|
|
||||||
|
return drag_action_to_drag_operation (current_context->action);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender
|
||||||
|
{
|
||||||
|
NSPoint point = [sender draggingLocation];
|
||||||
|
NSPoint screen_point = [self convertBaseToScreen:point];
|
||||||
|
GdkEvent event;
|
||||||
|
|
||||||
|
update_context_from_dragging_info (sender);
|
||||||
|
|
||||||
|
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 = screen_point.x;
|
||||||
|
event.dnd.y_root = _gdk_quartz_get_inverted_screen_y (screen_point.y);
|
||||||
|
|
||||||
|
(*_gdk_event_func) (&event, _gdk_event_data);
|
||||||
|
|
||||||
|
g_object_unref (event.dnd.window);
|
||||||
|
|
||||||
|
g_object_unref (current_context);
|
||||||
|
current_context = NULL;
|
||||||
|
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)wantsPeriodicDraggingUpdates
|
||||||
|
{
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)draggedImage:(NSImage *)anImage endedAt:(NSPoint)aPoint operation:(NSDragOperation)operation
|
||||||
|
{
|
||||||
|
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;
|
||||||
|
|
||||||
|
(*_gdk_event_func) (&event, _gdk_event_data);
|
||||||
|
|
||||||
|
g_object_unref (event.dnd.window);
|
||||||
|
|
||||||
|
g_object_unref (_gdk_quartz_drag_source_context);
|
||||||
|
_gdk_quartz_drag_source_context = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@ -26,19 +26,23 @@ libgdk_quartz_la_SOURCES = \
|
|||||||
gdkdisplay-quartz.c \
|
gdkdisplay-quartz.c \
|
||||||
gdkdnd-quartz.c \
|
gdkdnd-quartz.c \
|
||||||
gdkdrawable-quartz.c \
|
gdkdrawable-quartz.c \
|
||||||
|
gdkdrawable-quartz.h \
|
||||||
gdkevents-quartz.c \
|
gdkevents-quartz.c \
|
||||||
gdkfont-quartz.c \
|
gdkfont-quartz.c \
|
||||||
gdkgc-quartz.c \
|
gdkgc-quartz.c \
|
||||||
gdkgeometry-quartz.c \
|
gdkgeometry-quartz.c \
|
||||||
gdkglobals-quartz.c \
|
gdkglobals-quartz.c \
|
||||||
gdkim-quartz.c \
|
gdkim-quartz.c \
|
||||||
gdkimage-quartz.c \
|
gdkimage-quartz.c \
|
||||||
gdkinput.c \
|
gdkinput.c \
|
||||||
gdkkeys-quartz.c \
|
gdkkeys-quartz.c \
|
||||||
gdkmain-quartz.c \
|
gdkmain-quartz.c \
|
||||||
gdkpixmap-quartz.c \
|
gdkpixmap-quartz.c \
|
||||||
|
gdkpixmap-quartz.h \
|
||||||
gdkproperty-quartz.c \
|
gdkproperty-quartz.c \
|
||||||
|
gdkquartz.h \
|
||||||
gdkscreen-quartz.c \
|
gdkscreen-quartz.c \
|
||||||
gdkselection-quartz.c \
|
gdkselection-quartz.c \
|
||||||
gdkvisual-quartz.c \
|
gdkvisual-quartz.c \
|
||||||
gdkwindow-quartz.c
|
gdkwindow-quartz.c \
|
||||||
|
gdkwindow-quartz.h \
|
||||||
|
|||||||
@ -19,17 +19,37 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "gdkdnd.h"
|
#include "gdkdnd.h"
|
||||||
|
#include "gdkprivate-quartz.h"
|
||||||
|
|
||||||
|
static gpointer parent_class = NULL;
|
||||||
|
|
||||||
|
static void
|
||||||
|
gdk_drag_context_finalize (GObject *object)
|
||||||
|
{
|
||||||
|
GdkDragContext *context = GDK_DRAG_CONTEXT (object);
|
||||||
|
GdkDragContextPrivate *private = GDK_DRAG_CONTEXT_PRIVATE (context);
|
||||||
|
|
||||||
|
g_free (private);
|
||||||
|
|
||||||
|
G_OBJECT_CLASS (parent_class)->finalize (object);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gdk_drag_context_init (GdkDragContext *dragcontext)
|
gdk_drag_context_init (GdkDragContext *dragcontext)
|
||||||
{
|
{
|
||||||
/* FIXME: Implement */
|
GdkDragContextPrivate *priv = g_new0 (GdkDragContextPrivate, 1);
|
||||||
|
|
||||||
|
dragcontext->windowing_data = priv;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gdk_drag_context_class_init (GdkDragContextClass *klass)
|
gdk_drag_context_class_init (GdkDragContextClass *klass)
|
||||||
{
|
{
|
||||||
/* FIXME: Implement */
|
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||||
|
|
||||||
|
parent_class = g_type_class_peek_parent (klass);
|
||||||
|
|
||||||
|
object_class->finalize = gdk_drag_context_finalize;
|
||||||
}
|
}
|
||||||
|
|
||||||
GType
|
GType
|
||||||
@ -79,12 +99,19 @@ gdk_drag_context_unref (GdkDragContext *context)
|
|||||||
g_object_unref (context);
|
g_object_unref (context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GdkDragContext *_gdk_quartz_drag_source_context = NULL;
|
||||||
|
|
||||||
GdkDragContext *
|
GdkDragContext *
|
||||||
gdk_drag_begin (GdkWindow *window,
|
gdk_drag_begin (GdkWindow *window,
|
||||||
GList *targets)
|
GList *targets)
|
||||||
{
|
{
|
||||||
/* FIXME: Implement */
|
g_assert (_gdk_quartz_drag_source_context == NULL);
|
||||||
return NULL;
|
|
||||||
|
/* Create fake context */
|
||||||
|
_gdk_quartz_drag_source_context = gdk_drag_context_new ();
|
||||||
|
_gdk_quartz_drag_source_context->is_source = TRUE;
|
||||||
|
|
||||||
|
return _gdk_quartz_drag_source_context;
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
@ -143,7 +170,7 @@ gdk_drag_status (GdkDragContext *context,
|
|||||||
GdkDragAction action,
|
GdkDragAction action,
|
||||||
guint32 time)
|
guint32 time)
|
||||||
{
|
{
|
||||||
/* FIXME: Implement */
|
context->action = action;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|||||||
@ -22,7 +22,6 @@
|
|||||||
#define __GDK_DRAWABLE_QUARTZ_H__
|
#define __GDK_DRAWABLE_QUARTZ_H__
|
||||||
|
|
||||||
#include <gdk/gdkdrawable.h>
|
#include <gdk/gdkdrawable.h>
|
||||||
#include <gdk/quartz/gdkquartz.h>
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
|||||||
@ -41,9 +41,12 @@
|
|||||||
#define GDK_IS_GC_QUARTZ_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_GC_QUARTZ))
|
#define GDK_IS_GC_QUARTZ_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_GC_QUARTZ))
|
||||||
#define GDK_GC_QUARTZ_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_GC_QUARTZ, GdkGCQuartzClass))
|
#define GDK_GC_QUARTZ_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_GC_QUARTZ, GdkGCQuartzClass))
|
||||||
|
|
||||||
|
#define GDK_DRAG_CONTEXT_PRIVATE(context) ((GdkDragContextPrivate *) GDK_DRAG_CONTEXT (context)->windowing_data)
|
||||||
|
|
||||||
typedef struct _GdkCursorPrivate GdkCursorPrivate;
|
typedef struct _GdkCursorPrivate GdkCursorPrivate;
|
||||||
typedef struct _GdkGCQuartz GdkGCQuartz;
|
typedef struct _GdkGCQuartz GdkGCQuartz;
|
||||||
typedef struct _GdkGCQuartzClass GdkGCQuartzClass;
|
typedef struct _GdkGCQuartzClass GdkGCQuartzClass;
|
||||||
|
typedef struct _GdkDragContextPrivate GdkDragContextPrivate;
|
||||||
|
|
||||||
struct _GdkGCQuartz
|
struct _GdkGCQuartz
|
||||||
{
|
{
|
||||||
@ -72,10 +75,17 @@ struct _GdkCursorPrivate
|
|||||||
NSCursor *nscursor;
|
NSCursor *nscursor;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct _GdkDragContextPrivate
|
||||||
|
{
|
||||||
|
id <NSDraggingInfo> dragging_info;
|
||||||
|
};
|
||||||
|
|
||||||
extern GdkDisplay *_gdk_display;
|
extern GdkDisplay *_gdk_display;
|
||||||
extern GdkScreen *_gdk_screen;
|
extern GdkScreen *_gdk_screen;
|
||||||
extern GdkWindow *_gdk_root;
|
extern GdkWindow *_gdk_root;
|
||||||
|
|
||||||
|
extern GdkDragContext *_gdk_quartz_drag_source_context;
|
||||||
|
|
||||||
GType _gdk_gc_quartz_get_type (void);
|
GType _gdk_gc_quartz_get_type (void);
|
||||||
|
|
||||||
GdkGC *_gdk_quartz_gc_new (GdkDrawable *drawable,
|
GdkGC *_gdk_quartz_gc_new (GdkDrawable *drawable,
|
||||||
|
|||||||
@ -3,5 +3,14 @@
|
|||||||
|
|
||||||
#include <Quartz/Quartz.h>
|
#include <Quartz/Quartz.h>
|
||||||
#include "gdk/gdkprivate.h"
|
#include "gdk/gdkprivate.h"
|
||||||
|
#include "gdkprivate-quartz.h"
|
||||||
|
#include "gdkdrawable-quartz.h"
|
||||||
|
#include "gdkwindow-quartz.h"
|
||||||
|
|
||||||
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
NSView *gdk_quartz_window_get_nsview (GdkWindow *window);
|
||||||
|
|
||||||
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __GDK_QUARTZ_H__ */
|
#endif /* __GDK_QUARTZ_H__ */
|
||||||
|
|||||||
@ -26,6 +26,14 @@
|
|||||||
|
|
||||||
static gpointer parent_class;
|
static gpointer parent_class;
|
||||||
|
|
||||||
|
NSView *
|
||||||
|
gdk_quartz_window_get_nsview (GdkWindow *window)
|
||||||
|
{
|
||||||
|
GdkWindowObject *private = (GdkWindowObject *)window;
|
||||||
|
|
||||||
|
return ((GdkWindowImplQuartz *)private->impl)->view;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gdk_window_impl_quartz_get_size (GdkDrawable *drawable,
|
gdk_window_impl_quartz_get_size (GdkDrawable *drawable,
|
||||||
gint *width,
|
gint *width,
|
||||||
|
|||||||
Reference in New Issue
Block a user