winex11.drv: Use CurrentTime to focus windows if we have no timestamp.
authorVincent Povirk <vincent@codeweavers.com>
Wed, 17 Mar 2010 17:29:23 +0000 (12:29 -0500)
committerAlexandre Julliard <julliard@winehq.org>
Thu, 18 Mar 2010 09:22:59 +0000 (10:22 +0100)
dlls/winex11.drv/window.c

index 47f7245d2d0140629eef279648a72e8c6b0514a3..46f677b1a8e8b55e4f7be9b428797d903b9d3e35 100644 (file)
@@ -2089,20 +2089,24 @@ void CDECL X11DRV_SetFocus( HWND hwnd )
     Display *display = thread_display();
     struct x11drv_win_data *data;
     XWindowChanges changes;
+    DWORD timestamp;
 
     if (!(hwnd = GetAncestor( hwnd, GA_ROOT ))) return;
     if (!(data = X11DRV_get_win_data( hwnd ))) return;
     if (data->managed || !data->whole_window) return;
 
+    if (EVENT_x11_time_to_win32_time(0))
+        /* ICCCM says don't use CurrentTime, so try to use last message time if possible */
+        /* FIXME: this is not entirely correct */
+        timestamp = GetMessageTime() - EVENT_x11_time_to_win32_time(0);
+    else
+        timestamp = CurrentTime;
+
     /* Set X focus and install colormap */
     wine_tsx11_lock();
     changes.stack_mode = Above;
     XConfigureWindow( display, data->whole_window, CWStackMode, &changes );
-    /* we must not use CurrentTime (ICCCM), so try to use last message time instead */
-    /* FIXME: this is not entirely correct */
-    XSetInputFocus( display, data->whole_window, RevertToParent,
-                    /* CurrentTime */
-                    GetMessageTime() - EVENT_x11_time_to_win32_time(0));
+    XSetInputFocus( display, data->whole_window, RevertToParent, timestamp );
     wine_tsx11_unlock();
 }