mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-01 19:38:31 +00:00
win32u: Pass the rect DPI to NtUserIsWindowRectFullScreen.
This commit is contained in:
parent
e02685f86e
commit
979d36969c
|
@ -2500,6 +2500,7 @@ BOOL clip_fullscreen_window( HWND hwnd, BOOL reset )
|
|||
RECT rect;
|
||||
HMONITOR monitor;
|
||||
DWORD style;
|
||||
UINT dpi;
|
||||
BOOL ret;
|
||||
|
||||
if (hwnd == NtUserGetDesktopWindow()) return FALSE;
|
||||
|
@ -2511,8 +2512,9 @@ BOOL clip_fullscreen_window( HWND hwnd, BOOL reset )
|
|||
/* maximized windows don't count as full screen */
|
||||
if ((style & WS_MAXIMIZE) && (style & WS_CAPTION) == WS_CAPTION) return FALSE;
|
||||
|
||||
if (!NtUserGetWindowRect( hwnd, &rect, get_thread_dpi() )) return FALSE;
|
||||
if (!NtUserIsWindowRectFullScreen( &rect )) return FALSE;
|
||||
dpi = get_dpi_for_window( hwnd );
|
||||
if (!NtUserGetWindowRect( hwnd, &rect, dpi )) return FALSE;
|
||||
if (!NtUserIsWindowRectFullScreen( &rect, dpi )) return FALSE;
|
||||
if (is_captured_by_system()) return FALSE;
|
||||
if (NtGetTickCount() - thread_info->clipping_reset < 1000) return FALSE;
|
||||
if (!reset && clipping_cursor && thread_info->clipping_cursor) return FALSE; /* already clipping */
|
||||
|
|
|
@ -2295,7 +2295,7 @@ RECT get_virtual_screen_rect( UINT dpi )
|
|||
return rect;
|
||||
}
|
||||
|
||||
static BOOL is_window_rect_full_screen( const RECT *rect )
|
||||
static BOOL is_window_rect_full_screen( const RECT *rect, UINT dpi )
|
||||
{
|
||||
struct monitor *monitor;
|
||||
BOOL ret = FALSE;
|
||||
|
@ -2308,7 +2308,7 @@ static BOOL is_window_rect_full_screen( const RECT *rect )
|
|||
|
||||
if (!is_monitor_active( monitor ) || monitor->is_clone) continue;
|
||||
|
||||
monrect = get_monitor_rect( monitor, get_thread_dpi() );
|
||||
monrect = get_monitor_rect( monitor, dpi );
|
||||
if (rect->left <= monrect.left && rect->right >= monrect.right &&
|
||||
rect->top <= monrect.top && rect->bottom >= monrect.bottom)
|
||||
{
|
||||
|
@ -6421,9 +6421,6 @@ ULONG_PTR WINAPI NtUserCallOneParam( ULONG_PTR arg, ULONG code )
|
|||
case NtUserCallOneParam_GetSysColor:
|
||||
return get_sys_color( arg );
|
||||
|
||||
case NtUserCallOneParam_IsWindowRectFullScreen:
|
||||
return is_window_rect_full_screen( (const RECT *)arg );
|
||||
|
||||
case NtUserCallOneParam_RealizePalette:
|
||||
return realize_palette( UlongToHandle(arg) );
|
||||
|
||||
|
@ -6513,6 +6510,9 @@ ULONG_PTR WINAPI NtUserCallTwoParam( ULONG_PTR arg1, ULONG_PTR arg2, ULONG code
|
|||
return adjust_window_rect( (RECT *)arg1, params->style, params->menu, params->ex_style, params->dpi );
|
||||
}
|
||||
|
||||
case NtUserCallTwoParam_IsWindowRectFullScreen:
|
||||
return is_window_rect_full_screen( (const RECT *)arg1, arg2 );
|
||||
|
||||
/* temporary exports */
|
||||
case NtUserAllocWinProc:
|
||||
return (UINT_PTR)alloc_winproc( (WNDPROC)arg1, arg2 );
|
||||
|
|
|
@ -36,6 +36,16 @@
|
|||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(waylanddrv);
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* get_win_monitor_dpi
|
||||
*/
|
||||
static UINT get_win_monitor_dpi(HWND hwnd)
|
||||
{
|
||||
return NtUserGetSystemDpiForProcess(NULL); /* FIXME: get monitor dpi */
|
||||
}
|
||||
|
||||
|
||||
/* private window data */
|
||||
struct wayland_win_data
|
||||
{
|
||||
|
@ -171,7 +181,7 @@ static void wayland_win_data_get_config(struct wayland_win_data *data,
|
|||
TRACE("window=%s style=%#lx\n", wine_dbgstr_rect(&conf->rect), (long)style);
|
||||
|
||||
/* The fullscreen state is implied by the window position and style. */
|
||||
if (NtUserIsWindowRectFullScreen(&conf->rect))
|
||||
if (NtUserIsWindowRectFullScreen(&conf->rect, get_win_monitor_dpi(data->hwnd)))
|
||||
{
|
||||
if ((style & WS_MAXIMIZE) && (style & WS_CAPTION) == WS_CAPTION)
|
||||
window_state |= WAYLAND_SURFACE_CONFIG_STATE_MAXIMIZED;
|
||||
|
|
|
@ -1046,7 +1046,7 @@ static BOOL X11DRV_ConfigureNotify( HWND hwnd, XEvent *xev )
|
|||
struct x11drv_win_data *data;
|
||||
RECT rect;
|
||||
POINT pos;
|
||||
UINT flags;
|
||||
UINT flags, dpi;
|
||||
HWND parent;
|
||||
BOOL root_coords;
|
||||
int cx, cy, x = event->x, y = event->y;
|
||||
|
@ -1068,6 +1068,7 @@ static BOOL X11DRV_ConfigureNotify( HWND hwnd, XEvent *xev )
|
|||
|
||||
/* Get geometry */
|
||||
|
||||
dpi = get_win_monitor_dpi( data->hwnd );
|
||||
parent = NtUserGetAncestor( hwnd, GA_PARENT );
|
||||
root_coords = event->send_event; /* synthetic events are always in root coords */
|
||||
|
||||
|
@ -1119,7 +1120,7 @@ static BOOL X11DRV_ConfigureNotify( HWND hwnd, XEvent *xev )
|
|||
(int)(data->window_rect.bottom - data->window_rect.top), cx, cy );
|
||||
|
||||
style = NtUserGetWindowLongW( data->hwnd, GWL_STYLE );
|
||||
if ((style & WS_CAPTION) == WS_CAPTION || !NtUserIsWindowRectFullScreen( &data->whole_rect ))
|
||||
if ((style & WS_CAPTION) == WS_CAPTION || !NtUserIsWindowRectFullScreen( &data->whole_rect, dpi ))
|
||||
{
|
||||
read_net_wm_states( event->display, data );
|
||||
if ((data->net_wm_state & (1 << NET_WM_STATE_MAXIMIZED)))
|
||||
|
|
|
@ -297,7 +297,7 @@ static inline BOOL is_window_resizable( struct x11drv_win_data *data, DWORD styl
|
|||
{
|
||||
if (style & WS_THICKFRAME) return TRUE;
|
||||
/* Metacity needs the window to be resizable to make it fullscreen */
|
||||
return NtUserIsWindowRectFullScreen( &data->whole_rect );
|
||||
return NtUserIsWindowRectFullScreen( &data->whole_rect, get_win_monitor_dpi( data->hwnd ) );
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
|
@ -1089,7 +1089,7 @@ void update_net_wm_states( struct x11drv_win_data *data )
|
|||
style = NtUserGetWindowLongW( data->hwnd, GWL_STYLE );
|
||||
if (style & WS_MINIMIZE)
|
||||
new_state |= data->net_wm_state & ((1 << NET_WM_STATE_FULLSCREEN)|(1 << NET_WM_STATE_MAXIMIZED));
|
||||
if (NtUserIsWindowRectFullScreen( &data->whole_rect ))
|
||||
if (NtUserIsWindowRectFullScreen( &data->whole_rect, get_win_monitor_dpi( data->hwnd ) ))
|
||||
{
|
||||
if ((style & WS_MAXIMIZE) && (style & WS_CAPTION) == WS_CAPTION)
|
||||
new_state |= (1 << NET_WM_STATE_MAXIMIZED);
|
||||
|
@ -2761,7 +2761,8 @@ void X11DRV_WindowPosChanged( HWND hwnd, HWND insert_after, UINT swp_flags,
|
|||
{
|
||||
release_win_data( data );
|
||||
unmap_window( hwnd );
|
||||
if (NtUserIsWindowRectFullScreen( &old_window_rect )) NtUserClipCursor( NULL );
|
||||
if (NtUserIsWindowRectFullScreen( &old_window_rect, get_win_monitor_dpi( hwnd ) ))
|
||||
NtUserClipCursor( NULL );
|
||||
if (!(data = get_win_data( hwnd ))) return;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -904,7 +904,6 @@ enum
|
|||
NtUserCallOneParam_GetSysColorPen,
|
||||
NtUserCallOneParam_GetSystemMetrics,
|
||||
NtUserCallOneParam_GetVirtualScreenRect,
|
||||
NtUserCallOneParam_IsWindowRectFullScreen,
|
||||
NtUserCallOneParam_MessageBeep,
|
||||
NtUserCallOneParam_RealizePalette,
|
||||
NtUserCallOneParam_ReplyMessage,
|
||||
|
@ -1006,11 +1005,6 @@ static inline RECT NtUserGetVirtualScreenRect(void)
|
|||
return virtual;
|
||||
}
|
||||
|
||||
static inline BOOL NtUserIsWindowRectFullScreen( const RECT *rect )
|
||||
{
|
||||
return NtUserCallOneParam( (UINT_PTR)rect, NtUserCallOneParam_IsWindowRectFullScreen );
|
||||
}
|
||||
|
||||
static inline BOOL NtUserMessageBeep( UINT i )
|
||||
{
|
||||
return NtUserCallOneParam( i, NtUserCallOneParam_MessageBeep );
|
||||
|
@ -1055,6 +1049,7 @@ enum
|
|||
NtUserCallTwoParam_SetIconParam,
|
||||
NtUserCallTwoParam_UnhookWindowsHook,
|
||||
NtUserCallTwoParam_AdjustWindowRect,
|
||||
NtUserCallTwoParam_IsWindowRectFullScreen,
|
||||
/* temporary exports */
|
||||
NtUserAllocWinProc,
|
||||
};
|
||||
|
@ -1122,6 +1117,11 @@ static inline BOOL NtUserAdjustWindowRect( RECT *rect, DWORD style, BOOL menu, D
|
|||
return NtUserCallTwoParam( (ULONG_PTR)rect, (ULONG_PTR)¶ms, NtUserCallTwoParam_AdjustWindowRect );
|
||||
}
|
||||
|
||||
static inline BOOL NtUserIsWindowRectFullScreen( const RECT *rect, UINT dpi )
|
||||
{
|
||||
return NtUserCallTwoParam( (UINT_PTR)rect, dpi, NtUserCallTwoParam_IsWindowRectFullScreen );
|
||||
}
|
||||
|
||||
/* NtUserCallHwnd codes, not compatible with Windows */
|
||||
enum
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue