drop: Add private API for event emission
authorBenjamin Otte <otte@redhat.com>
Wed, 23 May 2018 17:41:54 +0000 (19:41 +0200)
committerBenjamin Otte <otte@redhat.com>
Mon, 18 Jun 2018 21:49:52 +0000 (23:49 +0200)
gdk/gdkdrop.c
gdk/gdkdropprivate.h

index ad3da7a5f370148b8fdc35ad1582b5667ada0b44..458ad1a65ea01232591a23c7477d2605a98e3609 100644 (file)
 #include "config.h"
 
 #include "gdkdndprivate.h"
-#include "gdkdisplay.h"
-#include "gdksurface.h"
-#include "gdkintl.h"
+
 #include "gdkcontentformats.h"
 #include "gdkcontentprovider.h"
 #include "gdkcontentserializer.h"
 #include "gdkcursor.h"
+#include "gdkdisplay.h"
 #include "gdkenumtypes.h"
 #include "gdkeventsprivate.h"
+#include "gdkinternals.h"
+#include "gdkintl.h"
+#include "gdksurface.h"
 
 typedef struct _GdkDropPrivate GdkDropPrivate;
 
@@ -568,3 +570,93 @@ gdk_drop_read_finish (GdkDrop       *self,
     }
 }
 
+static void
+gdk_drop_do_emit_event (GdkEvent *event,
+                        gboolean  dont_queue)
+{
+  if (dont_queue)
+    {
+      _gdk_event_emit (event);
+      g_object_unref (event);
+    }
+  else
+    {
+      _gdk_event_queue_append (gdk_event_get_display (event), event);
+    }
+}
+void
+gdk_drop_emit_enter_event (GdkDrop  *self,
+                           gboolean  dont_queue,
+                           guint32   time)
+{
+  GdkDropPrivate *priv = gdk_drop_get_instance_private (self);
+  GdkEvent *event;
+
+  event = gdk_event_new (GDK_DRAG_ENTER);
+  event->any.surface = g_object_ref (priv->surface);
+  event->dnd.context = (GdkDragContext *) g_object_ref (self);
+  event->dnd.time = time;
+  gdk_event_set_device (event, priv->device);
+
+  gdk_drop_do_emit_event (event, dont_queue);
+}
+
+void
+gdk_drop_emit_motion_event (GdkDrop  *self,
+                            gboolean  dont_queue,
+                            double    x_root,
+                            double    y_root,
+                            guint32   time)
+{
+  GdkDropPrivate *priv = gdk_drop_get_instance_private (self);
+  GdkEvent *event;
+
+  event = gdk_event_new (GDK_DRAG_MOTION);
+  event->any.surface = g_object_ref (priv->surface);
+  event->dnd.context = (GdkDragContext *) g_object_ref (self);
+  event->dnd.time = time;
+  event->dnd.x_root = x_root;
+  event->dnd.y_root = y_root;
+  gdk_event_set_device (event, priv->device);
+
+  gdk_drop_do_emit_event (event, dont_queue);
+}
+
+void
+gdk_drop_emit_leave_event (GdkDrop  *self,
+                           gboolean  dont_queue,
+                           guint32   time)
+{
+  GdkDropPrivate *priv = gdk_drop_get_instance_private (self);
+  GdkEvent *event;
+
+  event = gdk_event_new (GDK_DRAG_LEAVE);
+  event->any.surface = g_object_ref (priv->surface);
+  event->dnd.context = (GdkDragContext *) g_object_ref (self);
+  event->dnd.time = time;
+  gdk_event_set_device (event, priv->device);
+
+  gdk_drop_do_emit_event (event, dont_queue);
+}
+
+void
+gdk_drop_emit_drop_event (GdkDrop  *self,
+                          gboolean  dont_queue,
+                          double    x_root,
+                          double    y_root,
+                          guint32   time)
+{
+  GdkDropPrivate *priv = gdk_drop_get_instance_private (self);
+  GdkEvent *event;
+
+  event = gdk_event_new (GDK_DROP_START);
+  event->any.surface = g_object_ref (priv->surface);
+  event->dnd.context = (GdkDragContext *) g_object_ref (self);
+  event->dnd.time = time;
+  event->dnd.x_root = x_root;
+  event->dnd.y_root = y_root;
+  gdk_event_set_device (event, priv->device);
+
+  gdk_drop_do_emit_event (event, dont_queue);
+}
+
index 029e68de33f0044ee5af5479236d89fd97d17bb6..86a1fdbf8aa834c38ee0ca1618e8f3f249b81afd 100644 (file)
@@ -59,6 +59,23 @@ struct _GdkDropClass {
 void                    gdk_drop_set_actions                    (GdkDrop                *self,
                                                                  GdkDragAction           actions);
 
+void                    gdk_drop_emit_enter_event               (GdkDrop                *self,
+                                                                 gboolean                dont_queue,
+                                                                 guint32                 time);
+void                    gdk_drop_emit_motion_event              (GdkDrop                *self,
+                                                                 gboolean                dont_queue,
+                                                                 double                  x_root,
+                                                                 double                  y_root,
+                                                                 guint32                 time);
+void                    gdk_drop_emit_leave_event               (GdkDrop                *self,
+                                                                 gboolean                dont_queue,
+                                                                 guint32                 time);
+void                    gdk_drop_emit_drop_event                (GdkDrop                *self,
+                                                                 gboolean                dont_queue,
+                                                                 double                  x_root,
+                                                                 double                  y_root,
+                                                                 guint32                 time);
+
 G_END_DECLS
 
 #endif