[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-panel-devel
Subject:    [Panel-devel] Xinerama problems on Intel cards
From:       Jason Stubbs <jasonbstubbs () gmail ! com>
Date:       2007-11-24 18:55:14
Message-ID: 200711250355.14588.jasonbstubbs () gmail ! com
[Download RAW message or body]

There was a person (fm_) asking about the following bug on #kde4-krush.

https://bugzilla.novell.com/show_bug.cgi?id=335530

Apparently the issue has happened before with ksplashx and patched for.

https://bugzilla.novell.com/show_bug.cgi?id=290988
http://lists.opensuse.org/opensuse-commit/2007-07/msg00648.html

The attached patch does essentially the same in Corona::loadDefaultSetup().
This handles the desktop part, but kwin would also need to be updated to 
handle maximizing correctly.

Personally, I wonder if the Intel driver isn't just buggy...

-- 
Jason Stubbs

["intel-fix.patch" (text/x-diff)]

Index: workspace/libs/plasma/corona.cpp
===================================================================
--- workspace/libs/plasma/corona.cpp	(revision 740936)
+++ workspace/libs/plasma/corona.cpp	(working copy)
@@ -234,10 +234,28 @@
     int topLeftScreen = 0;
     QPoint topLeftCorner = desktop->screenGeometry(0).topLeft();
 
+    // Merge screens that overlay each other to work around
+    // xinerama reporting inactive screens
+    QHash<int, QRect> screenGeometries;
+    QRect g = desktop->screenGeometry(0);
+    kDebug() << "     screen 0 geometry is" << g;
+    for (int i = 1; i < numScreens; ++i) {
+        QRect g2 = desktop->screenGeometry(i);
+        kDebug() << "     screen" << i << "geometry is" << g2;
+        if (g2.intersects(g)) {
+            g = g.united(g2);
+        } else {
+            screenGeometries.insert(i - 1, g);
+            g = g2;
+        }
+    }
+    screenGeometries.insert(numScreens - 1, g);
+
     // create a containment for each screen
-    for (int i = 0; i < numScreens; ++i) {
-        QRect g = desktop->screenGeometry(i);
-        kDebug() << "     screen " << i << "geometry is" << g;
+    foreach (int i, screenGeometries.keys()) {
+        QRect g = screenGeometries[i];
+        kDebug() << "     creating containment on screen" << i << "with geometry" << g;
+
         Containment* c = addContainment("desktop");
         c->setScreen(i);
         c->setFormFactor(Plasma::Planar);


_______________________________________________
Panel-devel mailing list
Panel-devel@kde.org
https://mail.kde.org/mailman/listinfo/panel-devel


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic