emacs-devel
[Top][All Lists]
Advanced

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

address@hidden: Re: silent PC vs. emacs]


From: Richard Stallman
Subject: address@hidden: Re: silent PC vs. emacs]
Date: Tue, 05 Sep 2006 05:43:17 -0400

Does anyone see a problem with this?
Can anyone confirm it is correct?

------- Start of forwarded message -------
Date: Mon, 04 Sep 2006 23:15:52 +0900
From: YAMAMOTO Mitsuharu <address@hidden>
To: address@hidden
Cc: address@hidden, address@hidden, address@hidden,
        address@hidden
Subject: Re: silent PC vs. emacs
In-Reply-To: <address@hidden>
Organization: Faculty of Science, Chiba University
MIME-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka")
Content-Type: text/plain; charset=US-ASCII
X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=failed 
        version=3.0.4

>>>>> 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 ----
------- End of forwarded message -------




reply via email to

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