diff options
Diffstat (limited to 'src/os_mswin.c')
-rw-r--r-- | src/os_mswin.c | 39 |
1 files changed, 37 insertions, 2 deletions
diff --git a/src/os_mswin.c b/src/os_mswin.c index 2112b0c2a..bd38e9d3f 100644 --- a/src/os_mswin.c +++ b/src/os_mswin.c @@ -2324,6 +2324,41 @@ enumWindowsGetNames(HWND hwnd, LPARAM lparam) return TRUE; } +struct enum_windows_s +{ + WNDENUMPROC lpEnumFunc; + LPARAM lParam; +}; + + static BOOL CALLBACK +enum_windows_child(HWND hwnd, LPARAM lParam) +{ + struct enum_windows_s *ew = (struct enum_windows_s *)lParam; + + return (ew->lpEnumFunc)(hwnd, ew->lParam); +} + + static BOOL CALLBACK +enum_windows_toplevel(HWND hwnd, LPARAM lParam) +{ + struct enum_windows_s *ew = (struct enum_windows_s *)lParam; + + if ((ew->lpEnumFunc)(hwnd, ew->lParam) == FALSE) + return FALSE; + return EnumChildWindows(hwnd, enum_windows_child, lParam); +} + +/* Enumerate all windows including children. */ + static BOOL +enum_windows(WNDENUMPROC lpEnumFunc, LPARAM lParam) +{ + struct enum_windows_s ew; + + ew.lpEnumFunc = lpEnumFunc; + ew.lParam = lParam; + return EnumWindows(enum_windows_toplevel, (LPARAM)&ew); +} + static HWND findServer(char_u *name) { @@ -2332,7 +2367,7 @@ findServer(char_u *name) id.name = name; id.hwnd = 0; - EnumWindows(enumWindowsGetServer, (LPARAM)(&id)); + enum_windows(enumWindowsGetServer, (LPARAM)(&id)); return id.hwnd; } @@ -2395,7 +2430,7 @@ serverGetVimNames(void) ga_init2(&ga, 1, 100); - EnumWindows(enumWindowsGetNames, (LPARAM)(&ga)); + enum_windows(enumWindowsGetNames, (LPARAM)(&ga)); ga_append(&ga, NUL); return ga.ga_data; |