summaryrefslogtreecommitdiff
path: root/src/os_mswin.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2018-10-07 20:35:12 +0200
committerBram Moolenaar <Bram@vim.org>2018-10-07 20:35:12 +0200
commitc0543e145fdd29739ac887e71ab96c50282066cd (patch)
tree53d43d714d8b5b55fdf6eb0ac7ee22a493d2e18a /src/os_mswin.c
parent00bf8cd2115be7c14258aee48c0a7568147c9cd7 (diff)
downloadvim-git-c0543e145fdd29739ac887e71ab96c50282066cd.tar.gz
patch 8.1.0462: when using ConPTY Vim can be a child processv8.1.0462
Problem: When using ConPTY Vim can be a child process. Solution: To find a Vim window use both EnumWindows() and EnumChildWindows(). (Nobuhiro Takasaki, closes #3521)
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;