mcross@blublaze.sw.stratus.com (Matt Cross) (08/15/90)
I was irritated by the way the virtual desktop window handled the moving of windows. When you clicked on a window in it, it would move the top left corner of the window to your current cursor position. I have changed it so is more consistent with the way it handles moving real windows - when you click on a window, it stays in the same place, and moves with the cursor. If you click, but not on a window, it moves the center of the main screen to the cursor position. (This is the first time I have ever posted a patch, so let me know if there's any problems) -------------------------cut here (and remove sig from end)---------------------- *** desktop.c.orig Tue Aug 14 16:54:13 1990 --- desktop.c Tue Aug 14 16:45:29 1990 *************** *** 219,225 **** /* * state during the move */ ! static unsigned int moving_x, moving_y, moving_w, moving_h, moving_bw; Window moving_window; /* --- 219,226 ---- /* * state during the move */ ! static unsigned int moving_x, moving_y, moving_w, moving_h, moving_bw, ! moving_x_off, moving_y_off; Window moving_window; /* *************** *** 231,236 **** --- 232,238 ---- Window nowindow; int xoff, yoff; unsigned int d; + short int no_win = 0; if (!Scr->Virtual) return; *************** *** 238,244 **** moving_window = ev.subwindow; if (!moving_window) ! moving_window = Scr->VirtualDesktopDScreen; XGrabPointer(dpy, Scr->VirtualDesktopDisplayOuter, True, ButtonPressMask | ButtonReleaseMask | ButtonMotionMask, --- 240,250 ---- moving_window = ev.subwindow; if (!moving_window) ! { ! moving_window = Scr->VirtualDesktopDScreen; ! no_win = 1; ! } ! XGrabPointer(dpy, Scr->VirtualDesktopDisplayOuter, True, ButtonPressMask | ButtonReleaseMask | ButtonMotionMask, *************** *** 248,255 **** XGetGeometry(dpy, moving_window, &nowindow, &xoff, &yoff, &moving_w, &moving_h, &moving_bw, &d); ! moving_x = ev.x; ! moving_y = ev.y; DoMoveWindowOnDesktop(ev.x, ev.y); } --- 254,269 ---- XGetGeometry(dpy, moving_window, &nowindow, &xoff, &yoff, &moving_w, &moving_h, &moving_bw, &d); ! if (no_win) ! { ! moving_x_off = moving_w / 2; ! moving_y_off = moving_h / 2; ! } ! else ! { ! moving_x_off = ev.x - xoff - moving_bw; ! moving_y_off = ev.y - yoff - moving_bw; ! } DoMoveWindowOnDesktop(ev.x, ev.y); } *************** *** 260,265 **** --- 274,282 ---- if (!Scr->Virtual) return; + x -= moving_x_off; + y -= moving_y_off; + /* check that we are legit */ if (x < 0) x = 0; *************** *** 280,286 **** moving_y = y; /* move the display window */ ! XMoveWindow(dpy, moving_window, x - moving_bw, y - moving_bw); } void EndMoveWindowOnDesktop() --- 297,304 ---- moving_y = y; /* move the display window */ ! XMoveWindow(dpy, moving_window, moving_x - moving_bw, ! moving_y - moving_bw); } void EndMoveWindowOnDesktop() -- These are my views, and in no way reflect the views of Stratus Computer, Inc. Mail to: mcross@es.stratus.com or profesor@wpi.wpi.edu