[Bug 15252] New: moving/resizing undecorated windows broken in dual-screen setups
wine-bugs at winehq.org
wine-bugs at winehq.org
Fri Sep 12 03:38:58 CDT 2008
http://bugs.winehq.org/show_bug.cgi?id=15252
Summary: moving/resizing undecorated windows broken in dual-
screen setups
Product: Wine
Version: 1.1.4
Platform: PC
OS/Version: Linux
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: winex11.drv
AssignedTo: wine-bugs at winehq.org
ReportedBy: dima at gmail.com
I have a second monitor attached, so my first monitor's top left corner is at
(1280, 300). If I try to move/resize a window that has custom decorations, wine
gives wrong pointer coordinates to the window manager, and the window jumps
down and to the right.
The problem seems to be in X11DRV_SysCommand, dlls/winex11.drv/window.c. It
uses GetMessagePos to get the pointer coordinates - which returns the values
relative to the first screen. Then it sends _NET_WM_MOVERESIZE to the window
manager - which expects absolute coordinates.
I'm not sure what the right solution is, but I have a work-around: subtract the
value returned by GetWindowRect, then translate to the coordinates in the root
window using XTranslateCoordinates. (I've never used win32 or Xlib, so please
excuse my code.)
--- dlls/winex11.drv/window.c 2008-09-05 08:28:27.000000000 -0700
+++ dlls/winex11.drv/window.c.new 2008-09-12 01:23:32.000000000 -0700
@@ -2197,6 +2197,8 @@
XEvent xev;
Display *display = thread_display();
struct x11drv_win_data *data;
+ RECT rect;
+ Window dummy_child;
if (!(data = X11DRV_get_win_data( hwnd ))) return -1;
if (!data->whole_window || !data->managed || !data->mapped) return -1;
@@ -2252,6 +2254,12 @@
TRACE("hwnd %p, x %d, y %d, dir %d\n", hwnd, x, y, dir);
+ GetWindowRect(hwnd, &rect);
+ wine_tsx11_lock();
+ XTranslateCoordinates(display, X11DRV_get_whole_window(hwnd),
+ root_window, x - rect.left, y - rect.top, &x, &y, &dummy_child);
+ wine_tsx11_unlock();
+
xev.xclient.type = ClientMessage;
xev.xclient.window = X11DRV_get_whole_window(hwnd);
xev.xclient.message_type = x11drv_atom(_NET_WM_MOVERESIZE);
--
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
Do not reply to this email, post in Bugzilla using the
above URL to reply.
------- You are receiving this mail because: -------
You are watching all bug changes.
More information about the wine-bugs
mailing list