diff -urN qt-2.3.10-orig/include/qcstring.h qt-2.3.10-new/include/qcstring.h --- qt-2.3.10-orig/include/qcstring.h 2005-02-27 18:07:41.000000000 -0600 +++ qt-2.3.10-new/include/qcstring.h 2005-04-14 13:03:02.584481232 -0500 @@ -119,7 +119,7 @@ // We want to keep source compatibility for 2.x // ### TODO for 4.0: completely remove these and the cstr* functions -#if !defined(QT_GENUINE_STR) +#if 0 #undef strlen #define strlen qstrlen diff -urN qt-2.3.10-orig/include/qiconview.h qt-2.3.10-new/include/qiconview.h --- qt-2.3.10-orig/include/qiconview.h 2005-02-27 18:07:42.000000000 -0600 +++ qt-2.3.10-new/include/qiconview.h 2005-04-14 13:03:02.576482448 -0500 @@ -444,6 +444,7 @@ virtual void contentsDropEvent( QDropEvent *e ); #endif + void bufferedPaintEvent( QPaintEvent* ); virtual void resizeEvent( QResizeEvent* e ); virtual void keyPressEvent( QKeyEvent *e ); virtual void focusInEvent( QFocusEvent *e ); diff -urN qt-2.3.10-orig/include/qwsdecoration_qws.h qt-2.3.10-new/include/qwsdecoration_qws.h --- qt-2.3.10-orig/include/qwsdecoration_qws.h 2005-02-27 18:07:42.000000000 -0600 +++ qt-2.3.10-new/include/qwsdecoration_qws.h 2005-04-14 13:03:02.583481384 -0500 @@ -50,7 +50,7 @@ enum Region { None=0, All=1, Title=2, Top=3, Bottom=4, Left=5, Right=6, TopLeft=7, TopRight=8, BottomLeft=9, BottomRight=10, Close=11, Minimize=12, Maximize=13, Normalize=14, - Menu=15, LastRegion=Menu }; + Menu=15, LastRegion=Menu, UserDefined = 100 }; virtual QRegion region(const QWidget *, const QRect &rect, Region r=All) = 0; virtual void close( QWidget * ); diff -urN qt-2.3.10-orig/src/iconview/qiconview.cpp qt-2.3.10-new/src/iconview/qiconview.cpp --- qt-2.3.10-orig/src/iconview/qiconview.cpp 2005-02-27 18:07:42.000000000 -0600 +++ qt-2.3.10-new/src/iconview/qiconview.cpp 2005-04-14 13:03:02.575482600 -0500 @@ -225,6 +225,7 @@ QIconView::SelectionMode selectionMode; QIconViewItem *currentItem, *tmpCurrentItem, *highlightedItem, *startDragItem, *pressedItem, *selectAnchor; QRect *rubber; + QPixmap *backBuffer; QTimer *scrollTimer, *adjustTimer, *updateTimer, *inputTimer, *fullRedrawTimer; int rastX, rastY, spacing; @@ -2268,6 +2269,7 @@ d->currentItem = 0; d->highlightedItem = 0; d->rubber = 0; + d->backBuffer = 0; d->scrollTimer = 0; d->startDragItem = 0; d->tmpCurrentItem = 0; @@ -2416,6 +2418,8 @@ delete item; item = tmp; } + delete d->backBuffer; + d->backBuffer = 0; delete d->fm; d->fm = 0; #ifndef QT_NO_TOOLTIP @@ -2882,6 +2886,48 @@ } /*! + This function grabs all paintevents that otherwise would have been + processed by the QScrollView::viewportPaintEvent(). Here we use a + doublebuffer to reduce 'on-paint' flickering on QIconView + (and of course its childs). + + \sa QScrollView::viewportPaintEvent(), QIconView::drawContents() +*/ + +void QIconView::bufferedPaintEvent( QPaintEvent* pe ) +{ + QWidget* vp = viewport(); + QRect r = pe->rect() & vp->rect(); + int ex = r.x() + contentsX(); + int ey = r.y() + contentsY(); + int ew = r.width(); + int eh = r.height(); + + if ( !d->backBuffer ) + d->backBuffer = new QPixmap(vp->size()); + if ( d->backBuffer->size() != vp->size() ) { + //Resize function (with hysteesis). Uses a good compromise between memory + //consumption and speed (number) of resizes. + float newWidth = (float)vp->width(); + float newHeight = (float)vp->height(); + if ( newWidth > d->backBuffer->width() || newHeight > d->backBuffer->height() ) + { + newWidth *= 1.1892; + newHeight *= 1.1892; + d->backBuffer->resize( (int)newWidth, (int)newHeight ); + } else if ( 1.5*newWidth < d->backBuffer->width() || 1.5*newHeight < d->backBuffer->height() ) + d->backBuffer->resize( (int)newWidth, (int)newHeight ); + } + + QPainter p; + p.begin(d->backBuffer, vp); + drawContentsOffset(&p, contentsX(), contentsY(), ex, ey, ew, eh); + p.end(); + bitBlt(vp, r.x(), r.y(), d->backBuffer, r.x(), r.y(), ew, eh); +} + +/*! + \reimp */ @@ -4939,7 +4985,7 @@ if ( !d->rubber ) drawDragShapes( d->oldDragPos ); } - viewportPaintEvent( (QPaintEvent*)e ); + bufferedPaintEvent ((QPaintEvent*)e ); if ( d->dragging ) { if ( !d->rubber ) drawDragShapes( d->oldDragPos ); @@ -5377,11 +5423,19 @@ return; if ( item->d->container1 && d->firstContainer ) { - item->d->container1->items.removeRef( item ); + //Special-case checking of the last item, since this may be + //called a few times for the same item. + if (item->d->container1->items.last() == item) + item->d->container1->items.removeLast(); + else + item->d->container1->items.removeRef( item ); } item->d->container1 = 0; if ( item->d->container2 && d->firstContainer ) { - item->d->container2->items.removeRef( item ); + if (item->d->container2->items.last() == item) + item->d->container2->items.removeLast(); + else + item->d->container2->items.removeRef( item ); } item->d->container2 = 0; diff -urN qt-2.3.10-orig/src/iconview/qiconview.h qt-2.3.10-new/src/iconview/qiconview.h --- qt-2.3.10-orig/src/iconview/qiconview.h 2005-02-27 18:07:42.000000000 -0600 +++ qt-2.3.10-new/src/iconview/qiconview.h 2005-04-14 13:03:02.576482448 -0500 @@ -444,6 +444,7 @@ virtual void contentsDropEvent( QDropEvent *e ); #endif + void bufferedPaintEvent( QPaintEvent* ); virtual void resizeEvent( QResizeEvent* e ); virtual void keyPressEvent( QKeyEvent *e ); virtual void focusInEvent( QFocusEvent *e ); diff -urN qt-2.3.10-orig/src/kernel/qgfxraster_qws.cpp qt-2.3.10-new/src/kernel/qgfxraster_qws.cpp --- qt-2.3.10-orig/src/kernel/qgfxraster_qws.cpp 2005-02-27 18:07:42.000000000 -0600 +++ qt-2.3.10-new/src/kernel/qgfxraster_qws.cpp 2005-04-14 13:03:02.580481840 -0500 @@ -4037,13 +4037,14 @@ for( loopc2=0;loopc2(temppos); + cp=reinterpret_cast(&temp2); + *(alphaptr++)=qt_conv16ToRgb(*cp); + cp++; + *(alphaptr++)=qt_conv16ToRgb(*cp); temppos += 2; } diff -urN qt-2.3.10-orig/src/kernel/qwindowsystem_qws.cpp qt-2.3.10-new/src/kernel/qwindowsystem_qws.cpp --- qt-2.3.10-orig/src/kernel/qwindowsystem_qws.cpp 2005-02-27 18:07:42.000000000 -0600 +++ qt-2.3.10-new/src/kernel/qwindowsystem_qws.cpp 2005-04-14 13:03:02.582481536 -0500 @@ -918,6 +918,18 @@ { } +static void catchSegvSignal( int ) +{ +#ifndef QT_NO_QWS_KEYBOARD + if ( qwsServer ) + qwsServer->closeKeyboard(); +#endif + QWSServer::closedown(); + fprintf(stderr, "Segmentation fault.\n"); + exit(1); +} + + /*! \class QWSServer qwindowsystem_qws.h \brief Server-specific functionality in Qt/Embedded @@ -1043,6 +1055,7 @@ } signal(SIGPIPE, ignoreSignal); //we get it when we read + signal(SIGSEGV, catchSegvSignal); //recover the keyboard on crash #endif focusw = 0; mouseGrabber = 0; diff -urN qt-2.3.10-orig/src/kernel/qwsdecoration_qws.h qt-2.3.10-new/src/kernel/qwsdecoration_qws.h --- qt-2.3.10-orig/src/kernel/qwsdecoration_qws.h 2005-02-27 18:07:42.000000000 -0600 +++ qt-2.3.10-new/src/kernel/qwsdecoration_qws.h 2005-04-14 13:03:02.583481384 -0500 @@ -50,7 +50,7 @@ enum Region { None=0, All=1, Title=2, Top=3, Bottom=4, Left=5, Right=6, TopLeft=7, TopRight=8, BottomLeft=9, BottomRight=10, Close=11, Minimize=12, Maximize=13, Normalize=14, - Menu=15, LastRegion=Menu }; + Menu=15, LastRegion=Menu, UserDefined = 100 }; virtual QRegion region(const QWidget *, const QRect &rect, Region r=All) = 0; virtual void close( QWidget * ); diff -urN qt-2.3.10-orig/src/tools/qcstring.h qt-2.3.10-new/src/tools/qcstring.h --- qt-2.3.10-orig/src/tools/qcstring.h 2005-02-27 18:07:41.000000000 -0600 +++ qt-2.3.10-new/src/tools/qcstring.h 2005-04-14 13:03:02.584481232 -0500 @@ -119,7 +119,7 @@ // We want to keep source compatibility for 2.x // ### TODO for 4.0: completely remove these and the cstr* functions -#if !defined(QT_GENUINE_STR) +#if 0 #undef strlen #define strlen qstrlen diff -urN qt-2.3.10-orig/src/tools/qstring.cpp qt-2.3.10-new/src/tools/qstring.cpp --- qt-2.3.10-orig/src/tools/qstring.cpp 2005-02-27 18:07:42.000000000 -0600 +++ qt-2.3.10-new/src/tools/qstring.cpp 2005-04-14 13:03:02.593479864 -0500 @@ -14469,7 +14469,11 @@ return qt_winQString2MB( *this ); #endif #ifdef _WS_QWS_ - return utf8(); // ##### if there is ANY 8 bit format supported? + QTextCodec* codec = QTextCodec::codecForLocale(); + return codec + ? codec->fromUnicode(*this) + : utf8(); + //return latin1(); // ##### if there is ANY 8 bit format supported? #endif #endif } @@ -14515,7 +14519,12 @@ return qt_winMB2QString( local8Bit ); #endif #ifdef _WS_QWS_ - return fromUtf8(local8Bit,len); + QTextCodec* codec = QTextCodec::codecForLocale(); + if( len < 0) len = qstrlen(local8Bit); + return codec + ? codec->toUnicode(local8Bit, len) + : QString::fromUtf8(local8Bit,len); +// return fromLatin1(local8Bit,len); #endif #endif // QT_NO_TEXTCODEC } diff -urN qt-2.3.10-orig/src/widgets/qcommonstyle.cpp qt-2.3.10-new/src/widgets/qcommonstyle.cpp --- qt-2.3.10-orig/src/widgets/qcommonstyle.cpp 2005-02-27 18:07:41.000000000 -0600 +++ qt-2.3.10-new/src/widgets/qcommonstyle.cpp 2005-04-14 13:03:02.595479560 -0500 @@ -572,7 +572,7 @@ bool enabled, bool active ) { #ifndef QT_NO_MENUBAR -#ifndef QT_NO_STYLE_SGI +#if 1 // #ifndef QT_NO_STYLE_SGI if (draw_menu_bar_impl != 0) { QDrawMenuBarItemImpl impl = draw_menu_bar_impl; (this->*impl)(p, x, y, w, h, mi, g, enabled, active); diff -urN qt-2.3.10-orig/src/widgets/qlistview.cpp qt-2.3.10-new/src/widgets/qlistview.cpp --- qt-2.3.10-orig/src/widgets/qlistview.cpp 2005-02-27 18:07:41.000000000 -0600 +++ qt-2.3.10-new/src/widgets/qlistview.cpp 2005-04-14 13:03:02.599478952 -0500 @@ -5051,9 +5051,9 @@ l = l->childItem ? l->childItem : l->siblingItem; if ( l && l->height() ) - s.setHeight( s.height() + 10 * l->height() ); - else - s.setHeight( s.height() + 140 ); + s.setHeight( s.height() + 4 /*10*/ * l->height() ); + else // ^v much too big for handhelds + s.setHeight( s.height() + 30 /*140*/ ); if ( s.width() > s.height() * 3 ) s.setHeight( s.width() / 3 ); diff -urN qt-2.3.10-orig/src/widgets/qpopupmenu.cpp qt-2.3.10-new/src/widgets/qpopupmenu.cpp --- qt-2.3.10-orig/src/widgets/qpopupmenu.cpp 2005-02-27 18:07:41.000000000 -0600 +++ qt-2.3.10-new/src/widgets/qpopupmenu.cpp 2005-04-14 13:02:10.440408336 -0500 @@ -820,7 +820,7 @@ mi->custom()->setFont( font() ); if ( mi->iconSet() != 0) maxPMWidth = QMAX( maxPMWidth, - mi->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).width() + 4 ); + mi->iconSet()->pixmap().width() + 4 ); } int dh = QApplication::desktop()->height(); diff -urN qt-2.3.10-orig/src/widgets/qtabbar.cpp qt-2.3.10-new/src/widgets/qtabbar.cpp --- qt-2.3.10-orig/src/widgets/qtabbar.cpp 2005-02-27 18:07:41.000000000 -0600 +++ qt-2.3.10-new/src/widgets/qtabbar.cpp 2005-04-14 13:03:02.601478648 -0500 @@ -260,7 +260,6 @@ lstatic->insert( index, newTab ); layoutTabs(); - updateArrowButtons(); makeVisible( tab( currentTab() ) ); #ifndef QT_NO_ACCEL @@ -282,7 +281,6 @@ l->remove( t ); lstatic->remove( t ); layoutTabs(); - updateArrowButtons(); makeVisible( tab( currentTab() ) ); update(); } @@ -414,8 +412,8 @@ int iw = 0; int ih = 0; if ( t->iconset != 0 ) { - iw = t->iconset->pixmap( QIconSet::Small, QIconSet::Normal ).width(); - ih = t->iconset->pixmap( QIconSet::Small, QIconSet::Normal ).height(); + iw = t->iconset->pixmap().width(); + ih = t->iconset->pixmap().height(); if (!t->label.isEmpty()) iw +=2; } @@ -442,7 +440,11 @@ ? QIconSet::Normal : QIconSet::Disabled; if ( mode == QIconSet::Normal && has_focus ) mode = QIconSet::Active; - QPixmap pixmap = t->iconset->pixmap( QIconSet::Small, mode ); + QPixmap pixmap; + if ( mode == QIconSet::Disabled ) + pixmap = t->iconset->pixmap( QIconSet::Automatic, QIconSet::Disabled ); + else + pixmap = t->iconset->pixmap(); int pixw = pixmap.width(); int pixh = pixmap.height(); r.setLeft( r.left() + pixw + 2 ); @@ -871,8 +873,8 @@ int iw = 0; int ih = 0; if ( t->iconset != 0 ) { - iw = t->iconset->pixmap( QIconSet::Small, QIconSet::Normal ).width(); - ih = t->iconset->pixmap( QIconSet::Small, QIconSet::Normal ).height(); + iw = t->iconset->pixmap().width(); + ih = t->iconset->pixmap().height(); if (!t->label.isNull()) iw +=2; } @@ -887,6 +889,7 @@ } for ( t = lstatic->first(); t; t = lstatic->next() ) t->r.setHeight( r.height() ); + updateArrowButtons(); } /*! @@ -915,8 +918,8 @@ int iw = 0; int ih = 0; if ( t->iconset != 0 ) { - iw = t->iconset->pixmap( QIconSet::Small, QIconSet::Normal ).width(); - ih = t->iconset->pixmap( QIconSet::Small, QIconSet::Normal ).height(); + iw = t->iconset->pixmap().width(); + ih = t->iconset->pixmap().height(); if (!t->label.isEmpty()) iw +=2; } @@ -947,8 +950,8 @@ int iw = 0; int ih = 0; if ( t->iconset != 0 ) { - iw = t->iconset->pixmap( QIconSet::Small, QIconSet::Normal ).width(); - ih = t->iconset->pixmap( QIconSet::Small, QIconSet::Normal ).height(); + iw = t->iconset->pixmap().width(); + ih = t->iconset->pixmap().height(); if (!t->label.isEmpty()) iw +=2; } @@ -977,7 +980,6 @@ d->leftB->setGeometry( width() - 2*arrowWidth, 0, arrowWidth, height() ); #endif layoutTabs(); - updateArrowButtons(); makeVisible( tab( currentTab() )); } diff -urN qt-2.3.10-orig/src/widgets/qtoolbutton.cpp qt-2.3.10-new/src/widgets/qtoolbutton.cpp --- qt-2.3.10-orig/src/widgets/qtoolbutton.cpp 2005-02-27 18:07:41.000000000 -0600 +++ qt-2.3.10-new/src/widgets/qtoolbutton.cpp 2005-04-14 13:03:02.600478800 -0500 @@ -332,12 +332,12 @@ QPixmap pm = iconSet(TRUE).pixmap(QIconSet::Large, QIconSet::Normal); w = pm.width(); h = pm.height(); - if ( w < 32 ) - w = 32; - if ( h < 32 ) - h = 32; + if ( w < 24 ) + w = 24; + if ( h < 24 ) + h = 24; } else { - w = h = 16; + w = h = 14; QPixmap pm = iconSet(TRUE).pixmap(QIconSet::Small, QIconSet::Normal); w = pm.width(); h = pm.height(); diff -urN qt-2.3.10-orig/src/widgets/qwindowsstyle.cpp qt-2.3.10-new/src/widgets/qwindowsstyle.cpp --- qt-2.3.10-orig/src/widgets/qwindowsstyle.cpp 2005-02-27 18:07:41.000000000 -0600 +++ qt-2.3.10-new/src/widgets/qwindowsstyle.cpp 2005-04-14 13:02:10.442408032 -0500 @@ -1182,7 +1182,7 @@ h = fm.height() + 2*motifItemVMargin + 2*motifItemFrame; if ( !mi->isSeparator() && mi->iconSet() != 0 ) { - h = QMAX( h, mi->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).height() + 2*motifItemFrame ); + h = QMAX( h, mi->iconSet()->pixmap().height() + 2*motifItemFrame ); } if ( mi->custom() ) h = QMAX( h, mi->custom()->sizeHint().height() + 2*motifItemVMargin + 2*motifItemFrame ); @@ -1246,7 +1246,11 @@ QIconSet::Mode mode = dis ? QIconSet::Disabled : QIconSet::Normal; if (act && !dis ) mode = QIconSet::Active; - QPixmap pixmap = mi->iconSet()->pixmap( QIconSet::Small, mode ); + QPixmap pixmap; + if ( mode == QIconSet::Disabled ) + pixmap = mi->iconSet()->pixmap( QIconSet::Automatic, QIconSet::Disabled ); + else + pixmap = mi->iconSet()->pixmap(); int pixw = pixmap.width(); int pixh = pixmap.height(); if ( act && !dis ) {