summaryrefslogtreecommitdiff
path: root/src/os_mswin.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/os_mswin.c')
-rw-r--r--src/os_mswin.c39
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;