]> git.eshelyaron.com Git - emacs.git/commitdiff
* term.c (close_gpm): New fun extracted from Fgpm_mouse_stop.
authorStefan Monnier <monnier@iro.umontreal.ca>
Fri, 12 Sep 2008 04:10:59 +0000 (04:10 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Fri, 12 Sep 2008 04:10:59 +0000 (04:10 +0000)
(Fgpm_mouse_stop): Use it.
* termhooks.h (close_gpm): Declare.
* keyboard.c (tty_read_avail_input): Forcefully close the gpm
connection if Gpm_GetEvent fails.

src/ChangeLog
src/keyboard.c
src/term.c
src/termhooks.h

index adcc4851d22c5f2276ad28a2cc694ae26cba00dc..1136e5e60572a8fbee79d39ebaedef9f43482bba 100644 (file)
@@ -1,5 +1,11 @@
 2008-09-12  Stefan Monnier  <monnier@iro.umontreal.ca>
 
+       * term.c (close_gpm): New fun extracted from Fgpm_mouse_stop.
+       (Fgpm_mouse_stop): Use it.
+       * termhooks.h (close_gpm): Declare.
+       * keyboard.c (tty_read_avail_input): Forcefully close the gpm
+       connection if Gpm_GetEvent fails.
+
        * window.c (set_window_buffer): Always preserve current-buffer.
 
 2008-09-12  Glenn Morris  <rgm@gnu.org>
index 5015155d97fd8f9814507b6b48c2904e29910e86..cd18b91abf114454c9b3a3934ba266f9da1b5222 100644 (file)
@@ -7110,6 +7110,9 @@ tty_read_avail_input (struct terminal *terminal,
       while (gpm = Gpm_GetEvent (&event), gpm == 1) {
          nread += handle_one_term_event (tty, &event, &hold_quit);
       }
+      if (gpm < 0)
+       /* Presumably the GPM daemon has closed the connection.  */
+       close_gpm ();
       if (hold_quit.kind != NO_EVENT)
          kbd_buffer_store_event (&hold_quit);
       if (nread)
index 367040288efff9f3647a0d65a6579248feefdae0..19382f9667ccebbfdbdc6896a91e793735eb1fe7 100644 (file)
@@ -3128,6 +3128,15 @@ Gpm-mouse can only be activated for one tty at a time.  */)
     }
 }
 
+void
+close_gpm ()
+{
+  if (gpm_fd >= 0)
+    delete_gpm_wait_descriptor (gpm_fd);
+  while (Gpm_Close()); /* close all the stack */
+  gpm_tty = NULL;
+}
+
 DEFUN ("gpm-mouse-stop", Fgpm_mouse_stop, Sgpm_mouse_stop,
        0, 0, 0,
        doc: /* Close a connection to Gpm.  */)
@@ -3141,10 +3150,7 @@ DEFUN ("gpm-mouse-stop", Fgpm_mouse_stop, Sgpm_mouse_stop,
   if (!tty || gpm_tty != tty)
     return Qnil;       /* Not activated on this terminal, nothing to do.  */
 
-  if (gpm_fd >= 0)
-    delete_gpm_wait_descriptor (gpm_fd);
-  while (Gpm_Close()); /* close all the stack */
-  gpm_tty = NULL;
+  close_gpm ();
   return Qnil;
 }
 #endif /* HAVE_GPM */
index 9edd4bf052e752c02f9a86052cbf40c14c19c7b7..71a935420d5d08b1b9ee38eaba480ad85cde31e6 100644 (file)
@@ -643,5 +643,9 @@ extern void delete_terminal P_ ((struct terminal *));
 /* The initial terminal device, created by initial_term_init. */
 extern struct terminal *initial_terminal;
 
+#ifdef HAVE_GPM
+extern void close_gpm (void);
+#endif
+
 /* arch-tag: 33a00ecc-52b5-4186-a410-8801ac9f087d
    (do not change this comment) */