all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Dmitry Antipov <dmantipov@yandex.ru>
To: Dani Moncayo <dmoncayo@gmail.com>
Cc: Emacs development discussions <emacs-devel@gnu.org>
Subject: Re: w32 hourglass cursor
Date: Thu, 03 Jul 2014 21:33:18 +0400	[thread overview]
Message-ID: <53B593DE.6080008@yandex.ru> (raw)
In-Reply-To: <CAH8Pv0h1Tu_zx4jubL2Pc2XXCatKup2b_x12LYFt4MQJ2+rGZw@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 837 bytes --]

On 07/03/2014 09:07 PM, Dani Moncayo wrote:

> When I move the cursor, its shape change to busy, yes, but when the
> execution ends (either by cancelling it with C-g or when it
> completes), the shape remains the same (busy).  This problem is
> specific to the patched binary.

Hm....

>> 5) Do M-x new-frame then repeat 1)-4) but move mouse between two frames
>>     and make sure that you have busy cursor in both of them.
>
> Here the behavior is equal with or without the patch: the cursor shape
> is busy in the original frame (where I started the execution of the
> macro) and normal (arrow or I-beam) when I go over the other frame.

This is completely different from we have under X where busy cursor
is shown on all GUI frames. Could you also please test this stuff (which
is mostly borrowed from the relevant X code)?

Dmitry


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: w32_hourglass_cursor_2.patch --]
[-- Type: text/x-patch; name="w32_hourglass_cursor_2.patch", Size: 4536 bytes --]

=== modified file 'src/w32fns.c'
--- src/w32fns.c	2014-06-29 16:12:08 +0000
+++ src/w32fns.c	2014-07-03 17:25:36 +0000
@@ -89,9 +89,6 @@
 extern const char *map_w32_filename (const char *, const char **);
 extern char * w32_strerror (int error_no);
 
-/* If non-NULL, a handle to a frame where to display the hourglass cursor.  */
-static HWND hourglass_hwnd = NULL;
-
 #ifndef IDC_HAND
 #define IDC_HAND MAKEINTRESOURCE(32649)
 #endif
@@ -233,10 +230,6 @@
 extern void syms_of_w32uniscribe (void);
 extern int uniscribe_available;
 
-/* Function prototypes for hourglass support.  */
-static void w32_show_hourglass (struct frame *);
-static void w32_hide_hourglass (void);
-
 #ifdef WINDOWSNT
 /* From w32inevt.c */
 extern int faked_key;
@@ -5500,95 +5493,62 @@
 				Busy cursor
  ***********************************************************************/
 
-void
-w32_note_current_window (void)
-{
-  struct frame * f = SELECTED_FRAME ();
-
-  if (!FRAME_W32_P (f))
-    return;
-
-  hourglass_hwnd = FRAME_W32_WINDOW (f);
-}
+/* Display an hourglass cursor.  Set the hourglass_p flag in display info
+   to indicate that an hourglass cursor is shown.  */
 
 void
 show_hourglass (struct atimer *timer)
 {
-  struct frame *f;
-
   hourglass_atimer = NULL;
 
-  block_input ();
-  f = x_window_to_frame (&one_w32_display_info,
-				       hourglass_hwnd);
-
-  if (f)
-    f->output_data.w32->hourglass_p = 0;
-  else
-    f = SELECTED_FRAME ();
-
-  if (!FRAME_W32_P (f))
-    {
-      unblock_input ();
-      return;
-    }
-
-  w32_show_hourglass (f);
-  unblock_input ();
-}
-
-void
-hide_hourglass (void)
-{
-  block_input ();
-  w32_hide_hourglass ();
-  unblock_input ();
-}
-
-
-/* Display an hourglass cursor.  Set the hourglass_p flag in display info
-   to indicate that an hourglass cursor is shown.  */
-
-static void
-w32_show_hourglass (struct frame *f)
-{
   if (!hourglass_shown_p)
     {
-      f->output_data.w32->hourglass_p = 1;
-      if (!menubar_in_use && !current_popup_menu)
-	SetCursor (f->output_data.w32->hourglass_cursor);
+      Lisp_Oject tail, frame;
+
+      block_input ();
+      FOR_EACH_FRAME (tail, frame)
+	{
+	  struct frame *f = XFRAME (frame);
+
+	  if (FRAME_W32_P (f) && !menubar_in_use && !current_popup_menu)
+	    {
+	      f->output_data.w32->hourglass_p = 1;
+	      SetCursor (f->output_data.w32->hourglass_cursor);
+	    }
+	}
+      unblock_input ();
       hourglass_shown_p = 1;
     }
 }
 
-
 /* Hide the hourglass cursor on all frames, if it is currently shown.  */
 
-static void
-w32_hide_hourglass (void)
+void
+hide_hourglass (void)
 {
   if (hourglass_shown_p)
     {
-      struct frame *f = x_window_to_frame (&one_w32_display_info,
-					   hourglass_hwnd);
-      if (f)
-	f->output_data.w32->hourglass_p = 0;
-      else
-	/* If frame was deleted, restore to selected frame's cursor.  */
-	f = SELECTED_FRAME ();
-
-      if (FRAME_W32_P (f))
-	SetCursor (f->output_data.w32->current_cursor);
-      else
-	/* No cursors on non GUI frames - restore to stock arrow cursor.  */
-	SetCursor (w32_load_cursor (IDC_ARROW));
-
+      Lisp_Object tail, frame;
+
+      block_input ();
+      FOR_EACH_FRAME (tail, frame)
+	{
+	  struct frame *f = XFRAME (frame);
+
+	  if (FRAME_W32_P (f))
+	    {
+	      f->output_data.w32->hourglass_p = 0;
+	      SetCursor (f->output_data.w32->current_cursor);
+	    }
+	  else
+	    /* No cursors on non GUI frames - restore to stock arrow cursor.  */
+	    SetCursor (w32_load_cursor (IDC_ARROW));
+	}
+      unblock_input ();
       hourglass_shown_p = 0;
     }
 }
 
-
-\f
 /***********************************************************************
 				Tool tips
  ***********************************************************************/
@@ -8415,9 +8375,6 @@
 #endif
 
   defsubr (&Sset_message_beep);
-
-  hourglass_hwnd = NULL;
-
   defsubr (&Sx_show_tip);
   defsubr (&Sx_hide_tip);
   tip_timer = Qnil;

=== modified file 'src/xdisp.c'
--- src/xdisp.c	2014-07-03 06:00:53 +0000
+++ src/xdisp.c	2014-07-03 17:24:15 +0000
@@ -30683,13 +30683,6 @@
   else
     delay = make_timespec (DEFAULT_HOURGLASS_DELAY, 0);
 
-#ifdef HAVE_NTGUI
-  {
-    extern void w32_note_current_window (void);
-    w32_note_current_window ();
-  }
-#endif /* HAVE_NTGUI */
-
   hourglass_atimer = start_atimer (ATIMER_RELATIVE, delay,
 				   show_hourglass, NULL);
 }


  reply	other threads:[~2014-07-03 17:33 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-03 10:35 w32 hourglass cursor Dmitry Antipov
2014-07-03 16:18 ` Dani Moncayo
2014-07-03 16:30   ` Dmitry Antipov
2014-07-03 17:07     ` Dani Moncayo
2014-07-03 17:33       ` Dmitry Antipov [this message]
2014-07-03 17:53         ` Dani Moncayo
2014-07-03 18:15           ` Dmitry Antipov
2014-07-03 16:42   ` Eli Zaretskii

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=53B593DE.6080008@yandex.ru \
    --to=dmantipov@yandex.ru \
    --cc=dmoncayo@gmail.com \
    --cc=emacs-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.