Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/winsup
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2004-12-14 15:09:51 +0300
committerCorinna Vinschen <corinna@vinschen.de>2004-12-14 15:09:51 +0300
commit988566db0c056ca34fa43c0d041311d3f14e1009 (patch)
tree18f4731ce03ae72035f7c93b03bde576b4d66c52 /winsup
parent82673116e1d1da7c070f4f9b6a130364ae3c6bc5 (diff)
* fhandler_console.cc (read): Consider offset within scrolling
region of the console window.
Diffstat (limited to 'winsup')
-rw-r--r--winsup/cygwin/ChangeLog5
-rw-r--r--winsup/cygwin/fhandler_console.cc19
2 files changed, 22 insertions, 2 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index fafba552e..41bacc951 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,8 @@
+2004-12-14 Thomas Wolff <towo@computer.org>
+
+ * fhandler_console.cc (read): Consider offset within scrolling
+ region of the console window.
+
2004-12-13 Corinna Vinschen <corinna@vinschen.de>
* cygheap.h (cwdstuff::get_drive): Release cwd_lock.
diff --git a/winsup/cygwin/fhandler_console.cc b/winsup/cygwin/fhandler_console.cc
index 76b79119b..242366fe5 100644
--- a/winsup/cygwin/fhandler_console.cc
+++ b/winsup/cygwin/fhandler_console.cc
@@ -421,10 +421,25 @@ fhandler_console::read (void *pv, size_t& buflen)
if (mouse_event.dwEventFlags)
continue;
- /* If the mouse event occurred out of the area we can handle,
- ignore it. */
+ /* Retrieve reported mouse position */
int x = mouse_event.dwMousePosition.X;
int y = mouse_event.dwMousePosition.Y;
+
+ /* Adjust mouse position by scroll buffer offset */
+ CONSOLE_SCREEN_BUFFER_INFO now;
+ if (GetConsoleScreenBufferInfo (get_output_handle (), &now))
+ {
+ y -= now.srWindow.Top;
+ x -= now.srWindow.Left;
+ }
+ else
+ {
+ syscall_printf ("mouse: cannot adjust position by scroll buffer offset");
+ continue;
+ }
+
+ /* If the mouse event occurred out of the area we can handle,
+ ignore it. */
if ((x + ' ' + 1 > 0xFF) || (y + ' ' + 1 > 0xFF))
{
syscall_printf ("mouse: position out of range");