winex11: Handle GravityNotify events for non-toplevel windows.
This commit is contained in:
parent
9bce7fcb87
commit
a8063e8b8b
|
@ -95,6 +95,7 @@ static void X11DRV_ReparentNotify( HWND hwnd, XEvent *event );
|
||||||
static void X11DRV_ConfigureNotify( HWND hwnd, XEvent *event );
|
static void X11DRV_ConfigureNotify( HWND hwnd, XEvent *event );
|
||||||
static void X11DRV_PropertyNotify( HWND hwnd, XEvent *event );
|
static void X11DRV_PropertyNotify( HWND hwnd, XEvent *event );
|
||||||
static void X11DRV_ClientMessage( HWND hwnd, XEvent *event );
|
static void X11DRV_ClientMessage( HWND hwnd, XEvent *event );
|
||||||
|
static void X11DRV_GravityNotify( HWND hwnd, XEvent *event );
|
||||||
|
|
||||||
struct event_handler
|
struct event_handler
|
||||||
{
|
{
|
||||||
|
@ -129,7 +130,7 @@ static struct event_handler handlers[MAX_EVENT_HANDLERS] =
|
||||||
{ ReparentNotify, X11DRV_ReparentNotify },
|
{ ReparentNotify, X11DRV_ReparentNotify },
|
||||||
{ ConfigureNotify, X11DRV_ConfigureNotify },
|
{ ConfigureNotify, X11DRV_ConfigureNotify },
|
||||||
/* ConfigureRequest */
|
/* ConfigureRequest */
|
||||||
/* GravityNotify */
|
{ GravityNotify, X11DRV_GravityNotify },
|
||||||
/* ResizeRequest */
|
/* ResizeRequest */
|
||||||
/* CirculateNotify */
|
/* CirculateNotify */
|
||||||
/* CirculateRequest */
|
/* CirculateRequest */
|
||||||
|
@ -142,7 +143,7 @@ static struct event_handler handlers[MAX_EVENT_HANDLERS] =
|
||||||
{ MappingNotify, X11DRV_MappingNotify },
|
{ MappingNotify, X11DRV_MappingNotify },
|
||||||
};
|
};
|
||||||
|
|
||||||
static int nb_event_handlers = 19; /* change this if you add handlers above */
|
static int nb_event_handlers = 20; /* change this if you add handlers above */
|
||||||
|
|
||||||
|
|
||||||
/* return the name of an X event */
|
/* return the name of an X event */
|
||||||
|
@ -963,6 +964,34 @@ void X11DRV_ConfigureNotify( HWND hwnd, XEvent *xev )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* X11DRV_GravityNotify
|
||||||
|
*/
|
||||||
|
static void X11DRV_GravityNotify( HWND hwnd, XEvent *xev )
|
||||||
|
{
|
||||||
|
XGravityEvent *event = &xev->xgravity;
|
||||||
|
struct x11drv_win_data *data = X11DRV_get_win_data( hwnd );
|
||||||
|
RECT rect;
|
||||||
|
|
||||||
|
if (!data) return;
|
||||||
|
|
||||||
|
rect.left = event->x;
|
||||||
|
rect.top = event->y;
|
||||||
|
rect.right = rect.left + data->whole_rect.right - data->whole_rect.left;
|
||||||
|
rect.bottom = rect.top + data->whole_rect.bottom - data->whole_rect.top;
|
||||||
|
|
||||||
|
TRACE( "win %p/%lx new X rect %d,%d,%dx%d (event %d,%d)\n",
|
||||||
|
hwnd, data->whole_window, rect.left, rect.top, rect.right-rect.left, rect.bottom-rect.top,
|
||||||
|
event->x, event->y );
|
||||||
|
|
||||||
|
X11DRV_X_to_window_rect( data, &rect );
|
||||||
|
|
||||||
|
if (data->window_rect.left != rect.left || data ->window_rect.top != rect.top)
|
||||||
|
SetWindowPos( hwnd, 0, rect.left, rect.top, 0, 0,
|
||||||
|
SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOCOPYBITS );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* get_window_wm_state
|
* get_window_wm_state
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -2371,7 +2371,7 @@ void CDECL X11DRV_WindowPosChanged( HWND hwnd, HWND insert_after, UINT swp_flags
|
||||||
if (thread_data->current_event && thread_data->current_event->xany.window == data->whole_window)
|
if (thread_data->current_event && thread_data->current_event->xany.window == data->whole_window)
|
||||||
event_type = thread_data->current_event->type;
|
event_type = thread_data->current_event->type;
|
||||||
|
|
||||||
if (event_type != ConfigureNotify && event_type != PropertyNotify)
|
if (event_type != ConfigureNotify && event_type != PropertyNotify && event_type != GravityNotify)
|
||||||
event_type = 0; /* ignore other events */
|
event_type = 0; /* ignore other events */
|
||||||
|
|
||||||
if (data->mapped)
|
if (data->mapped)
|
||||||
|
|
Loading…
Reference in New Issue