[Bug 82619] [regression] recent ABI changes in xorg-video-intel (intel_drv.so) breaks dual-head XBMC

bugzilla-daemon at freedesktop.org bugzilla-daemon at freedesktop.org
Sat Aug 23 08:46:57 PDT 2014


https://bugs.freedesktop.org/show_bug.cgi?id=82619

Chris Wilson <chris at chris-wilson.co.uk> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|---                         |NOTOURBUG

--- Comment #43 from Chris Wilson <chris at chris-wilson.co.uk> ---
I'm using awesome -- I thought it would be a small enough ewmh compliant window
manager to figure out what is going on. So far, I can see the request for the
fullscreen window on the HDMI1 output, I can see awesome place it there, and
then for some reason I haven't fathomed yet, it moves it (when processing the
MapRequest) to only occupy the LVDS.

By learning a little bit of Lua, (I am starting to like that little embedded
interpreter!), I found that awesome was moving the newly mapped windows to the
same screen as the mouse. So the race appears to be between the XWarpPointer
performed by xbmc and the processing of the MapRequest by the window manager.
(The dependence upon the ddx is simply whether or not we block doing some
update or not, changing the relative timings of event processing and client
priorities.)

The correct fix is then:

diff --git a/xbmc/windowing/X11/WinSystemX11.cpp
b/xbmc/windowing/X11/WinSystemX11.cpp
index 018a4d2..76f33c1 100644
--- a/xbmc/windowing/X11/WinSystemX11.cpp
+++ b/xbmc/windowing/X11/WinSystemX11.cpp
@@ -151,7 +151,6 @@ bool CWinSystemX11::DestroyWindow()
   CWinEventsX11Imp::Quit();

   XUnmapWindow(m_dpy, m_mainWindow);
-  XSync(m_dpy,TRUE);
   XDestroyWindow(m_dpy, m_glWindow);
   XDestroyWindow(m_dpy, m_mainWindow);
   m_glWindow = 0;
@@ -659,13 +658,13 @@ bool CWinSystemX11::Restore()
 bool CWinSystemX11::Hide()
 {
   XUnmapWindow(m_dpy, m_mainWindow);
-  XSync(m_dpy, False);
+  XFlush(m_dpy);
   return true;
 }
 bool CWinSystemX11::Show(bool raise)
 {
   XMapWindow(m_dpy, m_mainWindow);
-  XSync(m_dpy, False);
+  XFlush(m_dpy);
   m_minimized = false;
   return true;
 }
@@ -931,7 +930,6 @@ bool CWinSystemX11::SetWindow(int width, int height, bool
fullscreen, const std:
       class_hints->res_class = (char*)classString.c_str();
       class_hints->res_name = (char*)classString.c_str();

-      XSync(m_dpy,False);
       XSetWMProperties(m_dpy, m_mainWindow, &windowName, &iconName,
                             NULL, 0, NULL, wm_hints,
                             class_hints);
@@ -942,14 +940,12 @@ bool CWinSystemX11::SetWindow(int width, int height, bool
fullscreen, const std:
       Atom wmDeleteMessage = XInternAtom(m_dpy, "WM_DELETE_WINDOW", False);
       XSetWMProtocols(m_dpy, m_mainWindow, &wmDeleteMessage, 1);
     }
+
+    XWarpPointer(m_dpy, None, m_mainWindow, 0, 0, 0, 0, mouseX*width,
mouseY*height);
+
     XMapRaised(m_dpy, m_glWindow);
     XMapRaised(m_dpy, m_mainWindow);
-    XSync(m_dpy,TRUE);
-
-    if (changeWindow && mouseActive)
-    {
-      XWarpPointer(m_dpy, None, m_mainWindow, 0, 0, 0, 0, mouseX*width,
mouseY*height);
-    }
+    XFlush(m_dpy);

     CDirtyRegionList dr;
     RefreshGlxContext(m_currentOutput.compare(output) != 0);

-- 
You are receiving this mail because:
You are the QA Contact for the bug.
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/intel-gfx-bugs/attachments/20140823/f8e2d273/attachment.html>


More information about the intel-gfx-bugs mailing list