aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakashi Yano <takashi.yano@nifty.ne.jp>2024-02-13 11:45:36 +0900
committerTakashi Yano <takashi.yano@nifty.ne.jp>2024-02-13 23:36:59 +0900
commit0795afd68eceb0d81501e81d92d7adce2b2f1a92 (patch)
tree40e1113aa467d0ecde6d7e032824d7cec8ab72af
parent02f7f6543abc35a25fd024d8a58f374a86633846 (diff)
downloadnewlib-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.cc2
-rw-r--r--winsup/cygwin/devices.cc7
-rw-r--r--winsup/cygwin/devices.in7
-rw-r--r--winsup/cygwin/fhandler/console.cc14
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;
}