emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Blink cursor changes, possible W32 breakage.


From: Juanma Barranquero
Subject: Re: Blink cursor changes, possible W32 breakage.
Date: Tue, 16 Jul 2013 19:00:30 +0200

The following patch works.

I'm not sure about the keyboard.c part. I suppose it is OK to use
FRAME_X_DISPLAY_INFO in the X and NS code?


=== modified file 'lisp/frame.el'
--- lisp/frame.el 2013-07-16 11:41:06 +0000
+++ lisp/frame.el 2013-07-16 16:44:14 +0000
@@ -1709,7 +1709,7 @@
   "Timer function of timer `blink-cursor-timer'."
   (internal-show-cursor nil (not (internal-show-cursor-p)))
   ;; Each blink is two calls to this function.
-  (when (memq window-system '(x ns))
+  (when (memq window-system '(x ns w32))
     (setq blink-cursor-blinks-done (1+ blink-cursor-blinks-done))
     (when (and (> blink-cursor-blinks 0)
        (<= (* 2 blink-cursor-blinks) blink-cursor-blinks-done))
@@ -1729,11 +1729,11 @@
     (setq blink-cursor-timer nil)))

 (defun blink-cursor-suspend ()
-  "Suspend cursor blinking on NS and X.
+  "Suspend cursor blinking on NS, X and W32.
 This is called when no frame has focus and timers can be suspended.
 Timers are restarted by `blink-cursor-check', which is called when a
 frame receives focus."
-  (when (memq window-system '(x ns))
+  (when (memq window-system '(x ns w32))
     (blink-cursor-end)
     (when blink-cursor-idle-timer
       (cancel-timer blink-cursor-idle-timer)

=== modified file 'src/keyboard.c'
--- src/keyboard.c 2013-07-16 11:41:06 +0000
+++ src/keyboard.c 2013-07-16 16:57:20 +0000
@@ -4085,7 +4085,7 @@
         }
       else if (event->kind == FOCUS_OUT_EVENT)
         {
-#if defined(HAVE_NS) || defined (HAVE_X11)
+#if defined (HAVE_NS) || defined (HAVE_X11) || defined (WINDOWSNT)

 #ifdef HAVE_NS
           struct ns_display_info *di;
@@ -4095,11 +4095,11 @@
           Lisp_Object rest, frame = event->frame_or_window;
           bool focused = false;

-          for (di = x_display_list; di && ! focused; di = di->next)
-            focused = di->x_highlight_frame != 0;
+          for (di = x_display_list; di && ! focused; di =
FRAME_X_DISPLAY_INFO (di)->next)
+            focused = FRAME_X_DISPLAY_INFO (di)->x_highlight_frame = 0;

           if (! focused) obj = make_lispy_focus_out (frame);
-#endif /* HAVE_NS || HAVE_X11 */
+#endif /* HAVE_NS || HAVE_X11 || WINDOWSNT */

           kbd_fetch_ptr = event + 1;
         }

=== modified file 'src/w32term.c'
--- src/w32term.c 2013-07-13 14:21:01 +0000
+++ src/w32term.c 2013-07-16 16:38:18 +0000
@@ -2912,9 +2912,15 @@
               && CONSP (Vframe_list)
               && !NILP (XCDR (Vframe_list)))
             {
-              bufp->kind = FOCUS_IN_EVENT;
-              XSETFRAME (bufp->frame_or_window, frame);
-            }
+              bufp->arg = Qt;
+            }
+          else
+            {
+              bufp->arg = Qnil;
+            }
+
+          bufp->kind = FOCUS_IN_EVENT;
+          XSETFRAME (bufp->frame_or_window, frame);
         }

       frame->output_data.x->focus_state |= state;
@@ -2929,7 +2935,10 @@
         {
           dpyinfo->w32_focus_event_frame = 0;
           x_new_focus_frame (dpyinfo, 0);
-        }
+
+          bufp->kind = FOCUS_OUT_EVENT;
+          XSETFRAME (bufp->frame_or_window, frame);
+      }

       /* TODO: IME focus?  */
     }



reply via email to

[Prev in Thread] Current Thread [Next in Thread]