Thanks to Andrea Cascio for getting Qt3 3.3.8d building!

pull/3/head
Robert Xu 13 years ago
parent d23dfe93da
commit 27c9e783c6

@ -1,569 +0,0 @@
qt-bugs@ issue : 11790 (part of)
applied: no
author: Lubos Lunak <l.lunak@kde.org>
NOTE: Needs #define QT_MITSHM in the matching qplatformdefs.h file. This
patch does so only for linux-g++ and linux-g++-distcc platforms.
MITSHM extension support for QPixmap<->QImage conversions.
Hello,
the review and apply the attached patches that improve performance of
QImage->QPixmap conversions. They should be applied in order
'mitshm','more_local' and 'fast', but they're independent from each other
(well, besides merging problems).
Mitshm patch adds MITSHM extension support for both
QPixmap::convertFromImage() and QPixmap::convertToImage(). I've noticed there
was some MITSHM support already, turned off by default, but it was used only
for QPixmap::xForm() , and it used shared pixmaps (and I'd bet nobody uses
it). My patch adds shared ximages support for faster pixmap<->image
conversions. Since I don't understand the xForm() code much, and I didn't
want to do anything with it, I added three #define's:
- QT_MITSHM generally enabling MITSHM support, which should be set in
qplatformsdefs.h (or wherever you setup platform specific stuff), it can be
enabled at least on Linux
- QT_MITSHM_CONVERSIONS - this is for my new code
- QT_MITSHM_XFORM - this is for the xForm() code
There's one more #define, QT_MITSHM_RMID_IGNORES_REFCOUNT. Glibc
documentation of shmctl( ... IPC_RMID ) quite clearly says that the memory
segment is freed only after the refcount increased by shmat() and decreased
by shmdt() is 0. However, at least according to
http://bugs.kde.org/show_bug.cgi?id=27517 , this doesn't happen on other
platforms for some strange reason. Such platforms should have this #define if
you ever consider supporting MITSHM on them.
The lower limit for using MITSHM for the image is about 8KiB
(width*height*depth > 100*100*32 ). Also, BestOptim in such case doesn't keep
the ximage, as the shared ximage is always freed before the function returns
(I don't know if it's worth copying it).
The second patch ('more_local'), in short, does nothing. Besides improving
performance by about 10% by making variables more "local", making few of them
const, and also making some of them unsigned (this help gcc for some reason).
The last one, 'fast', moves some if's out of the loops, and handles some most
common case specially (15bpp, 16bpp and 32bpp ximage depths). 32bpp case, if
the endianess matches, is simply uses memcpy(), for the 15/16bpp depth,
variables are replaced directly by matching values, statements are a bit
reordered and merged when suitable, and again, in case endianess matches,
pixels are written simply as Q_INT16. Most probably it would also help to
process two pixels at once and write them as Q_INT32, but I didn't want to
complicate the code too much (later >;) ).
The last snippet of 'fast' handles case when xi->bytes_per_line is not equal
to width for 8bpp ximage. I'm not actually sure if that can ever happen, but
since I've already written it *shrug*.
The 'more_local' and 'fast' patches change only convertFromImage(), as I
don't think convertToImage() is that performance critical (but it's as
unoptimized as convertFromImage() was).
Maybe some numbers. The difference is of course mainly visible with larger
pixmaps. The two optimizations alone reduce the time to 50% for 32bpp, to 70%
for 16bpp. The MITSHM support, when other patches are already applied too,
for 32bpp images saves about 33%. Together, the total time is reduced to
about 40% for 32bpp. Imlib probably still beats that, but at least this
obsoletes KPixmapIO.
--- src/kernel/qpixmap_x11.cpp
+++ 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
@@ -627,9 +730,20 @@ QImage QPixmap::convertToImage() const
d = 32; // > 8 ==> 32
XImage *xi = (XImage *)data->ximage; // any cached ximage?
- if ( !xi ) // fetch data from X server
+#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 );
if (!xi)
return image; // null image
@@ -640,15 +754,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 );
@@ -662,6 +792,11 @@ QImage QPixmap::convertToImage() const
src += axi->bytes_per_line;
}
+#ifdef QT_MITSHM_CONVERSIONS
+ if( mitshm_aximage )
+ qt_XShmDestroyImage( axi, &ashminfo );
+ else
+#endif
qSafeXDestroyImage( axi );
}
} else if (msk) {
@@ -804,6 +939,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;
}
@@ -909,10 +1050,22 @@ QImage QPixmap::convertToImage() const
delete [] carr;
}
if ( data->optim != BestOptim ) { // throw away image data
+#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;
}
@@ -1085,6 +1238,11 @@ bool QPixmap::convertFromImage( const QI
bool trucol = (visual->c_class == TrueColor || visual->c_class == DirectColor);
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
@@ -1113,10 +1271,18 @@ bool QPixmap::convertFromImage( const QI
}
}
+#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 );
if (!xi)
return false;
+ if( newbits == NULL )
newbits = (uchar *)malloc( xi->bytes_per_line*h );
Q_CHECK_PTR( newbits );
if ( !newbits ) // no memory
@@ -1323,6 +1489,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;
@@ -1440,11 +1607,18 @@ bool QPixmap::convertFromImage( const QI
}
if ( !xi ) { // X image not created
+#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;
@@ -1462,6 +1636,14 @@ bool QPixmap::convertFromImage( const QI
"(bpp=%d)", xi->bits_per_pixel );
#endif
}
+#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;
}
@@ -1495,19 +1677,24 @@ bool QPixmap::convertFromImage( const QI
}
+#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 );
@@ -1543,13 +1730,22 @@ bool QPixmap::convertFromImage( const QI
data->alphapm->rendhd =
(HANDLE) XftDrawCreateAlpha( x11Display(), data->alphapm->hd, 8 );
- XImage *axi = XCreateImage(x11Display(), (Visual *) x11Visual(),
+#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) {
+ 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) {
@@ -1567,14 +1763,48 @@ bool QPixmap::convertFromImage( const QI
}
GC gc = XCreateGC(x11Display(), data->alphapm->hd, 0, 0);
+ #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;
}
@@ -1737,7 +1967,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;
@@ -1770,7 +2000,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;
@@ -1786,7 +2016,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
@@ -1817,7 +2047,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
@@ -1854,7 +2084,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 {
@@ -1863,7 +2093,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
--- mkspecs/linux-g++/qplatformdefs.h
+++ mkspecs/linux-g++/qplatformdefs.h
@@ -102,5 +102,6 @@
#define QT_VSNPRINTF ::vsnprintf
#endif
+#define QT_MITSHM
#endif // QPLATFORMDEFS_H

@ -1,51 +0,0 @@
qt-bugs@ issue : none, probably even won't be
bugs.kde.org number : 80072
applied: no
author: Lubos Lunak <l.lunak@kde.org>
A crude hack for KDE #80072. No good idea how to fix it properly yet :(.
================================================================================
Index: src/kernel/qclipboard_x11.cpp
===================================================================
--- src/kernel/qclipboard_x11.cpp.orig
+++ src/kernel/qclipboard_x11.cpp
@@ -112,6 +112,7 @@ static int pending_timer_id = 0;
static bool pending_clipboard_changed = FALSE;
static bool pending_selection_changed = FALSE;
+Q_EXPORT bool qt_qclipboard_bailout_hack = false;
// event capture mechanism for qt_xclb_wait_for_event
static bool waiting_for_data = FALSE;
@@ -464,6 +465,15 @@ static Bool checkForClipboardEvents(Disp
|| e->xselectionclear.selection == qt_xa_clipboard)));
}
+static bool selection_request_pending = false;
+
+static Bool check_selection_request_pending( Display*, XEvent* e, XPointer )
+ {
+ if( e->type == SelectionRequest && e->xselectionrequest.owner == owner->winId())
+ selection_request_pending = true;
+ return False;
+ }
+
bool qt_xclb_wait_for_event( Display *dpy, Window win, int type, XEvent *event,
int timeout )
{
@@ -515,6 +525,14 @@ bool qt_xclb_wait_for_event( Display *dp
do {
if ( XCheckTypedWindowEvent(dpy,win,type,event) )
return TRUE;
+ if( qt_qclipboard_bailout_hack ) {
+ XEvent dummy;
+ selection_request_pending = false;
+ if ( owner != NULL )
+ XCheckIfEvent(dpy,&dummy,check_selection_request_pending,NULL);
+ if( selection_request_pending )
+ return TRUE;
+ }
// process other clipboard events, since someone is probably requesting data from us
XEvent e;

@ -11,7 +11,7 @@ Index: widgets/qtextedit.cpp
================================================================================
--- src/widgets/qtextedit.cpp
+++ src/widgets/qtextedit.cpp
@@ -5767,7 +5767,11 @@
@@ -5774,7 +5774,11 @@
void QTextEdit::zoomIn( int range )
{
QFont f( QScrollView::font() );
@ -24,7 +24,7 @@ Index: widgets/qtextedit.cpp
setFont( f );
}
@@ -5782,7 +5786,11 @@
@@ -5789,7 +5793,11 @@
void QTextEdit::zoomOut( int range )
{
QFont f( QScrollView::font() );

@ -1,22 +0,0 @@
qt-bugs@ issue : 58251
bugs.kde.org number : 84434
applied: no
author: Lubos Lunak <l.lunak@kde.org>
Fixes keyboard input action in KHotKeys (see bug #84434).
================================================================================
--- src/kernel/qapplication_x11.cpp
+++ src/kernel/qapplication_x11.cpp
@@ -5401,8 +5401,10 @@
qt_auto_repeat_data *d = (qt_auto_repeat_data *) arg;
if (d->error ||
event->xkey.window != d->window ||
- event->xkey.keycode != d->keycode)
+ event->xkey.keycode != d->keycode) {
+ d->error = TRUE;
return FALSE;
+ }
if (event->type == XKeyPress) {
d->error = (! d->release || event->xkey.time - d->timestamp > 10);

@ -1,69 +0,0 @@
qt-bugs@ issue : 49417
bugs.kde.org number : 58719
applied: no
author: Lubos Lunak <l.lunak@kde.org>
Hello,
please consider applying the two attached QPopupMenu patches fixing KDE bugs
#58719 and #74778 (http://bugs.kde.org/show_bug.cgi?id=58719,
http://bugs.kde.org/show_bug.cgi?id=74778), which complain about keyboard
navigation in popup menus being very uncomfortable because of being affected
by mouse position despite mouse not being used at all.
- hasmouse.patch - (#58719) - use keyboard to open and navigate in any popup
menu and "accidentally" hit your mouse. Depending on the mouse cursor
position either no popup entry is selected or the random popup entry
happening to be at the cursor position becomes highlighted. The patch
basically copies the 'hasmouse' code from QMenuBar which prevents the mouse
having any effect on the popup if it's outside the popup geometry.
[ ... #74778 ... ]
================================================================================
--- src/widgets/qpopupmenu.cpp
+++ src/widgets/qpopupmenu.cpp
@@ -253,6 +253,7 @@
} scroll;
QSize calcSize;
QRegion mouseMoveBuffer;
+ uint hasmouse : 1;
};
static QPopupMenu* active_popup_menu = 0;
@@ -272,6 +273,7 @@
d->scroll.scrollableSize = d->scroll.topScrollableIndex = 0;
d->scroll.scrollable = QPopupMenuPrivate::Scroll::ScrollNone;
d->scroll.scrolltimer = 0;
+ d->hasmouse = 0;
isPopupMenu = TRUE;
#ifndef QT_NO_ACCEL
autoaccel = 0;
@@ -1741,6 +1743,11 @@
int item = itemAtPos( e->pos() );
if ( item == -1 ) { // no valid item
+ if( !d->hasmouse ) {
+ tryMenuBar( e );
+ return;
+ }
+ d->hasmouse = 0;
int lastActItem = actItem;
actItem = -1;
if ( lastActItem >= 0 )
@@ -1752,6 +1759,7 @@
}
} else { // mouse on valid item
// but did not register mouse press
+ d->hasmouse = 1;
if ( (e->state() & Qt::MouseButtonMask) && !mouseBtDn )
mouseBtDn = TRUE; // so mouseReleaseEvent will pop down
@@ -2160,6 +2168,7 @@
*/
void QPopupMenu::leaveEvent( QEvent * )
{
+ d->hasmouse = 0;
if ( testWFlags( WStyle_Tool ) && style().styleHint(QStyle::SH_PopupMenu_MouseTracking, this) ) {
int lastActItem = actItem;
actItem = -1;

@ -1,60 +0,0 @@
qt-bugs@ issue : 49417
bugs.kde.org number : 74778
applied: no
author: Lubos Lunak <l.lunak@kde.org>
Hello,
please consider applying the two attached QPopupMenu patches fixing KDE bugs
#58719 and #74778 (http://bugs.kde.org/show_bug.cgi?id=58719,
http://bugs.kde.org/show_bug.cgi?id=74778), which complain about keyboard
navigation in popup menus being very uncomfortable because of being affected
by mouse position despite mouse not being used at all.
[... #58719 ... ]
- ignoremousepos.patch - (#74778) - use keyboard to open some popup which
doesn't show up at mouse position (e.g. Alt+F3 with KWin or the context menu
key with some file selected in Konqueror). If the mouse is positioned in the
area where the popup shows, the random entry happening to be at the cursor
position becomes highlighted.
The patch fixes this by ignoring mouse events that happen at mouse position
which was current when the popup was shown, i.e. all mouse move events that
actually aren't triggered by mouse move are ignored. I first wanted to ignore
only the very first mouse move event (which should be caused by EnterNotify
for the popup) but I realized that Qt's event handling causes the popup to
possibly get more than just one initial move event, caused by LeaveNotify
events for normal widgets being transformed to mouse move events for the
popup, so I have no better idea how to solve this problem.
================================================================================
--- src/widgets/qpopupmenu.cpp
+++ src/widgets/qpopupmenu.cpp
@@ -254,6 +254,7 @@
QSize calcSize;
QRegion mouseMoveBuffer;
uint hasmouse : 1;
+ QPoint ignoremousepos;
};
static QPopupMenu* active_popup_menu = 0;
@@ -1356,6 +1357,7 @@
popupActive = -1;
if(style().styleHint(QStyle::SH_PopupMenu_SubMenuPopupDelay, this))
d->mouseMoveBuffer = QRegion();
+ d->ignoremousepos = QCursor::pos();
}
/*!
@@ -1703,6 +1705,11 @@
void QPopupMenu::mouseMoveEvent( QMouseEvent *e )
{
+ if( e->globalPos() == d->ignoremousepos ) {
+ return;
+ }
+ d->ignoremousepos = QPoint();
+
motion++;
if ( parentMenu && parentMenu->isPopupMenu ) {

@ -1,413 +0,0 @@
qt-bugs@ issue : none
bugs.kde.org number : none
applied: no
author: Lubos Lunak <l.lunak@kde.org>
This patch adds support for window types used for compositing (popup menu, dropdown menu,
tooltip, combobox, dnd).
--- src/kernel/qdnd_x11.cpp.sav 2007-05-25 18:56:23.000000000 +0200
+++ src/kernel/qdnd_x11.cpp 2007-05-31 10:30:58.000000000 +0200
@@ -261,6 +261,7 @@ public:
QWidget(QApplication::desktop()->screen( screen ),
0, WStyle_Customize | WStyle_Tool | WStyle_NoBorder | WX11BypassWM ), oldpmser( 0 ), oldbmser( 0 )
{
+ x11SetWindowType( X11WindowTypeDND );
}
void setPixmap(QPixmap pm, QPoint hot)
@@ -1221,6 +1222,7 @@ void QDragManager::move( const QPoint &
// recreate the pixmap on the new screen...
delete qt_xdnd_deco;
qt_xdnd_deco = new QShapedPixmapWidget( screen );
+ qt_xdnd_deco->x11SetWindowTransient( dragSource->topLevelWidget());
if (!QWidget::mouseGrabber()) {
updatePixmap();
qt_xdnd_deco->grabMouse();
@@ -1774,6 +1776,7 @@ bool QDragManager::drag( QDragObject * o
dragSource = (QWidget *)(object->parent());
+ qt_xdnd_deco->x11SetWindowTransient( dragSource->topLevelWidget());
qApp->installEventFilter( this );
qt_xdnd_source_current_time = qt_x_time;
XSetSelectionOwner( QPaintDevice::x11AppDisplay(), qt_xdnd_selection,
--- src/kernel/qapplication_x11.cpp.sav 2007-05-29 16:24:58.000000000 +0200
+++ src/kernel/qapplication_x11.cpp 2007-05-31 10:30:58.000000000 +0200
@@ -268,6 +268,11 @@ Atom qt_net_wm_window_type_menu = 0;
Atom qt_net_wm_window_type_utility = 0;
Atom qt_net_wm_window_type_splash = 0;
Atom qt_net_wm_window_type_override = 0; // KDE extension
+Atom qt_net_wm_window_type_dropdown_menu = 0;
+Atom qt_net_wm_window_type_popup_menu = 0;
+Atom qt_net_wm_window_type_tooltip = 0;
+Atom qt_net_wm_window_type_combo = 0;
+Atom qt_net_wm_window_type_dnd = 0;
Atom qt_net_wm_frame_strut = 0; // KDE extension
Atom qt_net_wm_state_stays_on_top = 0; // KDE extension
Atom qt_net_wm_pid = 0;
@@ -1920,6 +1925,11 @@ void qt_init_internal( int *argcptr, cha
qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_UTILITY", &qt_net_wm_window_type_utility );
qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_SPLASH", &qt_net_wm_window_type_splash );
qt_x11_intern_atom( "_KDE_NET_WM_WINDOW_TYPE_OVERRIDE", &qt_net_wm_window_type_override );
+ qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_DROPDOWN_MENU", &qt_net_wm_window_type_dropdown_menu );
+ qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_POPUP_MENU", &qt_net_wm_window_type_popup_menu );
+ qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_TOOLTIP", &qt_net_wm_window_type_tooltip );
+ qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_COMBO", &qt_net_wm_window_type_combo );
+ qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_DND", &qt_net_wm_window_type_dnd );
qt_x11_intern_atom( "_KDE_NET_WM_FRAME_STRUT", &qt_net_wm_frame_strut );
qt_x11_intern_atom( "_NET_WM_STATE_STAYS_ON_TOP",
&qt_net_wm_state_stays_on_top );
--- src/kernel/qwidget_x11.cpp.sav 2007-05-25 18:56:23.000000000 +0200
+++ src/kernel/qwidget_x11.cpp 2007-05-31 10:30:58.000000000 +0200
@@ -125,6 +125,11 @@ extern Atom qt_net_wm_window_type_menu;
extern Atom qt_net_wm_window_type_utility;
extern Atom qt_net_wm_window_type_splash;
extern Atom qt_net_wm_window_type_override;
+extern Atom qt_net_wm_window_type_dropdown_menu;
+extern Atom qt_net_wm_window_type_popup_menu;
+extern Atom qt_net_wm_window_type_combo;
+extern Atom qt_net_wm_window_type_dnd;
+extern Atom qt_net_wm_window_type_tooltip;
extern Atom qt_net_wm_pid;
extern Atom qt_net_wm_user_time;
extern Atom qt_enlightenment_desktop;
@@ -448,10 +453,6 @@ void QWidget::create( WId window, bool i
x11Colormap() );
#endif // QT_NO_XFTFREETYPE
- // NET window types
- long net_wintypes[7] = { 0, 0, 0, 0, 0, 0, 0 };
- int curr_wintype = 0;
-
// NET window states
long net_winstates[6] = { 0, 0, 0, 0, 0, 0 };
int curr_winstate = 0;
@@ -473,7 +474,6 @@ void QWidget::create( WId window, bool i
if ( testWFlags(WStyle_Splash) ) {
if (qt_net_supports(qt_net_wm_window_type_splash)) {
clearWFlags( WX11BypassWM );
- net_wintypes[curr_wintype++] = qt_net_wm_window_type_splash;
} else {
setWFlags( WX11BypassWM | WStyle_Tool | WStyle_NoBorder );
}
@@ -482,27 +482,22 @@ void QWidget::create( WId window, bool i
mwmhints.decorations = 0L;
mwmhints.flags |= (1L << 1); // MWM_HINTS_DECORATIONS
- if ( testWFlags( WStyle_NoBorder ) ) {
- // override netwm type - quick and easy for KDE noborder
- net_wintypes[curr_wintype++] = qt_net_wm_window_type_override;
- } else {
- if ( testWFlags( WStyle_NormalBorder | WStyle_DialogBorder ) ) {
- mwmhints.decorations |= (1L << 1); // MWM_DECOR_BORDER
- mwmhints.decorations |= (1L << 2); // MWM_DECOR_RESIZEH
- }
+ if ( testWFlags( WStyle_NormalBorder | WStyle_DialogBorder ) ) {
+ mwmhints.decorations |= (1L << 1); // MWM_DECOR_BORDER
+ mwmhints.decorations |= (1L << 2); // MWM_DECOR_RESIZEH
+ }
- if ( testWFlags( WStyle_Title ) )
- mwmhints.decorations |= (1L << 3); // MWM_DECOR_TITLE
+ if ( testWFlags( WStyle_Title ) )
+ mwmhints.decorations |= (1L << 3); // MWM_DECOR_TITLE
- if ( testWFlags( WStyle_SysMenu ) )
- mwmhints.decorations |= (1L << 4); // MWM_DECOR_MENU
+ if ( testWFlags( WStyle_SysMenu ) )
+ mwmhints.decorations |= (1L << 4); // MWM_DECOR_MENU
- if ( testWFlags( WStyle_Minimize ) )
- mwmhints.decorations |= (1L << 5); // MWM_DECOR_MINIMIZE
+ if ( testWFlags( WStyle_Minimize ) )
+ mwmhints.decorations |= (1L << 5); // MWM_DECOR_MINIMIZE
- if ( testWFlags( WStyle_Maximize ) )
- mwmhints.decorations |= (1L << 6); // MWM_DECOR_MAXIMIZE
- }
+ if ( testWFlags( WStyle_Maximize ) )
+ mwmhints.decorations |= (1L << 6); // MWM_DECOR_MAXIMIZE
if (testWFlags(WStyle_Tool)) {
wsa.save_under = True;
@@ -522,23 +517,6 @@ void QWidget::create( WId window, bool i
}
}
- // ### need a better way to do this
- if (inherits("QPopupMenu")) {
- // menu netwm type
- net_wintypes[curr_wintype++] = qt_net_wm_window_type_menu;
- } else if (inherits("QToolBar")) {
- // toolbar netwm type
- net_wintypes[curr_wintype++] = qt_net_wm_window_type_toolbar;
- } else if (testWFlags(WStyle_Customize) && testWFlags(WStyle_Tool)) {
- // utility netwm type
- net_wintypes[curr_wintype++] = qt_net_wm_window_type_utility;
- }
-
- if (dialog) // dialog netwm type
- net_wintypes[curr_wintype++] = qt_net_wm_window_type_dialog;
- // normal netwm type - default
- net_wintypes[curr_wintype++] = qt_net_wm_window_type_normal;
-
// stays on top
if (testWFlags(WStyle_StaysOnTop)) {
net_winstates[curr_winstate++] = qt_net_wm_state_above;
@@ -573,6 +551,7 @@ void QWidget::create( WId window, bool i
wsa.save_under = True;
XChangeWindowAttributes( dpy, id, CWOverrideRedirect | CWSaveUnder,
&wsa );
+ x11SetWindowType();
} else if ( topLevel && !desktop ) { // top-level widget
QWidget *p = parentWidget(); // real parent
if (p)
@@ -632,12 +611,7 @@ void QWidget::create( WId window, bool i
else
XDeleteProperty(dpy, id, qt_xa_motif_wm_hints);
- // set _NET_WM_WINDOW_TYPE
- if (curr_wintype > 0)
- XChangeProperty(dpy, id, qt_net_wm_window_type, XA_ATOM, 32, PropModeReplace,
- (unsigned char *) net_wintypes, curr_wintype);
- else
- XDeleteProperty(dpy, id, qt_net_wm_window_type);
+ x11SetWindowType();
// set _NET_WM_WINDOW_STATE
if (curr_winstate > 0)
@@ -896,6 +870,64 @@ void QWidget::reparentSys( QWidget *pare
setMouseTracking(mouse_tracking);
}
+// Sets the EWMH (netwm) window type. Needed as a separate function
+// because create() may be too soon in some cases.
+void QWidget::x11SetWindowType( X11WindowType type )
+{
+ // NET window types
+ long net_wintypes[7] = { 0, 0, 0, 0, 0, 0, 0 };
+ int curr_wintype = 0;
+ if( testWFlags(WType_Desktop))
+ return;
+ if( type == X11WindowTypeSelect ) {
+ if ( testWFlags(WStyle_Splash)) {
+ if (qt_net_supports(qt_net_wm_window_type_splash)) {
+ net_wintypes[curr_wintype++] = qt_net_wm_window_type_splash;
+ }
+ } else if (inherits("QToolBar")) {
+ // toolbar netwm type
+ net_wintypes[curr_wintype++] = qt_net_wm_window_type_toolbar;
+ } else if (testWFlags(WStyle_Customize) && testWFlags(WStyle_Tool)) {
+ // utility netwm type
+ net_wintypes[curr_wintype++] = qt_net_wm_window_type_utility;
+ } else if (testWFlags(WType_Dialog)) {
+ // dialog netwm type
+ net_wintypes[curr_wintype++] = qt_net_wm_window_type_dialog;
+ }
+ } else if( type == X11WindowTypeCombo ) {
+ // combo netwm type
+ net_wintypes[curr_wintype++] = qt_net_wm_window_type_combo;
+ } else if( type == X11WindowTypeDND ) {
+ // dnd netwm type
+ net_wintypes[curr_wintype++] = qt_net_wm_window_type_dnd;
+ } else if( type == X11WindowTypeDropdown ) {
+ // dropdown netwm type
+ net_wintypes[curr_wintype++] = qt_net_wm_window_type_dropdown_menu;
+ } else if( type == X11WindowTypePopup ) {
+ // popup netwm type
+ net_wintypes[curr_wintype++] = qt_net_wm_window_type_popup_menu;
+ } else if( type == X11WindowTypeMenu ) {
+ // menu netwm type
+ net_wintypes[curr_wintype++] = qt_net_wm_window_type_menu;
+ } else if( type == X11WindowTypeTooltip ) {
+ // tooltip netwm type
+ net_wintypes[curr_wintype++] = qt_net_wm_window_type_tooltip;
+ }
+
+ // normal netwm type - default
+ net_wintypes[curr_wintype++] = qt_net_wm_window_type_normal;
+ // set _NET_WM_WINDOW_TYPE
+ if (curr_wintype > 0)
+ XChangeProperty(x11Display(), winId(), qt_net_wm_window_type, XA_ATOM, 32, PropModeReplace,
+ (unsigned char *) net_wintypes, curr_wintype);
+ else
+ XDeleteProperty(x11Display(), winId(), qt_net_wm_window_type);
+}
+
+void QWidget::x11SetWindowTransient( QWidget* parent )
+{
+ XSetTransientForHint( x11Display(), winId(), parent->winId());
+}
/*!
Translates the widget coordinate \a pos to global screen
--- src/kernel/qwidget.h.sav 2007-05-25 18:56:23.000000000 +0200
+++ src/kernel/qwidget.h 2007-05-31 10:30:58.000000000 +0200
@@ -464,7 +464,19 @@ public:
CGContextRef macCGContext(bool clipped=TRUE) const;
#endif
#endif
-
+#if defined(Q_WS_X11)
+ enum X11WindowType {
+ X11WindowTypeSelect,
+ X11WindowTypeCombo,
+ X11WindowTypeDND,
+ X11WindowTypeTooltip,
+ X11WindowTypeMenu, // torn-off
+ X11WindowTypeDropdown,
+ X11WindowTypePopup
+ };
+ void x11SetWindowType( X11WindowType type = X11WindowTypeSelect );
+ void x11SetWindowTransient( QWidget* parent );
+#endif
void setWindowOpacity(double level);
double windowOpacity() const;
--- src/dialogs/qdialog.cpp.sav 2007-05-25 18:56:23.000000000 +0200
+++ src/dialogs/qdialog.cpp 2007-05-31 10:30:58.000000000 +0200
@@ -705,7 +701,7 @@ void QDialog::show()
&& qApp->mainWidget() && qApp->mainWidget()->isVisible()
&& !qApp->mainWidget()->isMinimized()) {
// make sure the transient for hint is set properly for modal dialogs
- XSetTransientForHint( x11Display(), winId(), qApp->mainWidget()->winId() );
+ x11SetWindowTransient( qApp->mainWidget());
}
#endif // Q_WS_X11
--- src/widgets/qtooltip.cpp.sav 2007-05-25 18:56:23.000000000 +0200
+++ src/widgets/qtooltip.cpp 2007-05-31 10:30:58.000000000 +0200
@@ -72,6 +72,7 @@ public:
polish();
setText(text);
adjustSize();
+ x11SetWindowType( X11WindowTypeTooltip );
}
void setWidth( int w ) { resize( sizeForWidth( w ) ); }
};
@@ -528,6 +529,10 @@ void QTipManager::showTip()
if (!widget)
return;
+#ifdef Q_WS_X11
+ label->x11SetWindowTransient( widget->topLevelWidget());
+#endif
+
#ifdef Q_WS_MAC
QRect screen = QApplication::desktop()->availableGeometry( scr );
#else
--- src/widgets/qcombobox.cpp.sav 2007-05-25 18:56:23.000000000 +0200
+++ src/widgets/qcombobox.cpp 2007-05-31 10:49:13.000000000 +0200
@@ -389,12 +389,8 @@ public:
inline QListBox * listBox() { return lBox; }
inline QComboBoxPopup * popup() { return pop; }
void updateLinedGeometry();
-
- void setListBox( QListBox *l ) { lBox = l ; usingLBox = TRUE;
- l->setMouseTracking( TRUE );}
-
- void setPopupMenu( QComboBoxPopup * pm, bool isPopup=TRUE )
- { pop = pm; if(isPopup) usingLBox = FALSE; }
+ void setListBox( QListBox *l );
+ void setPopupMenu( QComboBoxPopup * pm, bool isPopup=TRUE );
int current;
int maxCount;
@@ -440,6 +436,30 @@ void QComboBoxData::updateLinedGeometry(
ed->setGeometry( r );
}
+void QComboBoxData::setListBox( QListBox *l )
+{
+ lBox = l;
+ usingLBox = TRUE;
+ l->setMouseTracking( TRUE );
+#ifdef Q_WS_X11
+ l->x11SetWindowType( QWidget::X11WindowTypeCombo );
+ l->x11SetWindowTransient( combo->topLevelWidget());
+#endif
+}
+
+void QComboBoxData::setPopupMenu( QComboBoxPopup * pm, bool isPopup )
+{
+ pop = pm;
+ if(isPopup)
+ usingLBox = FALSE;
+#ifdef Q_WS_X11
+ if( pm ) {
+ pm->x11SetWindowType( QWidget::X11WindowTypeCombo );
+ pm->x11SetWindowTransient( combo->topLevelWidget());
+ }
+#endif
+}
+
static inline bool checkInsertIndex( const char *method, const char * name,
int count, int *index)
{
--- src/widgets/qpopupmenu.cpp.sav 2007-05-25 18:56:23.000000000 +0200
+++ src/widgets/qpopupmenu.cpp 2007-05-31 11:09:22.000000000 +0200
@@ -298,6 +298,9 @@ QPopupMenu::QPopupMenu( QWidget *parent,
connectModalRecursionSafety = 0;
setFocusPolicy( StrongFocus );
+#ifdef Q_WS_X11
+ x11SetWindowType( X11WindowTypePopup );
+#endif
}
/*!
@@ -537,6 +540,29 @@ void QPopupMenu::popup( const QPoint &po
emit aboutToShow();
updateSize(TRUE);
}
+#ifdef Q_WS_X11
+#ifndef QT_NO_MENUBAR
+ QMenuData *top = this; // find top level
+ while ( top->parentMenu )
+ top = top->parentMenu;
+ if( top->isMenuBar )
+ x11SetWindowType( X11WindowTypeDropdown );
+ if( parentMenu && parentMenu->isMenuBar )
+ x11SetWindowTransient( static_cast< QMenuBar* >( parentMenu )->topLevelWidget());
+#endif
+ if( parentMenu && !parentMenu->isMenuBar )
+ x11SetWindowTransient( static_cast< QPopupMenu* >( parentMenu ));
+ if( !parentMenu ) {
+ // hackish ... try to find the main window related to this popup
+ QWidget* parent = parentWidget() ? parentWidget()->topLevelWidget() : NULL;
+ if( parent == NULL )
+ parent = QApplication::widgetAt( pos );
+ if( parent == NULL )
+ parent = qApp->activeWindow();
+ if( parent != NULL )
+ x11SetWindowTransient( parent );
+ }
+#endif
int sw = screen.width(); // screen width
int sh = screen.height(); // screen height
@@ -1390,6 +1416,13 @@ void QPopupMenu::hide()
#if defined(QT_ACCESSIBILITY_SUPPORT)
QAccessible::updateAccessibility( this, 0, QAccessible::PopupMenuEnd );
#endif
+#ifndef QT_NO_MENUBAR
+ QMenuData *top = this; // find top level
+ while ( top->parentMenu )
+ top = top->parentMenu;
+ if( top->isMenuBar )
+ x11SetWindowType( X11WindowTypePopup ); // reset
+#endif
parentMenu = 0;
hidePopups();
QWidget::hide();
@@ -2713,6 +2746,9 @@ void QPopupMenu::toggleTearOff()
geometry().topLeft(), FALSE );
p->mitems->setAutoDelete( FALSE );
p->tornOff = TRUE;
+#ifdef Q_WS_X11
+ p->x11SetWindowType( X11WindowTypeMenu );
+#endif
for ( QMenuItemListIt it( *mitems ); it.current(); ++it ) {
if ( it.current()->id() != QMenuData::d->aInt && !it.current()->widget() )
p->mitems->append( it.current() );

@ -1,301 +0,0 @@
This qt-copy patch has been slightly modified to apply to the SUSE package
(does not apply directly because of the immodule patch).
--- src/kernel/qwidget_x11.cpp.sav 2007-08-29 15:04:42.000000000 +0200
+++ src/kernel/qwidget_x11.cpp 2007-08-29 15:06:17.000000000 +0200
@@ -85,6 +85,12 @@ static QWidget *keyboardGrb = 0;
extern Time qt_x_time;
extern Time qt_x_user_time;
+#ifndef QT_NO_XSYNC
+extern Atom qt_net_wm_sync_request_counter;
+extern Atom qt_net_wm_sync_request;
+extern bool qt_use_xsync;
+#endif
+
// defined in qfont_x11.cpp
extern bool qt_has_xft;
@@ -593,11 +599,14 @@ void QWidget::create( WId window, bool i
XResizeWindow( dpy, id, crect.width(), crect.height() );
XStoreName( dpy, id, qAppName() );
- Atom protocols[4];
+ Atom protocols[5];
int n = 0;
protocols[n++] = qt_wm_delete_window; // support del window protocol
protocols[n++] = qt_wm_take_focus; // support take focus window protocol
protocols[n++] = qt_net_wm_ping; // support _NET_WM_PING protocol
+#ifndef QT_NO_XSYNC
+ protocols[n++] = qt_net_wm_sync_request;// support the _NET_WM_SYNC_REQUEST protocol
+#endif
if ( testWFlags( WStyle_ContextHelp ) )
protocols[n++] = qt_net_wm_context_help;
XSetWMProtocols( dpy, id, protocols, n );
@@ -623,6 +632,14 @@ void QWidget::create( WId window, bool i
XChangeProperty(dpy, id, qt_net_wm_pid, XA_CARDINAL, 32, PropModeReplace,
(unsigned char *) &curr_pid, 1);
+#ifndef QT_NO_XSYNC
+ // set _NET_WM_SYNC_COUNTER
+ createSyncCounter();
+ long counterVal = topData()->syncCounter;
+ XChangeProperty( dpy, id, qt_net_wm_sync_request_counter, XA_CARDINAL, 32, PropModeReplace,
+ (unsigned char*) &counterVal, 1);
+#endif
+
// when we create a toplevel widget, the frame strut should be dirty
fstrut_dirty = 1;
@@ -722,6 +739,9 @@ void QWidget::destroy( bool destroyWindo
if ( destroyWindow )
qt_XDestroyWindow( this, x11Display(), winid );
}
+#ifndef QT_NO_XSYNC
+ destroySyncCounter();
+#endif
setWinId( 0 );
extern void qPRCleanup( QWidget *widget ); // from qapplication_x11.cpp
@@ -781,6 +801,10 @@ void QWidget::reparentSys( QWidget *pare
destroyInputContext();
}
+#ifndef QT_NO_XSYNC
+ destroySyncCounter();
+#endif
+
if ( isTopLevel() || !parent ) // we are toplevel, or reparenting to toplevel
topData()->parentWinId = 0;
@@ -2464,6 +2488,11 @@ void QWidget::createTLSysExtra()
// created lazily
extra->topextra->xic = 0;
#endif
+#ifndef QT_NO_XSYNC
+ extra->topextra->syncCounter = 0;
+ extra->topextra->syncRequestValue[0] = 0;
+ extra->topextra->syncRequestValue[1] = 0;
+#endif
}
void QWidget::deleteTLSysExtra()
@@ -2510,6 +2539,51 @@ void QWidget::checkChildrenDnd()
}
}
+
+#ifndef QT_NO_XSYNC
+// create a window's XSyncCounter
+void QWidget::createSyncCounter()
+{
+ if( !qt_use_xsync || !isTopLevel() || topData()->syncCounter )
+ return;
+ XSyncValue zero;
+ XSyncIntToValue( &zero, 0 );
+ topData()->syncCounter = XSyncCreateCounter( x11Display(), zero );
+}
+
+// destroy a window's XSyncCounter
+void QWidget::destroySyncCounter()
+{
+ if( !qt_use_xsync || !extra || !extra->topextra
+ || !extra->topextra->syncCounter )
+ return;
+ XSyncDestroyCounter( x11Display(), extra->topextra->syncCounter );
+ extra->topextra->syncCounter = 0;
+}
+
+// increment a window's XSyncCounter
+void QWidget::incrementSyncCounter()
+{
+ if( qt_use_xsync && topData()->syncCounter &&
+ !(topData()->syncRequestValue[0] == 0 &&
+ topData()->syncRequestValue[1] == 0) ) {
+ XSyncValue val;
+ XSyncIntsToValue( &val, topData()->syncRequestValue[ 0 ], topData()->syncRequestValue[ 1 ] );
+ XSyncSetCounter( x11Display(), topData()->syncCounter, val );
+ topData()->syncRequestValue[0] = topData()->syncRequestValue[1] = 0;
+ }
+}
+
+// handle _NET_WM_SYNC_REQUEST
+void QWidget::handleSyncRequest( void* ev )
+{
+ XEvent* xev = (XEvent*)ev;
+ topData()->syncRequestValue[ 0 ] = xev->xclient.data.l[ 2 ];
+ topData()->syncRequestValue[ 1 ] = xev->xclient.data.l[ 3 ];
+}
+#endif // QT_NO_XSYNC
+
+
/*!
\property QWidget::acceptDrops
\brief whether drop events are enabled for this widget
--- src/kernel/qt_x11_p.h.sav 2007-08-29 15:04:42.000000000 +0200
+++ src/kernel/qt_x11_p.h 2007-08-29 15:05:27.000000000 +0200
@@ -174,6 +174,11 @@ extern "C" {
#endif // QT_NO_XRENDER
+#ifndef QT_NO_XSYNC
+# include <X11/extensions/sync.h>
+#endif // QT_NO_XSYNC
+
+
#ifndef QT_NO_XKB
# include <X11/XKBlib.h>
#endif // QT_NO_XKB
--- src/kernel/qwidget.h.sav 2007-08-29 15:04:42.000000000 +0200
+++ src/kernel/qwidget.h 2007-08-29 15:05:52.000000000 +0200
@@ -605,6 +605,14 @@ private:
void focusInputContext();
void unfocusInputContext();
void checkChildrenDnd();
+
+#ifndef QT_NO_XSYNC
+ void createSyncCounter();
+ void destroySyncCounter();
+ void incrementSyncCounter();
+ void handleSyncRequest( void* ev );
+#endif
+
#elif defined(Q_WS_MAC)
uint own_id : 1, macDropEnabled : 1;
EventHandlerRef window_event;
@@ -986,6 +994,10 @@ struct Q_EXPORT QTLWExtra {
#if defined(QT_NO_IM_EXTENSIONS)
void *xic; // Input Context
#endif
+#ifndef QT_NO_XSYNC
+ ulong syncCounter;
+ uint syncRequestValue[2];
+#endif
#endif
#if defined(Q_WS_MAC)
WindowGroupRef group;
--- src/kernel/qapplication_x11.cpp.sav 2007-08-29 15:04:42.000000000 +0200
+++ src/kernel/qapplication_x11.cpp 2007-08-29 15:05:27.000000000 +0200
@@ -288,6 +288,11 @@ Atom *qt_net_supported_list = 0;
Window *qt_net_virtual_root_list = 0;
+// X11 SYNC support
+#ifndef QT_NO_XSYNC
+Atom qt_net_wm_sync_request_counter = 0;
+Atom qt_net_wm_sync_request = 0;
+#endif
// client leader window
Window qt_x11_wm_client_leader = 0;
@@ -312,6 +317,13 @@ static int xrandr_eventbase;
// Display
Q_EXPORT bool qt_use_xrender = FALSE;
+#ifndef QT_NO_XSYNC
+// True if SYNC extension exists on the connected display
+bool qt_use_xsync = FALSE;
+static int xsync_eventbase;
+static int xsync_errorbase;
+#endif
+
// modifier masks for alt/meta - detected when the application starts
static long qt_alt_mask = 0;
static long qt_meta_mask = 0;
@@ -2007,6 +2019,11 @@ void qt_init_internal( int *argcptr, cha
qt_x11_intern_atom( "UTF8_STRING", &qt_utf8_string );
qt_x11_intern_atom( "_SGI_DESKS_MANAGER", &qt_sgi_desks_manager );
+#ifndef QT_NO_XSYNC
+ qt_x11_intern_atom( "_NET_WM_SYNC_REQUEST_COUNTER", &qt_net_wm_sync_request_counter );
+ qt_x11_intern_atom( "_NET_WM_SYNC_REQUEST", &qt_net_wm_sync_request );
+#endif
+
qt_xdnd_setup();
qt_x11_motifdnd_init();
@@ -2043,6 +2060,15 @@ void qt_init_internal( int *argcptr, cha
}
#endif // QT_NO_XRENDER
+#ifndef QT_NO_XSYNC
+ // Try to initialize SYNC extension on the connected display
+ int xsync_major, xsync_minor;
+ if ( XSyncQueryExtension( appDpy, &xsync_eventbase, &xsync_errorbase ) &&
+ XSyncInitialize( appDpy, &xsync_major, &xsync_minor ) ) {
+ qt_use_xsync = TRUE;
+ }
+#endif
+
#ifndef QT_NO_XKB
// If XKB is detected, set the GrabsUseXKBState option so input method
// compositions continue to work (ie. deadkeys)
@@ -3196,6 +3222,10 @@ int QApplication::x11ClientMessage(QWidg
XSendEvent( event->xclient.display, event->xclient.window,
False, SubstructureNotifyMask|SubstructureRedirectMask, event );
}
+#ifndef QT_NO_XSYNC
+ } else if (a == qt_net_wm_sync_request ) {
+ widget->handleSyncRequest( event );
+#endif
}
} else if ( event->xclient.message_type == qt_qt_scrolldone ) {
widget->translateScrollDoneEvent(event);
@@ -5818,6 +5848,21 @@ bool QETWidget::translateScrollDoneEvent
return FALSE;
}
+#if defined(Q_C_CALLBACKS)
+extern "C" {
+#endif
+#ifndef QT_NO_XSYNC
+static Bool qt_net_wm_sync_request_scanner(Display*, XEvent* event, XPointer arg)
+{
+ return (event->type == ClientMessage && event->xclient.window == *(Window*)arg
+ && event->xclient.message_type == qt_wm_protocols
+ && event->xclient.data.l[ 0 ] == qt_net_wm_sync_request );
+}
+#endif
+
+#if defined(Q_C_CALLBACKS)
+}
+#endif
//
// ConfigureNotify (window move and resize) event translation
@@ -5849,6 +5894,7 @@ bool QETWidget::translateConfigEvent( co
if (! extra || extra->compress_events) {
// ConfigureNotify compression for faster opaque resizing
XEvent otherEvent;
+ int compressed_configs = 0;
while ( XCheckTypedWindowEvent( x11Display(), winId(), ConfigureNotify,
&otherEvent ) ) {
if ( qt_x11EventFilter( &otherEvent ) )
@@ -5869,7 +5915,18 @@ bool QETWidget::translateConfigEvent( co
newCPos.ry() = otherEvent.xconfigure.y +
otherEvent.xconfigure.border_width;
}
+ ++compressed_configs;
+ }
+#ifndef QT_NO_XSYNC
+ // _NET_WM_SYNC_REQUEST compression
+ Window wid = winId();
+ while ( compressed_configs &&
+ XCheckIfEvent( x11Display(), &otherEvent,
+ qt_net_wm_sync_request_scanner, (XPointer)&wid ) ) {
+ handleSyncRequest( (void*)&otherEvent );
+ --compressed_configs;
}
+#endif
}
QRect cr ( geometry() );
@@ -5923,6 +5980,8 @@ bool QETWidget::translateConfigEvent( co
repaint( !testWFlags(WResizeNoErase) || transbg );
}
+ incrementSyncCounter();
+
return TRUE;
}

@ -1,22 +0,0 @@
--- configure
+++ configure
@@ -3140,15 +3140,15 @@ case "$COMPILER" in
g++*)
# GNU C++
QMAKE_CONF_COMPILER=`grep "QMAKE_CXX[^_A-Z0-9a-z]" $QMAKESPEC/qmake.conf | sed "s,.* *= *\(.*\)$,\1,"`
- COMPILER_VERSION=`${QMAKE_CONF_COMPILER} --version 2>/dev/null`
+ COMPILER_VERSION=`${QMAKE_CONF_COMPILER} --version 2>/dev/null | sed 's,^[^0-9]*,,g'`
case "$COMPILER_VERSION" in
- *2.95.*)
+ 2.95.*)
COMPILER_VERSION="2.95.*"
;;
- *3.*)
+ 3.*)
COMPILER_VERSION="3.*"
;;
- *4.*)
+ 4.*)
COMPILER_VERSION="4"
;;
*)

@ -2,7 +2,7 @@ Index: src/kernel/qgplugin.h
================================================================================
--- src/kernel/qgplugin.h
+++ src/kernel/qgplugin.h
@@ -90,35 +90,19 @@
@@ -93,35 +93,19 @@
return i->iface(); \
}
@ -50,7 +50,7 @@ Index: src/kernel/qgplugin.h
struct QUnknownInterface;
--- src/tools/qglobal.h
+++ src/tools/qglobal.h
@@ -882,6 +882,10 @@
@@ -885,6 +885,10 @@
# define Q_TEMPLATE_EXTERN
# undef Q_DISABLE_COPY /* avoid unresolved externals */
# endif

@ -1,6 +1,6 @@
--- src/qt.pro
+++ src/qt.pro
@@ -40,6 +40,8 @@
@@ -41,6 +41,8 @@
XML_CPP = xml
STYLES_CPP = styles
EMBEDDED_CPP = embedded

@ -67,7 +67,7 @@
target.path += $$plugins.path/sqldrivers
--- src/tools/qcstring.cpp
+++ src/tools/qcstring.cpp
@@ -50,7 +50,7 @@
@@ -53,7 +53,7 @@
#include <ctype.h>
#include <limits.h>
#ifndef QT_NO_COMPRESS

@ -1,44 +0,0 @@
--- src/opengl/qgl_x11.cpp
+++ src/opengl/qgl_x11.cpp 2004/04/13 14:56:00
@@ -267,7 +267,7 @@
typedef Status (*_XmuLookupStandardColormap)( Display *dpy, int screen, VisualID visualid, unsigned int depth,
Atom property, Bool replace, Bool retain );
_XmuLookupStandardColormap qt_XmuLookupStandardColormap;
- qt_XmuLookupStandardColormap = (_XmuLookupStandardColormap) QLibrary::resolve("Xmu", "XmuLookupStandardColormap");
+ qt_XmuLookupStandardColormap = (_XmuLookupStandardColormap) QLibrary::resolve("Xmu.so.6", "XmuLookupStandardColormap");
if (!qt_XmuLookupStandardColormap)
qFatal("Unable to resolve Xmu symbols - please check your Xmu library installation.");
#define XmuLookupStandardColormap qt_XmuLookupStandardColormap
Index: src/tools/qlibrary.cpp
===================================================================
RCS file: /home/kde/qt-copy/src/tools/qlibrary.cpp,v
retrieving revision 1.26
diff -u -3 -p -r1.26 qlibrary.cpp
--- src/tools/qlibrary.cpp 4 Feb 2004 14:25:02 -0000 1.26
+++ src/tools/qlibrary.cpp 2 Jun 2004 08:26:21 -0000
@@ -424,7 +424,8 @@ QString QLibrary::library() const
} else {
tmpfilename = QString( "lib%1" ).arg( filename );
}
- tmpfilename += filter;
+ if ( !filename.contains(".so") )
+ tmpfilename += filter;
if(QFile::exists(tmpfilename) || it == filters.end()) {
filename = tmpfilename;
break;
Index: src/opengl/qgl_x11.cpp
===================================================================
RCS file: /home/kde/qt-copy/src/opengl/qgl_x11.cpp,v
retrieving revision 1.34
diff -u -3 -p -r1.34 qgl_x11.cpp
--- src/opengl/qgl_x11.cpp 21 Dec 2003 00:48:09 -0000 1.34
+++ src/opengl/qgl_x11.cpp 2 Jun 2004 08:26:21 -0000
@@ -116,7 +116,7 @@ bool qt_resolve_gl_symbols(bool fatal)
if (gl_syms_resolved)
return TRUE;
- QLibrary gl("GL");
+ QLibrary gl("GL.so.1");
gl.setAutoUnload(FALSE);
qt_glCallLists = (_glCallLists) gl.resolve("glCallLists");

@ -1,6 +1,6 @@
--- tools/assistant/lib/qassistantclient.cpp
+++ tools/assistant/lib/qassistantclient.cpp
@@ -128,7 +128,7 @@
@@ -135,7 +135,7 @@
: QObject( parent, name ), host ( "localhost" )
{
if ( path.isEmpty() )

@ -1,55 +0,0 @@
--- src/kernel/qapplication_x11.cpp
+++ src/kernel/qapplication_x11.cpp
@@ -3294,11 +3294,7 @@
// filtering opportunity first to ensure all input methods work
// properly regardless of application design.
-#ifndef QT_NO_IM_EXTENSIONS
if( keywidget && keywidget->isEnabled() && keywidget->isInputMethodEnabled() ) {
-#else
- if( keywidget && keywidget->isEnabled() ) {
-#endif
if( ( event->type==XKeyPress || event->type==XKeyRelease ) &&
sm_blockUserInput ) // block user interaction during session management
return TRUE;
@@ -5220,11 +5216,12 @@
} else {
key = (int)(long)keyDict->find( keycode );
if ( key )
- if( !willRepeat ) // Take out key of dictionary only if this call.
+ if( !willRepeat && statefulTranslation ) // Take out key of dictionary only if this call.
keyDict->take( keycode );
long s = (long)textDict->find( keycode );
if ( s ) {
- textDict->take( keycode );
+ if( statefulTranslation )
+ textDict->take( keycode );
ascii = (char)(s-256);
}
}
--- src/kernel/qwidget_x11.cpp
+++ src/kernel/qwidget_x11.cpp
@@ -2699,11 +2699,10 @@
{
QInputContext *qic = 0;
-#if !defined(QT_NO_IM_EXTENSIONS)
if ( isInputMethodEnabled() ) {
+#if !defined(QT_NO_IM_EXTENSIONS)
qic = icHolderWidget()->ic;
#else
- {
// icHolderWidget is always topLevelWidget
QTLWExtra *topdata = icHolderWidget()->topData();
qic = (QInputContext *)topdata->xic;
@@ -2754,10 +2753,8 @@
*/
void QWidget::createInputContext()
{
-#if !defined(QT_NO_IM_EXTENSIONS)
if( !isInputMethodEnabled() || QApplication::closingDown() )
return;
-#endif
QWidget *icWidget = icHolderWidget();
#ifndef QT_NO_IM

@ -1,6 +1,6 @@
--- src/kernel/qtranslator.cpp
+++ src/kernel/qtranslator.cpp
@@ -1012,7 +1012,7 @@
@@ -1015,7 +1015,7 @@
char con[256];
for ( ;; ) {
t >> len;

@ -1,13 +0,0 @@
--- src/dialogs/qdialog.cpp
+++ src/dialogs/qdialog.cpp
@@ -803,7 +803,9 @@
w = w->topLevelWidget();
QRect desk;
if ( w ) {
- scrn = QApplication::desktop()->screenNumber( w );
+ // Use mapToGlobal rather than geometry() in case w might
+ // be embedded in another application
+ scrn = QApplication::desktop()->screenNumber( w->mapToGlobal( QPoint(0,0) ) );
} else if ( QApplication::desktop()->isVirtualDesktop() ) {
scrn = QApplication::desktop()->screenNumber( QCursor::pos() );
} else {

@ -1,20 +1,8 @@
Index: src/tools/qvaluelist.h
===================================================================
--- src/tools/qvaluelist.h.orig 2011-03-31 20:14:47.200973928 +0200
+++ src/tools/qvaluelist.h 2011-03-31 20:14:55.352615654 +0200
@@ -50,6 +50,7 @@
#ifndef QT_NO_STL
#include <iterator>
#include <list>
+#include <cstddef>
#endif
//#define QT_CHECK_VALUELIST_RANGE
Index: src/tools/qvaluevector.h
===================================================================
--- src/tools/qvaluevector.h.orig 2008-01-15 20:09:13.000000000 +0100
+++ src/tools/qvaluevector.h 2011-03-31 20:15:15.904712567 +0200
@@ -244,7 +244,7 @@ public:
@@ -246,7 +246,7 @@ public:
typedef const value_type& const_reference;
typedef size_t size_type;
#ifndef QT_NO_STL
@ -27,7 +15,7 @@ Index: src/tools/qmap.h
===================================================================
--- src/tools/qmap.h.orig 2008-01-15 20:09:13.000000000 +0100
+++ src/tools/qmap.h 2011-03-31 20:24:35.802101605 +0200
@@ -107,7 +107,7 @@ class QMapIterator
@@ -108,7 +108,7 @@ class QMapIterator
#endif
typedef T value_type;
#ifndef QT_NO_STL
@ -36,7 +24,7 @@ Index: src/tools/qmap.h
#else
typedef int difference_type;
#endif
@@ -223,7 +223,7 @@ class QMapConstIterator
@@ -224,7 +224,7 @@ class QMapConstIterator
#endif
typedef T value_type;
#ifndef QT_NO_STL
@ -45,7 +33,7 @@ Index: src/tools/qmap.h
#else
typedef int difference_type;
#endif
@@ -604,7 +604,7 @@ public:
@@ -605,7 +605,7 @@ public:
typedef value_type& reference;
typedef const value_type& const_reference;
#ifndef QT_NO_STL

@ -1,6 +1,6 @@
--- src/widgets/qpopupmenu.cpp
+++ src/widgets/qpopupmenu.cpp
@@ -1354,6 +1354,7 @@
@@ -1391,6 +1391,7 @@
performDelayedChanges();
updateSize(TRUE);
QWidget::show();

@ -1,6 +1,6 @@
--- src/tools/qgpluginmanager.cpp
+++ src/tools/qgpluginmanager.cpp 2004/09/25 11:46:41
@@ -377,6 +377,9 @@
@@ -380,6 +380,9 @@
QString basename = (*git).left( (*git).find( QChar(0xfffd) ) );
++git;

@ -2,7 +2,7 @@ Index: kernel/qasyncimageio.cpp
================================================================================
--- src/kernel/qasyncimageio.cpp
+++ src/kernel/qasyncimageio.cpp
@@ -901,7 +901,12 @@
@@ -904,7 +904,12 @@
sheight = newtop + newheight;
if (img.isNull()) {
@ -16,7 +16,7 @@ Index: kernel/qasyncimageio.cpp
memset( img.bits(), 0, img.numBytes() );
if (consumer) consumer->setSize(swidth, sheight);
}
@@ -956,9 +961,15 @@
@@ -959,9 +964,15 @@
if (backingstore.width() < w
|| backingstore.height() < h) {
// We just use the backing store as a byte array
@ -35,7 +35,7 @@ Index: kernel/qasyncimageio.cpp
for (int ln=0; ln<h; ln++) {
--- src/kernel/qimage.cpp
+++ src/kernel/qimage.cpp
@@ -65,6 +65,8 @@
@@ -68,6 +68,8 @@
#define QT_NO_IMAGE_16_BIT
#endif
@ -44,7 +44,7 @@ Index: kernel/qasyncimageio.cpp
/*!
\class QImage
@@ -1201,6 +1203,28 @@
@@ -1211,6 +1213,28 @@
data->alpha = enable;
}
@ -73,7 +73,7 @@ Index: kernel/qasyncimageio.cpp
/*!
Sets the image \a width, \a height, \a depth, its number of colors
@@ -1230,6 +1254,14 @@
@@ -1240,6 +1264,14 @@
reset(); // reset old data
if ( width <= 0 || height <= 0 || depth <= 0 || numColors < 0 )
return FALSE; // invalid parameter(s)
@ -90,7 +90,7 @@ Index: kernel/qasyncimageio.cpp
qWarning( "QImage::create: Bit order is required for 1 bpp images" );
--- src/kernel/qimage.h
+++ src/kernel/qimage.h
@@ -194,6 +194,10 @@
@@ -197,6 +197,10 @@
int quality=-1 ) const;
bool save( QIODevice * device, const char* format,
int quality=-1 ) const;

@ -1,6 +1,6 @@
--- src/kernel/qmngio.cpp.sav 2007-02-23 14:01:19.000000000 +0100
+++ src/kernel/qmngio.cpp 2007-08-28 15:27:28.000000000 +0200
@@ -411,8 +411,11 @@ int QMNGFormat::decode( QImage& img, QIm
@@ -414,8 +414,11 @@ int QMNGFormat::decode( QImage& img, QIm
}
losttime += losingtimer.elapsed();
@ -14,7 +14,7 @@
losingtimer.start();
image = 0;
@@ -422,6 +425,13 @@ int QMNGFormat::decode( QImage& img, QIm
@@ -425,6 +428,13 @@ int QMNGFormat::decode( QImage& img, QIm
// Move back unused tail
memcpy(buffer,buffer+ubuffer,nbuffer);
}

@ -1,6 +1,6 @@
--- src/kernel/qfontdatabase.cpp
+++ src/kernel/qfontdatabase.cpp
@@ -2470,11 +2470,14 @@ void QFontDatabase::parseFontName(const
@@ -2476,11 +2476,14 @@ void QFontDatabase::parseFontName(const
int i = name.find('[');
int li = name.findRev(']');

@ -1,6 +1,6 @@
--- src/tools/qgpluginmanager.cpp
+++ src/tools/qgpluginmanager.cpp
@@ -383,6 +383,8 @@
@@ -389,6 +389,8 @@
sameBasename << (*git).mid( (*git).find( QChar(0xfffd) ) + 1 );
++git;
}

@ -1,6 +1,6 @@
--- src/tools/qcstring.h (revision 658213)
+++ src/tools/qcstring.h (working copy)
@@ -161,7 +161,11 @@ public:
@@ -164,7 +164,11 @@ public:
QCString copy() const;

@ -1,58 +0,0 @@
--- src/kernel/qobject.cpp
+++ src/kernel/qobject.cpp
@@ -360,6 +360,30 @@
}
}
+/*! \internal
+ TQt compatibility function
+*/
+QObjectList QObject::childrenListObject() {
+ if (children()) return *(children());
+ else return QObjectList();
+}
+
+/*! \internal
+ TQt compatibility function
+*/
+const QObjectList QObject::childrenListObject() const {
+ if (children()) return *(children());
+ else return QObjectList();
+}
+
+/*! \internal
+ TQt compatibility function
+*/
+const QObjectList QObject::objectTreesListObject() {
+ if (objectTrees()) return *(objectTrees());
+ else return QObjectList();
+}
+
/*****************************************************************************
QObject member functions
--- src/kernel/qobject.h
+++ src/kernel/qobject.h
@@ -101,8 +101,11 @@
QObject *child( const char *objName, const char *inheritsClass = 0, bool recursiveSearch = TRUE ); //### const in 4.0
const QObjectList *children() const { return childObjects; }
+ QObjectList childrenListObject();
+ const QObjectList childrenListObject() const;
static const QObjectList *objectTrees();
+ static const QObjectList objectTreesListObject();
QObjectList *queryList( const char *inheritsClass = 0,
const char *objName = 0,
--- src/tools/qglobal.h
+++ src/tools/qglobal.h
@@ -41,7 +41,7 @@
#ifndef QGLOBAL_H
#define QGLOBAL_H
-#define QT_VERSION_STR "3.3.8b"
+#define QT_VERSION_STR "3.3.8c"
/*
QT_VERSION is (major << 16) + (minor << 8) + patch.
*/

@ -1,6 +1,6 @@
--- src/kernel/qapplication.cpp
+++ src/kernel/qapplication.cpp
@@ -317,6 +317,7 @@
@@ -320,6 +320,7 @@
void qt_cleanup();
#if defined(Q_WS_X11)
void qt_init( Display* dpy, Qt::HANDLE, Qt::HANDLE );
@ -8,7 +8,7 @@
#endif
Q_EXPORT bool qt_tryModalHelper( QWidget *widget, QWidget **rettop );
@@ -905,7 +906,7 @@
@@ -908,7 +909,7 @@
qt_init( &argc, argv, GuiClient );
} else {
@ -19,7 +19,7 @@
process_cmdline( &argc, argv );
--- src/kernel/qapplication_x11.cpp
+++ src/kernel/qapplication_x11.cpp
@@ -197,6 +197,7 @@
@@ -201,6 +201,7 @@
static Display *appDpy = 0; // X11 application display
static char *appDpyName = 0; // X11 display name
static bool appForeignDpy = FALSE; // we didn't create display
@ -27,7 +27,7 @@
static bool appSync = FALSE; // X11 synchronization
#if defined(QT_DEBUG)
static bool appNoGrab = FALSE; // X11 grabbing enabled
@@ -1610,7 +1611,7 @@
@@ -1632,7 +1633,7 @@
setlocale( LC_ALL, "" ); // use correct char set mapping
setlocale( LC_NUMERIC, "C" ); // make sprintf()/scanf() work
@ -36,7 +36,7 @@
// Qt part of other application
appForeignDpy = TRUE;
@@ -2390,6 +2391,10 @@
@@ -2432,6 +2433,10 @@
qt_init_internal( 0, 0, display, visual, colormap );
}

@ -1,270 +0,0 @@
--- src/dialogs/qcolordialog.cpp
+++ src/dialogs/qcolordialog.cpp
@@ -60,6 +60,10 @@
QColor macGetColor( const QColor& initial, QWidget *parent, const char *name );
#endif
+#ifdef Q_WS_X11
+#include "private/qtkdeintegration_x11_p.h"
+#endif
+
//////////// QWellArray BEGIN
struct QWellArrayData;
@@ -1478,7 +1482,10 @@
QColor QColorDialog::getColor( const QColor& initial, QWidget *parent,
const char *name )
{
-#if defined(Q_WS_MAC)
+#if defined(Q_WS_X11)
+ if( QKDEIntegration::enabled())
+ return QKDEIntegration::getColor( initial, parent, name );
+#elif defined(Q_WS_MAC)
return macGetColor(initial, parent, name);
#endif
@@ -1516,6 +1523,13 @@
QWidget *parent, const char* name )
{
#if defined(Q_WS_MAC)
+ if( QKDEIntegration::enabled()) {
+ QColor color = QKDEIntegration::getColor( QColor( initial ), parent, name );
+ if( ok )
+ *ok = color.isValid();
+ return color.rgba();
+ }
+#elif defined(Q_WS_MAC)
return macGetRgba(initial, ok, parent, name);
#endif
--- src/dialogs/qfiledialog.cpp
+++ src/dialogs/qfiledialog.cpp
@@ -92,6 +92,10 @@
#include "qvbox.h"
#include "qwidgetstack.h"
+#ifdef Q_WS_X11
+#include "private/qtkdeintegration_x11_p.h"
+#endif
+
#ifdef Q_WS_WIN
#ifdef QT_THREAD_SUPPORT
# include <private/qmutexpool_p.h>
@@ -3464,7 +3468,11 @@
if ( workingDirectory->isNull() )
*workingDirectory = ::toRootIfNotExists( QDir::currentDirPath() );
-#if defined(Q_WS_WIN)
+#if defined(Q_WS_X11)
+ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
+ return QKDEIntegration::getOpenFileNames( filter, workingDirectory, parent, name,
+ caption, selectedFilter, false ).first();
+#elif defined(Q_WS_WIN)
if ( qt_use_native_dialogs && qApp->style().styleHint( QStyle::SH_GUIStyle ) == WindowsStyle )
return winGetOpenFileName( initialSelection, filter, workingDirectory,
parent, name, caption, selectedFilter );
@@ -3585,7 +3593,11 @@
if ( workingDirectory->isNull() )
*workingDirectory = ::toRootIfNotExists( QDir::currentDirPath() );
-#if defined(Q_WS_WIN)
+#if defined(Q_WS_X11)
+ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
+ return QKDEIntegration::getSaveFileName( initialSelection, filter, workingDirectory,
+ parent, name, caption, selectedFilter );
+#elif defined(Q_WS_WIN)
if ( qt_use_native_dialogs && qApp->style().styleHint( QStyle::SH_GUIStyle ) == WindowsStyle )
return winGetSaveFileName( initialSelection, filter, workingDirectory,
parent, name, caption, selectedFilter );
@@ -4475,7 +4487,17 @@
if ( workingDirectory )
wd = *workingDirectory;
-#if defined(Q_WS_WIN)
+#if defined(Q_WS_X11)
+ QString initialDir;
+ if ( !dir.isEmpty() ) {
+ QUrlOperator u( dir );
+ if ( QFileInfo( u.path() ).isDir() )
+ initialDir = dir;
+ } else
+ initialDir = QString::null;
+ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
+ return QKDEIntegration::getExistingDirectory( initialDir, parent, name, caption );
+#elif defined(Q_WS_WIN)
QString initialDir;
if ( !dir.isEmpty() ) {
QUrlOperator u( dir );
@@ -5636,7 +5658,10 @@
}
}
-#if defined(Q_WS_WIN)
+#if defined(Q_WS_X11)
+ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
+ return QKDEIntegration::getOpenFileNames( filter, workingDirectory, parent, name, caption, selectedFilter, true );
+#elif defined(Q_WS_WIN)
if ( qt_use_native_dialogs && qApp->style().styleHint( QStyle::SH_GUIStyle ) == WindowsStyle )
return winGetOpenFileNames( filter, workingDirectory, parent, name, caption, selectedFilter );
#elif defined(Q_WS_MAC)
--- src/dialogs/qfontdialog.cpp
+++ src/dialogs/qfontdialog.cpp
@@ -56,6 +56,10 @@
#include <private/qfontdata_p.h>
#include <qvalidator.h>
+#ifdef Q_WS_X11
+#include "private/qtkdeintegration_x11_p.h"
+#endif
+
/*!
\class QFontDialog qfontdialog.h
\ingroup dialogs
@@ -384,9 +388,15 @@
return getFont( ok, 0, parent, name );
}
+extern bool qt_use_native_dialogs;
+
QFont QFontDialog::getFont( bool *ok, const QFont *def,
QWidget *parent, const char* name)
{
+#if defined(Q_WS_X11)
+ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
+ return QKDEIntegration::getFont( ok, def, parent, name );
+#endif
QFont result;
if ( def )
result = *def;
--- src/dialogs/qmessagebox.cpp
+++ src/dialogs/qmessagebox.cpp
@@ -54,6 +54,12 @@
#endif
+#ifdef Q_WS_X11
+#include "private/qtkdeintegration_x11_p.h"
+#endif
+
+extern bool qt_use_native_dialogs;
+
// Internal class - don't touch
class QMessageBoxLabel : public QLabel
@@ -1110,6 +1116,10 @@
const QString& caption, const QString& text,
int button0, int button1, int button2 )
{
+#if defined(Q_WS_X11)
+ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
+ return QKDEIntegration::information( parent, caption, text, button0, button1, button2 );
+#endif
QMessageBox *mb = new QMessageBox( caption, text, Information,
button0, button1, button2,
parent, "qt_msgbox_information", TRUE,
@@ -1157,6 +1167,10 @@
const QString& caption, const QString& text,
int button0, int button1, int button2 )
{
+#if defined(Q_WS_X11)
+ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
+ return QKDEIntegration::question( parent, caption, text, button0, button1, button2 );
+#endif
QMessageBox *mb = new QMessageBox( caption, text, Question,
button0, button1, button2,
parent, "qt_msgbox_information", TRUE,
@@ -1205,6 +1219,10 @@
const QString& caption, const QString& text,
int button0, int button1, int button2 )
{
+#if defined(Q_WS_X11)
+ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
+ return QKDEIntegration::warning( parent, caption, text, button0, button1, button2 );
+#endif
QMessageBox *mb = new QMessageBox( caption, text, Warning,
button0, button1, button2,
parent, "qt_msgbox_warning", TRUE,
@@ -1253,6 +1271,10 @@
const QString& caption, const QString& text,
int button0, int button1, int button2 )
{
+#if defined(Q_WS_X11)
+ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
+ return QKDEIntegration::critical( parent, caption, text, button0, button1, button2 );
+#endif
QMessageBox *mb = new QMessageBox( caption, text, Critical,
button0, button1, button2,
parent, "qt_msgbox_critical", TRUE,
@@ -1400,6 +1422,11 @@
int defaultButtonNumber,
int escapeButtonNumber )
{
+#if defined(Q_WS_X11)
+ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
+ return QKDEIntegration::information( parent, caption, text,
+ button0Text, button1Text, button2Text, defaultButtonNumber, escapeButtonNumber );
+#endif
return textBox( parent, Information, caption, text,
button0Text, button1Text, button2Text,
defaultButtonNumber, escapeButtonNumber );
@@ -1442,6 +1469,11 @@
int defaultButtonNumber,
int escapeButtonNumber )
{
+#if defined(Q_WS_X11)
+ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
+ return QKDEIntegration::question( parent, caption, text,
+ button0Text, button1Text, button2Text, defaultButtonNumber, escapeButtonNumber );
+#endif
return textBox( parent, Question, caption, text,
button0Text, button1Text, button2Text,
defaultButtonNumber, escapeButtonNumber );
@@ -1486,6 +1518,11 @@
int defaultButtonNumber,
int escapeButtonNumber )
{
+#if defined(Q_WS_X11)
+ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
+ return QKDEIntegration::warning( parent, caption, text,
+ button0Text, button1Text, button2Text, defaultButtonNumber, escapeButtonNumber );
+#endif
return textBox( parent, Warning, caption, text,
button0Text, button1Text, button2Text,
defaultButtonNumber, escapeButtonNumber );
@@ -1526,6 +1563,11 @@
int defaultButtonNumber,
int escapeButtonNumber )
{
+#if defined(Q_WS_X11)
+ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
+ return QKDEIntegration::critical( parent, caption, text,
+ button0Text, button1Text, button2Text, defaultButtonNumber, escapeButtonNumber );
+#endif
return textBox( parent, Critical, caption, text,
button0Text, button1Text, button2Text,
defaultButtonNumber, escapeButtonNumber );
--- src/kernel/qt.h
+++ src/kernel/qt.h
@@ -313,6 +313,10 @@
#endif // Private headers
+#ifdef Q_WS_X11
+#include "private/qtkdeintegration_x11_p.h"
+#endif
+
#ifdef Q_WS_MAC
#include <qaquastyle.h>
#include <qmacstyle_mac.h>
--- src/kernel/qt_x11.pri
+++ src/kernel/qt_x11.pri
@@ -10,6 +10,9 @@
SOURCES += $$KERNEL_CPP/qtaddons_x11.cpp
PRECOMPILED_HEADER = kernel/qt_pch.h
+
+ SOURCES += $$KERNEL_CPP/qtkdeintegration_x11.cpp
+ HEADERS += $$KERNEL_H/qtkdeintegration_x11_p.h
}
nas {

@ -1,22 +0,0 @@
--- src/tools/qglobal.h
+++ src/tools/qglobal.h
@@ -317,7 +317,7 @@
supposedly know what you are doing.) */
# if (defined(__arm__) || defined(__ARMEL__)) && !defined(QT_MOC_CPP)
# define Q_PACKED __attribute__ ((packed))
-# if __GNUC__ == 3 && __GNUC_MINOR__ >= 4
+# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || __GNUC__ > 3
# define Q_NO_PACKED_REFERENCE
# endif
# endif
--- src/tools/qstring.h
+++ src/tools/qstring.h
@@ -194,7 +194,7 @@
char latin1() const { return ucs > 0xff ? 0 : (char) ucs; }
ushort unicode() const { return ucs; }
#ifdef Q_NO_PACKED_REFERENCE
- ushort &unicode() { return *(&ucs); }
+ ushort &unicode() { return *((ushort*)&ucs); }
#else
ushort &unicode() { return ucs; }
#endif

@ -1,3 +1,22 @@
-------------------------------------------------------------------
Sat Nov 19 23:23:57 UTC 2011 - andrea@nucleus.it
- Removed all the patches already applied in the 3.3.8d tree.
- Modified all the remaining to apply with fuzz=0.
- Created a new patch to revert the use of libiodbc to libodbc
otherwise qt3-unixODBC does not build.
- Some cosmetic change to the specfiles.
-------------------------------------------------------------------
Sun Nov 13 22:40:37 UTC 2011 - robxu9@gmail.com
- Remove 0001-dnd_optimization.patch; upstream
-------------------------------------------------------------------
Sun Nov 13 16:28:34 UTC 2011 - robxu9@gmail.com
- Qt3 has a new upstream; update to 3.3.8d
-------------------------------------------------------------------
Fri Sep 23 10:16:33 UTC 2011 - coolo@suse.com

@ -37,12 +37,8 @@ BuildArch: noarch
Provides: qt3-devel-tutorial
Obsoletes: qt3-devel-tutorial
Requires: qt3-devel
%define x11_free -x11-free-
%define rversion %version
# COMMON-BEGIN
# COMMON-BEGIN
%define x11_free -x11-free-
%define rversion 3.3.8b
Source0: http://mirror.its.uidaho.edu/pub/trinity/releases/3.5.13/dependencies/qt3-3.3.8.d.tar.gz
Source1: build_script.sh
Source2: qtconfig3.desktop
@ -55,10 +51,8 @@ Source9: linguist.desktop
Source5: linguist.png
Source10: qt3.sh
Source11: qt3.csh
# Translations did not change at 3.3.8c
# Translations did not change at 3.3.8d
Source12: qt3-3.3.8b-translations.tar.bz2
Source100: qtkdeintegration_x11.cpp
Source101: qtkdeintegration_x11_p.h
Source102: baselibs.conf
Source200: attributes
Source201: update_spec.pl
@ -71,43 +65,24 @@ Patch14: lib64-plugin-support.diff
Patch15: pluginmanager-fix.diff
Patch18: no-rpath.dif
Patch19: shut-up.diff
Patch21: fix-GL-loading.diff
Patch23: fix-accessible.diff
Patch28: fix-key-release-event-with-imm.diff
Patch31: limit-image-size.diff
Patch34: 0005-qpixmap_mitshm.patch
Patch35: qt-transparency.patch
Patch37: 0055-qtextedit_zoom.patch
Patch38: 0048-qclipboard_hack_80072.patch
Patch39: fix-qtranslator-crash.diff
Patch40: 0059-qpopup_has_mouse.patch
Patch41: 0060-qpopup_ignore_mousepos.patch
Patch42: add_qexport_visibility.patch
Patch43: 0056-khotkeys_input_84434.patch
Source250: enable-designer-plugins.diff
Patch53: fix-xinerama-dialog-placement.diff
Patch54: kmenu-search-fix.diff
Patch55: qt3-fix-cast.diff
Patch100: qt.patch
Patch101: qt3-arm-gcc4.patch
Patch102: xinerama.patch
Patch113: fix-assistant-path.patch
Patch117: qtimer-debug.diff
Patch119: xinerama-qpopupmenu.diff
Patch121: qt3-warnings.diff
Patch123: use-xrandr-1.2.diff
Patch125: qcstring-format-warnings.diff
Patch127: mng-reading-fix.patch
Patch128: 0079-compositing-types.patch
Patch129: 0080-net-wm-sync-request.patch
Patch132: revert-qt-3.3.8-khmer-fix.diff
Patch133: 0085-fix-buildkey.diff
Patch134: fix-xinput-clash.diff
Patch135: parseFontName.diff
Patch136: qt3-no-date.diff
Patch137: popen-leak-fix.diff
Patch138: qt3-libpng14.diff
Patch139: gcc46.diff
Patch140: revert-iodbc-to-uodbc.diff
BuildRoot: %{_tmppath}/%{name}-%{version}-build
@ -122,16 +97,6 @@ This package contains the documentation for the Qt 3 Development Kit.
You will find documentation, precompiled examples, and a tutorial for
getting started with Qt in /usr/lib/qt3/doc.
This package contains the documentation for the Qt 3 Development Kit.
You will find documentation, precompiled examples, and a tutorial for
getting started with Qt in /usr/lib/qt3/doc.
This package contains the documentation for the Qt 3 Development Kit.
You will find documentation, precompiled examples, and a tutorial for
getting started with Qt in /usr/lib/qt3/doc.
%define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial
%prep
@ -148,55 +113,28 @@ fi
%patch18
%patch19
%patch23
#%patch28
%patch31
%patch34
%patch35
%patch37
%patch38
%patch39
%patch40
%patch41
%patch42
%patch43
%patch100
%patch102
%patch53
%patch54
%patch55
%patch101
%patch113
%patch117
%patch119
%patch121
%patch123
ln -sf $PWD/src/inputmethod/qinputcontextfactory.h include/
ln -sf $PWD/src/inputmethod/qinputcontextplugin.h include/
ln -sf $PWD/src/kernel/qinputcontext.h include/
ln -sf $PWD/src/kernel/qinputcontextinterface_p.h include/private/
ln -sf $PWD/src/kernel/qximinputcontext_p.h include/private/
if [ %_lib = "lib" ]; then
sed 's,/lib64/,/lib/,' %PATCH21 | patch -p0
else
%patch21
fi
%patch125
%patch127
%patch128
%patch129
%patch132
%patch133
%patch134
%patch135
%patch136
%patch137
%if %suse_version > 1120
%patch138 -p1
%endif
%patch139
# copy qt kde integration files
cp %SOURCE100 %SOURCE101 src/kernel/
cp %SOURCE101 include/private/
%patch140
cd translations
tar xvjf %SOURCE12
cd ..
@ -214,16 +152,6 @@ This package contains the documentation for the Qt 3 Development Kit.
You will find documentation, precompiled examples, and a tutorial for
getting started with Qt in /usr/lib/qt3/doc.
This package contains the documentation for the Qt 3 Development Kit.
You will find documentation, precompiled examples, and a tutorial for
getting started with Qt in /usr/lib/qt3/doc.
This package contains the documentation for the Qt 3 Development Kit.
You will find documentation, precompiled examples, and a tutorial for
getting started with Qt in /usr/lib/qt3/doc.
%build
export VERSION=%suse_version
source %SOURCE1 %{version}

@ -1,5 +1,5 @@
#
# spec file for package qt3 (Version 3.3.8b)
# spec file for package qt3 (Version 3.3.8d)
#
# Copyright (c) 2006 SUSE LINUX Products GmbH, Nuernberg, Germany.
# This file and all modifications and additions to the pristine
@ -22,15 +22,13 @@ License: GPL, QPL
Autoreqprov: on
Summary: Qt 3 Development Kit
Group: Documentation/HTML
Version: 3.3.8c
Version: 3.3.8d
Release: 1
PreReq: /bin/grep
BuildArch: noarch
Provides: qt3-devel-tutorial
Obsoletes: qt3-devel-tutorial
Requires: qt3-devel
%define x11_free -x11-free-
%define rversion %version
# COMMON-BEGIN
# COMMON-END

@ -1,3 +1,22 @@
-------------------------------------------------------------------
Sat Nov 19 23:23:57 UTC 2011 - andrea@nucleus.it
- Removed all the patches already applied in the 3.3.8d tree.
- Modified all the remaining to apply with fuzz=0.
- Created a new patch to revert the use of libiodbc to libodbc
otherwise qt3-unixODBC does not build.
- Some cosmetic change to the specfiles.
-------------------------------------------------------------------
Sun Nov 13 22:40:37 UTC 2011 - robxu9@gmail.com
- Remove 0001-dnd_optimization.patch; upstream
-------------------------------------------------------------------
Sun Nov 13 16:28:34 UTC 2011 - robxu9@gmail.com
- Qt3 has a new upstream; update to 3.3.8d
-------------------------------------------------------------------
Fri Sep 23 10:16:33 UTC 2011 - coolo@suse.com

@ -32,8 +32,6 @@ Group: Development/Tools/Other
Summary: Qt3 Extensions
# COMMON-BEGIN
# COMMON-BEGIN
%define x11_free -x11-free-
%define rversion 3.3.8b
Source0: http://mirror.its.uidaho.edu/pub/trinity/releases/3.5.13/dependencies/qt3-3.3.8.d.tar.gz
Source1: build_script.sh
Source2: qtconfig3.desktop
@ -48,8 +46,6 @@ Source10: qt3.sh
Source11: qt3.csh
# Translations did not change at 3.3.8d
Source12: qt3-3.3.8b-translations.tar.bz2
Source100: qtkdeintegration_x11.cpp
Source101: qtkdeintegration_x11_p.h
Source102: baselibs.conf
Source200: attributes
Source201: update_spec.pl
@ -62,43 +58,24 @@ Patch14: lib64-plugin-support.diff
Patch15: pluginmanager-fix.diff
Patch18: no-rpath.dif
Patch19: shut-up.diff
Patch21: fix-GL-loading.diff
Patch23: fix-accessible.diff
Patch28: fix-key-release-event-with-imm.diff
Patch31: limit-image-size.diff
Patch34: 0005-qpixmap_mitshm.patch
Patch35: qt-transparency.patch
Patch37: 0055-qtextedit_zoom.patch
Patch38: 0048-qclipboard_hack_80072.patch
Patch39: fix-qtranslator-crash.diff
Patch40: 0059-qpopup_has_mouse.patch
Patch41: 0060-qpopup_ignore_mousepos.patch
Patch42: add_qexport_visibility.patch
Patch43: 0056-khotkeys_input_84434.patch
Source250: enable-designer-plugins.diff
Patch53: fix-xinerama-dialog-placement.diff
Patch54: kmenu-search-fix.diff
Patch55: qt3-fix-cast.diff
Patch100: qt.patch
Patch101: qt3-arm-gcc4.patch
Patch102: xinerama.patch
Patch113: fix-assistant-path.patch
Patch117: qtimer-debug.diff
Patch119: xinerama-qpopupmenu.diff
Patch121: qt3-warnings.diff
Patch123: use-xrandr-1.2.diff
Patch125: qcstring-format-warnings.diff
Patch127: mng-reading-fix.patch
Patch128: 0079-compositing-types.patch
Patch129: 0080-net-wm-sync-request.patch
Patch132: revert-qt-3.3.8-khmer-fix.diff
Patch133: 0085-fix-buildkey.diff
Patch134: fix-xinput-clash.diff
Patch135: parseFontName.diff
Patch136: qt3-no-date.diff
Patch137: popen-leak-fix.diff
Patch138: qt3-libpng14.diff
Patch139: gcc46.diff
Patch140: revert-iodbc-to-uodbc.diff
BuildRoot: %{_tmppath}/%{name}-%{version}-build
@ -106,6 +83,9 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-build
This package contains extension libraries for Qt 3, such as the
Netscape plug-in modules.
This package contains extension libraries for Qt 3, such as the
Netscape plug-in modules.
%define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial
%prep
@ -122,55 +102,28 @@ fi
%patch18
%patch19
%patch23
#%patch28
%patch31
%patch34
%patch35
%patch37
%patch38
%patch39
%patch40
%patch41
%patch42
%patch43
%patch100
%patch102
%patch53
%patch54
%patch55
%patch101
%patch113
%patch117
%patch119
%patch121
%patch123
ln -sf $PWD/src/inputmethod/qinputcontextfactory.h include/
ln -sf $PWD/src/inputmethod/qinputcontextplugin.h include/
ln -sf $PWD/src/kernel/qinputcontext.h include/
ln -sf $PWD/src/kernel/qinputcontextinterface_p.h include/private/
ln -sf $PWD/src/kernel/qximinputcontext_p.h include/private/
if [ %_lib = "lib" ]; then
sed 's,/lib64/,/lib/,' %PATCH21 | patch -p0
else
%patch21
fi
%patch125
%patch127
%patch128
%patch129
%patch132
%patch133
%patch134
%patch135
%patch136
%patch137
%if %suse_version > 1120
%patch138 -p1
%endif
%patch139
# copy qt kde integration files
cp %SOURCE100 %SOURCE101 src/kernel/
cp %SOURCE101 include/private/
%patch140
cd translations
tar xvjf %SOURCE12
cd ..
@ -184,12 +137,6 @@ Netscape plug-in modules.
This package contains extension libraries for Qt 3, such as the
Netscape plug-in modules.
This package contains extension libraries for Qt 3, such as the
Netscape plug-in modules.
This package contains extension libraries for Qt 3, such as the
Netscape plug-in modules.
%package -n qt3-devel-examples
Summary: Programming Examples for Qt 3
AutoReqProv: on
@ -415,6 +362,8 @@ rm -rf ${RPM_BUILD_ROOT}
%defattr(-,root,root)
#/usr/bin/designer
#/usr/bin/linguist
/usr/lib/qt3/bin/createcw
/usr/lib/qt3/bin/makeqpf
/usr/lib/qt3/bin/qconfig
/usr/lib/qt3/bin/findtr
/usr/lib/qt3/bin/qt20fix

@ -1,5 +1,5 @@
#
# spec file for package qt3-extensions (Version 3.3.8b)
# spec file for package qt3-extensions (Version 3.3.8d)
#
# Copyright (c) 2005 SUSE LINUX Products GmbH, Nuernberg, Germany.
# This file and all modifications and additions to the pristine
@ -16,7 +16,7 @@ BuildRequires: cups-devel krb5-devel mysql-devel postgresql-devel qt3-devel sqli
BuildRequires: fdupes
%endif
License: GPL, QPL
Version: 3.3.8c
Version: 3.3.8d
Release: 1
Autoreqprov: on
Requires: qt3 = %version
@ -325,6 +325,8 @@ rm -rf ${RPM_BUILD_ROOT}
%defattr(-,root,root)
#/usr/bin/designer
#/usr/bin/linguist
/usr/lib/qt3/bin/createcw
/usr/lib/qt3/bin/makeqpf
/usr/lib/qt3/bin/qconfig
/usr/lib/qt3/bin/findtr
/usr/lib/qt3/bin/qt20fix

@ -1,13 +0,0 @@
Index: tools/qvfb/qvfbview.cpp
================================================================================
--- tools/qvfb/qvfbview.cpp
+++ tools/qvfb/qvfbview.cpp
@@ -115,7 +115,7 @@
data = (unsigned char *)shmat( shmId, 0, 0 );
}
- if ( (int)data == -1 )
+ if ( (long)data == -1 )
qFatal( "Cannot attach to shared memory" );
hdr = (QVFbHeader *)data;

@ -1,22 +0,0 @@
Index: qt-x11-free-3.3.8b/src/kernel/qpngio.cpp
===================================================================
--- qt-x11-free-3.3.8b.orig/src/kernel/qpngio.cpp
+++ qt-x11-free-3.3.8b/src/kernel/qpngio.cpp
@@ -162,7 +162,7 @@ void setup_qt( QImage& image, png_struct
image.setColor( i, qRgba(c,c,c,0xff) );
}
if ( png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS) ) {
- const int g = info_ptr->trans_values.gray;
+ const int g = info_ptr->trans_color.gray;
if (g < ncols) {
image.setAlphaBuffer(TRUE);
image.setColor(g, image.color(g) & RGB_MASK);
@@ -190,7 +190,7 @@ void setup_qt( QImage& image, png_struct
info_ptr->palette[i].red,
info_ptr->palette[i].green,
info_ptr->palette[i].blue,
- info_ptr->trans[i]
+ info_ptr->trans_alpha[i]
)
);
i++;

@ -1,6 +1,6 @@
--- qmake/generators/unix/unixmake.cpp
+++ qmake/generators/unix/unixmake.cpp
@@ -836,7 +836,7 @@
@@ -839,7 +839,7 @@
ret += "\n\t";
ret += QString(resource ? "-$(INSTALL_DIR)" : "-$(INSTALL_FILE)") + " \"" +
src_targ + "\" \"" + dst_targ + "\"";

@ -2,7 +2,7 @@ Index: src/kernel/qimage.h
===================================================================
--- src/kernel/qimage.h (revision 594273)
+++ src/kernel/qimage.h (working copy)
@@ -55,7 +55,7 @@ public:
@@ -58,7 +58,7 @@ public:
QCString lang;
bool operator< (const QImageTextKeyLang& other) const

@ -1,3 +1,12 @@
-------------------------------------------------------------------
Sat Nov 19 23:23:57 UTC 2011 - andrea@nucleus.it
- Removed all the patches already applied in the 3.3.8d tree.
- Modified all the remaining to apply with fuzz=0.
- Created a new patch to revert the use of libiodbc to libodbc
otherwise qt3-unixODBC does not build.
- Some cosmetic change to the specfiles.
-------------------------------------------------------------------
Sun Nov 13 22:40:37 UTC 2011 - robxu9@gmail.com

@ -40,8 +40,6 @@ Provides: qt_library_%version
Recommends: kdelibs3-default-style
PreReq: /bin/grep
# COMMON-BEGIN
%define x11_free -x11-free-
%define rversion 3.3.8b
Source0: http://mirror.its.uidaho.edu/pub/trinity/releases/3.5.13/dependencies/qt3-3.3.8.d.tar.gz
Source1: build_script.sh
Source2: qtconfig3.desktop
@ -54,10 +52,8 @@ Source9: linguist.desktop
Source5: linguist.png
Source10: qt3.sh
Source11: qt3.csh
# Translations did not change at 3.3.8c
# Translations did not change at 3.3.8d
Source12: qt3-3.3.8b-translations.tar.bz2
Source100: qtkdeintegration_x11.cpp
Source101: qtkdeintegration_x11_p.h
Source102: baselibs.conf
Source200: attributes
Source201: update_spec.pl
@ -70,43 +66,24 @@ Patch14: lib64-plugin-support.diff
Patch15: pluginmanager-fix.diff
Patch18: no-rpath.dif
Patch19: shut-up.diff
Patch21: fix-GL-loading.diff
Patch23: fix-accessible.diff
Patch28: fix-key-release-event-with-imm.diff
Patch31: limit-image-size.diff
Patch34: 0005-qpixmap_mitshm.patch
Patch35: qt-transparency.patch
Patch37: 0055-qtextedit_zoom.patch
Patch38: 0048-qclipboard_hack_80072.patch
Patch39: fix-qtranslator-crash.diff
Patch40: 0059-qpopup_has_mouse.patch
Patch41: 0060-qpopup_ignore_mousepos.patch
Patch42: add_qexport_visibility.patch
Patch43: 0056-khotkeys_input_84434.patch
Source250: enable-designer-plugins.diff
Patch53: fix-xinerama-dialog-placement.diff
Patch54: kmenu-search-fix.diff
Patch55: qt3-fix-cast.diff
Patch100: qt.patch
Patch101: qt3-arm-gcc4.patch
Patch102: xinerama.patch
Patch113: fix-assistant-path.patch
Patch117: qtimer-debug.diff
Patch119: xinerama-qpopupmenu.diff
Patch121: qt3-warnings.diff
Patch123: use-xrandr-1.2.diff
Patch125: qcstring-format-warnings.diff
Patch127: mng-reading-fix.patch
Patch128: 0079-compositing-types.patch
Patch129: 0080-net-wm-sync-request.patch
Patch132: revert-qt-3.3.8-khmer-fix.diff
Patch133: 0085-fix-buildkey.diff
Patch134: fix-xinput-clash.diff
Patch135: parseFontName.diff
Patch136: qt3-no-date.diff
Patch137: popen-leak-fix.diff
Patch138: qt3-libpng14.diff
Patch139: gcc46.diff
Patch140: revert-iodbc-to-uodbc.diff
BuildRoot: %{_tmppath}/%{name}-%{version}-build
@ -139,55 +116,28 @@ fi
%patch18
%patch19
%patch23
#%patch28
%patch31
%patch34
%patch35
%patch37
%patch38
%patch39
%patch40
%patch41
%patch42
%patch43
%patch100
%patch102
%patch53
%patch54
%patch55
%patch101
%patch113
%patch117
%patch119
%patch121
%patch123
ln -sf $PWD/src/inputmethod/qinputcontextfactory.h include/
ln -sf $PWD/src/inputmethod/qinputcontextplugin.h include/
ln -sf $PWD/src/kernel/qinputcontext.h include/
ln -sf $PWD/src/kernel/qinputcontextinterface_p.h include/private/
ln -sf $PWD/src/kernel/qximinputcontext_p.h include/private/
if [ %_lib = "lib" ]; then
sed 's,/lib64/,/lib/,' %PATCH21 | patch -p0
else
%patch21
fi
%patch125
%patch127
%patch128
%patch129
%patch132
%patch133
%patch134
%patch135
%patch136
%patch137
%if %suse_version > 1120
%patch138 -p1
%endif
%patch139
# copy qt kde integration files
cp %SOURCE100 %SOURCE101 src/kernel/
cp %SOURCE101 include/private/
%patch140
cd translations
tar xvjf %SOURCE12
cd ..
@ -337,7 +287,7 @@ fi
%files
%defattr(-,root,root,755)
# FIXME provide new changelog if kb9vqf will give one
%doc changes-3.3.8b README* LICENSE* MANIFEST FAQ
%doc changes-3.3.8d README* LICENSE* MANIFEST FAQ
%dir /usr/lib/qt3/translations
%dir /usr/lib/qt3
%dir /usr/lib/qt3/bin

@ -1,6 +1,6 @@
--- src/kernel/qeventloop_unix.cpp
+++ src/kernel/qeventloop_unix.cpp
@@ -514,6 +528,17 @@
@@ -517,6 +531,17 @@
return (tm->tv_sec*1000) + (tm->tv_usec/1000);
}
@ -18,7 +18,7 @@
int QEventLoop::activateTimers()
{
if ( !timerList || !timerList->count() ) // no timers
@@ -549,9 +574,27 @@
@@ -552,9 +577,27 @@
t->timeout += t->interval;
if ( t->timeout < currentTime )
t->timeout = currentTime + t->interval;

@ -1,242 +0,0 @@
#define QT_CLEAN_NAMESPACE
#include "qtkdeintegration_x11_p.h"
#include <qcolordialog.h>
#include <qfiledialog.h>
#include <qfontdialog.h>
#include <qlibrary.h>
#include <qregexp.h>
#include <qmessagebox.h>
#include <stdlib.h>
bool QKDEIntegration::inited = false;
bool QKDEIntegration::enable = false;
bool QKDEIntegration::enabled()
{
if( !inited )
initLibrary();
return enable;
}
static QCString findLibrary()
{
if( getenv( "QT_NO_KDE_INTEGRATION" ) == NULL
|| getenv( "QT_NO_KDE_INTEGRATION" )[ 0 ] == '0' )
{
#ifdef USE_LIB64_PATHES
return "/opt/kde3/lib64/kde3/plugins/integration/libqtkde";
#else
return "/opt/kde3/lib/kde3/plugins/integration/libqtkde";
#endif
}
return "";
}
inline static long widgetToWinId( const QWidget* w )
{
return w != NULL ? w->winId() : 0;
}
inline static QFont fontPtrToFontRef( const QFont* f )
{
return f != NULL ? *f : QFont();
}
// ---
static bool (*qtkde_initializeIntegration)( );
static QStringList (*qtkde_getOpenFileNames)( const QString& filter, QString* workingDirectory,
long parent, const QCString& name, const QString& caption, QString* selectedFilter,
bool multiple );
static QString (*qtkde_getSaveFileName)( const QString& initialSelection, const QString& filter,
QString* workingDirectory, long parent, const QCString& name, const QString& caption,
QString* selectedFilter );
static QString (*qtkde_getExistingDirectory)( const QString& initialDirectory, long parent,
const QCString& name, const QString& caption );
static QColor (*qtkde_getColor)( const QColor& color, long parent, const QCString& name );
static QFont (*qtkde_getFont)( bool* ok, const QFont& def, long parent, const QCString& name );
static int (*qtkde_messageBox1)( int type, long parent, const QString& caption, const QString& text,
int button0, int button1, int button2 );
static int (*qtkde_messageBox2)( int type, long parent, const QString& caption, const QString& text,
const QString& button0Text, const QString& button1Text, const QString& button2Text,
int defaultButton, int escapeButton );
void QKDEIntegration::initLibrary()
{
if( !inited )
{
enable = false;
inited = true;
QString libpath = findLibrary();
if( libpath.isEmpty())
return;
QLibrary lib( libpath );
lib.setAutoUnload( false );
qtkde_initializeIntegration = (
bool (*)( )
)
lib.resolve("initializeIntegration");
if( qtkde_initializeIntegration == NULL )
return;
qtkde_getOpenFileNames = (
QStringList (*)( const QString& filter, QString* workingDirectory, long parent,
const QCString& name, const QString& caption, QString* selectedFilter,
bool multiple )
)
lib.resolve("getOpenFileNames");
if( qtkde_getOpenFileNames == NULL )
return;
qtkde_getSaveFileName = (
QString (*)( const QString& initialSelection, const QString& filter, QString* workingDirectory,
long parent, const QCString& name, const QString& caption, QString* selectedFilter )
)
lib.resolve("getSaveFileName");
if( qtkde_getSaveFileName == NULL )
return;
qtkde_getExistingDirectory = (
QString (*)( const QString& initialDirectory, long parent, const QCString& name,
const QString& caption )
)
lib.resolve("getExistingDirectory");
if( qtkde_getExistingDirectory == NULL )
return;
qtkde_getColor = (
QColor (*)( const QColor& color, long parent, const QCString& name )
)
lib.resolve("getColor");
if( qtkde_getColor == NULL )
return;
qtkde_getFont = (
QFont (*)( bool* ok, const QFont& def, long parent, const QCString& name )
)
lib.resolve("getFont");
if( qtkde_getFont == NULL )
return;
qtkde_messageBox1 = (
int (*)( int type, long parent, const QString& caption, const QString& text,
int button0, int button1, int button2 )
)
lib.resolve("messageBox1");
if( qtkde_messageBox1 == NULL )
return;
qtkde_messageBox2 = (
int (*)( int type, long parent, const QString& caption, const QString& text,
const QString& button0Text, const QString& button1Text, const QString& button2Text,
int defaultButton, int escapeButton )
)
lib.resolve("messageBox2");
if( qtkde_messageBox2 == NULL )
return;
enable = qtkde_initializeIntegration();
}
}
bool QKDEIntegration::initializeIntegration( )
{
return qtkde_initializeIntegration(
);
}
QStringList QKDEIntegration::getOpenFileNames( const QString& filter, QString* workingDirectory,
QWidget* parent, const char* name, const QString& caption, QString* selectedFilter,
bool multiple )
{
return qtkde_getOpenFileNames(
filter, workingDirectory, widgetToWinId( parent ), name, caption, selectedFilter, multiple );
}
QString QKDEIntegration::getSaveFileName( const QString& initialSelection, const QString& filter,
QString* workingDirectory, QWidget* parent, const char* name, const QString& caption,
QString* selectedFilter )
{
return qtkde_getSaveFileName(
initialSelection, filter, workingDirectory, widgetToWinId( parent ), name, caption, selectedFilter );
}
QString QKDEIntegration::getExistingDirectory( const QString& initialDirectory, QWidget* parent,
const char* name, const QString& caption )
{
return qtkde_getExistingDirectory(
initialDirectory, widgetToWinId( parent ), name, caption );
}
QColor QKDEIntegration::getColor( const QColor& color, QWidget* parent, const char* name )
{
return qtkde_getColor(
color, widgetToWinId( parent ), name );
}
QFont QKDEIntegration::getFont( bool* ok, const QFont* def, QWidget* parent, const char* name )
{
return qtkde_getFont(
ok, fontPtrToFontRef( def ), widgetToWinId( parent ), name );
}
int QKDEIntegration::messageBox1( int type, QWidget* parent, const QString& caption,
const QString& text, int button0, int button1, int button2 )
{
return qtkde_messageBox1(
type, widgetToWinId( parent ), caption, text, button0, button1, button2 );
}
int QKDEIntegration::messageBox2( int type, QWidget* parent, const QString& caption,
const QString& text, const QString& button0Text, const QString& button1Text, const QString& button2Text,
int defaultButton, int escapeButton )
{
return qtkde_messageBox2(
type, widgetToWinId( parent ), caption, text, button0Text, button1Text, button2Text, defaultButton, escapeButton );
}
// ---
int QKDEIntegration::information( QWidget* parent, const QString& caption,
const QString& text, int button0, int button1, int button2 )
{
return qtkde_messageBox1(
QMessageBox::Information, widgetToWinId( parent ), caption, text, button0, button1, button2 );
}
int QKDEIntegration::question( QWidget* parent, const QString& caption,
const QString& text, int button0, int button1, int button2 )
{
return qtkde_messageBox1(
QMessageBox::Question, widgetToWinId( parent ), caption, text, button0, button1, button2 );
}
int QKDEIntegration::warning( QWidget* parent, const QString& caption,
const QString& text, int button0, int button1, int button2 )
{
return qtkde_messageBox1(
QMessageBox::Warning, widgetToWinId( parent ), caption, text, button0, button1, button2 );
}
int QKDEIntegration::critical( QWidget* parent, const QString& caption,
const QString& text, int button0, int button1, int button2 )
{
return qtkde_messageBox1(
QMessageBox::Critical, widgetToWinId( parent ), caption, text, button0, button1, button2 );
}
int QKDEIntegration::information( QWidget* parent, const QString& caption,
const QString& text, const QString& button0Text, const QString& button1Text, const QString& button2Text,
int defaultButton, int escapeButton )
{
return qtkde_messageBox2(
QMessageBox::Information, widgetToWinId( parent ), caption, text, button0Text, button1Text, button2Text, defaultButton, escapeButton );
}
int QKDEIntegration::question( QWidget* parent, const QString& caption,
const QString& text, const QString& button0Text, const QString& button1Text, const QString& button2Text,
int defaultButton, int escapeButton )
{
return qtkde_messageBox2(
QMessageBox::Question, widgetToWinId( parent ), caption, text, button0Text, button1Text, button2Text, defaultButton, escapeButton );
}
int QKDEIntegration::warning( QWidget* parent, const QString& caption,
const QString& text, const QString& button0Text, const QString& button1Text, const QString& button2Text,
int defaultButton, int escapeButton )
{
return qtkde_messageBox2(
QMessageBox::Warning, widgetToWinId( parent ), caption, text, button0Text, button1Text, button2Text, defaultButton, escapeButton );
}
int QKDEIntegration::critical( QWidget* parent, const QString& caption,
const QString& text, const QString& button0Text, const QString& button1Text, const QString& button2Text,
int defaultButton, int escapeButton )
{
return qtkde_messageBox2(
QMessageBox::Critical, widgetToWinId( parent ), caption, text, button0Text, button1Text, button2Text, defaultButton, escapeButton );
}

@ -1,59 +0,0 @@
#ifndef QKDEINTEGRATION_H
#define QKDEINTEGRATION_H
#include <qstringlist.h>
class QLibrary;
class QWidget;
class QColor;
class QFont;
class QKDEIntegration
{
public:
static bool enabled();
// ---
static bool initializeIntegration( );
static QStringList getOpenFileNames( const QString& filter, QString* workingDirectory,
QWidget* parent, const char* name, const QString& caption, QString* selectedFilter,
bool multiple );
static QString getSaveFileName( const QString& initialSelection, const QString& filter,
QString* workingDirectory, QWidget* parent, const char* name, const QString& caption,
QString* selectedFilter );
static QString getExistingDirectory( const QString& initialDirectory, QWidget* parent,
const char* name, const QString& caption );
static QColor getColor( const QColor& color, QWidget* parent, const char* name );
static QFont getFont( bool* ok, const QFont* def, QWidget* parent, const char* name );
static int messageBox1( int type, QWidget* parent, const QString& caption,
const QString& text, int button0, int button1, int button2 );
static int information( QWidget* parent, const QString& caption, const QString& text,
int button0, int button1, int button2 );
static int question( QWidget* parent, const QString& caption, const QString& text,
int button0, int button1, int button2 );
static int warning( QWidget* parent, const QString& caption, const QString& text,
int button0, int button1, int button2 );
static int critical( QWidget* parent, const QString& caption, const QString& text,
int button0, int button1, int button2 );
static int messageBox2( int type, QWidget* parent, const QString& caption,
const QString& text, const QString& button0Text, const QString& button1Text,
const QString& button2Text, int defaultButton, int escapeButton );
static int information( QWidget* parent, const QString& caption, const QString& text,
const QString& button0Text, const QString& button1Text, const QString& button2Text,
int defaultButton, int escapeButton );
static int question( QWidget* parent, const QString& caption, const QString& text,
const QString& button0Text, const QString& button1Text, const QString& button2Text,
int defaultButton, int escapeButton );
static int warning( QWidget* parent, const QString& caption, const QString& text,
const QString& button0Text, const QString& button1Text, const QString& button2Text,
int defaultButton, int escapeButton );
static int critical( QWidget* parent, const QString& caption, const QString& text,
const QString& button0Text, const QString& button1Text, const QString& button2Text,
int defaultButton, int escapeButton );
// ---
private:
static void initLibrary();
static bool inited;
static bool enable;
};
#endif

@ -1,6 +1,6 @@
--- src/tools/qsettings.cpp
+++ src/tools/qsettings.cpp
@@ -36,6 +36,7 @@
@@ -39,6 +39,7 @@
**********************************************************************/
#include "qplatformdefs.h"
@ -8,7 +8,7 @@
// POSIX Large File Support redefines open -> open64
static inline int qt_open( const char *pathname, int flags, mode_t mode )
@@ -465,8 +466,18 @@
@@ -468,8 +469,18 @@
Q_UNUSED( format );
#endif
@ -29,7 +29,7 @@
#ifdef Q_WS_WIN
#ifdef Q_OS_TEMP
TCHAR path[MAX_PATH];
@@ -514,6 +525,15 @@
@@ -517,6 +528,15 @@
if ( !!defPath )
searchPaths.append(defPath);

@ -0,0 +1,22 @@
--- src/sql/qt_sql.pri 2011-10-30 19:55:58.000000000 +0100
+++ src/sql/qt_sql.pri 2008-01-15 20:09:13.000000000 +0100
@@ -116,7 +116,7 @@
unix {
!contains( LIBS, .*odbc.* ) {
- LIBS *= -liodbc
+ LIBS *= -lodbc
}
}
--- plugins/src/sqldrivers/odbc/odbc.pro 2011-10-30 19:55:57.000000000 +0100
+++ plugins/src/sqldrivers/odbc/odbc.pro 2008-01-15 20:09:17.000000000 +0100
@@ -17,7 +17,7 @@
unix {
OBJECTS_DIR = .obj
!contains( LIBS, .*odbc.* ) {
- LIBS *= -liodbc
+ LIBS *= -lodbc
}
}

@ -1,6 +1,6 @@
--- src/kernel/qpixmap_x11.cpp
+++ src/kernel/qpixmap_x11.cpp
@@ -288,8 +288,9 @@
@@ -394,8 +394,9 @@
{
#if defined(QT_CHECK_STATE)
if ( qApp->type() == QApplication::Tty ) {
@ -14,7 +14,7 @@
--- src/tools/qcomlibrary.cpp
+++ src/tools/qcomlibrary.cpp
@@ -102,25 +102,11 @@
@@ -105,25 +105,11 @@
(const char*) QFile::encodeName(library) );
} else if ( ( version > QT_VERSION ) ||
( ( QT_VERSION & 0xff0000 ) > ( version & 0xff0000 ) ) ) {

@ -1,106 +0,0 @@
qt-bugs@ issue :
bugs.kde.org number :
applied: no
author: Dirk Mueller <mueller@kde.org>
support xrandr 1.2 configurations. same patch like for trunk qt-copy,
please see there for details.
--- src/kernel/qdesktopwidget_x11.cpp
+++ src/kernel/qdesktopwidget_x11.cpp
@@ -107,7 +107,7 @@ QDesktopWidgetPrivate::~QDesktopWidgetPr
screens[i] = 0;
}
- delete [] screens;
+ free(screens);
}
if ( rects ) delete [] rects;
@@ -119,30 +119,33 @@ void QDesktopWidgetPrivate::init()
// 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 @@ void QDesktopWidgetPrivate::init()
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 @@ QWidget *QDesktopWidget::screen( int scr
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;
}

@ -1,104 +0,0 @@
--- src/widgets/qpopupmenu.cpp.sav
+++ src/widgets/qpopupmenu.cpp
@@ -457,6 +457,15 @@
menuContentsChanged();
}
+QRect QPopupMenu::screenRect( const QPoint& pos )
+{
+ int screen_num = QApplication::desktop()->screenNumber( pos );
+#ifdef Q_WS_MAC
+ return QApplication::desktop()->availableGeometry( screen_num );
+#else
+ return QApplication::desktop()->screenGeometry( screen_num );
+#endif
+}
/*!
Displays the popup menu so that the item number \a indexAtPoint
will be at the specified \e global position \a pos. To translate a
@@ -501,6 +510,15 @@
// point.
#endif
+ QRect screen = screenRect( geometry().center());
+ QRect screen2 = screenRect( QApplication::reverseLayout()
+ ? pos+QPoint(width(),0) : pos );
+ // if the widget is not in the screen given by the position, move it
+ // there, so that updateSize() uses the right size of the screen
+ if( screen != screen2 ) {
+ screen = screen2;
+ move( screen.x(), screen.y());
+ }
if(d->scroll.scrollable) {
d->scroll.scrollable = QPopupMenuPrivate::Scroll::ScrollNone;
d->scroll.topScrollableIndex = d->scroll.scrollableSize = 0;
@@ -520,18 +538,6 @@
updateSize(TRUE);
}
- int screen_num;
- if (QApplication::desktop()->isVirtualDesktop())
- screen_num =
- QApplication::desktop()->screenNumber( QApplication::reverseLayout() ?
- pos+QPoint(width(),0) : pos );
- else
- screen_num = QApplication::desktop()->screenNumber( this );
-#ifdef Q_WS_MAC
- QRect screen = QApplication::desktop()->availableGeometry( screen_num );
-#else
- QRect screen = QApplication::desktop()->screenGeometry( screen_num );
-#endif
int sw = screen.width(); // screen width
int sh = screen.height(); // screen height
int sx = screen.x(); // screen pos
@@ -1059,7 +1065,7 @@
mi->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).width() + 4 );
}
- int dh = QApplication::desktop()->height();
+ int dh = screenRect( geometry().center()).height();
ncols = 1;
for ( QMenuItemListIt it2( *mitems ); it2.current(); ++it2 ) {
@@ -2313,9 +2319,9 @@
bool right = FALSE;
if ( ( parentMenu && parentMenu->isPopupMenu &&
((QPopupMenu*)parentMenu)->geometry().x() < geometry().x() ) ||
- p.x() < 0 )
+ p.x() < screenRect( p ).left())
right = TRUE;
- if ( right && (ps.width() > QApplication::desktop()->width() - mapToGlobal( r.topRight() ).x() ) )
+ if ( right && (ps.width() > screenRect( p ).right() - mapToGlobal( r.topRight() ).x() ) )
right = FALSE;
if ( right )
p.setX( mapToGlobal( r.topRight() ).x() );
@@ -2326,7 +2332,7 @@
bool left = FALSE;
if ( ( parentMenu && parentMenu->isPopupMenu &&
((QPopupMenu*)parentMenu)->geometry().x() > geometry().x() ) ||
- p.x() + ps.width() > QApplication::desktop()->width() )
+ p.x() + ps.width() > screenRect( p ).right() )
left = TRUE;
if ( left && (ps.width() > mapToGlobal( r.topLeft() ).x() ) )
left = FALSE;
@@ -2334,8 +2340,8 @@
p.setX( mapToGlobal( r.topLeft() ).x() - ps.width() );
}
QRect pr = popup->itemGeometry(popup->count() - 1);
- if (p.y() + ps.height() > QApplication::desktop()->height() &&
- p.y() - ps.height() + (QCOORD) pr.height() >= 0)
+ if (p.y() + ps.height() > screenRect( p ).bottom() &&
+ p.y() - ps.height() + (QCOORD) pr.height() >= screenRect( p ).top())
p.setY( p.y() - ps.height() + (QCOORD) pr.height());
if ( style().styleHint(QStyle::SH_PopupMenu_SloppySubMenus, this )) {
--- src/widgets/qpopupmenu.h.sav
+++ src/widgets/qpopupmenu.h
@@ -152,6 +152,7 @@
QSize updateSize(bool force_recalc=FALSE, bool do_resize=TRUE);
void updateRow( int row );
+ QRect screenRect(const QPoint& pos);
#ifndef QT_NO_ACCEL
void updateAccel( QWidget * );
void enableAccel( bool );

@ -1,49 +0,0 @@
--- src/dialogs/qdialog.cpp
+++ src/dialogs/qdialog.cpp
@@ -670,6 +670,11 @@
#if defined(Q_WS_X11)
extern "C" { int XSetTransientForHint( Display *, unsigned long, unsigned long ); }
+#include <private/qt_x11_p.h>
+#undef FocusIn
+// defined in qapplication_x11.cpp
+extern Atom qt_net_wm_full_placement;
+extern bool qt_net_supports(Atom atom);
#endif // Q_WS_X11
/*!
@@ -691,10 +696,12 @@
if ( !did_resize )
adjustSize();
- if ( has_relpos && !did_move ) {
- adjustPositionInternal( parentWidget(), TRUE );
- } else if ( !did_move ) {
- adjustPositionInternal( parentWidget() );
+ if( !qt_net_supports( qt_net_wm_full_placement )) {
+ if ( has_relpos && !did_move ) {
+ adjustPositionInternal( parentWidget(), TRUE );
+ } else if ( !did_move ) {
+ adjustPositionInternal( parentWidget() );
+ }
}
if (windowState() != state)
--- src/kernel/qapplication_x11.cpp
+++ src/kernel/qapplication_x11.cpp
@@ -273,6 +273,7 @@
Atom qt_net_wm_state_stays_on_top = 0; // KDE extension
Atom qt_net_wm_pid = 0;
Atom qt_net_wm_user_time = 0;
+Atom qt_net_wm_full_placement = 0; // KDE extension
// Enlightenment support
Atom qt_enlightenment_desktop = 0;
@@ -1989,6 +1990,7 @@
&qt_net_wm_state_stays_on_top );
qt_x11_intern_atom( "_NET_WM_PID", &qt_net_wm_pid );
qt_x11_intern_atom( "_NET_WM_USER_TIME", &qt_net_wm_user_time );
+ qt_x11_intern_atom( "_NET_WM_FULL_PLACEMENT", &qt_net_wm_full_placement );
qt_x11_intern_atom( "ENLIGHTENMENT_DESKTOP", &qt_enlightenment_desktop );
qt_x11_intern_atom( "_NET_WM_NAME", &qt_net_wm_name );
qt_x11_intern_atom( "_NET_WM_ICON_NAME", &qt_net_wm_icon_name );

@ -1,3 +1,8 @@
-------------------------------------------------------------------
Wed Nov 16 23:34:53 UTC 2011 - robxu9@gmail.com
- directories updated
-------------------------------------------------------------------
Tue Aug 9 21:06:07 UTC 2011 - rxu@lincomlinux.org

Loading…
Cancel
Save