Mercurial > vim
changeset 14901:014d916ab258 v8.1.0462
patch 8.1.0462: when using ConPTY Vim can be a child process
commit https://github.com/vim/vim/commit/c0543e145fdd29739ac887e71ab96c50282066cd
Author: Bram Moolenaar <Bram@vim.org>
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)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 07 Oct 2018 20:45:04 +0200 |
parents | caf64d01a0d6 |
children | 72fe7891fad8 |
files | src/os_mswin.c src/version.c |
diffstat | 2 files changed, 39 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- 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;