forked from AuroraMiddleware/gtk
GDK W32: send a DELETE selection when using LOCAL selection protocol
This was not needed before, but now it seems to be necessary for some reason. The code is just an adjusted copy of the appropriate piece of the OLE2 protocol code, sending GDK_SELECTION_REQUEST. The rest is just fixing the fallout, allowing LOCAL protocol to pass the functions it wasn't supposed to pass before. Closes #82
This commit is contained in:
parent
a2efd3f3dc
commit
577f1a992e
@ -2566,6 +2566,23 @@ gdk_win32_drag_context_drop_finish (GdkDragContext *context,
|
||||
context->dest_window);
|
||||
if (src_context)
|
||||
{
|
||||
if (gdk_drag_context_get_selected_action (src_context) == GDK_ACTION_MOVE)
|
||||
{
|
||||
tmp_event = gdk_event_new (GDK_SELECTION_REQUEST);
|
||||
g_set_object (&tmp_event->selection.window, src_context->source_window);
|
||||
tmp_event->selection.send_event = FALSE;
|
||||
tmp_event->selection.selection = _gdk_win32_selection_atom (GDK_WIN32_ATOM_INDEX_LOCAL_DND_SELECTION);
|
||||
tmp_event->selection.target = _gdk_win32_selection_atom (GDK_WIN32_ATOM_INDEX_DELETE);
|
||||
sel_win32->property_change_target_atom = _gdk_win32_selection_atom (GDK_WIN32_ATOM_INDEX_DELETE);
|
||||
tmp_event->selection.property = _gdk_win32_selection_atom (GDK_WIN32_ATOM_INDEX_LOCAL_DND_SELECTION);
|
||||
g_set_object (&tmp_event->selection.requestor, src_context->source_window);
|
||||
tmp_event->selection.time = GDK_CURRENT_TIME; /* ??? */
|
||||
|
||||
GDK_NOTE (EVENTS, _gdk_win32_print_event (tmp_event));
|
||||
gdk_event_put (tmp_event);
|
||||
gdk_event_free (tmp_event);
|
||||
}
|
||||
|
||||
tmp_event = gdk_event_new (GDK_DROP_FINISHED);
|
||||
g_set_object (&tmp_event->dnd.window, src_context->source_window);
|
||||
tmp_event->dnd.send_event = FALSE;
|
||||
|
@ -186,7 +186,8 @@ _gdk_win32_window_change_property (GdkWindow *window,
|
||||
#endif
|
||||
|
||||
if (property == _gdk_win32_selection_atom (GDK_WIN32_ATOM_INDEX_GDK_SELECTION) ||
|
||||
property == _gdk_win32_selection_atom (GDK_WIN32_ATOM_INDEX_OLE2_DND))
|
||||
property == _gdk_win32_selection_atom (GDK_WIN32_ATOM_INDEX_OLE2_DND) ||
|
||||
property == _gdk_win32_selection_atom (GDK_WIN32_ATOM_INDEX_LOCAL_DND_SELECTION))
|
||||
{
|
||||
_gdk_win32_selection_property_change (win32_sel,
|
||||
window,
|
||||
|
@ -2356,7 +2356,8 @@ _gdk_win32_selection_property_change (GdkWin32Selection *win32_sel,
|
||||
open_clipboard_timeout (NULL);
|
||||
}
|
||||
}
|
||||
else if (property == _gdk_win32_selection_atom (GDK_WIN32_ATOM_INDEX_OLE2_DND) &&
|
||||
else if ((property == _gdk_win32_selection_atom (GDK_WIN32_ATOM_INDEX_OLE2_DND) ||
|
||||
property == _gdk_win32_selection_atom (GDK_WIN32_ATOM_INDEX_LOCAL_DND_SELECTION)) &&
|
||||
mode == GDK_PROP_MODE_REPLACE &&
|
||||
win32_sel->property_change_target_atom == _gdk_win32_selection_atom (GDK_WIN32_ATOM_INDEX_DELETE))
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user