Your message dated Tue, 09 Aug 2005 14:31:16 -0700 with message-id <[EMAIL PROTECTED]> and subject line Bug#303065: fixed in qt-x11-free 3:3.3.4-4 has caused the attached Bug report to be marked as done.
This means that you claim that the problem has been dealt with. If this is not the case it is now your responsibility to reopen the Bug report if necessary, and/or fix the problem forthwith. (NB: If you are a system administrator and have no idea what I am talking about this indicates a serious mail system misconfiguration somewhere. Please contact me immediately.) Debian bug tracking system administrator (administrator, Debian Bugs database) -------------------------------------- Received: (at submit) by bugs.debian.org; 4 Apr 2005 16:39:32 +0000 >From [EMAIL PROTECTED] Mon Apr 04 09:39:32 2005 Return-path: <[EMAIL PROTECTED]> Received: from tomts36.bellnexxia.net (tomts36-srv.bellnexxia.net) [209.226.175.93] by spohr.debian.org with esmtp (Exim 3.35 1 (Debian)) id 1DIUbr-0004VD-00; Mon, 04 Apr 2005 09:39:31 -0700 Received: from [192.168.0.100] ([70.50.49.249]) by tomts36-srv.bellnexxia.net (InterMail vM.5.01.06.10 201-253-122-130-110-20040306) with ESMTP id <[EMAIL PROTECTED]> for <[EMAIL PROTECTED]>; Mon, 4 Apr 2005 12:39:28 -0400 From: Christopher Martin <[EMAIL PROTECTED]> Reply-To: Christopher Martin <[EMAIL PROTECTED]> To: [EMAIL PROTECTED] Subject: Please add certain patches from qt-copy Date: Mon, 4 Apr 2005 12:39:20 -0400 User-Agent: KMail/1.8 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_42WUCpj9egr4L78" Message-Id: <[EMAIL PROTECTED]> Delivered-To: [EMAIL PROTECTED] X-Spam-Checker-Version: SpamAssassin 2.60-bugs.debian.org_2005_01_02 (1.212-2003-09-23-exp) on spohr.debian.org X-Spam-Status: No, hits=-8.0 required=4.0 tests=BAYES_00,HAS_PACKAGE autolearn=no version=2.60-bugs.debian.org_2005_01_02 X-Spam-Level: --Boundary-00=_42WUCpj9egr4L78 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline Package: qt-x11-free Version: 3:3.3.4-2 Hello, Please apply the following patches, from KDE's qt-copy, adapted to apply to the current Qt package. These patches improve graphical performance substantially, fix an annoying problem with PNG images, as well as an unnecessary redraw. I've tested Qt with these patches and all is working well (and Gwenview is much snappier, for instance). Thanks, Christopher Martin --Boundary-00=_42WUCpj9egr4L78 Content-Type: application/x-shellscript; name="25_qtc_qpixmap_mitshm.dpatch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="25_qtc_qpixmap_mitshm.dpatch" #! /bin/sh -e ## 24_qtc_qscrollview.dpatch by Germain Garand <[EMAIL PROTECTED]> ## ## All lines beginning with `## DP:' are a description of the patch. ## DP: fix the qscrollview stuff if [ $# -lt 1 ]; then echo "`basename $0`: script expects -patch|-unpatch as argument" >&2 exit 1 fi [ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts patch_opts="${patch_opts:--f --no-backup-if-mismatch} ${2:+-d $2}" case "$1" in -patch) patch -p1 ${patch_opts} < $0;; -unpatch) patch -R -p1 ${patch_opts} < $0;; *) echo "`basename $0`: script expects -patch|-unpatch as argument" >&2 exit 1;; esac exit 0 @DPATCH@ --- qt.orig/src/kernel/qpixmap_x11.cpp +++ qt.patched/src/kernel/qpixmap_x11.cpp @@ -37,7 +37,19 @@ // NOT REVISED +#include "qplatformdefs.h" + +#if defined(Q_OS_WIN32) && defined(QT_MITSHM) +#undef QT_MITSHM +#endif + +#ifdef QT_MITSHM + +// Use the MIT Shared Memory extension for pixmap<->image conversions +#define QT_MITSHM_CONVERSIONS + // Uncomment the next line to enable the MIT Shared Memory extension +// for QPixmap::xForm() // // WARNING: This has some problems: // @@ -45,14 +57,13 @@ // 2. Qt does not handle the ShmCompletion message, so you will // get strange effects if you xForm() repeatedly. // -// #define QT_MITSHM +// #define QT_MITSHM_XFORM -#if defined(Q_OS_WIN32) && defined(QT_MITSHM) -#undef QT_MITSHM +#else +#undef QT_MITSHM_CONVERSIONS +#undef QT_MITSHM_XFORM #endif -#include "qplatformdefs.h" - #include "qbitmap.h" #include "qpaintdevicemetrics.h" #include "qimage.h" @@ -91,7 +102,7 @@ inline static void qSafeXDestroyImage( X MIT Shared Memory Extension support: makes xForm noticeably (~20%) faster. *****************************************************************************/ -#if defined(QT_MITSHM) +#if defined(QT_MITSHM_XFORM) static bool xshminit = FALSE; static XShmSegmentInfo xshminfo; @@ -173,8 +184,100 @@ static bool qt_create_mitshm_buffer( con // return FALSE; // } -#endif // QT_MITSHM +#endif // QT_MITSHM_XFORM +#ifdef QT_MITSHM_CONVERSIONS + +static bool qt_mitshm_error = false; +static int qt_mitshm_errorhandler( Display*, XErrorEvent* ) +{ + qt_mitshm_error = true; + return 0; +} + +static XImage* qt_XShmCreateImage( Display* dpy, Visual* visual, unsigned int depth, + int format, int /*offset*/, char* /*data*/, unsigned int width, unsigned int height, + int /*bitmap_pad*/, int /*bytes_per_line*/, XShmSegmentInfo* shminfo ) +{ + if( width * height * depth < 100*100*32 ) + return NULL; + static int shm_inited = -1; + if( shm_inited == -1 ) { + if( XShmQueryExtension( dpy )) + shm_inited = 1; + else + shm_inited = 0; + } + if( shm_inited == 0 ) + return NULL; + XImage* xi = XShmCreateImage( dpy, visual, depth, format, NULL, shminfo, width, + height ); + if( xi == NULL ) + return NULL; + shminfo->shmid = shmget( IPC_PRIVATE, xi->bytes_per_line * xi->height, + IPC_CREAT|0600); + if( shminfo->shmid < 0 ) { + XDestroyImage( xi ); + return NULL; + } + shminfo->readOnly = False; + shminfo->shmaddr = (char*)shmat( shminfo->shmid, 0, 0 ); + if( shminfo->shmaddr == (char*)-1 ) { + XDestroyImage( xi ); + shmctl( shminfo->shmid, IPC_RMID, 0 ); + return NULL; + } + xi->data = shminfo->shmaddr; +#ifndef QT_MITSHM_RMID_IGNORES_REFCOUNT + // mark as deleted to automatically free the memory in case + // of a crash (but this doesn't work e.g. on Solaris) + shmctl( shminfo->shmid, IPC_RMID, 0 ); +#endif + if( shm_inited == 1 ) { // first time + XErrorHandler old_h = XSetErrorHandler( qt_mitshm_errorhandler ); + XShmAttach( dpy, shminfo ); + shm_inited = 2; + XSync( dpy, False ); + XSetErrorHandler( old_h ); + if( qt_mitshm_error ) { // oops ... perhaps we are remote? + shm_inited = 0; + XDestroyImage( xi ); + shmdt( shminfo->shmaddr ); +#ifdef QT_MITSHM_RMID_IGNORES_REFCOUNT + shmctl( shminfo->shmid, IPC_RMID, 0 ); +#endif + return NULL; + } + } else + XShmAttach( dpy, shminfo ); + return xi; +} + +static void qt_XShmDestroyImage( XImage* xi, XShmSegmentInfo* shminfo ) +{ + XShmDetach( QPaintDevice::x11AppDisplay(), shminfo ); + XDestroyImage( xi ); + shmdt( shminfo->shmaddr ); +#ifdef QT_MITSHM_RMID_IGNORES_REFCOUNT + shmctl( shminfo->shmid, IPC_RMID, 0 ); +#endif +} + +static XImage* qt_XShmGetImage( const QPixmap* pix, int format, + XShmSegmentInfo* shminfo ) +{ + XImage* xi = qt_XShmCreateImage( pix->x11Display(), (Visual*)pix->x11Visual(), + pix->depth(), format, 0, 0, pix->width(), pix->height(), 32, 0, shminfo ); + if( xi == NULL ) + return NULL; + if( XShmGetImage( pix->x11Display(), pix->handle(), xi, 0, 0, AllPlanes ) == False ) { + qt_XShmDestroyImage( xi, shminfo ); + return NULL; + } + return xi; +} + +#endif // QT_MITSHM_CONVERSIONS /***************************************************************************** Internal functions @@ -625,9 +728,20 @@ QImage QPixmap::convertToImage() const d = 32; // > 8 ==> 32 XImage *xi = (XImage *)data->ximage; // any cached ximage? - if ( !xi ) // fetch data from X server - xi = XGetImage( x11Display(), hd, 0, 0, w, h, AllPlanes, +#ifdef QT_MITSHM_CONVERSIONS + bool mitshm_ximage = false; + XShmSegmentInfo shminfo; +#endif + if ( !xi ) { // fetch data from X server +#ifdef QT_MITSHM_CONVERSIONS + xi = qt_XShmGetImage( this, mono ? XYPixmap : ZPixmap, &shminfo ); + if( xi ) { + mitshm_ximage = true; + } else +#endif + xi = XGetImage( x11Display(), hd, 0, 0, w, h, AllPlanes, mono ? XYPixmap : ZPixmap ); + } Q_CHECK_PTR( xi ); QImage::Endian bitOrder = QImage::IgnoreEndian; @@ -636,15 +750,31 @@ QImage QPixmap::convertToImage() const QImage::LittleEndian : QImage::BigEndian; } image.create( w, h, d, 0, bitOrder ); - if ( image.isNull() ) // could not create image + if ( image.isNull() ) { // could not create image +#ifdef QT_MITSHM_CONVERSIONS + if( mitshm_ximage ) + qt_XShmDestroyImage( xi, &shminfo ); + else +#endif + qSafeXDestroyImage( xi ); return image; + } const QPixmap* msk = mask(); const QPixmap *alf = data->alphapm; QImage alpha; if (alf) { - XImage *axi = XGetImage(x11Display(), alf->hd, 0, 0, w, h, AllPlanes, ZPixmap); + XImage* axi; +#ifdef QT_MITSHM_CONVERSIONS + bool mitshm_aximage = false; + XShmSegmentInfo ashminfo; + axi = qt_XShmGetImage( alf, ZPixmap, &ashminfo ); + if( axi ) { + mitshm_aximage = true; + } else +#endif + axi = XGetImage(x11Display(), alf->hd, 0, 0, w, h, AllPlanes, ZPixmap); if (axi) { image.setAlphaBuffer( TRUE ); @@ -658,7 +788,12 @@ QImage QPixmap::convertToImage() const src += axi->bytes_per_line; } - qSafeXDestroyImage( axi ); +#ifdef QT_MITSHM_CONVERSIONS + if( mitshm_aximage ) + qt_XShmDestroyImage( axi, &ashminfo ); + else +#endif + qSafeXDestroyImage( axi ); } } else if (msk) { image.setAlphaBuffer( TRUE ); @@ -800,6 +935,12 @@ QImage QPixmap::convertToImage() const xi->bits_per_pixel ); #endif image.reset(); +#ifdef QT_MITSHM_CONVERSIONS + if( mitshm_ximage ) + qt_XShmDestroyImage( xi, &shminfo ); + else +#endif + qSafeXDestroyImage( xi ); return image; } @@ -905,10 +1046,22 @@ QImage QPixmap::convertToImage() const delete [] carr; } if ( data->optim != BestOptim ) { // throw away image data - qSafeXDestroyImage( xi ); +#ifdef QT_MITSHM_CONVERSIONS + if( mitshm_ximage ) + qt_XShmDestroyImage( xi, &shminfo ); + else +#endif + qSafeXDestroyImage( xi ); ((QPixmap*)this)->data->ximage = 0; - } else // keep ximage data + } else { // keep ximage data +#ifdef QT_MITSHM_CONVERSIONS + if( mitshm_ximage ) { // copy the XImage? + qt_XShmDestroyImage( xi, &shminfo ); + xi = 0; + } +#endif ((QPixmap*)this)->data->ximage = xi; + } return image; } @@ -1078,6 +1231,11 @@ bool QPixmap::convertFromImage( const QI bool trucol = (visual->c_class == TrueColor); int nbytes = image.numBytes(); uchar *newbits= 0; + int newbits_size = 0; +#ifdef QT_MITSHM_CONVERSIONS + bool mitshm_ximage = false; + XShmSegmentInfo shminfo; +#endif if ( trucol ) { // truecolor display QRgb pix[256]; // pixel translation table @@ -1106,9 +1264,18 @@ bool QPixmap::convertFromImage( const QI } } - xi = XCreateImage( dpy, visual, dd, ZPixmap, 0, 0, w, h, 32, 0 ); +#ifdef QT_MITSHM_CONVERSIONS + xi = qt_XShmCreateImage( dpy, visual, dd, ZPixmap, 0, 0, w, h, 32, 0, &shminfo ); + if( xi != NULL ) { + mitshm_ximage = true; + newbits = (uchar*)xi->data; + } + else +#endif + xi = XCreateImage( dpy, visual, dd, ZPixmap, 0, 0, w, h, 32, 0 ); Q_CHECK_PTR( xi ); - newbits = (uchar *)malloc( xi->bytes_per_line*h ); + if( newbits == NULL ) + newbits = (uchar *)malloc( xi->bytes_per_line*h ); Q_CHECK_PTR( newbits ); if ( !newbits ) // no memory return FALSE; @@ -1314,6 +1481,7 @@ bool QPixmap::convertFromImage( const QI } newbits = (uchar *)malloc( nbytes ); // copy image into newbits + newbits_size = nbytes; Q_CHECK_PTR( newbits ); if ( !newbits ) // no memory return FALSE; @@ -1431,11 +1599,18 @@ bool QPixmap::convertFromImage( const QI } if ( !xi ) { // X image not created - xi = XCreateImage( dpy, visual, dd, ZPixmap, 0, 0, w, h, 32, 0 ); +#ifdef QT_MITSHM_CONVERSIONS + xi = qt_XShmCreateImage( dpy, visual, dd, ZPixmap, 0, 0, w, h, 32, 0, &shminfo ); + if( xi != NULL ) + mitshm_ximage = true; + else +#endif + xi = XCreateImage( dpy, visual, dd, ZPixmap, 0, 0, w, h, 32, 0 ); if ( xi->bits_per_pixel == 16 ) { // convert 8 bpp ==> 16 bpp ushort *p2; int p2inc = xi->bytes_per_line/sizeof(ushort); ushort *newerbits = (ushort *)malloc( xi->bytes_per_line * h ); + newbits_size = xi->bytes_per_line * h; Q_CHECK_PTR( newerbits ); if ( !newerbits ) // no memory return FALSE; @@ -1453,7 +1628,15 @@ bool QPixmap::convertFromImage( const QI "(bpp=%d)", xi->bits_per_pixel ); #endif } - xi->data = (char *)newbits; +#ifdef QT_MITSHM_CONVERSIONS + if( newbits_size > 0 && mitshm_ximage ) { // need to copy to shared memory + memcpy( xi->data, newbits, newbits_size ); + free( newbits ); + newbits = (uchar*)xi->data; + } + else +#endif + xi->data = (char *)newbits; } if ( hd && (width() != (int)w || height() != (int)h || this->depth() != dd) ) { @@ -1486,19 +1669,24 @@ bool QPixmap::convertFromImage( const QI } - XPutImage( dpy, hd, qt_xget_readonly_gc( x11Screen(), FALSE ), - xi, 0, 0, 0, 0, w, h ); +#ifdef QT_MITSHM_CONVERSIONS + if( mitshm_ximage ) + XShmPutImage( dpy, hd, qt_xget_readonly_gc( x11Screen(), FALSE ), + xi, 0, 0, 0, 0, w, h, False ); + else +#endif + XPutImage( dpy, hd, qt_xget_readonly_gc( x11Screen(), FALSE ), + xi, 0, 0, 0, 0, w, h ); - if ( data->optim != BestOptim ) { // throw away image - qSafeXDestroyImage( xi ); - data->ximage = 0; - } else { // keep ximage that we created - data->ximage = xi; - } data->w = w; data->h = h; data->d = dd; + XImage* axi = NULL; +#ifdef QT_MITSHM_CONVERSIONS + bool mitshm_aximage = false; + XShmSegmentInfo ashminfo; +#endif if ( image.hasAlphaBuffer() ) { QBitmap m; m = image.createAlphaMask( conversion_flags ); @@ -1534,13 +1722,22 @@ bool QPixmap::convertFromImage( const QI data->alphapm->rendhd = (HANDLE) XftDrawCreateAlpha( x11Display(), data->alphapm->hd, 8 ); - XImage *axi = XCreateImage(x11Display(), (Visual *) x11Visual(), - 8, ZPixmap, 0, 0, w, h, 8, 0); +#ifdef QT_MITSHM_CONVERSIONS + axi = qt_XShmCreateImage( x11Display(), (Visual*)x11Visual(), + 8, ZPixmap, 0, 0, w, h, 8, 0, &ashminfo ); + if( axi != NULL ) + mitshm_aximage = true; + else +#endif + axi = XCreateImage(x11Display(), (Visual *) x11Visual(), + 8, ZPixmap, 0, 0, w, h, 8, 0); if (axi) { - // the data is deleted by qSafeXDestroyImage - axi->data = (char *) malloc(h * axi->bytes_per_line); - Q_CHECK_PTR( axi->data ); + if( axi->data==NULL ) { + // the data is deleted by qSafeXDestroyImage + axi->data = (char *) malloc(h * axi->bytes_per_line); + Q_CHECK_PTR( axi->data ); + } char *aptr = axi->data; if (image.depth() == 32) { @@ -1558,14 +1755,48 @@ bool QPixmap::convertFromImage( const QI } GC gc = XCreateGC(x11Display(), data->alphapm->hd, 0, 0); - XPutImage(dpy, data->alphapm->hd, gc, axi, 0, 0, 0, 0, w, h); +#ifdef QT_MITSHM_CONVERSIONS + if( mitshm_aximage ) + XShmPutImage( dpy, data->alphapm->hd, gc, axi, 0, 0, 0, 0, w, h, False ); + else +#endif + XPutImage(dpy, data->alphapm->hd, gc, axi, 0, 0, 0, 0, w, h); XFreeGC(x11Display(), gc); - qSafeXDestroyImage(axi); } } #endif // QT_NO_XFTFREETYPE } +#ifdef QT_MITSHM_CONVERSIONS + if( mitshm_ximage || mitshm_aximage ) + XSync( x11Display(), False ); // wait until processed +#endif + + if ( data->optim != BestOptim ) { // throw away image +#ifdef QT_MITSHM_CONVERSIONS + if( mitshm_ximage ) + qt_XShmDestroyImage( xi, &shminfo ); + else +#endif + qSafeXDestroyImage( xi ); + data->ximage = 0; + } else { // keep ximage that we created +#ifdef QT_MITSHM_CONVERSIONS + if( mitshm_ximage ) { // copy the XImage? + qt_XShmDestroyImage( xi, &shminfo ); + xi = 0; + } +#endif + data->ximage = xi; + } + if( axi ) { +#ifdef QT_MITSHM_CONVERSIONS + if( mitshm_aximage ) + qt_XShmDestroyImage( axi, &ashminfo ); + else +#endif + qSafeXDestroyImage(axi); + } return TRUE; } @@ -1722,7 +1953,7 @@ QPixmap QPixmap::xForm( const QWMatrix & return pm; } -#if defined(QT_MITSHM) +#if defined(QT_MITSHM_XFORM) static bool try_once = TRUE; if (try_once) { try_once = FALSE; @@ -1755,7 +1986,7 @@ QPixmap QPixmap::xForm( const QWMatrix & dbpl = ((w*bpp+31)/32)*4; dbytes = dbpl*h; -#if defined(QT_MITSHM) +#if defined(QT_MITSHM_XFORM) if ( use_mitshm ) { dptr = (uchar *)xshmimg->data; uchar fillbyte = bpp == 8 ? white.pixel() : 0xff; @@ -1771,7 +2002,7 @@ QPixmap QPixmap::xForm( const QWMatrix & memset( dptr, Qt::white.pixel( x11Screen() ), dbytes ); else memset( dptr, 0xff, dbytes ); -#if defined(QT_MITSHM) +#if defined(QT_MITSHM_XFORM) } #endif @@ -1802,7 +2033,7 @@ QPixmap QPixmap::xForm( const QWMatrix & } else { xbpl = (w*bpp)/8; p_inc = dbpl - xbpl; -#if defined(QT_MITSHM) +#if defined(QT_MITSHM_XFORM) if ( use_mitshm ) p_inc = xshmimg->bytes_per_line - xbpl; #endif @@ -1839,7 +2070,7 @@ QPixmap QPixmap::xForm( const QWMatrix & QPixmap pm( w, h ); pm.data->uninit = FALSE; pm.x11SetScreen( x11Screen() ); -#if defined(QT_MITSHM) +#if defined(QT_MITSHM_XFORM) if ( use_mitshm ) { XCopyArea( dpy, xshmpm, pm.handle(), gc, 0, 0, w, h, 0, 0 ); } else { @@ -1848,7 +2079,7 @@ QPixmap QPixmap::xForm( const QWMatrix & ZPixmap, 0, (char *)dptr, w, h, 32, 0 ); XPutImage( dpy, pm.handle(), gc, xi, 0, 0, 0, 0, w, h); qSafeXDestroyImage( xi ); -#if defined(QT_MITSHM) +#if defined(QT_MITSHM_XFORM) } #endif --- qt.orig/mkspecs/linux-g++/qplatformdefs.h +++ qt.patched/mkspecs/linux-g++/qplatformdefs.h @@ -102,5 +102,6 @@ #define QT_VSNPRINTF ::vsnprintf #endif +#define QT_MITSHM #endif // QPLATFORMDEFS_H --- qt.orig/mkspecs/linux-g++/qplatformdefs.h +++ qt.patched/mkspecs/linux-g++/qplatformdefs.h @@ -102,5 +102,6 @@ #define QT_VSNPRINTF ::vsnprintf #endif +#define QT_MITSHM #endif // QPLATFORMDEFS_H --Boundary-00=_42WUCpj9egr4L78 Content-Type: application/x-shellscript; name="27_qtc_qscrollview-windowactivate-fix.dpatch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="27_qtc_qscrollview-windowactivate-fix.dpatch" #! /bin/sh -e ## 24_qtc_qscrollview.dpatch by Germain Garand <[EMAIL PROTECTED]> ## ## All lines beginning with `## DP:' are a description of the patch. ## DP: fix the qscrollview stuff if [ $# -lt 1 ]; then echo "`basename $0`: script expects -patch|-unpatch as argument" >&2 exit 1 fi [ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts patch_opts="${patch_opts:--f --no-backup-if-mismatch} ${2:+-d $2}" case "$1" in -patch) patch -p1 ${patch_opts} < $0;; -unpatch) patch -R -p1 ${patch_opts} < $0;; *) echo "`basename $0`: script expects -patch|-unpatch as argument" >&2 exit 1;; esac exit 0 @DPATCH@ --- qt.orig/src/widgets/qscrollview.cpp +++ qt.patch/src/widgets/qscrollview.cpp @@ -1551,6 +1551,9 @@ case QEvent::LayoutHint: d->autoResizeHint(this); break; + case QEvent::WindowActivate: + case QEvent::WindowDeactivate: + return TRUE; default: break; } --Boundary-00=_42WUCpj9egr4L78 Content-Type: application/x-shellscript; name="28_qtc_png-gamma-fix.dpatch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="28_qtc_png-gamma-fix.dpatch" #! /bin/sh -e ## 24_qtc_qscrollview.dpatch by Germain Garand <[EMAIL PROTECTED]> ## ## All lines beginning with `## DP:' are a description of the patch. ## DP: fix the qscrollview stuff if [ $# -lt 1 ]; then echo "`basename $0`: script expects -patch|-unpatch as argument" >&2 exit 1 fi [ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts patch_opts="${patch_opts:--f --no-backup-if-mismatch} ${2:+-d $2}" case "$1" in -patch) patch -p1 ${patch_opts} < $0;; -unpatch) patch -R -p1 ${patch_opts} < $0;; *) echo "`basename $0`: script expects -patch|-unpatch as argument" >&2 exit 1;; esac exit 0 @DPATCH@ --- qt.orig/src/kernel/qpngio.cpp +++ qt.patch/src/kernel/qpngio.cpp @@ -109,12 +109,20 @@ void CALLBACK_CALL_TYPE qpiw_flush_fn( p static void setup_qt( QImage& image, png_structp png_ptr, png_infop info_ptr, float screen_gamma=0.0 ) { - if ( screen_gamma != 0.0 && png_get_valid(png_ptr, info_ptr, PNG_INFO_gAMA) ) { + if ( 0.0 == screen_gamma ) + // PNG docs say this is a good guess for a PC monitor + // in a dark room + screen_gamma = 2.2; + if ( png_get_valid(png_ptr, info_ptr, PNG_INFO_gAMA) ) { + // the file has a gAMA attribute double file_gamma; - png_get_gAMA(png_ptr, info_ptr, &file_gamma); - png_set_gamma( png_ptr, screen_gamma, file_gamma ); + if ( png_get_gAMA(png_ptr, info_ptr, &file_gamma)) + png_set_gamma( png_ptr, screen_gamma, file_gamma ); + } else { + // no file gamma, use a reasonable default + png_set_gamma( png_ptr, screen_gamma, 0.45455 ); } png_uint_32 width; png_uint_32 height; --Boundary-00=_42WUCpj9egr4L78 Content-Type: application/x-shellscript; name="26_qtc_qpixmap_constants.dpatch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="26_qtc_qpixmap_constants.dpatch" #! /bin/sh -e ## 24_qtc_qscrollview.dpatch by Germain Garand <[EMAIL PROTECTED]> ## ## All lines beginning with `## DP:' are a description of the patch. ## DP: fix the qscrollview stuff if [ $# -lt 1 ]; then echo "`basename $0`: script expects -patch|-unpatch as argument" >&2 exit 1 fi [ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts patch_opts="${patch_opts:--f --no-backup-if-mismatch} ${2:+-d $2}" case "$1" in -patch) patch -p1 ${patch_opts} < $0;; -unpatch) patch -R -p1 ${patch_opts} < $0;; *) echo "`basename $0`: script expects -patch|-unpatch as argument" >&2 exit 1;; esac exit 0 @DPATCH@ --- qt.orig/src/kernel/qpixmap_x11.cpp +++ qt.patch/src/kernel/qpixmap_x11.cpp @@ -1278,9 +1278,6 @@ bool QPixmap::convertFromImage( const QI return FALSE; int bppc = xi->bits_per_pixel; - if ( bppc > 8 && xi->byte_order == LSBFirst ) - bppc++; - bool contig_bits = n_bits(red_mask) == rbits && n_bits(green_mask) == gbits && n_bits(blue_mask) == bbits; @@ -1329,32 +1326,70 @@ bool QPixmap::convertFromImage( const QI } init=TRUE; } + + enum { BPP8, + BPP16_8_3_M3, BPP16_7_2_M3, BPP16_MSB, BPP16_LSB, + BPP24_MSB, BPP24_LSB, + BPP32_16_8_0, BPP32_MSB, BPP32_LSB + } mode = BPP8; - for ( uint y=0; y<h; y++ ) { - uchar* src = image.scanLine( y ); - uchar* dst = newbits + xi->bytes_per_line*y; - QRgb* p = (QRgb *)src; + if ( bppc > 8 && xi->byte_order == LSBFirst ) + bppc++; -#define GET_RGB \ - int r = qRed ( *p ); \ - int g = qGreen( *p ); \ - int b = qBlue ( *p++ ); \ - r = red_shift > 0 \ - ? r << red_shift : r >> -red_shift; \ - g = green_shift > 0 \ - ? g << green_shift : g >> -green_shift; \ - b = blue_shift > 0 \ - ? b << blue_shift : b >> -blue_shift; + int wordsize; + bool bigendian; + qSysInfo( &wordsize, &bigendian ); + bool same_msb_lsb = ( xi->byte_order == MSBFirst ) == ( bigendian ); + + if( bppc == 8 ) // 8 bit + mode = BPP8; + else if( bppc == 16 || bppc == 17 ) { // 16 bit MSB/LSB + if( red_shift == 8 && green_shift == 3 && blue_shift == -3 + && !d8 && same_msb_lsb ) + mode = BPP16_8_3_M3; + else if( red_shift == 7 && green_shift == 2 && blue_shift == -3 + && !d8 && same_msb_lsb ) + mode = BPP16_7_2_M3; + else + mode = bppc == 17 ? BPP16_LSB : BPP16_MSB; + } else if( bppc == 24 || bppc == 25 ) { // 24 bit MSB/LSB + mode = bppc == 25 ? BPP24_LSB : BPP24_MSB; + } else if( bppc == 32 || bppc == 33 ) { // 32 bit MSB/LSB + if( red_shift == 16 && green_shift == 8 && blue_shift == 0 + && !d8 && same_msb_lsb ) + mode = BPP32_16_8_0; + else + mode = bppc == 33 ? BPP32_LSB : BPP32_MSB; + } else + qFatal("Logic error 3"); #define GET_PIXEL \ int pixel; \ if ( d8 ) pixel = pix[*src++]; \ else { \ - GET_RGB \ - pixel = (b & blue_mask)|(g & green_mask) | (r & red_mask) \ + int r = qRed ( *p ); \ + int g = qGreen( *p ); \ + int b = qBlue ( *p++ ); \ + r = red_shift > 0 \ + ? r << red_shift : r >> -red_shift; \ + g = green_shift > 0 \ + ? g << green_shift : g >> -green_shift; \ + b = blue_shift > 0 \ + ? b << blue_shift : b >> -blue_shift; \ + pixel = (r & red_mask)|(g & green_mask) | (b & blue_mask) \ | ~(blue_mask | green_mask | red_mask); \ } +// optimized case - no d8 case, shift only once instead of twice, mask only once instead of twice, +// use direct values instead of variables, and use only one statement +// (*p >> 16), (*p >> 8 ) and (*p) are qRed(),qGreen() and qBlue() without masking +// shifts have to be passed including the shift operator (e.g. '>>3'), because of the direction +#define GET_PIXEL_OPT(red_shift,green_shift,blue_shift,red_mask,green_mask,blue_mask) \ + int pixel = ((( *p >> 16 ) red_shift ) & red_mask ) \ + | ((( *p >> 8 ) green_shift ) & green_mask ) \ + | ((( *p ) blue_shift ) & blue_mask ); \ + ++p; + #define GET_PIXEL_DITHER_TC \ int r = qRed ( *p ); \ int g = qGreen( *p ); \ @@ -1374,91 +1409,177 @@ bool QPixmap::convertFromImage( const QI ? g << green_shift : g >> -green_shift; \ b = blue_shift > 0 \ ? b << blue_shift : b >> -blue_shift; \ - int pixel = (b & blue_mask)|(g & green_mask) | (r & red_mask); + int pixel = (r & red_mask)|(g & green_mask) | (b & blue_mask); - if ( dither_tc ) { - uint x; - switch ( bppc ) { - case 16: // 16 bit MSB - for ( x=0; x<w; x++ ) { - GET_PIXEL_DITHER_TC - *dst++ = (pixel >> 8); - *dst++ = pixel; - } +// again, optimized case +// can't be optimized that much :( +#define GET_PIXEL_DITHER_TC_OPT(red_shift,green_shift,blue_shift,red_mask,green_mask,blue_mask, \ + rbits,gbits,bbits) \ + const int thres = D[x%16][y%16]; \ + int r = qRed ( *p ); \ + if ( r <= (255-(1<<(8-rbits))) && ((r<<rbits) & 255) \ + > thres) \ + r += (1<<(8-rbits)); \ + int g = qGreen( *p ); \ + if ( g <= (255-(1<<(8-gbits))) && ((g<<gbits) & 255) \ + > thres) \ + g += (1<<(8-gbits)); \ + int b = qBlue ( *p++ ); \ + if ( b <= (255-(1<<(8-bbits))) && ((b<<bbits) & 255) \ + > thres) \ + b += (1<<(8-bbits)); \ + int pixel = (( r red_shift ) & red_mask ) \ + | (( g green_shift ) & green_mask ) \ + | (( b blue_shift ) & blue_mask ); + +#define CYCLE(body) \ + for ( uint y=0; y<h; y++ ) { \ + uchar* src = image.scanLine( y ); \ + uchar* dst = newbits + xi->bytes_per_line*y; \ + QRgb* p = (QRgb *)src; \ + body \ + } + + if ( dither_tc ) { + switch ( mode ) { + case BPP16_8_3_M3: + CYCLE( + Q_INT16* dst16 = (Q_INT16*)dst; + for ( uint x=0; x<w; x++ ) { + GET_PIXEL_DITHER_TC_OPT(<<8,<<3,>>3,0xf800,0x7e0,0x1f,5,6,5) + *dst16++ = pixel; + } + ) break; - case 17: // 16 bit LSB - for ( x=0; x<w; x++ ) { - GET_PIXEL_DITHER_TC - *dst++ = pixel; - *dst++ = pixel >> 8; - } + case BPP16_7_2_M3: + CYCLE( + Q_INT16* dst16 = (Q_INT16*)dst; + for ( uint x=0; x<w; x++ ) { + GET_PIXEL_DITHER_TC_OPT(<<7,<<2,>>3,0x7c00,0x3e0,0x1f,5,5,5) + *dst16++ = pixel; + } + ) + break; + case BPP16_MSB: // 16 bit MSB + CYCLE( + for ( uint x=0; x<w; x++ ) { + GET_PIXEL_DITHER_TC + *dst++ = (pixel >> 8); + *dst++ = pixel; + } + ) + break; + case BPP16_LSB: // 16 bit LSB + CYCLE( + for ( uint x=0; x<w; x++ ) { + GET_PIXEL_DITHER_TC + *dst++ = pixel; + *dst++ = pixel >> 8; + } + ) break; default: qFatal("Logic error"); } - } else { - uint x; - switch ( bppc ) { - case 8: // 8 bit - for ( x=0; x<w; x++ ) { - int pixel = pix[*src++]; - *dst++ = pixel; - } + } else { + switch ( mode ) { + case BPP8: // 8 bit + CYCLE( + Q_UNUSED(p); + for ( uint x=0; x<w; x++ ) { + int pixel = pix[*src++]; + *dst++ = pixel; + } + ) break; - case 16: // 16 bit MSB - for ( x=0; x<w; x++ ) { - GET_PIXEL - *dst++ = (pixel >> 8); - *dst++ = pixel; - } + case BPP16_8_3_M3: + CYCLE( + Q_INT16* dst16 = (Q_INT16*)dst; + for ( uint x=0; x<w; x++ ) { + GET_PIXEL_OPT(<<8,<<3,>>3,0xf800,0x7e0,0x1f) + *dst16++ = pixel; + } + ) break; - case 17: // 16 bit LSB - for ( x=0; x<w; x++ ) { - GET_PIXEL - *dst++ = pixel; - *dst++ = pixel >> 8; - } + case BPP16_7_2_M3: + CYCLE( + Q_INT16* dst16 = (Q_INT16*)dst; + for ( uint x=0; x<w; x++ ) { + GET_PIXEL_OPT(<<7,<<2,>>3,0x7c00,0x3e0,0x1f) + *dst16++ = pixel; + } + ) break; - case 24: // 24 bit MSB - for ( x=0; x<w; x++ ) { - GET_PIXEL - *dst++ = pixel >> 16; - *dst++ = pixel >> 8; - *dst++ = pixel; - } + case BPP16_MSB: // 16 bit MSB + CYCLE( + for ( uint x=0; x<w; x++ ) { + GET_PIXEL + *dst++ = (pixel >> 8); + *dst++ = pixel; + } + ) break; - case 25: // 24 bit LSB - for ( x=0; x<w; x++ ) { - GET_PIXEL - *dst++ = pixel; - *dst++ = pixel >> 8; - *dst++ = pixel >> 16; - } + case BPP16_LSB: // 16 bit LSB + CYCLE( + for ( uint x=0; x<w; x++ ) { + GET_PIXEL + *dst++ = pixel; + *dst++ = pixel >> 8; + } + ) break; - case 32: // 32 bit MSB - for ( x=0; x<w; x++ ) { - GET_PIXEL - *dst++ = pixel >> 24; - *dst++ = pixel >> 16; - *dst++ = pixel >> 8; - *dst++ = pixel; - } + case BPP24_MSB: // 24 bit MSB + CYCLE( + for ( uint x=0; x<w; x++ ) { + GET_PIXEL + *dst++ = pixel >> 16; + *dst++ = pixel >> 8; + *dst++ = pixel; + } + ) break; - case 33: // 32 bit LSB - for ( x=0; x<w; x++ ) { - GET_PIXEL - *dst++ = pixel; - *dst++ = pixel >> 8; - *dst++ = pixel >> 16; - *dst++ = pixel >> 24; - } + case BPP24_LSB: // 24 bit LSB + CYCLE( + for ( uint x=0; x<w; x++ ) { + GET_PIXEL + *dst++ = pixel; + *dst++ = pixel >> 8; + *dst++ = pixel >> 16; + } + ) break; - default: - qFatal("Logic error 2"); - } - } - } - xi->data = (char *)newbits; + case BPP32_16_8_0: + CYCLE( + memcpy( dst, p, w * 4 ); + ) + break; + case BPP32_MSB: // 32 bit MSB + CYCLE( + for ( uint x=0; x<w; x++ ) { + GET_PIXEL + *dst++ = pixel >> 24; + *dst++ = pixel >> 16; + *dst++ = pixel >> 8; + *dst++ = pixel; + } + ) + break; + case BPP32_LSB: // 32 bit LSB + CYCLE( + for ( uint x=0; x<w; x++ ) { + GET_PIXEL + *dst++ = pixel; + *dst++ = pixel >> 8; + *dst++ = pixel >> 16; + *dst++ = pixel >> 24; + } + ) + break; + default: + qFatal("Logic error 2"); + } + } + xi->data = (char *)newbits; } if ( d == 8 && !trucol ) { // 8 bit pixmap @@ -1738,15 +1859,24 @@ bool QPixmap::convertFromImage( const QI if (image.depth() == 32) { const int *iptr = (const int *) image.bits(); - int max = w * h; - while (max--) - *aptr++ = *iptr++ >> 24; // squirt + if( axi->bytes_per_line == (int)w ) { + int max = w * h; + while (max--) + *aptr++ = *iptr++ >> 24; // squirt + } else { + for (uint i = 0; i < h; ++i ) { + for (uint j = 0; j < w; ++j ) + *aptr++ = *iptr++ >> 24; // squirt + aptr += ( axi->bytes_per_line - w ); + } + } } else if (image.depth() == 8) { const QRgb * const rgb = image.colorTable(); for (uint y = 0; y < h; ++y) { const uchar *iptr = image.scanLine(y); for (uint x = 0; x < w; ++x) *aptr++ = qAlpha(rgb[*iptr++]); + aptr += ( axi->bytes_per_line - w ); } } --Boundary-00=_42WUCpj9egr4L78-- --------------------------------------- Received: (at 303065-close) by bugs.debian.org; 9 Aug 2005 21:39:10 +0000 >From [EMAIL PROTECTED] Tue Aug 09 14:39:10 2005 Return-path: <[EMAIL PROTECTED]> Received: from joerg by spohr.debian.org with local (Exim 3.36 1 (Debian)) id 1E2bgq-0007KL-00; Tue, 09 Aug 2005 14:31:16 -0700 From: Debian Qt/KDE Maintainers <debian-qt-kde@lists.debian.org> To: [EMAIL PROTECTED] X-Katie: lisa $Revision: 1.30 $ Subject: Bug#303065: fixed in qt-x11-free 3:3.3.4-4 Message-Id: <[EMAIL PROTECTED]> Sender: Joerg Jaspert <[EMAIL PROTECTED]> Date: Tue, 09 Aug 2005 14:31:16 -0700 Delivered-To: [EMAIL PROTECTED] X-Spam-Checker-Version: SpamAssassin 2.60-bugs.debian.org_2005_01_02 (1.212-2003-09-23-exp) on spohr.debian.org X-Spam-Level: X-Spam-Status: No, hits=-6.0 required=4.0 tests=BAYES_00,HAS_BUG_NUMBER autolearn=no version=2.60-bugs.debian.org_2005_01_02 X-CrossAssassin-Score: 5 Source: qt-x11-free Source-Version: 3:3.3.4-4 We believe that the bug you reported is fixed in the latest version of qt-x11-free, which is due to be installed in the Debian FTP archive: libqt3-compat-headers_3.3.4-4_i386.deb to pool/main/q/qt-x11-free/libqt3-compat-headers_3.3.4-4_i386.deb libqt3-dev_3.3.4-4_i386.deb to pool/main/q/qt-x11-free/libqt3-dev_3.3.4-4_i386.deb libqt3-headers_3.3.4-4_i386.deb to pool/main/q/qt-x11-free/libqt3-headers_3.3.4-4_i386.deb libqt3-i18n_3.3.4-4_all.deb to pool/main/q/qt-x11-free/libqt3-i18n_3.3.4-4_all.deb libqt3-mt-dev_3.3.4-4_i386.deb to pool/main/q/qt-x11-free/libqt3-mt-dev_3.3.4-4_i386.deb libqt3-mt-mysql_3.3.4-4_i386.deb to pool/main/q/qt-x11-free/libqt3-mt-mysql_3.3.4-4_i386.deb libqt3-mt-odbc_3.3.4-4_i386.deb to pool/main/q/qt-x11-free/libqt3-mt-odbc_3.3.4-4_i386.deb libqt3-mt-psql_3.3.4-4_i386.deb to pool/main/q/qt-x11-free/libqt3-mt-psql_3.3.4-4_i386.deb libqt3-mt-sqlite_3.3.4-4_i386.deb to pool/main/q/qt-x11-free/libqt3-mt-sqlite_3.3.4-4_i386.deb libqt3-mt_3.3.4-4_i386.deb to pool/main/q/qt-x11-free/libqt3-mt_3.3.4-4_i386.deb libqt3-mysql_3.3.4-4_i386.deb to pool/main/q/qt-x11-free/libqt3-mysql_3.3.4-4_i386.deb libqt3-odbc_3.3.4-4_i386.deb to pool/main/q/qt-x11-free/libqt3-odbc_3.3.4-4_i386.deb libqt3-psql_3.3.4-4_i386.deb to pool/main/q/qt-x11-free/libqt3-psql_3.3.4-4_i386.deb libqt3-sqlite_3.3.4-4_i386.deb to pool/main/q/qt-x11-free/libqt3-sqlite_3.3.4-4_i386.deb libqt3_3.3.4-4_i386.deb to pool/main/q/qt-x11-free/libqt3_3.3.4-4_i386.deb qt-x11-free_3.3.4-4.diff.gz to pool/main/q/qt-x11-free/qt-x11-free_3.3.4-4.diff.gz qt-x11-free_3.3.4-4.dsc to pool/main/q/qt-x11-free/qt-x11-free_3.3.4-4.dsc qt3-apps-dev_3.3.4-4_i386.deb to pool/main/q/qt-x11-free/qt3-apps-dev_3.3.4-4_i386.deb qt3-assistant_3.3.4-4_i386.deb to pool/main/q/qt-x11-free/qt3-assistant_3.3.4-4_i386.deb qt3-designer_3.3.4-4_i386.deb to pool/main/q/qt-x11-free/qt3-designer_3.3.4-4_i386.deb qt3-dev-tools-compat_3.3.4-4_i386.deb to pool/main/q/qt-x11-free/qt3-dev-tools-compat_3.3.4-4_i386.deb qt3-dev-tools-embedded_3.3.4-4_i386.deb to pool/main/q/qt-x11-free/qt3-dev-tools-embedded_3.3.4-4_i386.deb qt3-dev-tools_3.3.4-4_i386.deb to pool/main/q/qt-x11-free/qt3-dev-tools_3.3.4-4_i386.deb qt3-doc_3.3.4-4_all.deb to pool/main/q/qt-x11-free/qt3-doc_3.3.4-4_all.deb qt3-examples_3.3.4-4_all.deb to pool/main/q/qt-x11-free/qt3-examples_3.3.4-4_all.deb qt3-linguist_3.3.4-4_i386.deb to pool/main/q/qt-x11-free/qt3-linguist_3.3.4-4_i386.deb qt3-qtconfig_3.3.4-4_i386.deb to pool/main/q/qt-x11-free/qt3-qtconfig_3.3.4-4_i386.deb A summary of the changes between this version and the previous one is attached. Thank you for reporting the bug, which will now be closed. If you have further comments please address them to [EMAIL PROTECTED], and the maintainer will reopen the bug report if appropriate. Debian distribution maintenance software pp. Debian Qt/KDE Maintainers <debian-qt-kde@lists.debian.org> (supplier of updated qt-x11-free package) (This message was generated automatically at their request; if you believe that there is a problem with it please contact the archive administrators by mailing [EMAIL PROTECTED]) -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Format: 1.7 Date: Tue, 26 Jul 2005 19:06:03 +0200 Source: qt-x11-free Binary: libqt3-mysql libqt3-i18n libqt3 qt3-apps-dev libqt3-mt-sqlite libqt3-ibase qt3-assistant qt3-examples qt3-doc libqt3-headers libqt3-mt-mysql libqt3-mt libqt3-odbc libqt3-mt-odbc qt3-dev-tools-embedded libqt3-compat-headers libqt3-dev qt3-dev-tools libqt3-mt-ibase libqt3-sqlite qt3-designer qt3-linguist libqt3-psql qt3-qtconfig qt3-dev-tools-compat libqt3-mt-psql libqt3-mt-dev Architecture: source i386 all Version: 3:3.3.4-4 Distribution: unstable Urgency: low Maintainer: Debian Qt/KDE Maintainers <debian-qt-kde@lists.debian.org> Changed-By: Debian Qt/KDE Maintainers <debian-qt-kde@lists.debian.org> Description: libqt3 - Qt GUI Library, Version 3 libqt3-compat-headers - Qt 1.x and 2.x compatibility includes libqt3-dev - Qt development files libqt3-headers - Qt3 header files libqt3-i18n - i18n files for Qt3 library libqt3-mt - Qt GUI Library (Threaded runtime version), Version 3 libqt3-mt-dev - Qt development files (Threaded) libqt3-mt-mysql - MySQL database driver for Qt3 (Threaded) libqt3-mt-odbc - ODBC database driver for Qt3 (Threaded) libqt3-mt-psql - PostgreSQL database driver for Qt3 (Threaded) libqt3-mt-sqlite - SQLite database driver for Qt3 (Threaded) libqt3-mysql - MySQL database driver for Qt3 libqt3-odbc - ODBC database driver for Qt3 libqt3-psql - PostgreSQL database driver for Qt3 libqt3-sqlite - SQLite database driver for Qt3 qt3-apps-dev - Qt3 Developer applications development files qt3-assistant - The Qt3 assistant application qt3-designer - Qt3 Designer qt3-dev-tools - Qt3 development tools qt3-dev-tools-compat - Conversion utilities for Qt3 development qt3-dev-tools-embedded - Tools to develop embedded Qt applications qt3-doc - Qt3 API documentation qt3-examples - Examples for Qt3 qt3-linguist - The Qt3 Linguist qt3-qtconfig - The Qt3 Configuration Application Closes: 182366 268882 282217 290402 303065 305919 311562 317500 317768 319305 Changes: qt-x11-free (3:3.3.4-4) unstable; urgency=low . * The "Three transitions and one maintainer switch" release. . * Cope with the following ongoing transitions in unstable: - C++ ABI transition. - X.org transition. - PostgreSQL 8.0 transition. . * Move the package to the Debian Qt/KDE team, as agreed with the maintainer. Thanks to Martin Loschwitz for all his work over the years. . +++ Changes by Adeodato Simó: . * Transition to the new C++ ABI. Rename all the library packages as necessary: every libqt3c102-* goes back to libqt3-* now. Changes based on the patch provided by Matthias Klose in Ubuntu Bug 10723. . + debian/control: - renamed library packages. - add conflicts and replaces against the libqt3c102-* packages, or change the existing libqt3-* ones. - change the existing recommends and suggests on libqt3c102-* to libqt3-*. - adjusted descriptions where appropriate. . + debian/rules: - s/c102// in various places. . + debian/*.install, debian/*.links: - renamed as appropriate. . + debian/patches/31_gcc4_buildkey.dpatch: - new patch picked from the Fedora Qt packages to ensure a stable buildkey accross compiler upgrades now that GCC 4 is the default. Kudos to Christopher Martin for finding about the existence of this patch. . The above solves trouble for users when using qt3-designer with g++ 4.0, so this upload closes: #317768. . Also, disabling InterBase support has been necessary in this upload, because nobody has cared to make firebird2 not FTBFS with g++ 4.0. Dropped the libqt3-ibase and libqt3-mt-ibase packages, which can be reintroduced as soon as #317314 gets fixed. . + debian/control: - don't build-depend on firebird2-dev. . + debian/rules: - unconditionally use -no-sql-ibase and -Nlibqt3{,-mt}-ibase. . * Transition to the new X.org packages: + debian/control: - build-depend in libglu1-xorg-dev instead of xlibmesa-glu-dev; make the same change in the dependencies of libqt3-dev and libqt3-mt-dev. - add libxinerama-dev and libxkbfile-dev to build-dependencies; add libxinerama-dev to the dependencies of libqt3-dev and libqt3-mt-dev as well (closes: #319305). - add libxi-dev to the dependencies of libqt3-dev and libqt3-mt-dev. [cm] . * Transition to the new PostgreSQL 8.0 packaging (closes: #317500): + debian/control: build-depend on libpq-dev instead of postgresql-dev. + debian/rules: invoke pg_config to determine the include directory. . * Don't modify debian/control at build time, since doing it in the clean target it's a release critical bug now: + debian/rules: don't invoke type-handling to generate debian/control. + debian/control.in: removed. + debian/control: - adjust the list of *-i386 ports to list only the non-dead ones. - don't build depend on type-handling. . * Overhaul arch detection in debian/rules: - use DEB_HOST_ARCH instead of DEB_BUILD_GNU_CPU to detect arm. - use DEB_HOST_ARCH_CPU instead of DEB_BUILD_GNU_CPU to detect an i386 CPU (needs the new dpkg). . +++ Changes by Christopher Martin: . * Add sundry fixes from KDE's qt-copy. (Closes: #303065) . * Fix qt3-designer's appearance in the KDE menu. (Closes: #290402) . * Don't use lib64 on amd64. (Closes: #311562) . * Don't duplicate the information in the qvfb manpage. (Closes: #282217) . While we're at it, realize that a whole bunch of manpages were suffering the same, and fix them (designer, makeqpf, mergetr, findtr, msg2qm, qtconfig, createcw, qembed, qt20fix). [dato] . * Add linguist manpage. Thanks to Jeremy Laine. (Closes: #268882) . * Include createcw source for qt3-designer. (Closes: #305919) . * Add missing qvfbhdr.h. (Closes: #182366, the qinterlacestyle.h mentioned in this bug report was already included in recent versions.) . * Many minor changes to improve lintian compliance. . * Bump Standards-Version to 3.6.2 (no changes required). Files: daf236941c0ce28853fc91ff54cf9b1f 1888 libs optional qt-x11-free_3.3.4-4.dsc 1b582d10d939334593c08b28c48a52e9 64526 libs optional qt-x11-free_3.3.4-4.diff.gz e290a222e3551893606e4c720f118352 93484 libs optional libqt3-i18n_3.3.4-4_all.deb 6447d0537f8b48bf0f387e7efbd3f1bf 5612378 doc extra qt3-doc_3.3.4-4_all.deb 8176a21ec8ddeb17902efb84c44cb7a8 1553544 doc extra qt3-examples_3.3.4-4_all.deb 8bd124b07cde2a101edab0351c238de6 2809582 libs optional libqt3_3.3.4-4_i386.deb 35eb9e98392ac722cb24830d42909172 2913180 libs optional libqt3-mt_3.3.4-4_i386.deb 8b672ec43c93a7134a2ffd74c8f8d401 46932 libs optional libqt3-mysql_3.3.4-4_i386.deb 8744071d79b37ad11b4f55d463521557 46826 libs optional libqt3-mt-mysql_3.3.4-4_i386.deb d635e39543f6a8baddba94064f473e73 63896 libs optional libqt3-odbc_3.3.4-4_i386.deb 63dfdc69f18c5e8e05916556c1eecb4c 63770 libs optional libqt3-mt-odbc_3.3.4-4_i386.deb 27bc7e3cf002f6cd28a184d25df22711 53546 libs optional libqt3-psql_3.3.4-4_i386.deb cb0f1dd96a0c6e42dd5c82eeae2129f1 53422 libs optional libqt3-mt-psql_3.3.4-4_i386.deb 11bd191b054aa7b7532e908226ad942e 208134 libs optional libqt3-sqlite_3.3.4-4_i386.deb cc193e01f466c81241950219b3f2eff7 208006 libs optional libqt3-mt-sqlite_3.3.4-4_i386.deb 9385fe274a8e93a47968bf0d1b3e855b 41828 libdevel optional libqt3-dev_3.3.4-4_i386.deb 81c867f522fcf9d2eb174517336b41b8 48096 libdevel optional libqt3-mt-dev_3.3.4-4_i386.deb 57ae990a990f4eb6c020507a41e6dc83 361978 devel optional libqt3-headers_3.3.4-4_i386.deb 05f577768169366709b8cee777f5b984 79444 devel optional libqt3-compat-headers_3.3.4-4_i386.deb 80ab08b752a8dd709e5c12b3d4f50fec 1264542 devel optional qt3-dev-tools_3.3.4-4_i386.deb 3aa35f36d7c2278d9880712663d725bc 4039438 devel optional qt3-designer_3.3.4-4_i386.deb 91390309ecf892a2ee8afe165fc65603 2013916 devel optional qt3-apps-dev_3.3.4-4_i386.deb 2f900a7a057686762912f81f0a53ae43 332222 devel optional qt3-linguist_3.3.4-4_i386.deb ca7e93413090cdfbb7e12f8d94f8df19 233526 x11 optional qt3-assistant_3.3.4-4_i386.deb 8e49955fa38ff7ddae0156a813314b83 91384 x11 optional qt3-qtconfig_3.3.4-4_i386.deb 4bdabf9f72104566b55f8c1da089c547 281938 devel optional qt3-dev-tools-embedded_3.3.4-4_i386.deb 01e188629614b1b1b70dbe9f8105567e 66034 devel optional qt3-dev-tools-compat_3.3.4-4_i386.deb -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.1 (GNU/Linux) Comment: Signed by Adeodato Simó <[EMAIL PROTECTED]> iEYEARECAAYFAkL4+8IACgkQgyNlRdHEGII2MQCgoxVwIe1ayU10CfyGgzuHuo0P Fs0AoKyJt6UUY0lxg0Bchyr75+ENxVCK =8Iu7 -----END PGP SIGNATURE----- -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]