changeset 84969:6e58c1c8c0fc

(Fgpm_mouse_start): Don't signal an error if already activated on this tty. (Fgpm_mouse_stop): Only deactivate if it was activated on this tty.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Fri, 28 Sep 2007 20:07:54 +0000
parents 85eb2660cbe3
children 3e6ef5f41da8
files src/ChangeLog src/term.c
diffstat 2 files changed, 16 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Fri Sep 28 19:47:02 2007 +0000
+++ b/src/ChangeLog	Fri Sep 28 20:07:54 2007 +0000
@@ -1,5 +1,9 @@
 2007-09-28  Stefan Monnier  <monnier@iro.umontreal.ca>
 
+	* term.c (Fgpm_mouse_start): Don't signal an error if already activated
+	on this tty.
+	(Fgpm_mouse_stop): Only deactivate if it was activated on this tty.
+
 	* term.c (mouse_face_window): Rename from Qmouse_face_window.
 	Update all users.
 	(handle_one_term_event): Use Gpm_DrawPointer.
--- a/src/term.c	Fri Sep 28 19:47:02 2007 +0000
+++ b/src/term.c	Fri Sep 28 20:07:54 2007 +0000
@@ -2952,10 +2952,12 @@
        ? (f)->terminal->display_info.tty : NULL);
   Gpm_Connect connection;
 
+  if (!tty)
+    error ("Gpm-mouse only works in the GNU/Linux console");
+  if (gpm_tty == tty)
+    return Qnil;		/* Already activated, nothing to do.  */
   if (gpm_tty)
     error ("Gpm-mouse can only be activated for one tty at a time");
-  if (!tty)
-    error ("Gpm-mouse only works in the GNU/Linux console");
 
   connection.eventMask = ~0;
   connection.defaultMask = ~GPM_HARD;
@@ -2983,6 +2985,14 @@
        doc: /* Close a connection to Gpm.  */)
      ()
 {
+  struct frame *f = SELECTED_FRAME ();
+  struct tty_display_info *tty
+    = ((f)->output_method == output_termcap
+       ? (f)->terminal->display_info.tty : NULL);
+
+  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 */