{
#ifndef USE_GTK
struct frame *focus_frame = dpyinfo->x_focus_frame;
+ struct x_output *output;
#endif
#ifdef ENABLE_CHECKING
dpyinfo->last_user_time = time;
#ifndef USE_GTK
+ if (focus_frame
+ && (dpyinfo->last_user_time
+ > (dpyinfo->last_user_check_time + 2000)))
+ {
+ output = FRAME_X_OUTPUT (focus_frame);
+
+ if (!x_wm_supports (focus_frame,
+ dpyinfo->Xatom_net_wm_user_time_window))
+ {
+ if (output->user_time_window == None)
+ output->user_time_window = FRAME_OUTER_WINDOW (focus_frame);
+ else if (output->user_time_window != FRAME_OUTER_WINDOW (focus_frame))
+ {
+ XDestroyWindow (dpyinfo->display,
+ output->user_time_window);
+ XDeleteProperty (dpyinfo->display,
+ FRAME_OUTER_WINDOW (focus_frame),
+ dpyinfo->Xatom_net_wm_user_time_window);
+ output->user_time_window = FRAME_OUTER_WINDOW (focus_frame);
+ }
+ }
+ else
+ {
+ if (output->user_time_window == FRAME_OUTER_WINDOW (focus_frame)
+ || output->user_time_window == None)
+ {
+ XSetWindowAttributes attrs;
+ memset (&attrs, 0, sizeof attrs);
+
+ output->user_time_window
+ = XCreateWindow (dpyinfo->display,
+ FRAME_X_WINDOW (focus_frame),
+ -1, -1, 1, 1, 0, 0, InputOnly,
+ CopyFromParent, 0, &attrs);
+
+ XDeleteProperty (dpyinfo->display,
+ FRAME_OUTER_WINDOW (focus_frame),
+ dpyinfo->Xatom_net_wm_user_time);
+ XChangeProperty (dpyinfo->display,
+ FRAME_OUTER_WINDOW (focus_frame),
+ dpyinfo->Xatom_net_wm_user_time_window,
+ XA_WINDOW, 32, PropModeReplace,
+ (unsigned char *) &output->user_time_window,
+ 1);
+ }
+ }
+
+ dpyinfo->last_user_check_time = time;
+ }
+
if (focus_frame)
{
while (FRAME_PARENT_FRAME (focus_frame))
/* The scroll bar in which the last X motion event occurred. */
struct scroll_bar *last_mouse_scroll_bar;
- /* Time of last user interaction as returned in X events on this display. */
- Time last_user_time;
+ /* Time of last user interaction as returned in X events on this
+ display, and time where WM support for `_NET_WM_USER_TIME_WINDOW'
+ was last checked. */
+ Time last_user_time, last_user_check_time;
/* Position where the mouse was last time we reported a motion.
This is a position on last_mouse_motion_frame. */