{
#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))
#endif
}
+/* Not needed on GTK because GTK handles reporting the user time
+ itself. */
+
+#ifndef USE_GTK
+static void
+x_update_frame_user_time_window (struct frame *f)
+{
+ struct x_output *output;
+ struct x_display_info *dpyinfo;
+ XSetWindowAttributes attrs;
+
+ output = FRAME_X_OUTPUT (f);
+ dpyinfo = FRAME_DISPLAY_INFO (f);
+
+ if (!x_wm_supports (f, dpyinfo->Xatom_net_wm_user_time_window))
+ {
+ if (output->user_time_window == None)
+ output->user_time_window = FRAME_OUTER_WINDOW (f);
+ else if (output->user_time_window != FRAME_OUTER_WINDOW (f))
+ {
+ XDestroyWindow (dpyinfo->display,
+ output->user_time_window);
+ XDeleteProperty (dpyinfo->display,
+ FRAME_OUTER_WINDOW (f),
+ dpyinfo->Xatom_net_wm_user_time_window);
+ output->user_time_window = FRAME_OUTER_WINDOW (f);
+ }
+ }
+ else
+ {
+ if (output->user_time_window == FRAME_OUTER_WINDOW (f)
+ || output->user_time_window == None)
+ {
+ memset (&attrs, 0, sizeof attrs);
+
+ output->user_time_window
+ = XCreateWindow (dpyinfo->display, FRAME_X_WINDOW (f),
+ -1, -1, 1, 1, 0, 0, InputOnly,
+ CopyFromParent, 0, &attrs);
+
+ XDeleteProperty (dpyinfo->display, FRAME_OUTER_WINDOW (f),
+ dpyinfo->Xatom_net_wm_user_time);
+ XChangeProperty (dpyinfo->display, FRAME_OUTER_WINDOW (f),
+ dpyinfo->Xatom_net_wm_user_time_window,
+ XA_WINDOW, 32, PropModeReplace,
+ (unsigned char *) &output->user_time_window, 1);
+ }
+ }
+}
+#endif
+
void
x_set_last_user_time_from_lisp (struct x_display_info *dpyinfo,
Time time)
{
/* Maybe we shouldn't set this for child frames ?? */
f->output_data.x->parent_desc = event->xreparent.parent;
+
if (!FRAME_PARENT_FRAME (f))
- x_real_positions (f, &f->left_pos, &f->top_pos);
+ {
+ x_real_positions (f, &f->left_pos, &f->top_pos);
+
+ /* Perhaps reparented due to a WM restart. Reset this. */
+ FRAME_DISPLAY_INFO (f)->wm_type = X_WMTYPE_UNKNOWN;
+ FRAME_DISPLAY_INFO (f)->net_supported_window = 0;
+
+#ifndef USE_GTK
+ /* The window manager could have restarted and the new
+ window manager might not support user time windows,
+ so update what is used accordingly.
+
+ Note that this doesn't handle changes between
+ non-reparenting window managers. */
+ if (FRAME_X_OUTPUT (f)->has_been_visible)
+ x_update_frame_user_time_window (f);
+#endif
+ }
else
{
Window root;
unblock_input ();
}
- /* Perhaps reparented due to a WM restart. Reset this. */
- FRAME_DISPLAY_INFO (f)->wm_type = X_WMTYPE_UNKNOWN;
- FRAME_DISPLAY_INFO (f)->net_supported_window = 0;
-
x_set_frame_alpha (f);
}
goto OTHER;