# HG changeset patch # User Bram Moolenaar # Date 1538937904 -7200 # Node ID 014d916ab25838ced666c7bd4eccd732be999f15 # Parent caf64d01a0d63530ed195925ab5e9f0afd6ebebb patch 8.1.0462: when using ConPTY Vim can be a child process commit https://github.com/vim/vim/commit/c0543e145fdd29739ac887e71ab96c50282066cd Author: Bram Moolenaar Date: Sun Oct 7 20:35:12 2018 +0200 patch 8.1.0462: when using ConPTY Vim can be a child process 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) diff --git a/src/os_mswin.c b/src/os_mswin.c --- a/src/os_mswin.c +++ b/src/os_mswin.c @@ -2324,6 +2324,41 @@ enumWindowsGetNames(HWND hwnd, LPARAM lp 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; diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -793,6 +793,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 462, +/**/ 461, /**/ 460,