rev 9362 - trunk/packages/qt-x11-free/debian/patches

Fathi Boudra fabo at alioth.debian.org
Sat Feb 9 10:38:30 UTC 2008


Author: fabo
Date: 2008-02-09 10:38:29 +0000 (Sat, 09 Feb 2008)
New Revision: 9362

Added:
   trunk/packages/qt-x11-free/debian/patches/0086-revert-qt-khmer-fix.diff
   trunk/packages/qt-x11-free/debian/patches/0087-use-xrandr-1.2.diff
Log:
Introduced qt-copy patches.


Added: trunk/packages/qt-x11-free/debian/patches/0086-revert-qt-khmer-fix.diff
===================================================================
--- trunk/packages/qt-x11-free/debian/patches/0086-revert-qt-khmer-fix.diff	                        (rev 0)
+++ trunk/packages/qt-x11-free/debian/patches/0086-revert-qt-khmer-fix.diff	2008-02-09 10:38:29 UTC (rev 9362)
@@ -0,0 +1,40 @@
+qt-bugs@ issue : 
+bugs.kde.org number : 
+applied: no
+author: Dirk Mueller <mueller at kde.org>
+
+according to bug 345459, this fix for stacking letters from 3.3.8 
+made it only a lot worse. revert.
+
+
+--- a/src/kernel/qfontengine_x11.cpp
++++ b/src/kernel/qfontengine_x11.cpp
+@@ -2675,23 +2675,16 @@
+             // ###### fix the case where we have y advances. How do we handle this in Uniscribe?????
+             if (positions[i].new_advance) {
+                 item->advances[i] = item->flags & QTextEngine::RightToLeft
+-                                    ? -qRound((positions[i].x_advance >> 6)*scale)
++                                    ? -qRound((positions[i].x_advance >> 6)*scale) 
+                                     :  qRound((positions[i].x_advance >> 6)*scale);
+             } else {
+                 item->advances[i] += item->flags & QTextEngine::RightToLeft
+-                                     ? -qRound((positions[i].x_advance >> 6)*scale)
++                                     ? -qRound((positions[i].x_advance >> 6)*scale) 
+                                      :  qRound((positions[i].x_advance >> 6)*scale);
+             }
+-            int back = 0;
+-	  item->offsets[i].x = qRound((positions[i].x_pos >> 6)*scale);
+-	  item->offsets[i].y = qRound((positions[i].y_pos >> 6)*scale);
+-            while (positions[i-back].back) {
+-                back += positions[i - back].back;
+-                item->offsets[i].x += qRound((positions[i - back].x_pos >> 6)*scale);
+-	      item->offsets[i].y += qRound((positions[i - back].y_pos >> 6)*scale);
+-            }
+-	  item->offsets[i].y = -item->offsets[i].y;
+-            back = positions[i].back;
++	    item->offsets[i].x = qRound((positions[i].x_pos >> 6)*scale);
++	    item->offsets[i].y = -qRound((positions[i].y_pos >> 6)*scale);
++            int back = positions[i].back;
+             if (item->flags & QTextEngine::RightToLeft) {
+                 while (back--) {
+                     item->offsets[i].x -= item->advances[i-back];

Added: trunk/packages/qt-x11-free/debian/patches/0087-use-xrandr-1.2.diff
===================================================================
--- trunk/packages/qt-x11-free/debian/patches/0087-use-xrandr-1.2.diff	                        (rev 0)
+++ trunk/packages/qt-x11-free/debian/patches/0087-use-xrandr-1.2.diff	2008-02-09 10:38:29 UTC (rev 9362)
@@ -0,0 +1,106 @@
+qt-bugs@ issue :
+bugs.kde.org number :
+applied: no
+author: Dirk Mueller <mueller at kde.org>
+
+support xrandr 1.2 configurations. same patch like for trunk qt-copy,
+please see there for details.
+
+
+--- a/src/kernel/qdesktopwidget_x11.cpp
++++ b/src/kernel/qdesktopwidget_x11.cpp
+@@ -107,7 +107,7 @@
+ 	    screens[i] = 0;
+ 	}
+ 
+-	delete [] screens;
++	free(screens);
+     }
+ 
+     if ( rects )     delete [] rects;
+@@ -119,30 +119,33 @@
+     // get the screen count
+ #ifndef QT_NO_XINERAMA
+     XineramaScreenInfo *xinerama_screeninfo = 0;
+-    int unused;
++    int unused, newScreenCount;
+     use_xinerama = (XineramaQueryExtension(QPaintDevice::x11AppDisplay(),
+ 					   &unused, &unused) &&
+ 		    XineramaIsActive(QPaintDevice::x11AppDisplay()));
+ 
+     if (use_xinerama) {
+ 	xinerama_screeninfo =
+-	    XineramaQueryScreens(QPaintDevice::x11AppDisplay(), &screenCount);
++	    XineramaQueryScreens(QPaintDevice::x11AppDisplay(), &newScreenCount);
++
++    if (xinerama_screeninfo)
+ 	defaultScreen = 0;
+     } else
+ #endif // QT_NO_XINERAMA
+     {
+ 	defaultScreen = DefaultScreen(QPaintDevice::x11AppDisplay());
+-	screenCount = ScreenCount(QPaintDevice::x11AppDisplay());
++	newScreenCount = ScreenCount(QPaintDevice::x11AppDisplay());
++        use_xinerama = false;
+     }
+ 
+     delete [] rects;
+-    rects     = new QRect[ screenCount ];
++    rects     = new QRect[ newScreenCount ];
+     delete [] workareas;
+-    workareas = new QRect[ screenCount ];
++    workareas = new QRect[ newScreenCount ];
+ 
+     // get the geometry of each screen
+-    int i, x, y, w, h;
+-    for ( i = 0; i < screenCount; i++ ) {
++    int i, j, x, y, w, h;
++    for ( i = 0, j = 0; i < newScreenCount; i++ ) {
+ 
+ #ifndef QT_NO_XINERAMA
+ 	if (use_xinerama) {
+@@ -159,11 +162,33 @@
+ 		h = HeightOfScreen(ScreenOfDisplay(QPaintDevice::x11AppDisplay(), i));
+ 	    }
+ 
+-	rects[i].setRect(x, y, w, h);
+ 	workareas[i] = QRect();
++	rects[j].setRect(x, y, w, h);
++
++        // overlapping?
++        if (j > 0 && rects[j-1].intersects(rects[j])) {
++            // pick the bigger one, ignore the other
++            if ((rects[j].width()*rects[j].height()) >
++                (rects[j-1].width()*rects[j-1].height()))
++            rects[j-1] = rects[j];
++        }
++        else
++            j++;
++    }
++
++    if (screens) {
++        // leaks QWidget* pointers on purpose, can't delete them as pointer escapes
++        screens = (QWidget**) realloc(screens, j * sizeof(QWidget*));
++        if (j > screenCount)
++            memset(&screens[screenCount], 0, (j-screenCount) * sizeof(QWidget*));
+     }
+ 
++    screenCount = j;
++
+ #ifndef QT_NO_XINERAMA
++    if (use_xinerama && screenCount == 1)
++        use_xinerama = false;
++
+     if (xinerama_screeninfo)
+ 	XFree(xinerama_screeninfo);
+ #endif // QT_NO_XINERAMA
+@@ -216,8 +241,7 @@
+ 	screen = d->defaultScreen;
+ 
+     if ( ! d->screens ) {
+-	d->screens = new QWidget*[ d->screenCount ];
+-	memset( d->screens, 0, d->screenCount * sizeof( QWidget * ) );
++	d->screens = (QWidget**) calloc( d->screenCount, sizeof(QWidget*));
+ 	d->screens[ d->defaultScreen ] = this;
+     }
+ 




More information about the pkg-kde-commits mailing list