From ed50ecc551d5e490f4acb1ec673c9e8f43e23fb0 Mon Sep 17 00:00:00 2001 From: Jonathan Moore Liles Date: Sun, 21 Apr 2013 17:12:51 -0700 Subject: [PATCH] Don't send unnecessary X DND Position messages. --- src/fl_dnd_x.cxx | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/fl_dnd_x.cxx b/src/fl_dnd_x.cxx index 4062875..1e3b055 100644 --- a/src/fl_dnd_x.cxx +++ b/src/fl_dnd_x.cxx @@ -93,7 +93,10 @@ int Fl::dnd() { fl_local_grab = grabfunc; Window target_window = 0; Fl_Window* local_window = 0; - int dndversion = 4; int dest_x, dest_y; + int dndversion = 4; int dest_x, dest_y, old_dest_x, old_dest_y; + + old_dest_y = old_dest_x = -1; + XSetSelectionOwner(fl_display, fl_XdndSelection, fl_message_window, fl_event_time); while (Fl::pushed()) { @@ -154,12 +157,19 @@ int Fl::dnd() { } } } - if (local_window) { - local_handle(FL_DND_DRAG, local_window); - } else if (dndversion) { - fl_sendClientMessage(target_window, fl_XdndPosition, source_window, - 0, (e_x_root<<16)|e_y_root, fl_event_time, - fl_XdndActionCopy); + + if ( old_dest_x != dest_x || old_dest_y != dest_y ) + { + if (local_window) { + local_handle(FL_DND_DRAG, local_window); + } else if (dndversion) { + fl_sendClientMessage(target_window, fl_XdndPosition, source_window, + 0, (e_x_root<<16)|e_y_root, fl_event_time, + fl_XdndActionCopy); + } + + old_dest_x = dest_x; + old_dest_y = dest_y; } Fl::wait(); }