diff options
author | Martin Rudalics <rudalics@gmx.at> | 2015-06-26 08:28:08 +0200 |
---|---|---|
committer | Martin Rudalics <rudalics@gmx.at> | 2015-06-26 08:28:08 +0200 |
commit | 605765af40831390be93264b36b31fad56907554 (patch) | |
tree | c1897fc481dd4e14c4c89499d8771f5efa511a64 | |
parent | 135ae5d16d7edf122a8b72817987fd847668d3f9 (diff) | |
download | emacs-605765af40831390be93264b36b31fad56907554.tar.gz |
Provide invisible mouse pointers on Windows. (Bug#6105) (Bug#12922)
* src/w32fns.c (w32_wnd_proc): Handle f->pointer_invisible
for WM_SETCURSOR and WM_EMACS_SETCURSOR cases.
* src/w32term.c (w32_hide_hourglass): Handle
f->pointer_invisible.
(w32_toggle_invisible_pointer): New function.
(w32_create_terminal): Add w32_toggle_invisible_pointer as
toggle_invisible_pointer_hook for this terminal.
-rw-r--r-- | src/w32fns.c | 23 | ||||
-rw-r--r-- | src/w32term.c | 25 |
2 files changed, 41 insertions, 7 deletions
diff --git a/src/w32fns.c b/src/w32fns.c index 5f40729011e..180d326bc98 100644 --- a/src/w32fns.c +++ b/src/w32fns.c @@ -3974,11 +3974,17 @@ w32_wnd_proc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) if (LOWORD (lParam) == HTCLIENT) { f = x_window_to_frame (dpyinfo, hwnd); - if (f && f->output_data.w32->hourglass_p - && !menubar_in_use && !current_popup_menu) - SetCursor (f->output_data.w32->hourglass_cursor); - else if (f) - SetCursor (f->output_data.w32->current_cursor); + if (f) + { + if (f->output_data.w32->hourglass_p + && !menubar_in_use && !current_popup_menu) + SetCursor (f->output_data.w32->hourglass_cursor); + else if (f->pointer_invisible) + SetCursor (NULL); + else + SetCursor (f->output_data.w32->current_cursor); + } + return 0; } goto dflt; @@ -3991,7 +3997,12 @@ w32_wnd_proc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { f->output_data.w32->current_cursor = cursor; if (!f->output_data.w32->hourglass_p) - SetCursor (cursor); + { + if (f->pointer_invisible) + SetCursor (NULL); + else + SetCursor (cursor); + } } return 0; } diff --git a/src/w32term.c b/src/w32term.c index b7c6e13c8a8..7c5f2db3a4c 100644 --- a/src/w32term.c +++ b/src/w32term.c @@ -6590,7 +6590,10 @@ w32_hide_hourglass (struct frame *f) struct w32_output *w32 = FRAME_X_OUTPUT (f); w32->hourglass_p = 0; - SetCursor (w32->current_cursor); + if (f->pointer_invisible) + SetCursor (NULL); + else + SetCursor (w32->current_cursor); } /* FIXME: old code did that, but I don't know why. Anyway, @@ -6602,6 +6605,25 @@ w32_arrow_cursor (void) SetCursor (w32_load_cursor (IDC_ARROW)); } +static void +w32_toggle_invisible_pointer (struct frame *f, bool invisible) +{ + block_input (); + + if (f->pointer_invisible != invisible) + { + f->pointer_invisible = invisible; + SET_FRAME_GARBAGED (f); + } + + if (invisible) + SetCursor (NULL); + else + SetCursor (f->output_data.w32->current_cursor); + + unblock_input (); +} + /*********************************************************************** Initialization ***********************************************************************/ @@ -6741,6 +6763,7 @@ w32_create_terminal (struct w32_display_info *dpyinfo) terminal->ins_del_lines_hook = x_ins_del_lines; terminal->delete_glyphs_hook = x_delete_glyphs; terminal->ring_bell_hook = w32_ring_bell; + terminal->toggle_invisible_pointer_hook = w32_toggle_invisible_pointer; terminal->update_begin_hook = x_update_begin; terminal->update_end_hook = x_update_end; terminal->read_socket_hook = w32_read_socket; |