Jacek Caban : win32u: Move IsWindowVisible implementation from user32.
Alexandre Julliard
julliard at winehq.org
Tue Mar 8 16:10:49 CST 2022
Module: wine
Branch: master
Commit: a36fcc827acb1c2934dcf03ff76be99353325c93
URL: https://source.winehq.org/git/wine.git/?a=commit;h=a36fcc827acb1c2934dcf03ff76be99353325c93
Author: Jacek Caban <jacek at codeweavers.com>
Date: Tue Mar 8 14:24:20 2022 +0100
win32u: Move IsWindowVisible implementation from user32.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/user32/win.c | 15 +--------------
dlls/win32u/window.c | 21 +++++++++++++++++++++
include/ntuser.h | 1 +
3 files changed, 23 insertions(+), 14 deletions(-)
diff --git a/dlls/user32/win.c b/dlls/user32/win.c
index 58c581c26da..a22b80da6a9 100644
--- a/dlls/user32/win.c
+++ b/dlls/user32/win.c
@@ -3016,20 +3016,7 @@ BOOL WINAPI IsChild( HWND parent, HWND child )
*/
BOOL WINAPI IsWindowVisible( HWND hwnd )
{
- HWND *list;
- BOOL retval = TRUE;
- int i;
-
- if (!(GetWindowLongW( hwnd, GWL_STYLE ) & WS_VISIBLE)) return FALSE;
- if (!(list = list_window_parents( hwnd ))) return TRUE;
- if (list[0])
- {
- for (i = 0; list[i+1]; i++)
- if (!(GetWindowLongW( list[i], GWL_STYLE ) & WS_VISIBLE)) break;
- retval = !list[i+1] && (list[i] == GetDesktopWindow()); /* top message window isn't visible */
- }
- HeapFree( GetProcessHeap(), 0, list );
- return retval;
+ return NtUserCallHwnd( hwnd, NtUserIsWindowVisible );
}
diff --git a/dlls/win32u/window.c b/dlls/win32u/window.c
index 3c65d3ec1ce..e13107d1d64 100644
--- a/dlls/win32u/window.c
+++ b/dlls/win32u/window.c
@@ -606,6 +606,25 @@ BOOL is_child( HWND parent, HWND child )
return ret;
}
+/* see IsWindowVisible */
+static BOOL is_window_visible( HWND hwnd )
+{
+ HWND *list;
+ BOOL retval = TRUE;
+ int i;
+
+ if (!(get_window_long( hwnd, GWL_STYLE ) & WS_VISIBLE)) return FALSE;
+ if (!(list = list_window_parents( hwnd ))) return TRUE;
+ if (list[0])
+ {
+ for (i = 0; list[i+1]; i++)
+ if (!(get_window_long( list[i], GWL_STYLE ) & WS_VISIBLE)) break;
+ retval = !list[i+1] && (list[i] == user_callbacks->pGetDesktopWindow()); /* top message window isn't visible */
+ }
+ free( list );
+ return retval;
+}
+
static LONG_PTR get_win_data( const void *ptr, UINT size )
{
if (size == sizeof(WORD))
@@ -955,6 +974,8 @@ DWORD WINAPI NtUserCallHwnd( HWND hwnd, DWORD code )
return get_server_window_text( hwnd, NULL, 0 );
case NtUserIsWindow:
return is_window( hwnd );
+ case NtUserIsWindowVisible:
+ return is_window_visible( hwnd );
default:
FIXME( "invalid code %u\n", code );
return 0;
diff --git a/include/ntuser.h b/include/ntuser.h
index 8d724971d53..20fa61bacec 100644
--- a/include/ntuser.h
+++ b/include/ntuser.h
@@ -142,6 +142,7 @@ enum
NtUserGetParent,
NtUserGetWindowTextLength,
NtUserIsWindow,
+ NtUserIsWindowVisible,
};
/* NtUserCallHwndParam codes, not compatible with Windows */
More information about the wine-cvs
mailing list