From af8ee9ca886f2863716f209a51ef9c547a8aecc9 Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Thu, 3 Jul 2014 22:12:41 +0400 Subject: [PATCH] On MS-Windows, display busy cursor on all GUI frames. This is similar to what we have on X. Quickly tested by Dani Moncayo. * w32fns.c (toplevel): Remove hourglass_hwnd; no longer used. (w32_show_hourglass, w32_hide_hourglass, w32_note_current_window): Likewise. (hide_hourglass, show_hourglass): Redesign to match X counterparts. * xdisp.c (start_hourglass): Remove Windows-specific bits. --- src/ChangeLog | 10 +++++ src/w32fns.c | 107 +++++++++++++++----------------------------------- src/xdisp.c | 7 ---- 3 files changed, 42 insertions(+), 82 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 7fb620fc533..cbb89300cad 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,13 @@ +2014-07-03 Dmitry Antipov + + On MS-Windows, display busy cursor on all GUI frames. + This is similar to what we have on X. Quickly tested by Dani Moncayo. + * w32fns.c (toplevel): Remove hourglass_hwnd; no longer used. + (w32_show_hourglass, w32_hide_hourglass, w32_note_current_window): + Likewise. + (hide_hourglass, show_hourglass): Redesign to match X counterparts. + * xdisp.c (start_hourglass): Remove Windows-specific bits. + 2014-07-03 Dmitry Antipov Use convenient alists to manage per-frame font driver-specific data. diff --git a/src/w32fns.c b/src/w32fns.c index e24148af4ff..def9d8acb7a 100644 --- a/src/w32fns.c +++ b/src/w32fns.c @@ -89,9 +89,6 @@ extern void w32_free_menu_strings (HWND); 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 @@ static int menubar_in_use = 0; 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 @@ no value of TYPE (always string in the MS Windows case). */) 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)) + if (!hourglass_shown_p) { - unblock_input (); - return; - } - - w32_show_hourglass (f); - unblock_input (); -} + Lisp_Object tail, frame; -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. */ + block_input (); + FOR_EACH_FRAME (tail, frame) + { + struct frame *f = XFRAME (frame); -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); + 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 (); + Lisp_Object tail, 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)); + 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; } } - - /*********************************************************************** Tool tips ***********************************************************************/ @@ -8415,9 +8375,6 @@ only be necessary if the default setting causes problems. */); #endif defsubr (&Sset_message_beep); - - hourglass_hwnd = NULL; - defsubr (&Sx_show_tip); defsubr (&Sx_hide_tip); tip_timer = Qnil; diff --git a/src/xdisp.c b/src/xdisp.c index 3e76d3df9f9..6cec0bf1925 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -30683,13 +30683,6 @@ start_hourglass (void) 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); } -- 2.39.2