--- rdesktop-1.2.0-paste/xwin.c Thu Apr 3 17:43:31 2003 +++ rdesktop-1.2.0-paste2/xwin.c Mon Apr 7 14:33:33 2003 @@ -526,7 +526,7 @@ static int xwin_process_events(void) { - XEvent xevent; + XEvent xevent, lastclick; KeySym keysym; uint16 button, flags; uint32 ev_time; @@ -620,23 +620,23 @@ break; case ButtonPress: - if (xevent.xbutton.button == Button2) - { - /* request the primary selection */ + if (xevent.xbutton.button == Button2) XConvertSelection(display, XA_PRIMARY, XA_STRING, selection_atom, wnd, xevent.xbutton.time); - break; - } + flags = MOUSE_FLAG_DOWN; /* fall through */ case ButtonRelease: - if (xevent.xbutton.button == Button2) - break; + if (xevent.xbutton.button == Button2 && flags == MOUSE_FLAG_DOWN) { + lastclick = xevent; + break; + } + button = xkeymap_translate_button(xevent.xbutton.button); if (button == 0) break; @@ -716,9 +716,17 @@ } break; - case SelectionNotify: - xwin_send_selection(&xevent); - break; + case SelectionNotify: + if (xevent.xselection.property == None) { + button = xkeymap_translate_button(lastclick.xbutton.button); + if (button == 0) + break; + + rdp_send_input(time(NULL), RDP_INPUT_MOUSE, + MOUSE_FLAG_DOWN | button, lastclick.xbutton.x, lastclick.xbutton.y); + } else + xwin_send_selection(&xevent); + break; } } /* Keep going */