emacs-pretest-bug
[Top][All Lists]
Advanced

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

Re: silent PC vs. emacs


From: YAMAMOTO Mitsuharu
Subject: Re: silent PC vs. emacs
Date: Mon, 04 Sep 2006 23:15:52 +0900
User-agent: Wanderlust/2.14.0 (Africa) SEMI/1.14.6 (Maruoka) FLIM/1.14.6 (Marutamachi) APEL/10.6 Emacs/22.0.50 (sparc-sun-solaris2.8) MULE/5.0 (SAKAKI)

>>>>> On Mon, 04 Sep 2006 05:50:23 -0400, Richard Stallman <address@hidden> 
>>>>> said:

>       /* Install an asynchronous timer that processes Xt timeout
>          events every 0.1s.  This is necessary because some widget
>          sets use timeouts internally, for example the LessTif menu
>          bar, or the Xaw3d scroll bar.  When Xt timouts aren't
>          processed, these widgets don't behave normally.  */

> Would it be safe to turn this off if no X events have been received
> for a certain time?  I don't know.

As for Xt, the callback function is meaningful only when either of
some two variables (`toolkit_scroll_bar_interaction' and
`popup_activated_flag') is set.  So, I think we can "externalize" the
condition and use a non-continuous timer instead of a continuous one.

                                     YAMAMOTO Mitsuharu
                                address@hidden

*** xmenu.c.~1.307.~    Thu Jun  1 18:13:30 2006
--- xmenu.c     Mon Sep  4 22:47:30 2006
***************
*** 1182,1187 ****
--- 1182,1191 ----
  {
    menu_items_inuse = in_use ? Qt : Qnil;
    popup_activated_flag = in_use;
+ #ifdef USE_X_TOOLKIT
+   if (popup_activated_flag)
+     x_activate_timeout_atimer ();
+ #endif
  }
  
  /* Wait for an X event to arrive or for a timer to expire.  */
***************
*** 1498,1503 ****
--- 1502,1510 ----
       XtPointer client_data;
  {
    popup_activated_flag = 1;
+ #ifdef USE_X_TOOLKIT
+   x_activate_timeout_atimer ();
+ #endif
  }
  #endif
  
***************
*** 2798,2803 ****
--- 2805,2811 ----
    /* Display the menu.  */
    lw_popup_menu (menu, (XEvent *) &dummy);
    popup_activated_flag = 1;
+   x_activate_timeout_atimer ();
  
    {
      int fact = 4 * sizeof (LWLIB_ID);
***************
*** 3175,3180 ****
--- 3183,3189 ----
    /* Display the dialog box.  */
    lw_pop_up_all_widgets (dialog_id);
    popup_activated_flag = 1;
+   x_activate_timeout_atimer ();
  
    /* Process events that apply to the dialog box.
       Also handle timers.  */
*** xterm.h.~1.186.~    Thu Aug 17 15:57:55 2006
--- xterm.h     Mon Sep  4 22:46:06 2006
***************
*** 1001,1006 ****
--- 1001,1007 ----
  extern int x_alloc_lighter_color_for_widget __P ((Widget, Display*, Colormap,
                                                  unsigned long *,
                                                  double, int));
+ extern void x_activate_timeout_atimer P_ ((void));
  #endif
  extern void x_query_colors P_ ((struct frame *f, XColor *, int));
  extern void x_query_color P_ ((struct frame *f, XColor *));
*** xterm.c.~1.924.~    Fri Aug 25 10:45:51 2006
--- xterm.c     Mon Sep  4 22:46:52 2006
***************
*** 4092,4097 ****
--- 4092,4100 ----
  
    /* Make Xt timeouts work while the scroll bar is active.  */
    toolkit_scroll_bar_interaction = 1;
+ #ifdef USE_X_TOOLKIT
+   x_activate_timeout_atimer ();
+ #endif
  
    /* Setting the event mask to zero means that the message will
       be sent to the client that created the window, and if that
***************
*** 10129,10134 ****
--- 10132,10142 ----
    {"-mc",     "*pointerColor", XrmoptionSepArg, (XtPointer) NULL},
    {"-cr",     "*cursorColor", XrmoptionSepArg, (XtPointer) NULL}
  };
+ 
+ /* Whether atimer for Xt timeouts is activated or not.  */
+ 
+ static int x_timeout_atimer_activated_flag;
+ 
  #endif /* USE_X_TOOLKIT */
  
  static int x_initialized;
***************
*** 10810,10822 ****
  x_process_timeouts (timer)
       struct atimer *timer;
  {
    if (toolkit_scroll_bar_interaction || popup_activated ())
      {
-       BLOCK_INPUT;
        while (XtAppPending (Xt_app_con) & XtIMTimer)
        XtAppProcessEvent (Xt_app_con, XtIMTimer);
!       UNBLOCK_INPUT;
      }
  }
  
  #endif /* USE_X_TOOLKIT */
--- 10818,10857 ----
  x_process_timeouts (timer)
       struct atimer *timer;
  {
+   BLOCK_INPUT;
    if (toolkit_scroll_bar_interaction || popup_activated ())
      {
        while (XtAppPending (Xt_app_con) & XtIMTimer)
        XtAppProcessEvent (Xt_app_con, XtIMTimer);
!       /* Reactivate the atimer for next time.  */
!       x_activate_timeout_atimer ();
      }
+   else
+     x_timeout_atimer_activated_flag = 0;
+   UNBLOCK_INPUT;
+ }
+ 
+ /* Install an asynchronous timer that processes Xt timeout events
+    every 0.1s as long as either `toolkit_scroll_bar_interaction' or
+    `popup_activated_flag' (in xmenu.c) is set.  Make sure to call this
+    function whenever these variables are set.  This is necessary
+    because some widget sets use timeouts internally, for example the
+    LessTif menu bar, or the Xaw3d scroll bar.  When Xt timeouts aren't
+    processed, these widgets don't behave normally.  */
+ 
+ void
+ x_activate_timeout_atimer ()
+ {
+   BLOCK_INPUT;
+   if (!x_timeout_atimer_activated_flag)
+     {
+       EMACS_TIME interval;
+ 
+       EMACS_SET_SECS_USECS (interval, 0, 100000);
+       start_atimer (ATIMER_RELATIVE, interval, x_process_timeouts, 0);
+       x_timeout_atimer_activated_flag = 1;
+     }
+   UNBLOCK_INPUT;
  }
  
  #endif /* USE_X_TOOLKIT */
***************
*** 10922,10938 ****
                         XtCacheByDisplay, cvt_pixel_dtor);
  
    XtAppSetFallbackResources (Xt_app_con, Xt_default_resources);
- 
-   /* Install an asynchronous timer that processes Xt timeout events
-      every 0.1s.  This is necessary because some widget sets use
-      timeouts internally, for example the LessTif menu bar, or the
-      Xaw3d scroll bar.  When Xt timouts aren't processed, these
-      widgets don't behave normally.  */
-   {
-     EMACS_TIME interval;
-     EMACS_SET_SECS_USECS (interval, 0, 100000);
-     start_atimer (ATIMER_CONTINUOUS, interval, x_process_timeouts, 0);
-   }
  #endif
  
  #ifdef USE_TOOLKIT_SCROLL_BARS
--- 10957,10962 ----




reply via email to

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