summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2017-08-25 22:52:09 -0400
committerMatthias Clasen <mclasen@redhat.com>2017-08-25 22:52:09 -0400
commitccdcc9a0dd7b5cf211a07172e3bcabb878d3af95 (patch)
tree31c8548ef87ff54dc56036221c67cce056f1e14d
parent3e8af5cebfc6647c9eef376a4d657fda4d915055 (diff)
downloadgtk+-ccdcc9a0dd7b5cf211a07172e3bcabb878d3af95.tar.gz
dnd: Convert to GdkEvent API
-rw-r--r--gtk/gtkdnd.c200
1 files changed, 63 insertions, 137 deletions
diff --git a/gtk/gtkdnd.c b/gtk/gtkdnd.c
index 196b61be56..7726712b6c 100644
--- a/gtk/gtkdnd.c
+++ b/gtk/gtkdnd.c
@@ -233,9 +233,6 @@ static gboolean gtk_drag_motion_cb (GtkWidget *widget,
static gboolean gtk_drag_key_cb (GtkWidget *widget,
GdkEventKey *event,
gpointer data);
-static gboolean gtk_drag_grab_broken_event_cb (GtkWidget *widget,
- GdkEventGrabBroken *event,
- gpointer data);
static void gtk_drag_grab_notify_cb (GtkWidget *widget,
gboolean was_grabbed,
gpointer data);
@@ -378,43 +375,6 @@ gtk_drag_release_ipc_widget (GtkWidget *widget)
drag_widgets);
}
-static guint32
-gtk_drag_get_event_time (GdkEvent *event)
-{
- guint32 tm = GDK_CURRENT_TIME;
-
- if (event)
- switch (event->type)
- {
- case GDK_MOTION_NOTIFY:
- tm = event->motion.time; break;
- case GDK_BUTTON_PRESS:
- case GDK_2BUTTON_PRESS:
- case GDK_3BUTTON_PRESS:
- case GDK_BUTTON_RELEASE:
- tm = event->button.time; break;
- case GDK_KEY_PRESS:
- case GDK_KEY_RELEASE:
- tm = event->key.time; break;
- case GDK_ENTER_NOTIFY:
- case GDK_LEAVE_NOTIFY:
- tm = event->crossing.time; break;
- case GDK_PROPERTY_NOTIFY:
- tm = event->property.time; break;
- case GDK_SELECTION_CLEAR:
- case GDK_SELECTION_REQUEST:
- case GDK_SELECTION_NOTIFY:
- tm = event->selection.time; break;
- case GDK_PROXIMITY_IN:
- case GDK_PROXIMITY_OUT:
- tm = event->proximity.time; break;
- default: /* use current time */
- break;
- }
-
- return tm;
-}
-
static void
gtk_drag_get_event_actions (const GdkEvent *event,
gint button,
@@ -428,29 +388,8 @@ gtk_drag_get_event_actions (const GdkEvent *event,
if (event)
{
GdkModifierType state = 0;
-
- switch (event->type)
- {
- case GDK_MOTION_NOTIFY:
- state = event->motion.state;
- break;
- case GDK_BUTTON_PRESS:
- case GDK_2BUTTON_PRESS:
- case GDK_3BUTTON_PRESS:
- case GDK_BUTTON_RELEASE:
- state = event->button.state;
- break;
- case GDK_KEY_PRESS:
- case GDK_KEY_RELEASE:
- state = event->key.state;
- break;
- case GDK_ENTER_NOTIFY:
- case GDK_LEAVE_NOTIFY:
- state = event->crossing.state;
- break;
- default:
- break;
- }
+
+ gdk_event_get_state (event, &state);
if ((button == GDK_BUTTON_MIDDLE || button == GDK_BUTTON_SECONDARY) && (actions & GDK_ACTION_ASK))
{
@@ -780,16 +719,20 @@ _gtk_drag_dest_handle_event (GtkWidget *toplevel,
{
GtkDragDestInfo *info;
GdkDragContext *context;
+ guint32 time;
+ GdkEventType event_type;
g_return_if_fail (toplevel != NULL);
g_return_if_fail (event != NULL);
- context = event->dnd.context;
+ event_type = gdk_event_get_event_type (event);
+ gdk_event_get_drag_context (event, &context);
+ time = gdk_event_get_time (event);
info = gtk_drag_get_dest_info (context, TRUE);
/* Find the widget for the event */
- switch (event->type)
+ switch (event_type)
{
case GDK_DRAG_ENTER:
break;
@@ -797,7 +740,7 @@ _gtk_drag_dest_handle_event (GtkWidget *toplevel,
case GDK_DRAG_LEAVE:
if (info->widget)
{
- gtk_drag_dest_leave (info->widget, context, event->dnd.time);
+ gtk_drag_dest_leave (info->widget, context, time);
gtk_drag_dest_set_widget (info, NULL);
}
break;
@@ -807,9 +750,10 @@ _gtk_drag_dest_handle_event (GtkWidget *toplevel,
{
GdkWindow *window;
gint tx, ty;
+ double x_root, y_root;
gboolean found;
- if (event->type == GDK_DROP_START)
+ if (event_type == GDK_DROP_START)
{
info->dropped = TRUE;
/* We send a leave here so that the widget unhighlights
@@ -817,7 +761,7 @@ _gtk_drag_dest_handle_event (GtkWidget *toplevel,
*/
if (info->widget)
{
- gtk_drag_dest_leave (info->widget, context, event->dnd.time);
+ gtk_drag_dest_leave (info->widget, context, time);
gtk_drag_dest_set_widget (info, NULL);
}
}
@@ -825,33 +769,34 @@ _gtk_drag_dest_handle_event (GtkWidget *toplevel,
window = gtk_widget_get_window (toplevel);
gdk_window_get_position (window, &tx, &ty);
+ gdk_event_get_root_coords (event, &x_root, &y_root);
found = gtk_drag_find_widget (toplevel,
context,
info,
- event->dnd.x_root - tx,
- event->dnd.y_root - ty,
- event->dnd.time,
- (event->type == GDK_DRAG_MOTION) ?
+ x_root - tx,
+ y_root - ty,
+ time,
+ (event_type == GDK_DRAG_MOTION) ?
gtk_drag_dest_motion :
gtk_drag_dest_drop);
if (info->widget && !found)
{
- gtk_drag_dest_leave (info->widget, context, event->dnd.time);
+ gtk_drag_dest_leave (info->widget, context, time);
gtk_drag_dest_set_widget (info, NULL);
}
/* Send a reply.
*/
- if (event->type == GDK_DRAG_MOTION)
+ if (event_type == GDK_DRAG_MOTION)
{
if (!found)
- gdk_drag_status (context, 0, event->dnd.time);
+ gdk_drag_status (context, 0, time);
}
- else if (event->type == GDK_DROP_START)
+ else if (event_type == GDK_DROP_START)
{
- gdk_drop_reply (context, found, event->dnd.time);
+ gdk_drop_reply (context, found, time);
}
}
break;
@@ -1270,7 +1215,7 @@ gtk_drag_begin_internal (GtkWidget *widget,
GdkCursor *cursor;
GdkDevice *pointer, *keyboard;
GdkWindow *ipc_window;
- gint start_x, start_y;
+ int start_x, start_y;
GdkAtom selection;
gboolean managed;
@@ -1363,10 +1308,13 @@ gtk_drag_begin_internal (GtkWidget *widget,
gdk_window_get_root_coords (gtk_widget_get_window (toplevel),
x, y, &start_x, &start_y);
}
- else if (event && event->type == GDK_MOTION_NOTIFY)
+ else if (event && gdk_event_get_event_type (event) == GDK_MOTION_NOTIFY)
{
- start_x = event->motion.x_root;
- start_y = event->motion.y_root;
+ double x, y;
+
+ gdk_event_get_root_coords (event, &x, &y);
+ start_x = (int)x;
+ start_y = (int)y;
}
else
gdk_device_get_position (pointer, NULL, &start_x, &start_y);
@@ -1453,13 +1401,11 @@ gtk_drag_begin_internal (GtkWidget *widget,
info->cur_x = info->start_x;
info->cur_y = info->start_y;
- if (event && event->type == GDK_MOTION_NOTIFY)
+ if (event && gdk_event_get_event_type (event) == GDK_MOTION_NOTIFY)
gtk_drag_motion_cb (info->ipc_widget, (GdkEventMotion *)event, info);
else
gtk_drag_update (info, info->cur_screen, info->cur_x, info->cur_y, event);
- g_signal_connect (info->ipc_widget, "grab-broken-event",
- G_CALLBACK (gtk_drag_grab_broken_event_cb), info);
g_signal_connect (info->ipc_widget, "grab-notify",
G_CALLBACK (gtk_drag_grab_notify_cb), info);
g_signal_connect (info->ipc_widget, "button-release-event",
@@ -1836,16 +1782,19 @@ _gtk_drag_source_handle_event (GtkWidget *widget,
{
GtkDragSourceInfo *info;
GdkDragContext *context;
+ guint32 time;
g_return_if_fail (widget != NULL);
g_return_if_fail (event != NULL);
- context = event->dnd.context;
+ gdk_event_get_drag_context (event, &context);
+ time = gdk_event_get_time (event);
+
info = gtk_drag_get_source_info (context, FALSE);
if (!info)
return;
- switch (event->type)
+ switch (gdk_event_get_event_type (event))
{
case GDK_DRAG_STATUS:
{
@@ -1854,7 +1803,7 @@ _gtk_drag_source_handle_event (GtkWidget *widget,
{
cursor = gtk_drag_get_cursor (widget,
gtk_widget_get_display (widget),
- gdk_drag_context_get_selected_action (event->dnd.context),
+ gdk_drag_context_get_selected_action (context),
info);
if (info->cursor != cursor)
{
@@ -1876,7 +1825,7 @@ _gtk_drag_source_handle_event (GtkWidget *widget,
break;
case GDK_DROP_FINISHED:
- gtk_drag_drop_finished (info, GTK_DRAG_RESULT_SUCCESS, event->dnd.time);
+ gtk_drag_drop_finished (info, GTK_DRAG_RESULT_SUCCESS, time);
break;
default:
g_assert_not_reached ();
@@ -2101,9 +2050,6 @@ gtk_drag_source_info_destroy (GtkDragSourceInfo *info)
info);
g_signal_handlers_disconnect_by_func (info->ipc_widget,
- gtk_drag_grab_broken_event_cb,
- info);
- g_signal_handlers_disconnect_by_func (info->ipc_widget,
gtk_drag_grab_notify_cb,
info);
g_signal_handlers_disconnect_by_func (info->ipc_widget,
@@ -2162,7 +2108,7 @@ gtk_drag_update_idle (gpointer data)
if (info->last_event)
{
- time = gtk_drag_get_event_time (info->last_event);
+ time = gdk_event_get_time (info->last_event);
gtk_drag_get_event_actions (info->last_event,
info->button,
info->possible_actions,
@@ -2274,9 +2220,6 @@ gtk_drag_end (GtkDragSourceInfo *info,
info->have_grab = FALSE;
g_signal_handlers_disconnect_by_func (info->ipc_widget,
- gtk_drag_grab_broken_event_cb,
- info);
- g_signal_handlers_disconnect_by_func (info->ipc_widget,
gtk_drag_grab_notify_cb,
info);
g_signal_handlers_disconnect_by_func (info->ipc_widget,
@@ -2366,20 +2309,12 @@ gtk_drag_motion_cb (GtkWidget *widget,
{
GtkDragSourceInfo *info = (GtkDragSourceInfo *)data;
GdkScreen *screen;
- gint x_root, y_root;
+ double x_root, y_root;
- if (event->is_hint)
- {
- gdk_device_get_position (event->device, &screen, &x_root, &y_root);
- event->x_root = x_root;
- event->y_root = y_root;
- }
- else
- screen = gdk_event_get_screen ((GdkEvent *)event);
+ gdk_event_get_root_coords ((GdkEvent *)event, &x_root, &y_root);
+ screen = gdk_event_get_screen ((GdkEvent *)event);
- x_root = (gint)(event->x_root + 0.5);
- y_root = (gint)(event->y_root + 0.5);
- gtk_drag_update (info, screen, x_root, y_root, (GdkEvent *) event);
+ gtk_drag_update (info, screen, (int)x_root, (int)y_root, (GdkEvent *) event);
return TRUE;
}
@@ -2392,12 +2327,18 @@ gtk_drag_key_cb (GtkWidget *widget,
{
GtkDragSourceInfo *info = (GtkDragSourceInfo *)data;
- if (event->type == GDK_KEY_PRESS)
+ if (gdk_event_get_event_type ((GdkEvent *)event) == GDK_KEY_PRESS)
{
- switch (event->keyval)
+ guint keyval;
+ guint32 time;
+
+ gdk_event_get_keyval ((GdkEvent *)event, &keyval);
+ time = gdk_event_get_time ((GdkEvent *)event);
+
+ switch (keyval)
{
case GDK_KEY_Escape:
- gtk_drag_cancel_internal (info, GTK_DRAG_RESULT_USER_CANCELLED, event->time);
+ gtk_drag_cancel_internal (info, GTK_DRAG_RESULT_USER_CANCELLED, time);
break;
case GDK_KEY_space:
@@ -2408,12 +2349,12 @@ gtk_drag_key_cb (GtkWidget *widget,
if ((gdk_drag_context_get_selected_action (info->context) != 0) &&
(gdk_drag_context_get_dest_window (info->context) != NULL))
{
- gtk_drag_end (info, event->time);
- gtk_drag_drop (info, event->time);
+ gtk_drag_end (info, time);
+ gtk_drag_drop (info, time);
}
else
{
- gtk_drag_cancel_internal (info, GTK_DRAG_RESULT_NO_TARGET, event->time);
+ gtk_drag_cancel_internal (info, GTK_DRAG_RESULT_NO_TARGET, time);
}
break;
}
@@ -2422,26 +2363,6 @@ gtk_drag_key_cb (GtkWidget *widget,
return TRUE;
}
-static gboolean
-gtk_drag_grab_broken_event_cb (GtkWidget *widget,
- GdkEventGrabBroken *event,
- gpointer data)
-{
- GtkDragSourceInfo *info = (GtkDragSourceInfo *)data;
-
- /* Don't cancel if we break the implicit grab from the initial button_press.
- * Also, don't cancel if we re-grab on the widget or on our IPC window, for
- * example, when changing the drag cursor.
- */
- if (event->implicit
- || event->grab_window == gtk_widget_get_window (info->widget)
- || event->grab_window == gtk_widget_get_window (info->ipc_widget))
- return FALSE;
-
- gtk_drag_cancel_internal (info, GTK_DRAG_RESULT_GRAB_BROKEN, gtk_get_current_event_time ());
- return TRUE;
-}
-
static void
gtk_drag_grab_notify_cb (GtkWidget *widget,
gboolean was_grabbed,
@@ -2470,19 +2391,24 @@ gtk_drag_button_release_cb (GtkWidget *widget,
gpointer data)
{
GtkDragSourceInfo *info = (GtkDragSourceInfo *)data;
+ guint button;
+ guint32 time;
+
+ gdk_event_get_button ((GdkEvent *)event, &button);
+ time = gdk_event_get_time ((GdkEvent *)event);
- if (event->button != info->button)
+ if (button != info->button)
return FALSE;
if ((gdk_drag_context_get_selected_action (info->context) != 0) &&
(gdk_drag_context_get_dest_window (info->context) != NULL))
{
- gtk_drag_end (info, event->time);
- gtk_drag_drop (info, event->time);
+ gtk_drag_end (info, time);
+ gtk_drag_drop (info, time);
}
else
{
- gtk_drag_cancel_internal (info, GTK_DRAG_RESULT_NO_TARGET, event->time);
+ gtk_drag_cancel_internal (info, GTK_DRAG_RESULT_NO_TARGET, time);
}
return TRUE;