diff options
author | Takashi Yano <takashi.yano@nifty.ne.jp> | 2024-02-13 11:45:36 +0900 |
---|---|---|
committer | Takashi Yano <takashi.yano@nifty.ne.jp> | 2024-02-13 23:36:59 +0900 |
commit | 0795afd68eceb0d81501e81d92d7adce2b2f1a92 (patch) | |
tree | 40e1113aa467d0ecde6d7e032824d7cec8ab72af | |
parent | 02f7f6543abc35a25fd024d8a58f374a86633846 (diff) | |
download | newlib-0795afd68eceb0d81501e81d92d7adce2b2f1a92.zip newlib-0795afd68eceb0d81501e81d92d7adce2b2f1a92.tar.gz newlib-0795afd68eceb0d81501e81d92d7adce2b2f1a92.tar.bz2 |
Cygwin: console: Fix a problem that minor ID is incorrect in ConEmu.
Previously, minor device number of console was not assigned correctly
in ConEmu environment. This is because console window of ConEmu is
not enumerated by EnumWindows(). This patch fixes the issue.
Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp>
-rw-r--r-- | winsup/cygwin/autoload.cc | 2 | ||||
-rw-r--r-- | winsup/cygwin/devices.cc | 7 | ||||
-rw-r--r-- | winsup/cygwin/devices.in | 7 | ||||
-rw-r--r-- | winsup/cygwin/fhandler/console.cc | 14 |
4 files changed, 30 insertions, 0 deletions
diff --git a/winsup/cygwin/autoload.cc b/winsup/cygwin/autoload.cc index 7e610bd..65e906e 100644 --- a/winsup/cygwin/autoload.cc +++ b/winsup/cygwin/autoload.cc @@ -548,7 +548,9 @@ LoadDLLfunc (DefWindowProcW, user32) LoadDLLfunc (DestroyWindow, user32) LoadDLLfunc (DispatchMessageW, user32) LoadDLLfunc (EmptyClipboard, user32) +LoadDLLfunc (EnumChildWindows, user32) LoadDLLfunc (EnumWindows, user32) +LoadDLLfunc (GetClassNameA, user32) LoadDLLfunc (GetClipboardData, user32) LoadDLLfunc (GetDC, user32) LoadDLLfunc (GetForegroundWindow, user32) diff --git a/winsup/cygwin/devices.cc b/winsup/cygwin/devices.cc index 167b0e4..ca1fdf3 100644 --- a/winsup/cygwin/devices.cc +++ b/winsup/cygwin/devices.cc @@ -81,6 +81,13 @@ enum_cons_dev (HWND hw, LPARAM lp) UnmapViewOfFile ((void *) cs); CloseHandle (h); } + else + { /* Only for ConEmu */ + char class_hw[32]; + if (19 == GetClassName (hw, class_hw, sizeof (class_hw)) + && 0 == strcmp (class_hw, "VirtualConsoleClass")) + EnumChildWindows (hw, enum_cons_dev, lp); + } return TRUE; } diff --git a/winsup/cygwin/devices.in b/winsup/cygwin/devices.in index 48d3843..842f09c 100644 --- a/winsup/cygwin/devices.in +++ b/winsup/cygwin/devices.in @@ -77,6 +77,13 @@ enum_cons_dev (HWND hw, LPARAM lp) UnmapViewOfFile ((void *) cs); CloseHandle (h); } + else + { /* Only for ConEmu */ + char class_hw[32]; + if (19 == GetClassName (hw, class_hw, sizeof (class_hw)) + && 0 == strcmp (class_hw, "VirtualConsoleClass")) + EnumChildWindows (hw, enum_cons_dev, lp); + } return TRUE; } diff --git a/winsup/cygwin/fhandler/console.cc b/winsup/cygwin/fhandler/console.cc index b0907eb..70824e6 100644 --- a/winsup/cygwin/fhandler/console.cc +++ b/winsup/cygwin/fhandler/console.cc @@ -250,6 +250,13 @@ enum_windows (HWND hw, LPARAM lp) UnmapViewOfFile ((void *) cs); CloseHandle (h); } + else + { /* Only for ConEmu */ + char class_hw[32]; + if (19 == GetClassName (hw, class_hw, sizeof (class_hw)) + && 0 == strcmp (class_hw, "VirtualConsoleClass")) + EnumChildWindows (hw, enum_windows, lp); + } return TRUE; } @@ -656,6 +663,13 @@ scan_console (HWND hw, LPARAM lp) UnmapViewOfFile ((void *) cs); CloseHandle (h); } + else + { /* Only for ConEmu */ + char class_hw[32]; + if (19 == GetClassName (hw, class_hw, sizeof (class_hw)) + && 0 == strcmp (class_hw, "VirtualConsoleClass")) + EnumChildWindows (hw, scan_console, lp); + } return TRUE; } |