[PATCH 3/4] user32: Raise EVENT_OBJECT_FOCUS event.
Connor McAdams
cmcadams at codeweavers.com
Tue Sep 28 20:12:31 CDT 2021
Signed-off-by: Connor McAdams <cmcadams at codeweavers.com>
---
dlls/user32/focus.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/dlls/user32/focus.c b/dlls/user32/focus.c
index 4c18238a98b..c9dfce27e8b 100644
--- a/dlls/user32/focus.c
+++ b/dlls/user32/focus.c
@@ -39,7 +39,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(win);
*
* Change the focus window, sending the WM_SETFOCUS and WM_KILLFOCUS messages
*/
-static HWND set_focus_window( HWND hwnd )
+static HWND set_focus_window( HWND hwnd, BOOL from_active )
{
HWND previous = 0;
BOOL ret;
@@ -56,12 +56,16 @@ static HWND set_focus_window( HWND hwnd )
if (previous)
{
+ if (!IsWindow(hwnd) && !from_active)
+ NotifyWinEvent( EVENT_OBJECT_FOCUS, previous, OBJID_CLIENT, CHILDID_SELF );
SendMessageW( previous, WM_KILLFOCUS, (WPARAM)hwnd, 0 );
if (hwnd != GetFocus()) return previous; /* changed by the message */
}
if (IsWindow(hwnd))
{
USER_Driver->pSetFocus(hwnd);
+ if (!from_active)
+ NotifyWinEvent( EVENT_OBJECT_FOCUS, hwnd, OBJID_CLIENT, CHILDID_SELF );
SendMessageW( hwnd, WM_SETFOCUS, (WPARAM)previous, 0 );
}
return previous;
@@ -166,7 +170,7 @@ static BOOL set_active_window( HWND hwnd, HWND *prev, BOOL mouse, BOOL focus )
if (hwnd == info.hwndActive)
{
if (!info.hwndFocus || !hwnd || GetAncestor( info.hwndFocus, GA_ROOT ) != hwnd)
- set_focus_window( hwnd );
+ set_focus_window( hwnd, TRUE );
}
}
@@ -307,7 +311,7 @@ HWND WINAPI SetFocus( HWND hwnd )
}
/* change focus and send messages */
- return set_focus_window( hwnd );
+ return set_focus_window( hwnd, FALSE );
}
--
2.25.1
More information about the wine-devel
mailing list