OSDN Git Service

* fhandler.h (fhandler_tty_master::set_winsize): Declare new function.
authorcgf <cgf>
Fri, 27 Dec 2002 05:31:29 +0000 (05:31 +0000)
committercgf <cgf>
Fri, 27 Dec 2002 05:31:29 +0000 (05:31 +0000)
* fhandler_console.cc (fhandler_console::send_winch_maybe): If appropriate,
call tty master function to handle screen size change.
* fhandler_tty.cc (fhandler_tty_master::set_winsize): New function.
(fhandler_tty_master::init): Call set_winsize to set initial screen size.

ChangeLog
winsup/cygwin/fhandler.h
winsup/cygwin/fhandler_console.cc
winsup/cygwin/fhandler_tty.cc

index a226b2e..694be0b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2002-12-27  Christopher Faylor  <cgf@redhat.com>
+
+       * fhandler.h (fhandler_tty_master::set_winsize): Declare new function.
+       * fhandler_console.cc (fhandler_console::send_winch_maybe): If
+       appropriate, call tty master function to handle screen size change.
+       * fhandler_tty.cc (fhandler_tty_master::set_winsize): New function.
+       (fhandler_tty_master::init): Call set_winsize to set initial screen
+       size.
+
 2002-12-26  Christopher Faylor  <cgf@redhat.com>
 
        * fhandler_tty.cc (fhandler_tty_master::init): Set initial size of tty
index 43db444..f0dde37 100644 (file)
@@ -948,6 +948,7 @@ class fhandler_tty_master: public fhandler_pty_master
   fhandler_tty_master (int unit);
   int init (int);
   int init_console ();
+  void set_winsize (bool);
   void fixup_after_fork (HANDLE parent);
   void fixup_after_exec (HANDLE);
 };
index 41c1cca..22dc69e 100644 (file)
@@ -213,7 +213,13 @@ fhandler_console::send_winch_maybe ()
   fillin_info ();
 
   if (y != dev_state->info.dwWinSize.Y || x != dev_state->info.dwWinSize.X)
-    tc->kill_pgrp (SIGWINCH);
+    {
+      extern fhandler_tty_master *tty_master;
+      if (tty_master)
+       tty_master->set_winsize (true);
+      else
+       tc->kill_pgrp (SIGWINCH);
+    }
 }
 
 void __stdcall
index fd0789b..1f552ce 100644 (file)
@@ -40,6 +40,16 @@ fhandler_tty_master::fhandler_tty_master (int unit)
 {
 }
 
+void
+fhandler_tty_master::set_winsize (bool sendSIGWINCH)
+{
+  winsize w;
+  console->ioctl (TIOCGWINSZ, &w);
+  get_ttyp ()->winsize = w;
+  if (sendSIGWINCH)
+    tc->kill_pgrp (SIGWINCH);
+}
+
 int
 fhandler_tty_master::init (int ntty)
 {
@@ -54,14 +64,13 @@ fhandler_tty_master::init (int ntty)
   termios ti;
   memset (&ti, 0, sizeof (ti));
   console->tcsetattr (0, &ti);
-  winsize w;
-  console->ioctl (TIOCGWINSZ, &w);
-  this->ioctl (TIOCSWINSZ, &w);
 
   ttynum = ntty;
 
   cygwin_shared->tty[ttynum]->common_init (this);
 
+  set_winsize (false);
+
   inuse = get_ttyp ()->create_inuse (TTY_MASTER_ALIVE);
 
   cygthread *h;
@@ -1134,7 +1143,7 @@ fhandler_pty_master::ioctl (unsigned int cmd, void *arg)
        pktmode = * (int *) arg;
        break;
       case TIOCGWINSZ:
-       * (struct winsize *) arg = get_ttyp ()->winsize;
+       *(struct winsize *) arg = get_ttyp ()->winsize;
        break;
       case TIOCSWINSZ:
        if (get_ttyp ()->winsize.ws_row != ((struct winsize *) arg)->ws_row