Alexandre Julliard : winex11: Move the window resizing support to mouse.c.
Alexandre Julliard
julliard at winehq.org
Wed Feb 1 11:23:26 CST 2012
Module: wine
Branch: master
Commit: abfed909b2d96f8b3fb2acfcb916b6395bb24e30
URL: http://source.winehq.org/git/wine.git/?a=commit;h=abfed909b2d96f8b3fb2acfcb916b6395bb24e30
Author: Alexandre Julliard <julliard at winehq.org>
Date: Wed Feb 1 15:46:52 2012 +0100
winex11: Move the window resizing support to mouse.c.
---
dlls/winex11.drv/mouse.c | 42 ++++++++++++++++++++++++++++++++++++++++++
dlls/winex11.drv/window.c | 30 ++----------------------------
dlls/winex11.drv/x11drv.h | 1 +
3 files changed, 45 insertions(+), 28 deletions(-)
diff --git a/dlls/winex11.drv/mouse.c b/dlls/winex11.drv/mouse.c
index 85df63b..060b4c8 100644
--- a/dlls/winex11.drv/mouse.c
+++ b/dlls/winex11.drv/mouse.c
@@ -1327,6 +1327,48 @@ BOOL CDECL X11DRV_ClipCursor( LPCRECT clip )
}
/***********************************************************************
+ * move_resize_window
+ */
+void move_resize_window( Display *display, struct x11drv_win_data *data, int dir )
+{
+ DWORD pt;
+ int x, y, button = 0;
+ XEvent xev;
+
+ pt = GetMessagePos();
+ x = (short)LOWORD( pt );
+ y = (short)HIWORD( pt );
+
+ if (GetKeyState( VK_LBUTTON ) & 0x8000) button = 1;
+ else if (GetKeyState( VK_MBUTTON ) & 0x8000) button = 2;
+ else if (GetKeyState( VK_RBUTTON ) & 0x8000) button = 3;
+
+ TRACE( "hwnd %p/%lx, x %d, y %d, dir %d, button %d\n",
+ data->hwnd, data->whole_window, x, y, dir, button );
+
+ xev.xclient.type = ClientMessage;
+ xev.xclient.window = data->whole_window;
+ xev.xclient.message_type = x11drv_atom(_NET_WM_MOVERESIZE);
+ xev.xclient.serial = 0;
+ xev.xclient.display = display;
+ xev.xclient.send_event = True;
+ xev.xclient.format = 32;
+ xev.xclient.data.l[0] = x - virtual_screen_rect.left; /* x coord */
+ xev.xclient.data.l[1] = y - virtual_screen_rect.top; /* y coord */
+ xev.xclient.data.l[2] = dir; /* direction */
+ xev.xclient.data.l[3] = button; /* button */
+ xev.xclient.data.l[4] = 0; /* unused */
+
+ /* need to ungrab the pointer that may have been automatically grabbed
+ * with a ButtonPress event */
+ wine_tsx11_lock();
+ XUngrabPointer( display, CurrentTime );
+ XSendEvent(display, root_window, False, SubstructureNotifyMask | SubstructureRedirectMask, &xev);
+ wine_tsx11_unlock();
+}
+
+
+/***********************************************************************
* X11DRV_ButtonPress
*/
void X11DRV_ButtonPress( HWND hwnd, XEvent *xev )
diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c
index a172cd2..fa5022b 100644
--- a/dlls/winex11.drv/window.c
+++ b/dlls/winex11.drv/window.c
@@ -2779,9 +2779,7 @@ static BOOL is_netwm_supported( Display *display, Atom atom )
LRESULT CDECL X11DRV_SysCommand( HWND hwnd, WPARAM wparam, LPARAM lparam )
{
WPARAM hittest = wparam & 0x0f;
- DWORD dwPoint;
- int x, y, dir;
- XEvent xev;
+ int dir;
Display *display = thread_display();
struct x11drv_win_data *data;
@@ -2833,30 +2831,6 @@ LRESULT CDECL X11DRV_SysCommand( HWND hwnd, WPARAM wparam, LPARAM lparam )
return -1;
}
- dwPoint = GetMessagePos();
- x = (short)LOWORD(dwPoint);
- y = (short)HIWORD(dwPoint);
-
- TRACE("hwnd %p, x %d, y %d, dir %d\n", hwnd, x, y, dir);
-
- xev.xclient.type = ClientMessage;
- xev.xclient.window = X11DRV_get_whole_window(hwnd);
- xev.xclient.message_type = x11drv_atom(_NET_WM_MOVERESIZE);
- xev.xclient.serial = 0;
- xev.xclient.display = display;
- xev.xclient.send_event = True;
- xev.xclient.format = 32;
- xev.xclient.data.l[0] = x - virtual_screen_rect.left; /* x coord */
- xev.xclient.data.l[1] = y - virtual_screen_rect.top; /* y coord */
- xev.xclient.data.l[2] = dir; /* direction */
- xev.xclient.data.l[3] = 1; /* button */
- xev.xclient.data.l[4] = 0; /* unused */
-
- /* need to ungrab the pointer that may have been automatically grabbed
- * with a ButtonPress event */
- wine_tsx11_lock();
- XUngrabPointer( display, CurrentTime );
- XSendEvent(display, root_window, False, SubstructureNotifyMask | SubstructureRedirectMask, &xev);
- wine_tsx11_unlock();
+ move_resize_window( display, data, dir );
return 0;
}
diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h
index 78e7cd0..15fac6f 100644
--- a/dlls/winex11.drv/x11drv.h
+++ b/dlls/winex11.drv/x11drv.h
@@ -674,6 +674,7 @@ extern LRESULT clip_cursor_notify( HWND hwnd, HWND new_clip_hwnd ) DECLSPEC_HIDD
extern void ungrab_clipping_window(void) DECLSPEC_HIDDEN;
extern void reset_clipping_window(void) DECLSPEC_HIDDEN;
extern BOOL clip_fullscreen_window( HWND hwnd, BOOL reset ) DECLSPEC_HIDDEN;
+extern void move_resize_window( Display *display, struct x11drv_win_data *data, int dir ) DECLSPEC_HIDDEN;
extern void X11DRV_InitKeyboard( Display *display ) DECLSPEC_HIDDEN;
extern DWORD CDECL X11DRV_MsgWaitForMultipleObjectsEx( DWORD count, const HANDLE *handles, DWORD timeout,
DWORD mask, DWORD flags ) DECLSPEC_HIDDEN;
More information about the wine-cvs
mailing list