# HG changeset patch # User Adrian Robert # Date 1216127041 0 # Node ID b306a69b9d7f1ca9c101e405302ee408c75fabe0 # Parent 4d8d83c2373aa7121cb1ce706c92887fb05e0379 applying patch to consolidate non-GUI portion of hourglass implementation as posted at http://thread.gmane.org/gmane.emacs.devel/98341 diff -r 4d8d83c2373a -r b306a69b9d7f src/ChangeLog --- a/src/ChangeLog Mon Jul 14 23:06:30 2008 +0000 +++ b/src/ChangeLog Tue Jul 15 13:04:01 2008 +0000 @@ -1,3 +1,34 @@ +2008-07-15 Adrian Robert + + * dispextern.h (hourglass_shown_p, hourglass_atimer): New extern + variables (formerly in xxxfns.c). + (show_hourglass, hide_hourglass): New prototypes (same). + * xdisp.c (display_hourglass_p, hourglass_shown_p, hourglass_atimer) + (Vhourglass_delay, DEFAULT_HOURGLASS_DELAY): New variables (formerly + in xxxfns.c). + (syms_of_xdisp): Declare/initialize display-hourglass, + hourglass-delay. Initialize hourglass_atimer, hourglass_shown_p. + (hourglass_started, start_hourglass, cancel_hourglass): New functions, + formerly in xxxfns.c. + * xfns.c (display_hourglass_p, hourglass_atimer, hourglass_shown_p) + (Vhourglass_delay, DEFAULT_HOURGLASS_DELAY, hourglass_started) + (start_hourglass, cancel_hourglass): Remove. + (show_hourglass, hide_hourglass): Remove prototypes and static + modifiers. + (syms_of_xfns): Remove display-hourglass, hourglass-delay, + hourglass_atimer, hourglass_shown_p declaration/initialization. + * macfns.c (display_hourglass_p, hourglass_atimer, hourglass_shown_p) + (Vhourglass_delay, DEFAULT_HOURGLASS_DELAY, hourglass_started) + (start_hourglass, cancel_hourglass): Remove. + (show_hourglass, hide_hourglass): Remove prototypes and static + modifiers. + (syms_of_macfns): Remove display-hourglass, hourglass-delay, + hourglass_atimer, hourglass_shown_p declaration/initialization. + * w32fns.c (display_hourglass_p, Vhourglass_delay) + (DEFAULT_HOURGLASS_DELAY): Remove. + (syms_of_w32fns): Remove display-hourglass, hourglass-delay, + hourglass_shown_p declaration/initialization. + 2008-07-14 Jason Rumney * w32fns.c (w32_get_arg): Remove wrapper function. diff -r 4d8d83c2373a -r b306a69b9d7f src/dispextern.h --- a/src/dispextern.h Mon Jul 14 23:06:30 2008 +0000 +++ b/src/dispextern.h Tue Jul 15 13:04:01 2008 +0000 @@ -2925,6 +2925,15 @@ extern void cancel_hourglass P_ ((void)); extern int hourglass_started P_ ((void)); extern int display_hourglass_p; +extern int hourglass_shown_p; +struct atimer; /* Defined in atimer.h. */ +/* If non-null, an asynchronous timer that, when it expires, displays + an hourglass cursor on all frames. */ +extern struct atimer *hourglass_atimer; + +/* Each GUI implements these. PENDING: move into RIF. */ +extern void show_hourglass P_ ((struct atimer *)); +extern void hide_hourglass P_ ((void)); /* Returns the background color of IMG, calculating one heuristically if necessary. If non-zero, XIMG is an existing XImage object to use for diff -r 4d8d83c2373a -r b306a69b9d7f src/macfns.c --- a/src/macfns.c Mon Jul 14 23:06:30 2008 +0000 +++ b/src/macfns.c Tue Jul 15 13:04:01 2008 +0000 @@ -57,10 +57,6 @@ #endif /* TARGET_API_MAC_CARBON */ -/* Non-zero means we're allowed to display an hourglass cursor. */ - -int display_hourglass_p; - /* The background and shape of the mouse pointer, and shape when not over text or in the modeline. */ @@ -3420,89 +3416,6 @@ Busy cursor ***********************************************************************/ -/* If non-null, an asynchronous timer that, when it expires, displays - an hourglass cursor on all frames. */ - -static struct atimer *hourglass_atimer; - -/* Non-zero means an hourglass cursor is currently shown. */ - -static int hourglass_shown_p; - -/* Number of seconds to wait before displaying an hourglass cursor. */ - -static Lisp_Object Vhourglass_delay; - -/* Default number of seconds to wait before displaying an hourglass - cursor. */ - -#define DEFAULT_HOURGLASS_DELAY 1 - -/* Function prototypes. */ - -static void show_hourglass P_ ((struct atimer *)); -static void hide_hourglass P_ ((void)); - -/* Return non-zero if houglass timer has been started or hourglass is shown. */ - -int -hourglass_started () -{ - return hourglass_shown_p || hourglass_atimer != NULL; -} - - -/* Cancel a currently active hourglass timer, and start a new one. */ - -void -start_hourglass () -{ -#ifdef MAC_OSX - EMACS_TIME delay; - int secs, usecs = 0; - - cancel_hourglass (); - - if (INTEGERP (Vhourglass_delay) - && XINT (Vhourglass_delay) > 0) - secs = XFASTINT (Vhourglass_delay); - else if (FLOATP (Vhourglass_delay) - && XFLOAT_DATA (Vhourglass_delay) > 0) - { - Lisp_Object tem; - tem = Ftruncate (Vhourglass_delay, Qnil); - secs = XFASTINT (tem); - usecs = (XFLOAT_DATA (Vhourglass_delay) - secs) * 1000000; - } - else - secs = DEFAULT_HOURGLASS_DELAY; - - EMACS_SET_SECS_USECS (delay, secs, usecs); - hourglass_atimer = start_atimer (ATIMER_RELATIVE, delay, - show_hourglass, NULL); -#endif /* MAC_OSX */ -} - - -/* Cancel the hourglass cursor timer if active, hide a busy cursor if - shown. */ - -void -cancel_hourglass () -{ -#ifdef MAC_OSX - if (hourglass_atimer) - { - cancel_atimer (hourglass_atimer); - hourglass_atimer = NULL; - } - - if (hourglass_shown_p) - hide_hourglass (); -#endif /* MAC_OSX */ -} - - /* Timer function of hourglass_atimer. TIMER is equal to hourglass_atimer. @@ -3510,7 +3423,7 @@ arrows) at the upper-right corner of each frame instead of the hourglass pointer. */ -static void +void show_hourglass (timer) struct atimer *timer; { @@ -3545,7 +3458,7 @@ /* Hide the progress indicators on all frames, if it is currently shown. */ -static void +void hide_hourglass () { #if TARGET_API_MAC_CARBON @@ -4379,15 +4292,6 @@ or when you set the mouse color. */); Vx_hourglass_pointer_shape = Qnil; - DEFVAR_BOOL ("display-hourglass", &display_hourglass_p, - doc: /* Non-zero means Emacs displays an hourglass pointer on window systems. */); - display_hourglass_p = 1; - - DEFVAR_LISP ("hourglass-delay", &Vhourglass_delay, - doc: /* *Seconds to wait before displaying an hourglass pointer. -Value must be an integer or float. */); - Vhourglass_delay = make_number (DEFAULT_HOURGLASS_DELAY); - #if 0 /* This doesn't really do anything. */ DEFVAR_LISP ("x-mode-pointer-shape", &Vx_mode_pointer_shape, doc: /* The shape of the pointer when over the mode line. diff -r 4d8d83c2373a -r b306a69b9d7f src/w32fns.c --- a/src/w32fns.c Mon Jul 14 23:06:30 2008 +0000 +++ b/src/w32fns.c Tue Jul 15 13:04:01 2008 +0000 @@ -151,10 +151,6 @@ /* Non nil if no window manager is in use. */ Lisp_Object Vx_no_window_manager; -/* Non-zero means we're allowed to display a hourglass pointer. */ - -int display_hourglass_p; - /* If non-zero, a w32 timer that, when it expires, displays an hourglass cursor on all frames. */ static unsigned hourglass_timer = 0; @@ -5233,20 +5229,9 @@ Busy cursor ***********************************************************************/ -/* Non-zero means an hourglass cursor is currently shown. */ - -static int hourglass_shown_p; - -/* Number of seconds to wait before displaying an hourglass cursor. */ - -static Lisp_Object Vhourglass_delay; - -/* Default number of seconds to wait before displaying an hourglass - cursor. */ - -#define DEFAULT_HOURGLASS_DELAY 1 - /* Return non-zero if houglass timer has been started or hourglass is shown. */ +/* PENDING: if W32 can use atimers (atimer.[hc]) then the common impl in + xdisp.c could be used. */ int hourglass_started () @@ -7150,15 +7135,6 @@ or when you set the mouse color. */); Vx_hourglass_pointer_shape = Qnil; - DEFVAR_BOOL ("display-hourglass", &display_hourglass_p, - doc: /* Non-zero means Emacs displays an hourglass pointer on window systems. */); - display_hourglass_p = 1; - - DEFVAR_LISP ("hourglass-delay", &Vhourglass_delay, - doc: /* *Seconds to wait before displaying an hourglass pointer. -Value must be an integer or float. */); - Vhourglass_delay = make_number (DEFAULT_HOURGLASS_DELAY); - DEFVAR_LISP ("x-sensitive-text-pointer-shape", &Vx_sensitive_text_pointer_shape, doc: /* The shape of the pointer when over mouse-sensitive text. @@ -7274,7 +7250,7 @@ hourglass_timer = 0; hourglass_hwnd = NULL; - hourglass_shown_p = 0; + defsubr (&Sx_show_tip); defsubr (&Sx_hide_tip); tip_timer = Qnil; diff -r 4d8d83c2373a -r b306a69b9d7f src/xdisp.c --- a/src/xdisp.c Mon Jul 14 23:06:30 2008 +0000 +++ b/src/xdisp.c Tue Jul 15 13:04:01 2008 +0000 @@ -852,6 +852,25 @@ static struct glyph_slice null_glyph_slice = { 0, 0, 0, 0 }; +/* Platform-independent portion of hourglass implementation. */ + +/* Non-zero means we're allowed to display a hourglass pointer. */ +int display_hourglass_p; + +/* Non-zero means an hourglass cursor is currently shown. */ +int hourglass_shown_p; + +/* If non-null, an asynchronous timer that, when it expires, displays + an hourglass cursor on all frames. */ +struct atimer *hourglass_atimer; + +/* Number of seconds to wait before displaying an hourglass cursor. */ +static Lisp_Object Vhourglass_delay; + +/* Default number of seconds to wait before displaying an hourglass + cursor. */ +#define DEFAULT_HOURGLASS_DELAY 1 + /* Function prototypes. */ @@ -25143,6 +25162,18 @@ with fonts that specify an UNDERLINE_POSITION relatively close to the baseline. The default value is 1. */); underline_minimum_offset = 1; + + DEFVAR_BOOL ("display-hourglass", &display_hourglass_p, + doc: /* Non-zero means Emacs displays an hourglass pointer on window systems. */); + display_hourglass_p = 1; + + DEFVAR_LISP ("hourglass-delay", &Vhourglass_delay, + doc: /* *Seconds to wait before displaying an hourglass pointer. +Value must be an integer or float. */); + Vhourglass_delay = make_number (DEFAULT_HOURGLASS_DELAY); + + hourglass_atimer = NULL; + hourglass_shown_p = 0; } @@ -25198,6 +25229,64 @@ help_echo_showing_p = 0; } +/* Platform-independent portion of hourglass implementation. */ + +/* Return non-zero if houglass timer has been started or hourglass is shown. */ +int +hourglass_started () +{ + return hourglass_shown_p || hourglass_atimer != NULL; +} + + +/* Cancel a currently active hourglass timer, and start a new one. */ +void +start_hourglass () +{ +#if defined (HAVE_WINDOW_SYSTEM) + EMACS_TIME delay; + int secs, usecs = 0; + + cancel_hourglass (); + + if (INTEGERP (Vhourglass_delay) + && XINT (Vhourglass_delay) > 0) + secs = XFASTINT (Vhourglass_delay); + else if (FLOATP (Vhourglass_delay) + && XFLOAT_DATA (Vhourglass_delay) > 0) + { + Lisp_Object tem; + tem = Ftruncate (Vhourglass_delay, Qnil); + secs = XFASTINT (tem); + usecs = (XFLOAT_DATA (Vhourglass_delay) - secs) * 1000000; + } + else + secs = DEFAULT_HOURGLASS_DELAY; + + EMACS_SET_SECS_USECS (delay, secs, usecs); + hourglass_atimer = start_atimer (ATIMER_RELATIVE, delay, + show_hourglass, NULL); +#endif +} + + +/* Cancel the hourglass cursor timer if active, hide a busy cursor if + shown. */ +void +cancel_hourglass () +{ +#if defined (HAVE_WINDOW_SYSTEM) + if (hourglass_atimer) + { + cancel_atimer (hourglass_atimer); + hourglass_atimer = NULL; + } + + if (hourglass_shown_p) + hide_hourglass (); +#endif +} + /* arch-tag: eacc864d-bb6a-4b74-894a-1a4399a1358b (do not change this comment) */ diff -r 4d8d83c2373a -r b306a69b9d7f src/xfns.c --- a/src/xfns.c Mon Jul 14 23:06:30 2008 +0000 +++ b/src/xfns.c Tue Jul 15 13:04:01 2008 +0000 @@ -149,10 +149,6 @@ int gray_bitmap_height = gray_height; char *gray_bitmap_bits = gray_bits; -/* Non-zero means we're allowed to display an hourglass cursor. */ - -int display_hourglass_p; - /* Non-zero means prompt with the old GTK file selection dialog. */ int x_gtk_use_old_file_dialog; @@ -4472,85 +4468,6 @@ Busy cursor ***********************************************************************/ -/* If non-null, an asynchronous timer that, when it expires, displays - an hourglass cursor on all frames. */ - -static struct atimer *hourglass_atimer; - -/* Non-zero means an hourglass cursor is currently shown. */ - -static int hourglass_shown_p; - -/* Number of seconds to wait before displaying an hourglass cursor. */ - -static Lisp_Object Vhourglass_delay; - -/* Default number of seconds to wait before displaying an hourglass - cursor. */ - -#define DEFAULT_HOURGLASS_DELAY 1 - -/* Function prototypes. */ - -static void show_hourglass P_ ((struct atimer *)); -static void hide_hourglass P_ ((void)); - -/* Return non-zero if houglass timer has been started or hourglass is shown. */ - -int -hourglass_started () -{ - return hourglass_shown_p || hourglass_atimer != NULL; -} - - -/* Cancel a currently active hourglass timer, and start a new one. */ - -void -start_hourglass () -{ - EMACS_TIME delay; - int secs, usecs = 0; - - cancel_hourglass (); - - if (INTEGERP (Vhourglass_delay) - && XINT (Vhourglass_delay) > 0) - secs = XFASTINT (Vhourglass_delay); - else if (FLOATP (Vhourglass_delay) - && XFLOAT_DATA (Vhourglass_delay) > 0) - { - Lisp_Object tem; - tem = Ftruncate (Vhourglass_delay, Qnil); - secs = XFASTINT (tem); - usecs = (XFLOAT_DATA (Vhourglass_delay) - secs) * 1000000; - } - else - secs = DEFAULT_HOURGLASS_DELAY; - - EMACS_SET_SECS_USECS (delay, secs, usecs); - hourglass_atimer = start_atimer (ATIMER_RELATIVE, delay, - show_hourglass, NULL); -} - - -/* Cancel the hourglass cursor timer if active, hide a busy cursor if - shown. */ - -void -cancel_hourglass () -{ - if (hourglass_atimer) - { - cancel_atimer (hourglass_atimer); - hourglass_atimer = NULL; - } - - if (hourglass_shown_p) - hide_hourglass (); -} - - /* Timer function of hourglass_atimer. TIMER is equal to hourglass_atimer. @@ -4559,7 +4476,7 @@ output_data.x structure to indicate that an hourglass cursor is shown on the frames. */ -static void +void show_hourglass (timer) struct atimer *timer; { @@ -4624,7 +4541,7 @@ /* Hide the hourglass pointer on all frames, if it is currently shown. */ -static void +void hide_hourglass () { if (hourglass_shown_p) @@ -5905,15 +5822,6 @@ or when you set the mouse color. */); Vx_hourglass_pointer_shape = Qnil; - DEFVAR_BOOL ("display-hourglass", &display_hourglass_p, - doc: /* Non-zero means Emacs displays an hourglass pointer on window systems. */); - display_hourglass_p = 1; - - DEFVAR_LISP ("hourglass-delay", &Vhourglass_delay, - doc: /* *Seconds to wait before displaying an hourglass pointer. -Value must be an integer or float. */); - Vhourglass_delay = make_number (DEFAULT_HOURGLASS_DELAY); - #if 0 /* This doesn't really do anything. */ DEFVAR_LISP ("x-mode-pointer-shape", &Vx_mode_pointer_shape, doc: /* The shape of the pointer when over the mode line. @@ -6053,9 +5961,6 @@ /* Setting callback functions for fontset handler. */ check_window_system_func = check_x; - hourglass_atimer = NULL; - hourglass_shown_p = 0; - defsubr (&Sx_show_tip); defsubr (&Sx_hide_tip); tip_timer = Qnil;