diff options
Diffstat (limited to 'src/gui')
251 files changed, 798 insertions, 658 deletions
diff --git a/src/gui/accessible/qaccessiblewidget.cpp b/src/gui/accessible/qaccessiblewidget.cpp index 447edc1..2d09c9c 100644 --- a/src/gui/accessible/qaccessiblewidget.cpp +++ b/src/gui/accessible/qaccessiblewidget.cpp @@ -269,7 +269,7 @@ QT_END_INCLUDE_NAMESPACE class QACConnectionObject : public QObject { - Q_DECLARE_PRIVATE(QObject) + Q_DECLARE_SCOPED_PRIVATE(QObject) public: inline bool isSender(const QObject *receiver, const char *signal) const { return d_func()->isSender(receiver, signal); } diff --git a/src/gui/dialogs/qabstractpagesetupdialog.h b/src/gui/dialogs/qabstractpagesetupdialog.h index 7a3bb48..ba6b452 100644 --- a/src/gui/dialogs/qabstractpagesetupdialog.h +++ b/src/gui/dialogs/qabstractpagesetupdialog.h @@ -58,7 +58,7 @@ class QPrinter; // ### Qt 5: Remove this class class Q_GUI_EXPORT QAbstractPageSetupDialog : public QDialog { - Q_DECLARE_PRIVATE(QAbstractPageSetupDialog) + Q_DECLARE_SCOPED_PRIVATE(QAbstractPageSetupDialog) Q_OBJECT public: diff --git a/src/gui/dialogs/qabstractprintdialog.h b/src/gui/dialogs/qabstractprintdialog.h index 272d1b1..0a94034 100644 --- a/src/gui/dialogs/qabstractprintdialog.h +++ b/src/gui/dialogs/qabstractprintdialog.h @@ -58,7 +58,7 @@ class QPrinter; // ### Qt 5: remove this class class Q_GUI_EXPORT QAbstractPrintDialog : public QDialog { - Q_DECLARE_PRIVATE(QAbstractPrintDialog) + Q_DECLARE_SCOPED_PRIVATE(QAbstractPrintDialog) Q_OBJECT public: diff --git a/src/gui/dialogs/qcolordialog.h b/src/gui/dialogs/qcolordialog.h index 2c107bd..d0aeec7 100644 --- a/src/gui/dialogs/qcolordialog.h +++ b/src/gui/dialogs/qcolordialog.h @@ -57,7 +57,7 @@ class QColorDialogPrivate; class Q_GUI_EXPORT QColorDialog : public QDialog { Q_OBJECT - Q_DECLARE_PRIVATE(QColorDialog) + Q_DECLARE_SCOPED_PRIVATE(QColorDialog) Q_ENUMS(ColorDialogOption) Q_PROPERTY(QColor currentColor READ currentColor WRITE setCurrentColor NOTIFY currentColorChanged) diff --git a/src/gui/dialogs/qdialog.h b/src/gui/dialogs/qdialog.h index 8479994..0b5b326 100644 --- a/src/gui/dialogs/qdialog.h +++ b/src/gui/dialogs/qdialog.h @@ -121,7 +121,7 @@ protected: void adjustPosition(QWidget*); private: - Q_DECLARE_PRIVATE(QDialog) + Q_DECLARE_SCOPED_PRIVATE(QDialog) Q_DISABLE_COPY(QDialog) #ifdef Q_WS_WINCE_WM diff --git a/src/gui/dialogs/qerrormessage.h b/src/gui/dialogs/qerrormessage.h index 9721f46..1d79f78 100644 --- a/src/gui/dialogs/qerrormessage.h +++ b/src/gui/dialogs/qerrormessage.h @@ -57,7 +57,7 @@ class QErrorMessagePrivate; class Q_GUI_EXPORT QErrorMessage: public QDialog { Q_OBJECT - Q_DECLARE_PRIVATE(QErrorMessage) + Q_DECLARE_SCOPED_PRIVATE(QErrorMessage) public: explicit QErrorMessage(QWidget* parent = 0); ~QErrorMessage(); diff --git a/src/gui/dialogs/qfiledialog.h b/src/gui/dialogs/qfiledialog.h index 70ee720..987e436 100644 --- a/src/gui/dialogs/qfiledialog.h +++ b/src/gui/dialogs/qfiledialog.h @@ -283,7 +283,7 @@ protected: void changeEvent(QEvent *e); private: - Q_DECLARE_PRIVATE(QFileDialog) + Q_DECLARE_SCOPED_PRIVATE(QFileDialog) Q_DISABLE_COPY(QFileDialog) Q_PRIVATE_SLOT(d_func(), void _q_pathChanged(const QString &)) diff --git a/src/gui/dialogs/qfilesystemmodel.h b/src/gui/dialogs/qfilesystemmodel.h index 769463c..5ab49ff 100644 --- a/src/gui/dialogs/qfilesystemmodel.h +++ b/src/gui/dialogs/qfilesystemmodel.h @@ -151,7 +151,7 @@ protected: bool event(QEvent *event); private: - Q_DECLARE_PRIVATE(QFileSystemModel) + Q_DECLARE_SCOPED_PRIVATE(QFileSystemModel) Q_DISABLE_COPY(QFileSystemModel) Q_PRIVATE_SLOT(d_func(), void _q_directoryChanged(const QString &directory, const QStringList &list)) diff --git a/src/gui/dialogs/qfontdialog.h b/src/gui/dialogs/qfontdialog.h index 6e0f1a0..4c80194 100644 --- a/src/gui/dialogs/qfontdialog.h +++ b/src/gui/dialogs/qfontdialog.h @@ -59,7 +59,7 @@ class QFontDialogPrivate; class Q_GUI_EXPORT QFontDialog : public QDialog { Q_OBJECT - Q_DECLARE_PRIVATE(QFontDialog) + Q_DECLARE_SCOPED_PRIVATE(QFontDialog) Q_ENUMS(FontDialogOption) Q_PROPERTY(QFont currentFont READ currentFont WRITE setCurrentFont NOTIFY currentFontChanged) Q_PROPERTY(FontDialogOptions options READ options WRITE setOptions) diff --git a/src/gui/dialogs/qinputdialog.h b/src/gui/dialogs/qinputdialog.h index 401b328..edeaadd 100644 --- a/src/gui/dialogs/qinputdialog.h +++ b/src/gui/dialogs/qinputdialog.h @@ -59,7 +59,7 @@ class QInputDialogPrivate; class Q_GUI_EXPORT QInputDialog : public QDialog { Q_OBJECT - Q_DECLARE_PRIVATE(QInputDialog) + Q_DECLARE_SCOPED_PRIVATE(QInputDialog) // Q_ENUMS(InputMode InputDialogOption) QDOC_PROPERTY(InputMode inputMode READ inputMode WRITE setInputMode) QDOC_PROPERTY(QString labelText READ labelText WRITE setLabelText) diff --git a/src/gui/dialogs/qmessagebox.h b/src/gui/dialogs/qmessagebox.h index 048455e..d24d466 100644 --- a/src/gui/dialogs/qmessagebox.h +++ b/src/gui/dialogs/qmessagebox.h @@ -336,7 +336,7 @@ private: Q_PRIVATE_SLOT(d_func(), void _q_buttonClicked(QAbstractButton *)) Q_DISABLE_COPY(QMessageBox) - Q_DECLARE_PRIVATE(QMessageBox) + Q_DECLARE_SCOPED_PRIVATE(QMessageBox) }; Q_DECLARE_OPERATORS_FOR_FLAGS(QMessageBox::StandardButtons) diff --git a/src/gui/dialogs/qpagesetupdialog.h b/src/gui/dialogs/qpagesetupdialog.h index 43e316d..1757c32 100644 --- a/src/gui/dialogs/qpagesetupdialog.h +++ b/src/gui/dialogs/qpagesetupdialog.h @@ -57,7 +57,7 @@ class QPageSetupDialogPrivate; class Q_GUI_EXPORT QPageSetupDialog : public QAbstractPageSetupDialog { Q_OBJECT - Q_DECLARE_PRIVATE(QPageSetupDialog) + Q_DECLARE_SCOPED_PRIVATE(QPageSetupDialog) Q_ENUMS(PageSetupDialogOption) Q_PROPERTY(PageSetupDialogOptions options READ options WRITE setOptions) diff --git a/src/gui/dialogs/qprintdialog.h b/src/gui/dialogs/qprintdialog.h index e5a90cc..5af70b3 100644 --- a/src/gui/dialogs/qprintdialog.h +++ b/src/gui/dialogs/qprintdialog.h @@ -81,7 +81,7 @@ private: class Q_GUI_EXPORT QPrintDialog : public QAbstractPrintDialog { Q_OBJECT - Q_DECLARE_PRIVATE(QPrintDialog) + Q_DECLARE_SCOPED_PRIVATE(QPrintDialog) Q_ENUMS(PrintDialogOption) Q_PROPERTY(PrintDialogOptions options READ options WRITE setOptions) diff --git a/src/gui/dialogs/qprintpreviewdialog.h b/src/gui/dialogs/qprintpreviewdialog.h index 85ed517..5836e5a 100644 --- a/src/gui/dialogs/qprintpreviewdialog.h +++ b/src/gui/dialogs/qprintpreviewdialog.h @@ -58,7 +58,7 @@ class QPrintPreviewDialogPrivate; class Q_GUI_EXPORT QPrintPreviewDialog : public QDialog { Q_OBJECT - Q_DECLARE_PRIVATE(QPrintPreviewDialog) + Q_DECLARE_SCOPED_PRIVATE(QPrintPreviewDialog) public: explicit QPrintPreviewDialog(QWidget *parent = 0, Qt::WindowFlags flags = 0); diff --git a/src/gui/dialogs/qprogressdialog.h b/src/gui/dialogs/qprogressdialog.h index 1118c45..41a825a 100644 --- a/src/gui/dialogs/qprogressdialog.h +++ b/src/gui/dialogs/qprogressdialog.h @@ -61,7 +61,7 @@ class QProgressDialogPrivate; class Q_GUI_EXPORT QProgressDialog : public QDialog { Q_OBJECT - Q_DECLARE_PRIVATE(QProgressDialog) + Q_DECLARE_SCOPED_PRIVATE(QProgressDialog) Q_PROPERTY(bool wasCanceled READ wasCanceled) Q_PROPERTY(int minimum READ minimum WRITE setMinimum) Q_PROPERTY(int maximum READ maximum WRITE setMaximum) diff --git a/src/gui/dialogs/qwizard.h b/src/gui/dialogs/qwizard.h index d1f9cf7..a8976c4 100644 --- a/src/gui/dialogs/qwizard.h +++ b/src/gui/dialogs/qwizard.h @@ -194,7 +194,7 @@ protected: private: Q_DISABLE_COPY(QWizard) - Q_DECLARE_PRIVATE(QWizard) + Q_DECLARE_SCOPED_PRIVATE(QWizard) Q_PRIVATE_SLOT(d_func(), void _q_emitCustomButtonClicked()) Q_PRIVATE_SLOT(d_func(), void _q_updateButtonStates()) Q_PRIVATE_SLOT(d_func(), void _q_handleFieldObjectDestroyed(QObject *)) @@ -246,7 +246,7 @@ protected: private: Q_DISABLE_COPY(QWizardPage) - Q_DECLARE_PRIVATE(QWizardPage) + Q_DECLARE_SCOPED_PRIVATE(QWizardPage) Q_PRIVATE_SLOT(d_func(), void _q_maybeEmitCompleteChanged()) Q_PRIVATE_SLOT(d_func(), void _q_updateCachedCompleteState()) diff --git a/src/gui/dialogs/qwizard_win.cpp b/src/gui/dialogs/qwizard_win.cpp index 840149b..bb51cbd 100644 --- a/src/gui/dialogs/qwizard_win.cpp +++ b/src/gui/dialogs/qwizard_win.cpp @@ -429,7 +429,7 @@ void QVistaHelper::setWindowPosHack() class QHackWidget : public QWidget { public: - Q_DECLARE_PRIVATE(QWidget) + Q_DECLARE_SCOPED_PRIVATE(QWidget) QTLWExtra* topData() { return d_func()->topData(); } }; diff --git a/src/gui/embedded/qdirectpainter_qws.h b/src/gui/embedded/qdirectpainter_qws.h index eddde10..a7f82f1 100644 --- a/src/gui/embedded/qdirectpainter_qws.h +++ b/src/gui/embedded/qdirectpainter_qws.h @@ -57,7 +57,7 @@ class QWSEmbedEvent; class Q_GUI_EXPORT QDirectPainter : public QObject { Q_OBJECT - Q_DECLARE_PRIVATE(QDirectPainter) + Q_DECLARE_SCOPED_PRIVATE(QDirectPainter) public: enum SurfaceFlag { NonReserved = 0, diff --git a/src/gui/embedded/qscreen_qws.cpp b/src/gui/embedded/qscreen_qws.cpp index 05771ff..af53cd7 100644 --- a/src/gui/embedded/qscreen_qws.cpp +++ b/src/gui/embedded/qscreen_qws.cpp @@ -2420,7 +2420,7 @@ void QScreen::exposeRegion(QRegion r, int windowIndex) #endif compose(0, r, blendRegion, &blendBuffer, changing); - if (blendBuffer) { + if (blendBuffer && !blendBuffer->isNull()) { const QPoint offset = blendRegion.boundingRect().topLeft(); #ifndef QT_NO_QWS_CURSOR if (qt_screencursor && !qt_screencursor->isAccelerated()) { diff --git a/src/gui/embedded/qtransportauth_qws.h b/src/gui/embedded/qtransportauth_qws.h index d8753fe..e633a90 100644 --- a/src/gui/embedded/qtransportauth_qws.h +++ b/src/gui/embedded/qtransportauth_qws.h @@ -169,7 +169,7 @@ private: ~QTransportAuth(); friend class QAuthDevice; - Q_DECLARE_PRIVATE(QTransportAuth) + Q_DECLARE_SCOPED_PRIVATE(QTransportAuth) }; class Q_GUI_EXPORT RequestAnalyzer diff --git a/src/gui/embedded/qwindowsystem_qws.cpp b/src/gui/embedded/qwindowsystem_qws.cpp index a521319..dfc1e76 100644 --- a/src/gui/embedded/qwindowsystem_qws.cpp +++ b/src/gui/embedded/qwindowsystem_qws.cpp @@ -1768,10 +1768,16 @@ void QWSServerPrivate::cleanupFonts(bool force) #if defined(QWS_DEBUG_FONTCLEANUP) qDebug() << "removing unused font file" << fontName; #endif - QFile::remove(QFile::decodeName(fontName)); - sendFontRemovedEvent(fontName); - - it = fontReferenceCount.erase(it); + QT_TRY { + QFile::remove(QFile::decodeName(fontName)); + sendFontRemovedEvent(fontName); + + it = fontReferenceCount.erase(it); + } QT_CATCH(...) { + // so we were not able to remove the font. + // don't be angry and just continue with the next ones. + ++it; + } } } diff --git a/src/gui/embedded/qwindowsystem_qws.h b/src/gui/embedded/qwindowsystem_qws.h index 3cda9f6..04cd756 100644 --- a/src/gui/embedded/qwindowsystem_qws.h +++ b/src/gui/embedded/qwindowsystem_qws.h @@ -214,7 +214,7 @@ class Q_GUI_EXPORT QWSServer : public QObject friend class QWSDisplay; friend class QWSInputMethod; Q_OBJECT - Q_DECLARE_PRIVATE(QWSServer) + Q_DECLARE_SCOPED_PRIVATE(QWSServer) public: explicit QWSServer(int flags = 0, QObject *parent=0); #ifdef QT3_SUPPORT @@ -443,7 +443,7 @@ class QWSConvertSelectionCommand; class Q_GUI_EXPORT QWSClient : public QObject { Q_OBJECT - Q_DECLARE_PRIVATE(QWSClient) + Q_DECLARE_SCOPED_PRIVATE(QWSClient) public: QWSClient(QObject* parent, QWS_SOCK_BASE *, int id); ~QWSClient(); diff --git a/src/gui/embedded/qwsembedwidget.h b/src/gui/embedded/qwsembedwidget.h index 8313c38..d880454 100644 --- a/src/gui/embedded/qwsembedwidget.h +++ b/src/gui/embedded/qwsembedwidget.h @@ -71,7 +71,7 @@ protected: void showEvent(QShowEvent *event); private: - Q_DECLARE_PRIVATE(QWSEmbedWidget) + Q_DECLARE_SCOPED_PRIVATE(QWSEmbedWidget) }; QT_END_NAMESPACE diff --git a/src/gui/embedded/qwsmanager_qws.h b/src/gui/embedded/qwsmanager_qws.h index 5a4312c..86aadc9 100644 --- a/src/gui/embedded/qwsmanager_qws.h +++ b/src/gui/embedded/qwsmanager_qws.h @@ -66,7 +66,7 @@ class QWSManagerPrivate; class Q_GUI_EXPORT QWSManager : public QObject { Q_OBJECT - Q_DECLARE_PRIVATE(QWSManager) + Q_DECLARE_SCOPED_PRIVATE(QWSManager) public: explicit QWSManager(QWidget *); ~QWSManager(); diff --git a/src/gui/graphicsview/qgraphicsgridlayout.h b/src/gui/graphicsview/qgraphicsgridlayout.h index b9db03e..faa91b3 100644 --- a/src/gui/graphicsview/qgraphicsgridlayout.h +++ b/src/gui/graphicsview/qgraphicsgridlayout.h @@ -127,7 +127,7 @@ public: private: Q_DISABLE_COPY(QGraphicsGridLayout) - Q_DECLARE_PRIVATE(QGraphicsGridLayout) + Q_DECLARE_SCOPED_PRIVATE(QGraphicsGridLayout) }; inline void QGraphicsGridLayout::addItem(QGraphicsLayoutItem *aitem, int arow, int acolumn, Qt::Alignment aalignment) diff --git a/src/gui/graphicsview/qgraphicsitem.h b/src/gui/graphicsview/qgraphicsitem.h index ac77dc2..0b93c27 100644 --- a/src/gui/graphicsview/qgraphicsitem.h +++ b/src/gui/graphicsview/qgraphicsitem.h @@ -437,7 +437,7 @@ protected: private: Q_DISABLE_COPY(QGraphicsItem) - Q_DECLARE_PRIVATE(QGraphicsItem) + Q_DECLARE_SCOPED_PRIVATE(QGraphicsItem) friend class QGraphicsItemGroup; friend class QGraphicsScene; friend class QGraphicsScenePrivate; @@ -559,7 +559,7 @@ protected: private: Q_DISABLE_COPY(QAbstractGraphicsShapeItem) - Q_DECLARE_PRIVATE(QAbstractGraphicsShapeItem) + Q_DECLARE_SCOPED_PRIVATE(QAbstractGraphicsShapeItem) }; class QGraphicsPathItemPrivate; @@ -602,7 +602,7 @@ protected: private: Q_DISABLE_COPY(QGraphicsPathItem) - Q_DECLARE_PRIVATE(QGraphicsPathItem) + Q_DECLARE_SCOPED_PRIVATE(QGraphicsPathItem) }; class QGraphicsRectItemPrivate; @@ -652,7 +652,7 @@ protected: private: Q_DISABLE_COPY(QGraphicsRectItem) - Q_DECLARE_PRIVATE(QGraphicsRectItem) + Q_DECLARE_SCOPED_PRIVATE(QGraphicsRectItem) }; inline void QGraphicsRectItem::setRect(qreal ax, qreal ay, qreal w, qreal h) @@ -711,7 +711,7 @@ protected: private: Q_DISABLE_COPY(QGraphicsEllipseItem) - Q_DECLARE_PRIVATE(QGraphicsEllipseItem) + Q_DECLARE_SCOPED_PRIVATE(QGraphicsEllipseItem) }; inline void QGraphicsEllipseItem::setRect(qreal ax, qreal ay, qreal w, qreal h) @@ -761,7 +761,7 @@ protected: private: Q_DISABLE_COPY(QGraphicsPolygonItem) - Q_DECLARE_PRIVATE(QGraphicsPolygonItem) + Q_DECLARE_SCOPED_PRIVATE(QGraphicsPolygonItem) }; class QGraphicsLineItemPrivate; @@ -815,7 +815,7 @@ protected: private: Q_DISABLE_COPY(QGraphicsLineItem) - Q_DECLARE_PRIVATE(QGraphicsLineItem) + Q_DECLARE_SCOPED_PRIVATE(QGraphicsLineItem) }; class QGraphicsPixmapItemPrivate; @@ -874,7 +874,7 @@ protected: private: Q_DISABLE_COPY(QGraphicsPixmapItem) - Q_DECLARE_PRIVATE(QGraphicsPixmapItem) + Q_DECLARE_SCOPED_PRIVATE(QGraphicsPixmapItem) }; inline void QGraphicsPixmapItem::setOffset(qreal ax, qreal ay) @@ -1030,7 +1030,7 @@ protected: private: Q_DISABLE_COPY(QGraphicsSimpleTextItem) - Q_DECLARE_PRIVATE(QGraphicsSimpleTextItem) + Q_DECLARE_SCOPED_PRIVATE(QGraphicsSimpleTextItem) }; class QGraphicsItemGroupPrivate; @@ -1059,7 +1059,7 @@ public: private: Q_DISABLE_COPY(QGraphicsItemGroup) - Q_DECLARE_PRIVATE(QGraphicsItemGroup) + Q_DECLARE_SCOPED_PRIVATE(QGraphicsItemGroup) }; template <class T> inline T qgraphicsitem_cast(QGraphicsItem *item) diff --git a/src/gui/graphicsview/qgraphicslayout.h b/src/gui/graphicsview/qgraphicslayout.h index 7c758bc..d2c45ab 100644 --- a/src/gui/graphicsview/qgraphicslayout.h +++ b/src/gui/graphicsview/qgraphicslayout.h @@ -81,7 +81,7 @@ protected: private: Q_DISABLE_COPY(QGraphicsLayout) - Q_DECLARE_PRIVATE(QGraphicsLayout) + Q_DECLARE_SCOPED_PRIVATE(QGraphicsLayout) friend class QGraphicsWidget; }; diff --git a/src/gui/graphicsview/qgraphicslayoutitem.h b/src/gui/graphicsview/qgraphicslayoutitem.h index 60f894f..156c843 100644 --- a/src/gui/graphicsview/qgraphicslayoutitem.h +++ b/src/gui/graphicsview/qgraphicslayoutitem.h @@ -117,7 +117,7 @@ protected: private: QSizeF *effectiveSizeHints(const QSizeF &constraint) const; - Q_DECLARE_PRIVATE(QGraphicsLayoutItem) + Q_DECLARE_SCOPED_PRIVATE(QGraphicsLayoutItem) friend class QGraphicsLayout; }; diff --git a/src/gui/graphicsview/qgraphicslinearlayout.h b/src/gui/graphicsview/qgraphicslinearlayout.h index f469680..91335db 100644 --- a/src/gui/graphicsview/qgraphicslinearlayout.h +++ b/src/gui/graphicsview/qgraphicslinearlayout.h @@ -108,7 +108,7 @@ protected: private: Q_DISABLE_COPY(QGraphicsLinearLayout) - Q_DECLARE_PRIVATE(QGraphicsLinearLayout) + Q_DECLARE_SCOPED_PRIVATE(QGraphicsLinearLayout) }; #endif diff --git a/src/gui/graphicsview/qgraphicsscene.h b/src/gui/graphicsview/qgraphicsscene.h index 4d65b91..7c1160c 100644 --- a/src/gui/graphicsview/qgraphicsscene.h +++ b/src/gui/graphicsview/qgraphicsscene.h @@ -272,7 +272,7 @@ Q_SIGNALS: void selectionChanged(); private: - Q_DECLARE_PRIVATE(QGraphicsScene) + Q_DECLARE_SCOPED_PRIVATE(QGraphicsScene) Q_DISABLE_COPY(QGraphicsScene) Q_PRIVATE_SLOT(d_func(), void _q_updateIndex()) Q_PRIVATE_SLOT(d_func(), void _q_emitUpdated()) diff --git a/src/gui/graphicsview/qgraphicssceneevent.h b/src/gui/graphicsview/qgraphicssceneevent.h index c6a3eff..6850b3d 100644 --- a/src/gui/graphicsview/qgraphicssceneevent.h +++ b/src/gui/graphicsview/qgraphicssceneevent.h @@ -76,7 +76,7 @@ public: protected: QGraphicsSceneEvent(QGraphicsSceneEventPrivate &dd, Type type = None); QScopedPointer<QGraphicsSceneEventPrivate> d_ptr; - Q_DECLARE_PRIVATE(QGraphicsSceneEvent) + Q_DECLARE_SCOPED_PRIVATE(QGraphicsSceneEvent) }; class QGraphicsSceneMouseEventPrivate; @@ -123,7 +123,7 @@ public: void setModifiers(Qt::KeyboardModifiers modifiers); private: - Q_DECLARE_PRIVATE(QGraphicsSceneMouseEvent) + Q_DECLARE_SCOPED_PRIVATE(QGraphicsSceneMouseEvent) }; class QGraphicsSceneWheelEventPrivate; @@ -155,7 +155,7 @@ public: void setOrientation(Qt::Orientation orientation); private: - Q_DECLARE_PRIVATE(QGraphicsSceneWheelEvent) + Q_DECLARE_SCOPED_PRIVATE(QGraphicsSceneWheelEvent) }; class QGraphicsSceneContextMenuEventPrivate; @@ -183,7 +183,7 @@ public: void setReason(Reason reason); private: - Q_DECLARE_PRIVATE(QGraphicsSceneContextMenuEvent) + Q_DECLARE_SCOPED_PRIVATE(QGraphicsSceneContextMenuEvent) }; class QGraphicsSceneHoverEventPrivate; @@ -215,7 +215,7 @@ public: void setModifiers(Qt::KeyboardModifiers modifiers); private: - Q_DECLARE_PRIVATE(QGraphicsSceneHoverEvent) + Q_DECLARE_SCOPED_PRIVATE(QGraphicsSceneHoverEvent) }; class QGraphicsSceneHelpEventPrivate; @@ -232,7 +232,7 @@ public: void setScreenPos(const QPoint &pos); private: - Q_DECLARE_PRIVATE(QGraphicsSceneHelpEvent) + Q_DECLARE_SCOPED_PRIVATE(QGraphicsSceneHelpEvent) }; class QGraphicsSceneDragDropEventPrivate; @@ -274,13 +274,13 @@ public: void setMimeData(const QMimeData *data); private: - Q_DECLARE_PRIVATE(QGraphicsSceneDragDropEvent) + Q_DECLARE_SCOPED_PRIVATE(QGraphicsSceneDragDropEvent) }; class QGraphicsSceneResizeEventPrivate; class Q_GUI_EXPORT QGraphicsSceneResizeEvent : public QGraphicsSceneEvent { - Q_DECLARE_PRIVATE(QGraphicsSceneResizeEvent) + Q_DECLARE_SCOPED_PRIVATE(QGraphicsSceneResizeEvent) public: QGraphicsSceneResizeEvent(); ~QGraphicsSceneResizeEvent(); @@ -295,7 +295,7 @@ public: class QGraphicsSceneMoveEventPrivate; class Q_GUI_EXPORT QGraphicsSceneMoveEvent : public QGraphicsSceneEvent { - Q_DECLARE_PRIVATE(QGraphicsSceneMoveEvent) + Q_DECLARE_SCOPED_PRIVATE(QGraphicsSceneMoveEvent) public: QGraphicsSceneMoveEvent(); ~QGraphicsSceneMoveEvent(); @@ -312,7 +312,7 @@ class QGraphicsItem; class QGraphicsSceneGestureEventPrivate; class Q_GUI_EXPORT QGraphicsSceneGestureEvent : public QGraphicsSceneEvent { - Q_DECLARE_PRIVATE(QGraphicsSceneGestureEvent) + Q_DECLARE_SCOPED_PRIVATE(QGraphicsSceneGestureEvent) public: QGraphicsSceneGestureEvent(); ~QGraphicsSceneGestureEvent(); diff --git a/src/gui/graphicsview/qgraphicsview.h b/src/gui/graphicsview/qgraphicsview.h index 1285e45..425f174 100644 --- a/src/gui/graphicsview/qgraphicsview.h +++ b/src/gui/graphicsview/qgraphicsview.h @@ -269,7 +269,7 @@ protected: const QStyleOptionGraphicsItem options[]); private: - Q_DECLARE_PRIVATE(QGraphicsView) + Q_DECLARE_SCOPED_PRIVATE(QGraphicsView) Q_DISABLE_COPY(QGraphicsView) #ifndef QT_NO_CURSOR Q_PRIVATE_SLOT(d_func(), void _q_setViewportCursor(const QCursor &)) diff --git a/src/gui/image/qimageiohandler.h b/src/gui/image/qimageiohandler.h index 50508c0..97b2ba2 100644 --- a/src/gui/image/qimageiohandler.h +++ b/src/gui/image/qimageiohandler.h @@ -60,7 +60,7 @@ class QVariant; class QImageIOHandlerPrivate; class Q_GUI_EXPORT QImageIOHandler { - Q_DECLARE_PRIVATE(QImageIOHandler) + Q_DECLARE_SCOPED_PRIVATE(QImageIOHandler) public: QImageIOHandler(); virtual ~QImageIOHandler(); diff --git a/src/gui/image/qmovie.h b/src/gui/image/qmovie.h index afee789..eda5aa1 100644 --- a/src/gui/image/qmovie.h +++ b/src/gui/image/qmovie.h @@ -74,7 +74,7 @@ class QMoviePrivate; class Q_GUI_EXPORT QMovie : public QObject { Q_OBJECT - Q_DECLARE_PRIVATE(QMovie) + Q_DECLARE_SCOPED_PRIVATE(QMovie) Q_ENUMS(MovieState CacheMode) Q_PROPERTY(int speed READ speed WRITE setSpeed) Q_PROPERTY(CacheMode cacheMode READ cacheMode WRITE setCacheMode) diff --git a/src/gui/image/qpaintengine_pic_p.h b/src/gui/image/qpaintengine_pic_p.h index 1e6413e..2aaa5f0 100644 --- a/src/gui/image/qpaintengine_pic_p.h +++ b/src/gui/image/qpaintengine_pic_p.h @@ -65,7 +65,7 @@ class QBuffer; class QPicturePaintEngine : public QPaintEngine { - Q_DECLARE_PRIVATE(QPicturePaintEngine) + Q_DECLARE_SCOPED_PRIVATE(QPicturePaintEngine) public: QPicturePaintEngine(); ~QPicturePaintEngine(); diff --git a/src/gui/image/qpicture.h b/src/gui/image/qpicture.h index c323f0e..4d9af37 100644 --- a/src/gui/image/qpicture.h +++ b/src/gui/image/qpicture.h @@ -56,7 +56,7 @@ QT_MODULE(Gui) class QPicturePrivate; class Q_GUI_EXPORT QPicture : public QPaintDevice { - Q_DECLARE_PRIVATE(QPicture) + Q_DECLARE_SCOPED_PRIVATE(QPicture) public: explicit QPicture(int formatVersion = -1); QPicture(const QPicture &); diff --git a/src/gui/image/qpixmap.cpp b/src/gui/image/qpixmap.cpp index a3b2343..c9478cb 100644 --- a/src/gui/image/qpixmap.cpp +++ b/src/gui/image/qpixmap.cpp @@ -268,7 +268,12 @@ QPixmap::QPixmap(const QString& fileName, const char *format, Qt::ImageConversio if (!qt_pixmap_thread_test()) return; - load(fileName, format, flags); + QT_TRY { + load(fileName, format, flags); + } QT_CATCH(...) { + deref(); + QT_RETHROW; + } } /*! @@ -316,12 +321,17 @@ QPixmap::QPixmap(const char * const xpm[]) if (!xpm) return; - QImage image(xpm); - if (!image.isNull()) { - if (data->pixelType() == QPixmapData::BitmapType) - *this = QBitmap::fromImage(image); - else - *this = fromImage(image); + QT_TRY { + QImage image(xpm); + if (!image.isNull()) { + if (data->pixelType() == QPixmapData::BitmapType) + *this = QBitmap::fromImage(image); + else + *this = fromImage(image); + } + } QT_CATCH(...) { + deref(); + QT_RETHROW; } } #endif diff --git a/src/gui/image/qpixmap_raster.cpp b/src/gui/image/qpixmap_raster.cpp index 9cc896b..e0d952a 100644 --- a/src/gui/image/qpixmap_raster.cpp +++ b/src/gui/image/qpixmap_raster.cpp @@ -172,9 +172,13 @@ void QRasterPixmapData::fromImage(const QImage &sourceImage, } } #endif - w = image.d->width; - h = image.d->height; - d = image.d->depth; + if (image.d) { + w = image.d->width; + h = image.d->height; + d = image.d->depth; + } else { + w = h = d = 0; + } is_null = (w <= 0 || h <= 0); setSerialNumber(image.serialNumber()); diff --git a/src/gui/image/qpixmap_s60.cpp b/src/gui/image/qpixmap_s60.cpp index 132e26e..0460c30 100644 --- a/src/gui/image/qpixmap_s60.cpp +++ b/src/gui/image/qpixmap_s60.cpp @@ -82,7 +82,7 @@ QPixmap QPixmap::grabWindow(WId winId, int x, int y, int w, int h ) return QPixmap(); TDisplayMode displayMode = screenDevice->DisplayMode(); - CFbsBitmap* temporary = new (ELeave) CFbsBitmap(); + CFbsBitmap* temporary = q_check_ptr(new CFbsBitmap()); // CBase derived object needs check on new TInt error = temporary->Create(srcRect.Size(), displayMode); if (error == KErrNone) error = screenDevice->CopyScreenToBitmap(temporary, srcRect); @@ -171,7 +171,7 @@ CFbsBitmap *QPixmap::toSymbianCFbsBitmap() const return 0; } - CFbsBitmap* bitmap = new (ELeave) CFbsBitmap(); + CFbsBitmap* bitmap = q_check_ptr(new CFbsBitmap()); // CBase derived object needs check on new TSize size(width(), height()); if (bitmap->Create(size, mode) != KErrNone) { CBase::Delete(bitmap); diff --git a/src/gui/image/qpixmapcache.cpp b/src/gui/image/qpixmapcache.cpp index baa2969..af13375 100644 --- a/src/gui/image/qpixmapcache.cpp +++ b/src/gui/image/qpixmapcache.cpp @@ -357,7 +357,8 @@ void QPMCache::resizeKeyArray(int size) { if (size <= keyArraySize || size == 0) return; - keyArray = reinterpret_cast<int *>(realloc(keyArray, size * sizeof(int))); + keyArray = q_check_ptr(reinterpret_cast<int *>(realloc(keyArray, + size * sizeof(int)))); for (int i = keyArraySize; i != size; ++i) keyArray[i] = i + 1; keyArraySize = size; diff --git a/src/gui/image/qpixmapfilter_p.h b/src/gui/image/qpixmapfilter_p.h index 51292b3..83fc1b9 100644 --- a/src/gui/image/qpixmapfilter_p.h +++ b/src/gui/image/qpixmapfilter_p.h @@ -70,7 +70,7 @@ class QPixmapFilterPrivate; class Q_GUI_EXPORT QPixmapFilter : public QObject { Q_OBJECT - Q_DECLARE_PRIVATE(QPixmapFilter) + Q_DECLARE_SCOPED_PRIVATE(QPixmapFilter) public: virtual ~QPixmapFilter() = 0; @@ -98,7 +98,7 @@ class QPixmapConvolutionFilterPrivate; class Q_GUI_EXPORT QPixmapConvolutionFilter : public QPixmapFilter { Q_OBJECT - Q_DECLARE_PRIVATE(QPixmapConvolutionFilter) + Q_DECLARE_SCOPED_PRIVATE(QPixmapConvolutionFilter) public: QPixmapConvolutionFilter(QObject *parent = 0); @@ -122,7 +122,7 @@ class QPixmapColorizeFilterPrivate; class Q_GUI_EXPORT QPixmapColorizeFilter : public QPixmapFilter { Q_OBJECT - Q_DECLARE_PRIVATE(QPixmapColorizeFilter) + Q_DECLARE_SCOPED_PRIVATE(QPixmapColorizeFilter) public: QPixmapColorizeFilter(QObject *parent = 0); @@ -138,7 +138,7 @@ class QPixmapDropShadowFilterPrivate; class Q_GUI_EXPORT QPixmapDropShadowFilter : public QPixmapFilter { Q_OBJECT - Q_DECLARE_PRIVATE(QPixmapDropShadowFilter) + Q_DECLARE_SCOPED_PRIVATE(QPixmapDropShadowFilter) public: QPixmapDropShadowFilter(QObject *parent = 0); diff --git a/src/gui/inputmethod/qcoefepinputcontext_p.h b/src/gui/inputmethod/qcoefepinputcontext_p.h index d754763..e63f045 100644 --- a/src/gui/inputmethod/qcoefepinputcontext_p.h +++ b/src/gui/inputmethod/qcoefepinputcontext_p.h @@ -121,6 +121,7 @@ public: private: void DoCommitFepInlineEditL(); MCoeFepAwareTextEditor_Extension1* Extension1(TBool& aSetToTrue); + void ReportAknEdStateEvent(MAknEdStateObserver::EAknEdwinStateEvent aEventType); // From MCoeFepAwareTextEditor_Extension1 public: diff --git a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp index c03426f..2ef1175 100644 --- a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp +++ b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp @@ -60,7 +60,7 @@ QT_BEGIN_NAMESPACE QCoeFepInputContext::QCoeFepInputContext(QObject *parent) : QInputContext(parent), - m_fepState(new (ELeave) CAknEdwinState), + m_fepState(q_check_ptr(new CAknEdwinState)), // CBase derived object needs check on new m_lastImHints(Qt::ImhNone), m_textCapabilities(TCoeInputCapabilities::EAllText), m_isEditing(false), @@ -100,6 +100,11 @@ void QCoeFepInputContext::reset() CCoeEnv::Static()->Fep()->CancelTransaction(); } +void QCoeFepInputContext::ReportAknEdStateEvent(MAknEdStateObserver::EAknEdwinStateEvent aEventType) +{ + QT_TRAP_THROWING(m_fepState->ReportAknEdStateEventL(QT_EAknCursorPositionChanged)); +} + void QCoeFepInputContext::update() { updateHints(false); @@ -112,7 +117,7 @@ void QCoeFepInputContext::update() // Don't be fooled (as I was) by the name of this enumeration. // What it really does is tell the virtual keyboard UI that the text has been // updated and it should be reflected in the internal display of the VK. - m_fepState->ReportAknEdStateEventL(QT_EAknCursorPositionChanged); + ReportAknEdStateEvent(QT_EAknCursorPositionChanged); } void QCoeFepInputContext::setFocusWidget(QWidget *w) @@ -394,7 +399,7 @@ void QCoeFepInputContext::applyHints(Qt::InputMethodHints hints) flags = EAknEditorAllInputModes; } m_fepState->SetPermittedInputModes(flags); - m_fepState->ReportAknEdStateEventL(MAknEdStateObserver::EAknEdwinStateInputModeUpdate); + ReportAknEdStateEvent(MAknEdStateObserver::EAknEdwinStateInputModeUpdate); if (hints & ImhPreferLowercase) { m_fepState->SetDefaultCase(EAknEditorLowerCase); @@ -423,7 +428,7 @@ void QCoeFepInputContext::applyHints(Qt::InputMethodHints hints) } } m_fepState->SetPermittedCases(flags); - m_fepState->ReportAknEdStateEventL(MAknEdStateObserver::EAknEdwinStateCaseModeUpdate); + ReportAknEdStateEvent(MAknEdStateObserver::EAknEdwinStateCaseModeUpdate); flags = 0; if (hints & ImhUppercaseOnly && !(hints & ImhLowercaseOnly) @@ -435,7 +440,7 @@ void QCoeFepInputContext::applyHints(Qt::InputMethodHints hints) flags |= EAknEditorFlagNoT9; } m_fepState->SetFlags(flags); - m_fepState->ReportAknEdStateEventL(MAknEdStateObserver::EAknEdwinStateFlagsUpdate); + ReportAknEdStateEvent(MAknEdStateObserver::EAknEdwinStateFlagsUpdate); if (hints & ImhFormattedNumbersOnly) { flags = EAknEditorCalculatorNumberModeKeymap; @@ -525,7 +530,7 @@ void QCoeFepInputContext::StartFepInlineEditL(const TDesC& aInitialInlineText, m_cursorVisibility = aCursorVisibility ? 1 : 0; m_inlinePosition = aPositionOfInsertionPointInInlineText; - m_preeditString = qt_TDesC2QStringL(aInitialInlineText); + m_preeditString = qt_TDesC2QString(aInitialInlineText); m_formatRetriever = &aInlineTextFormatRetriever; m_pointerHandler = &aPointerEventHandlerDuringInlineEdit; @@ -555,7 +560,7 @@ void QCoeFepInputContext::UpdateFepInlineTextL(const TDesC& aNewInlineText, m_inlinePosition, m_cursorVisibility, QVariant())); - m_preeditString = qt_TDesC2QStringL(aNewInlineText); + m_preeditString = qt_TDesC2QString(aNewInlineText); QInputMethodEvent event(m_preeditString, attributes); sendEvent(event); } diff --git a/src/gui/inputmethod/qinputcontext.h b/src/gui/inputmethod/qinputcontext.h index e4e5f9d..87112b5 100644 --- a/src/gui/inputmethod/qinputcontext.h +++ b/src/gui/inputmethod/qinputcontext.h @@ -83,7 +83,7 @@ class QInputContextPrivate; class Q_GUI_EXPORT QInputContext : public QObject { Q_OBJECT - Q_DECLARE_PRIVATE(QInputContext) + Q_DECLARE_SCOPED_PRIVATE(QInputContext) public: explicit QInputContext(QObject* parent = 0); virtual ~QInputContext(); diff --git a/src/gui/inputmethod/qmacinputcontext_p.h b/src/gui/inputmethod/qmacinputcontext_p.h index 4fcba9a..69ac3e8 100644 --- a/src/gui/inputmethod/qmacinputcontext_p.h +++ b/src/gui/inputmethod/qmacinputcontext_p.h @@ -61,7 +61,7 @@ QT_BEGIN_NAMESPACE class Q_GUI_EXPORT QMacInputContext : public QInputContext { Q_OBJECT - //Q_DECLARE_PRIVATE(QMacInputContext) + //Q_DECLARE_SCOPED_PRIVATE(QMacInputContext) void createTextDocument(); public: explicit QMacInputContext(QObject* parent = 0); diff --git a/src/gui/itemviews/qabstractitemview.h b/src/gui/itemviews/qabstractitemview.h index f98dd16..19d6383 100644 --- a/src/gui/itemviews/qabstractitemview.h +++ b/src/gui/itemviews/qabstractitemview.h @@ -345,7 +345,7 @@ protected: #endif private: - Q_DECLARE_PRIVATE(QAbstractItemView) + Q_DECLARE_SCOPED_PRIVATE(QAbstractItemView) Q_DISABLE_COPY(QAbstractItemView) Q_PRIVATE_SLOT(d_func(), void _q_columnsAboutToBeRemoved(const QModelIndex&, int, int)) Q_PRIVATE_SLOT(d_func(), void _q_columnsRemoved(const QModelIndex&, int, int)) diff --git a/src/gui/itemviews/qabstractproxymodel.h b/src/gui/itemviews/qabstractproxymodel.h index 8a703da..356d923 100644 --- a/src/gui/itemviews/qabstractproxymodel.h +++ b/src/gui/itemviews/qabstractproxymodel.h @@ -87,7 +87,7 @@ protected: QAbstractProxyModel(QAbstractProxyModelPrivate &, QObject *parent); private: - Q_DECLARE_PRIVATE(QAbstractProxyModel) + Q_DECLARE_SCOPED_PRIVATE(QAbstractProxyModel) Q_DISABLE_COPY(QAbstractProxyModel) Q_PRIVATE_SLOT(d_func(), void _q_sourceModelDestroyed()) }; diff --git a/src/gui/itemviews/qcolumnview.h b/src/gui/itemviews/qcolumnview.h index 880870a..96da637 100644 --- a/src/gui/itemviews/qcolumnview.h +++ b/src/gui/itemviews/qcolumnview.h @@ -108,7 +108,7 @@ protected Q_SLOTS: void currentChanged(const QModelIndex ¤t, const QModelIndex &previous); private: - Q_DECLARE_PRIVATE(QColumnView) + Q_DECLARE_SCOPED_PRIVATE(QColumnView) Q_DISABLE_COPY(QColumnView) Q_PRIVATE_SLOT(d_func(), void _q_gripMoved(int)) Q_PRIVATE_SLOT(d_func(), void _q_changeCurrentColumn()) diff --git a/src/gui/itemviews/qcolumnviewgrip_p.h b/src/gui/itemviews/qcolumnviewgrip_p.h index 4dc35ec..8e670e9 100644 --- a/src/gui/itemviews/qcolumnviewgrip_p.h +++ b/src/gui/itemviews/qcolumnviewgrip_p.h @@ -82,7 +82,7 @@ protected: void mousePressEvent(QMouseEvent *event); private: - Q_DECLARE_PRIVATE(QColumnViewGrip) + Q_DECLARE_SCOPED_PRIVATE(QColumnViewGrip) Q_DISABLE_COPY(QColumnViewGrip) }; diff --git a/src/gui/itemviews/qdatawidgetmapper.h b/src/gui/itemviews/qdatawidgetmapper.h index 2df7b69..2773b59 100644 --- a/src/gui/itemviews/qdatawidgetmapper.h +++ b/src/gui/itemviews/qdatawidgetmapper.h @@ -111,7 +111,7 @@ Q_SIGNALS: void currentIndexChanged(int index); private: - Q_DECLARE_PRIVATE(QDataWidgetMapper) + Q_DECLARE_SCOPED_PRIVATE(QDataWidgetMapper) Q_DISABLE_COPY(QDataWidgetMapper) Q_PRIVATE_SLOT(d_func(), void _q_dataChanged(const QModelIndex &, const QModelIndex &)) Q_PRIVATE_SLOT(d_func(), void _q_commitData(QWidget *)) diff --git a/src/gui/itemviews/qdirmodel.h b/src/gui/itemviews/qdirmodel.h index 719d551..1f28cc9 100644 --- a/src/gui/itemviews/qdirmodel.h +++ b/src/gui/itemviews/qdirmodel.h @@ -146,7 +146,7 @@ protected: friend class QFileDialogPrivate; private: - Q_DECLARE_PRIVATE(QDirModel) + Q_DECLARE_SCOPED_PRIVATE(QDirModel) Q_DISABLE_COPY(QDirModel) Q_PRIVATE_SLOT(d_func(), void _q_refresh()) }; diff --git a/src/gui/itemviews/qfileiconprovider.h b/src/gui/itemviews/qfileiconprovider.h index 165e30f..dd1bedd 100644 --- a/src/gui/itemviews/qfileiconprovider.h +++ b/src/gui/itemviews/qfileiconprovider.h @@ -67,7 +67,7 @@ public: virtual QString type(const QFileInfo &info) const; private: - Q_DECLARE_PRIVATE(QFileIconProvider) + Q_DECLARE_SCOPED_PRIVATE(QFileIconProvider) QScopedPointer<QFileIconProviderPrivate> d_ptr; Q_DISABLE_COPY(QFileIconProvider) }; diff --git a/src/gui/itemviews/qheaderview.h b/src/gui/itemviews/qheaderview.h index f752ae2..cdbc1e6 100644 --- a/src/gui/itemviews/qheaderview.h +++ b/src/gui/itemviews/qheaderview.h @@ -229,7 +229,7 @@ private: Q_PRIVATE_SLOT(d_func(), void _q_sectionsRemoved(const QModelIndex &parent, int logicalFirst, int logicalLast)) Q_PRIVATE_SLOT(d_func(), void _q_layoutAboutToBeChanged()) Q_PRIVATE_SLOT(d_func(), void _q_layoutChanged()) - Q_DECLARE_PRIVATE(QHeaderView) + Q_DECLARE_SCOPED_PRIVATE(QHeaderView) Q_DISABLE_COPY(QHeaderView) }; diff --git a/src/gui/itemviews/qitemdelegate.h b/src/gui/itemviews/qitemdelegate.h index d46481c..a6f0ba1 100644 --- a/src/gui/itemviews/qitemdelegate.h +++ b/src/gui/itemviews/qitemdelegate.h @@ -126,7 +126,7 @@ protected: const QFont &font, const QString &text) const; private: - Q_DECLARE_PRIVATE(QItemDelegate) + Q_DECLARE_SCOPED_PRIVATE(QItemDelegate) Q_DISABLE_COPY(QItemDelegate) Q_PRIVATE_SLOT(d_func(), void _q_commitDataAndCloseEditor(QWidget*)) diff --git a/src/gui/itemviews/qitemselectionmodel.h b/src/gui/itemviews/qitemselectionmodel.h index e6a99a6..bc9f61c 100644 --- a/src/gui/itemviews/qitemselectionmodel.h +++ b/src/gui/itemviews/qitemselectionmodel.h @@ -125,7 +125,7 @@ class QItemSelectionModelPrivate; class Q_GUI_EXPORT QItemSelectionModel : public QObject { Q_OBJECT - Q_DECLARE_PRIVATE(QItemSelectionModel) + Q_DECLARE_SCOPED_PRIVATE(QItemSelectionModel) Q_FLAGS(SelectionFlags) public: diff --git a/src/gui/itemviews/qlistview.h b/src/gui/itemviews/qlistview.h index 75dff40..a098427 100644 --- a/src/gui/itemviews/qlistview.h +++ b/src/gui/itemviews/qlistview.h @@ -190,7 +190,7 @@ private: friend class QAccessibleItemView; int visualIndex(const QModelIndex &index) const; - Q_DECLARE_PRIVATE(QListView) + Q_DECLARE_SCOPED_PRIVATE(QListView) Q_DISABLE_COPY(QListView) }; diff --git a/src/gui/itemviews/qlistwidget.h b/src/gui/itemviews/qlistwidget.h index afcc331..d2f2f06 100644 --- a/src/gui/itemviews/qlistwidget.h +++ b/src/gui/itemviews/qlistwidget.h @@ -291,7 +291,7 @@ private: void setModel(QAbstractItemModel *model); Qt::SortOrder sortOrder() const; - Q_DECLARE_PRIVATE(QListWidget) + Q_DECLARE_SCOPED_PRIVATE(QListWidget) Q_DISABLE_COPY(QListWidget) Q_PRIVATE_SLOT(d_func(), void _q_emitItemPressed(const QModelIndex &index)) diff --git a/src/gui/itemviews/qproxymodel.h b/src/gui/itemviews/qproxymodel.h index 62cf33e..420753c 100644 --- a/src/gui/itemviews/qproxymodel.h +++ b/src/gui/itemviews/qproxymodel.h @@ -119,7 +119,7 @@ protected: void disconnectFromModel(const QAbstractItemModel *model) const; private: - Q_DECLARE_PRIVATE(QProxyModel) + Q_DECLARE_SCOPED_PRIVATE(QProxyModel) Q_DISABLE_COPY(QProxyModel) Q_PRIVATE_SLOT(d_func(), void _q_sourceDataChanged(const QModelIndex&,const QModelIndex&)) diff --git a/src/gui/itemviews/qsortfilterproxymodel.h b/src/gui/itemviews/qsortfilterproxymodel.h index 0bd084e..b179559 100644 --- a/src/gui/itemviews/qsortfilterproxymodel.h +++ b/src/gui/itemviews/qsortfilterproxymodel.h @@ -172,7 +172,7 @@ public: QStringList mimeTypes() const; Qt::DropActions supportedDropActions() const; private: - Q_DECLARE_PRIVATE(QSortFilterProxyModel) + Q_DECLARE_SCOPED_PRIVATE(QSortFilterProxyModel) Q_DISABLE_COPY(QSortFilterProxyModel) Q_PRIVATE_SLOT(d_func(), void _q_sourceDataChanged(const QModelIndex &source_top_left, const QModelIndex &source_bottom_right)) diff --git a/src/gui/itemviews/qstandarditemmodel.h b/src/gui/itemviews/qstandarditemmodel.h index c470b80..7e76a4a 100644 --- a/src/gui/itemviews/qstandarditemmodel.h +++ b/src/gui/itemviews/qstandarditemmodel.h @@ -245,7 +245,7 @@ protected: void emitDataChanged(); private: - Q_DECLARE_PRIVATE(QStandardItem) + Q_DECLARE_SCOPED_PRIVATE(QStandardItem) friend class QStandardItemModelPrivate; friend class QStandardItemModel; }; @@ -422,7 +422,7 @@ private: friend class QStandardItemPrivate; friend class QStandardItem; Q_DISABLE_COPY(QStandardItemModel) - Q_DECLARE_PRIVATE(QStandardItemModel) + Q_DECLARE_SCOPED_PRIVATE(QStandardItemModel) Q_PRIVATE_SLOT(d_func(), void _q_emitItemChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)) diff --git a/src/gui/itemviews/qstyleditemdelegate.h b/src/gui/itemviews/qstyleditemdelegate.h index ccb1024..2f31387 100644 --- a/src/gui/itemviews/qstyleditemdelegate.h +++ b/src/gui/itemviews/qstyleditemdelegate.h @@ -101,7 +101,7 @@ protected: const QStyleOptionViewItem &option, const QModelIndex &index); private: - Q_DECLARE_PRIVATE(QStyledItemDelegate) + Q_DECLARE_SCOPED_PRIVATE(QStyledItemDelegate) Q_DISABLE_COPY(QStyledItemDelegate) Q_PRIVATE_SLOT(d_func(), void _q_commitDataAndCloseEditor(QWidget*)) diff --git a/src/gui/itemviews/qtableview.h b/src/gui/itemviews/qtableview.h index c09186c..7e4ba54 100644 --- a/src/gui/itemviews/qtableview.h +++ b/src/gui/itemviews/qtableview.h @@ -178,7 +178,7 @@ private: friend class QAccessibleItemView; int visualIndex(const QModelIndex &index) const; - Q_DECLARE_PRIVATE(QTableView) + Q_DECLARE_SCOPED_PRIVATE(QTableView) Q_DISABLE_COPY(QTableView) Q_PRIVATE_SLOT(d_func(), void _q_selectRow(int)) Q_PRIVATE_SLOT(d_func(), void _q_selectColumn(int)) diff --git a/src/gui/itemviews/qtablewidget.h b/src/gui/itemviews/qtablewidget.h index 6c25ba0..1963df8 100644 --- a/src/gui/itemviews/qtablewidget.h +++ b/src/gui/itemviews/qtablewidget.h @@ -336,7 +336,7 @@ protected: private: void setModel(QAbstractItemModel *model); - Q_DECLARE_PRIVATE(QTableWidget) + Q_DECLARE_SCOPED_PRIVATE(QTableWidget) Q_DISABLE_COPY(QTableWidget) Q_PRIVATE_SLOT(d_func(), void _q_emitItemPressed(const QModelIndex &index)) diff --git a/src/gui/itemviews/qtreeview.h b/src/gui/itemviews/qtreeview.h index 35a205c..f9748c6 100644 --- a/src/gui/itemviews/qtreeview.h +++ b/src/gui/itemviews/qtreeview.h @@ -220,7 +220,7 @@ private: friend class QAccessibleItemView; int visualIndex(const QModelIndex &index) const; - Q_DECLARE_PRIVATE(QTreeView) + Q_DECLARE_SCOPED_PRIVATE(QTreeView) Q_DISABLE_COPY(QTreeView) Q_PRIVATE_SLOT(d_func(), void _q_endAnimatedOperation()) Q_PRIVATE_SLOT(d_func(), void _q_animate()) diff --git a/src/gui/itemviews/qtreewidget.h b/src/gui/itemviews/qtreewidget.h index 3266725..b640a7a 100644 --- a/src/gui/itemviews/qtreewidget.h +++ b/src/gui/itemviews/qtreewidget.h @@ -367,7 +367,7 @@ protected: private: void setModel(QAbstractItemModel *model); - Q_DECLARE_PRIVATE(QTreeWidget) + Q_DECLARE_SCOPED_PRIVATE(QTreeWidget) Q_DISABLE_COPY(QTreeWidget) Q_PRIVATE_SLOT(d_func(), void _q_emitItemPressed(const QModelIndex &index)) diff --git a/src/gui/itemviews/qtreewidget_p.h b/src/gui/itemviews/qtreewidget_p.h index 145916a..6d62062 100644 --- a/src/gui/itemviews/qtreewidget_p.h +++ b/src/gui/itemviews/qtreewidget_p.h @@ -162,7 +162,7 @@ private: bool isChanging() const; private: - Q_DECLARE_PRIVATE(QTreeModel) + Q_DECLARE_SCOPED_PRIVATE(QTreeModel) public: struct SkipSorting { diff --git a/src/gui/itemviews/qtreewidgetitemiterator.h b/src/gui/itemviews/qtreewidgetitemiterator.h index eff9fdb..ce0b610 100644 --- a/src/gui/itemviews/qtreewidgetitemiterator.h +++ b/src/gui/itemviews/qtreewidgetitemiterator.h @@ -109,7 +109,7 @@ private: QScopedPointer<QTreeWidgetItemIteratorPrivate> d_ptr; QTreeWidgetItem *current; IteratorFlags flags; - Q_DECLARE_PRIVATE(QTreeWidgetItemIterator) + Q_DECLARE_SCOPED_PRIVATE(QTreeWidgetItemIterator) }; inline const QTreeWidgetItemIterator QTreeWidgetItemIterator::operator++(int) diff --git a/src/gui/kernel/qaction.h b/src/gui/kernel/qaction.h index b9bdcf1..f884a9a 100644 --- a/src/gui/kernel/qaction.h +++ b/src/gui/kernel/qaction.h @@ -64,7 +64,7 @@ class QGraphicsWidget; class Q_GUI_EXPORT QAction : public QObject { Q_OBJECT - Q_DECLARE_PRIVATE(QAction) + Q_DECLARE_SCOPED_PRIVATE(QAction) Q_ENUMS(MenuRole) Q_ENUMS(SoftKeyRole) diff --git a/src/gui/kernel/qactiongroup.h b/src/gui/kernel/qactiongroup.h index e42c2e5..07bdbda 100644 --- a/src/gui/kernel/qactiongroup.h +++ b/src/gui/kernel/qactiongroup.h @@ -57,7 +57,7 @@ class QActionGroupPrivate; class Q_GUI_EXPORT QActionGroup : public QObject { Q_OBJECT - Q_DECLARE_PRIVATE(QActionGroup) + Q_DECLARE_SCOPED_PRIVATE(QActionGroup) Q_PROPERTY(bool exclusive READ isExclusive WRITE setExclusive) Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled) diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp index 2f1ab0e..ab2672b 100644 --- a/src/gui/kernel/qapplication.cpp +++ b/src/gui/kernel/qapplication.cpp @@ -855,7 +855,7 @@ extern void qInitDrawhelperAsm(); void QApplicationPrivate::initialize() { QWidgetPrivate::mapper = new QWidgetMapper; - QWidgetPrivate::uncreatedWidgets = new QWidgetSet; + QWidgetPrivate::allWidgets = new QWidgetSet; if (qt_appType != QApplication::Tty) (void) QApplication::style(); // trigger creation of application style // trigger registering of QVariant's GUI types @@ -1007,23 +1007,13 @@ QApplication::~QApplication() qt_clipboard = 0; #endif - // delete widget mapper - if (QWidgetPrivate::mapper) { - QWidgetMapper * myMapper = QWidgetPrivate::mapper; - QWidgetPrivate::mapper = 0; - for (QWidgetMapper::ConstIterator it = myMapper->constBegin(); - it != myMapper->constEnd(); ++it) { - register QWidget *w = *it; - if (!w->parent()) // window - w->destroy(true, true); - } - delete myMapper; - } + delete QWidgetPrivate::mapper; + QWidgetPrivate::mapper = 0; - // delete uncreated widgets - if (QWidgetPrivate::uncreatedWidgets) { - QWidgetSet *mySet = QWidgetPrivate::uncreatedWidgets; - QWidgetPrivate::uncreatedWidgets = 0; + // delete all widgets + if (QWidgetPrivate::allWidgets) { + QWidgetSet *mySet = QWidgetPrivate::allWidgets; + QWidgetPrivate::allWidgets = 0; for (QWidgetSet::ConstIterator it = mySet->constBegin(); it != mySet->constEnd(); ++it) { register QWidget *w = *it; if (!w->parent()) // window @@ -2050,12 +2040,9 @@ QWidgetList QApplication::topLevelWidgets() QWidgetList QApplication::allWidgets() { - QWidgetList list; - if (QWidgetPrivate::mapper) - list += QWidgetPrivate::mapper->values(); - if (QWidgetPrivate::uncreatedWidgets) - list += QWidgetPrivate::uncreatedWidgets->toList(); - return list; + if (QWidgetPrivate::allWidgets) + return QWidgetPrivate::allWidgets->toList(); + return QWidgetList(); } /*! diff --git a/src/gui/kernel/qapplication.h b/src/gui/kernel/qapplication.h index 4b447b5..6305951 100644 --- a/src/gui/kernel/qapplication.h +++ b/src/gui/kernel/qapplication.h @@ -371,7 +371,7 @@ public: private: Q_DISABLE_COPY(QApplication) - Q_DECLARE_PRIVATE(QApplication) + Q_DECLARE_SCOPED_PRIVATE(QApplication) friend class QGraphicsWidget; friend class QGraphicsScene; diff --git a/src/gui/kernel/qapplication_qws.cpp b/src/gui/kernel/qapplication_qws.cpp index 92fe5f5..b7d1288 100644 --- a/src/gui/kernel/qapplication_qws.cpp +++ b/src/gui/kernel/qapplication_qws.cpp @@ -668,7 +668,7 @@ void QWSDisplay::Data::sendSynchronousCommand(QWSCommand & cmd) int QWSDisplay::Data::takeId() { - if (unused_identifiers.count() == 10) + if (unused_identifiers.count() <= 10) create(15); if (unused_identifiers.count() == 0) waitForCreation(); @@ -3758,4 +3758,14 @@ void QApplicationPrivate::initializeMultitouch_sys() void QApplicationPrivate::cleanupMultitouch_sys() { } +/* \internal + This is used to clean up the qws server + in case the QApplication constructor threw an exception +*/ +QWSServerCleaner::~QWSServerCleaner() +{ + if (qwsServer && qws_single_process) + QWSServer::closedown(); +} + QT_END_NAMESPACE diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp index 766ca4b..7836238 100644 --- a/src/gui/kernel/qapplication_s60.cpp +++ b/src/gui/kernel/qapplication_s60.cpp @@ -76,13 +76,18 @@ QT_BEGIN_NAMESPACE static bool appNoGrab = false; // Grabbing enabled #endif -Q_GUI_EXPORT QS60Data *qt_s60Data = 0; +Q_GLOBAL_STATIC(QS60Data, qt_s60Data); extern bool qt_sendSpontaneousEvent(QObject*,QEvent*); extern QDesktopWidget *qt_desktopWidget; // qapplication.cpp QWidget *qt_button_down = 0; // widget got last button-down +QS60Data* qGlobalS60Data() +{ + return qt_s60Data(); +} + bool qt_nograb() // application no-grab option { #if defined(QT_DEBUG) @@ -441,7 +446,7 @@ void QSymbianControl::sendMouseEvent(QWidget *widget, QMouseEvent *mEvent) TKeyResponse QSymbianControl::OfferKeyEventL(const TKeyEvent& keyEvent, TEventCode type) { TKeyResponse r = EKeyWasNotConsumed; - QT_TRANSLATE_EXCEPTION_TO_SYMBIAN_LEAVE(r = OfferKeyEvent(keyEvent, type)); + QT_TRYCATCH_LEAVING(r = OfferKeyEvent(keyEvent, type)); return r; } @@ -706,8 +711,6 @@ TTypeUid::Ptr QSymbianControl::MopSupplyObject(TTypeUid id) void qt_init(QApplicationPrivate * /* priv */, int) { - S60 = new QS60Data; - #ifdef QT_NO_DEBUG if (!qgetenv("QT_S60_AUTO_FLUSH_WSERV").isEmpty()) #endif @@ -723,7 +726,6 @@ void qt_init(QApplicationPrivate * /* priv */, int) TSecureId securId = me.SecureId(); S60->uid = securId.operator TUid(); - /* ### Commented out for now as parameter handling not needed in SOS(yet). Code below will break testlib with -o flag int argc = priv->argc; diff --git a/src/gui/kernel/qapplication_win.cpp b/src/gui/kernel/qapplication_win.cpp index bb7d931..4f35583 100644 --- a/src/gui/kernel/qapplication_win.cpp +++ b/src/gui/kernel/qapplication_win.cpp @@ -1191,7 +1191,7 @@ static void qWinProcessConfigRequests() // perform requests in qu class QGuiEventDispatcherWin32 : public QEventDispatcherWin32 { - Q_DECLARE_PRIVATE(QEventDispatcherWin32) + Q_DECLARE_SCOPED_PRIVATE(QEventDispatcherWin32) public: QGuiEventDispatcherWin32(QObject *parent = 0); bool processEvents(QEventLoop::ProcessEventsFlags flags); diff --git a/src/gui/kernel/qboxlayout.cpp b/src/gui/kernel/qboxlayout.cpp index 770f5bb..b51d77f 100644 --- a/src/gui/kernel/qboxlayout.cpp +++ b/src/gui/kernel/qboxlayout.cpp @@ -925,9 +925,15 @@ void QBoxLayout::insertSpacing(int index, int size) else b = QLayoutPrivate::createSpacerItem(this, 0, size, QSizePolicy::Minimum, QSizePolicy::Fixed); - QBoxLayoutItem *it = new QBoxLayoutItem(b); - it->magic = true; - d->list.insert(index, it); + QT_TRY { + QBoxLayoutItem *it = new QBoxLayoutItem(b); + it->magic = true; + d->list.insert(index, it); + + } QT_CATCH(...) { + delete b; + QT_RETHROW; + } invalidate(); } @@ -1027,8 +1033,21 @@ void QBoxLayout::insertWidget(int index, QWidget *widget, int stretch, index = d->list.count(); QWidgetItem *b = QLayoutPrivate::createWidgetItem(this, widget); b->setAlignment(alignment); - QBoxLayoutItem *it = new QBoxLayoutItem(b, stretch); - d->list.insert(index, it); + + QBoxLayoutItem *it; + QT_TRY{ + it = new QBoxLayoutItem(b, stretch); + } QT_CATCH(...) { + delete b; + QT_RETHROW; + } + + QT_TRY{ + d->list.insert(index, it); + } QT_CATCH(...) { + delete it; + QT_RETHROW; + } invalidate(); } diff --git a/src/gui/kernel/qboxlayout.h b/src/gui/kernel/qboxlayout.h index f463c31..c399b8d 100644 --- a/src/gui/kernel/qboxlayout.h +++ b/src/gui/kernel/qboxlayout.h @@ -60,7 +60,7 @@ class QBoxLayoutPrivate; class Q_GUI_EXPORT QBoxLayout : public QLayout { Q_OBJECT - Q_DECLARE_PRIVATE(QBoxLayout) + Q_DECLARE_SCOPED_PRIVATE(QBoxLayout) public: enum Direction { LeftToRight, RightToLeft, TopToBottom, BottomToTop, Down = TopToBottom, Up = BottomToTop }; diff --git a/src/gui/kernel/qclipboard.h b/src/gui/kernel/qclipboard.h index 8241812..68fbf33 100644 --- a/src/gui/kernel/qclipboard.h +++ b/src/gui/kernel/qclipboard.h @@ -62,7 +62,7 @@ class QClipboardPrivate; class Q_GUI_EXPORT QClipboard : public QObject { Q_OBJECT - Q_DECLARE_PRIVATE(QClipboard) + Q_DECLARE_SCOPED_PRIVATE(QClipboard) private: QClipboard(QObject *parent); ~QClipboard(); diff --git a/src/gui/kernel/qclipboard_s60.cpp b/src/gui/kernel/qclipboard_s60.cpp index db5e7f3..27b4fdb 100644 --- a/src/gui/kernel/qclipboard_s60.cpp +++ b/src/gui/kernel/qclipboard_s60.cpp @@ -143,8 +143,10 @@ static QClipboardData *clipboardData() return internalCbData; } -void writeToStream(const QMimeData* aData, RWriteStream& aStream) +void writeToStreamLX(const QMimeData* aData, RWriteStream& aStream) { + // This function both leaves and throws exceptions. There must be no destructor + // dependencies between cleanup styles, and no cleanup stack dependencies on stacked objects. QStringList headers = aData->formats(); aStream << TCardinality(headers.count()); for (QStringList::const_iterator iter= headers.constBegin();iter != headers.constEnd();iter++) @@ -162,8 +164,10 @@ void writeToStream(const QMimeData* aData, RWriteStream& aStream) } } -void readFromStream(QMimeData* aData,RReadStream& aStream) +void readFromStreamLX(QMimeData* aData,RReadStream& aStream) { + // This function both leaves and throws exceptions. There must be no destructor + // dependencies between cleanup styles, and no cleanup stack dependencies on stacked objects. TCardinality mimeTypeCount; aStream >> mimeTypeCount; for (int i = 0; i< mimeTypeCount;i++) @@ -173,6 +177,7 @@ void readFromStream(QMimeData* aData,RReadStream& aStream) aStream >> mimeTypeSize; HBufC* mimeTypeBuf = HBufC::NewLC(aStream,mimeTypeSize); QString mimeType = QString::fromUtf16(mimeTypeBuf->Des().Ptr(),mimeTypeBuf->Length()); + CleanupStack::PopAndDestroy(mimeTypeBuf); // mime data TCardinality dataSize; aStream >> dataSize; @@ -182,8 +187,6 @@ void readFromStream(QMimeData* aData,RReadStream& aStream) ba.data_ptr()->size = dataSize; qDebug() << "paste from clipboard mime: " << mimeType << " data: " << ba; aData->setData(mimeType,ba); - CleanupStack::PopAndDestroy(mimeTypeBuf); - } } @@ -210,7 +213,7 @@ const QMimeData* QClipboard::mimeData(Mode mode) const RStoreReadStream stream; TStreamId stid = (cb->StreamDictionary()).At(KQtCbDataStream); stream.OpenLC(cb->Store(),stid); - readFromStream(d->source(),stream); + QT_TRYCATCH_LEAVING(readFromStreamLX(d->source(),stream)); CleanupStack::PopAndDestroy(2,cb); return d->source(); }); @@ -235,7 +238,7 @@ void QClipboard::setMimeData(QMimeData* src, Mode mode) CClipboard* cb = CClipboard::NewForWritingLC(fs); RStoreWriteStream stream; TStreamId stid = stream.CreateLC(cb->Store()); - writeToStream(src,stream); + QT_TRYCATCH_LEAVING(writeToStreamLX(src,stream)); d->setSource(src); stream.CommitL(); (cb->StreamDictionary()).AssignL(KQtCbDataStream,stid); diff --git a/src/gui/kernel/qdesktopwidget.h b/src/gui/kernel/qdesktopwidget.h index 470f10a..d61e00c 100644 --- a/src/gui/kernel/qdesktopwidget.h +++ b/src/gui/kernel/qdesktopwidget.h @@ -91,7 +91,7 @@ protected: private: Q_DISABLE_COPY(QDesktopWidget) - Q_DECLARE_PRIVATE(QDesktopWidget) + Q_DECLARE_SCOPED_PRIVATE(QDesktopWidget) friend class QApplication; friend class QApplicationPrivate; diff --git a/src/gui/kernel/qdesktopwidget_x11.cpp b/src/gui/kernel/qdesktopwidget_x11.cpp index 59d3239..94032e3 100644 --- a/src/gui/kernel/qdesktopwidget_x11.cpp +++ b/src/gui/kernel/qdesktopwidget_x11.cpp @@ -197,7 +197,7 @@ void QDesktopWidgetPrivate::init() if (screens) { // leaks QWidget* pointers on purpose, can't delete them as pointer escapes - screens = (QWidget**) realloc(screens, j * sizeof(QWidget*)); + screens = q_check_ptr((QWidget**) realloc(screens, j * sizeof(QWidget*))); if (j > screenCount) memset(&screens[screenCount], 0, (j-screenCount) * sizeof(QWidget*)); } diff --git a/src/gui/kernel/qdnd_s60.cpp b/src/gui/kernel/qdnd_s60.cpp index c459f8f..07b196e 100644 --- a/src/gui/kernel/qdnd_s60.cpp +++ b/src/gui/kernel/qdnd_s60.cpp @@ -128,7 +128,7 @@ public: QImage temp = pm.toImage(); QSize size = pm.size(); temp.bits(); - CFbsBitmap *curbm = new (ELeave) CFbsBitmap(); + CFbsBitmap *curbm = q_check_ptr(new CFbsBitmap()); // CBase derived object needs check on new curbm->Create(TSize(size.width(),size.height()),EColor16MA); curbm->LockHeap(ETrue); memcpy((uchar*)curbm->DataAddress(),temp.bits(),temp.numBytes()); diff --git a/src/gui/kernel/qdnd_x11.cpp b/src/gui/kernel/qdnd_x11.cpp index 7b445ea..410d1a9 100644 --- a/src/gui/kernel/qdnd_x11.cpp +++ b/src/gui/kernel/qdnd_x11.cpp @@ -316,7 +316,7 @@ static XdndData xdnd_data = { 0, 0 }; class QExtraWidget : public QWidget { - Q_DECLARE_PRIVATE(QWidget) + Q_DECLARE_SCOPED_PRIVATE(QWidget) public: inline QWExtra* extraData(); inline QTLWExtra* topData(); diff --git a/src/gui/kernel/qdrag.h b/src/gui/kernel/qdrag.h index b49d82a..7e54b51 100644 --- a/src/gui/kernel/qdrag.h +++ b/src/gui/kernel/qdrag.h @@ -61,7 +61,7 @@ class QDragManager; class Q_GUI_EXPORT QDrag : public QObject { Q_OBJECT - Q_DECLARE_PRIVATE(QDrag) + Q_DECLARE_SCOPED_PRIVATE(QDrag) public: explicit QDrag(QWidget *dragSource); ~QDrag(); diff --git a/src/gui/kernel/qeventdispatcher_glib_qws_p.h b/src/gui/kernel/qeventdispatcher_glib_qws_p.h index 826661e..f0751be 100644 --- a/src/gui/kernel/qeventdispatcher_glib_qws_p.h +++ b/src/gui/kernel/qeventdispatcher_glib_qws_p.h @@ -62,7 +62,7 @@ class QWSEventDispatcherGlibPrivate; class QWSEventDispatcherGlib : public QEventDispatcherGlib { Q_OBJECT - Q_DECLARE_PRIVATE(QWSEventDispatcherGlib) + Q_DECLARE_SCOPED_PRIVATE(QWSEventDispatcherGlib) public: explicit QWSEventDispatcherGlib(QObject *parent = 0); diff --git a/src/gui/kernel/qeventdispatcher_mac_p.h b/src/gui/kernel/qeventdispatcher_mac_p.h index 88663c6..1986c4c 100644 --- a/src/gui/kernel/qeventdispatcher_mac_p.h +++ b/src/gui/kernel/qeventdispatcher_mac_p.h @@ -108,7 +108,7 @@ class QEventDispatcherMacPrivate; class QEventDispatcherMac : public QAbstractEventDispatcher { Q_OBJECT - Q_DECLARE_PRIVATE(QEventDispatcherMac) + Q_DECLARE_SCOPED_PRIVATE(QEventDispatcherMac) public: explicit QEventDispatcherMac(QObject *parent = 0); diff --git a/src/gui/kernel/qeventdispatcher_qws_p.h b/src/gui/kernel/qeventdispatcher_qws_p.h index b83fa10..982ed58 100644 --- a/src/gui/kernel/qeventdispatcher_qws_p.h +++ b/src/gui/kernel/qeventdispatcher_qws_p.h @@ -62,7 +62,7 @@ class QEventDispatcherQWSPrivate; class QEventDispatcherQWS : public QEventDispatcherUNIX { Q_OBJECT - Q_DECLARE_PRIVATE(QEventDispatcherQWS) + Q_DECLARE_SCOPED_PRIVATE(QEventDispatcherQWS) public: explicit QEventDispatcherQWS(QObject *parent = 0); diff --git a/src/gui/kernel/qeventdispatcher_s60.cpp b/src/gui/kernel/qeventdispatcher_s60.cpp index 51878df..2fea8a4 100644 --- a/src/gui/kernel/qeventdispatcher_s60.cpp +++ b/src/gui/kernel/qeventdispatcher_s60.cpp @@ -76,7 +76,7 @@ bool QEventDispatcherS60::processEvents ( QEventLoop::ProcessEventsFlags flags ) m_noInputEvents = oldNoInputEventsValue; } QT_CATCH (const std::exception& ex) { #ifndef QT_NO_EXCEPTIONS - CActiveScheduler::Current()->Error(qt_translateExceptionToSymbianError(ex)); + CActiveScheduler::Current()->Error(qt_exception2SymbianError(ex)); #endif } diff --git a/src/gui/kernel/qeventdispatcher_x11_p.h b/src/gui/kernel/qeventdispatcher_x11_p.h index 9a54c36..b4c553d 100644 --- a/src/gui/kernel/qeventdispatcher_x11_p.h +++ b/src/gui/kernel/qeventdispatcher_x11_p.h @@ -62,7 +62,7 @@ class QEventDispatcherX11Private; class QEventDispatcherX11 : public QEventDispatcherUNIX { Q_OBJECT - Q_DECLARE_PRIVATE(QEventDispatcherX11) + Q_DECLARE_SCOPED_PRIVATE(QEventDispatcherX11) public: explicit QEventDispatcherX11(QObject *parent = 0); diff --git a/src/gui/kernel/qformlayout.h b/src/gui/kernel/qformlayout.h index b560e85..0143711 100644 --- a/src/gui/kernel/qformlayout.h +++ b/src/gui/kernel/qformlayout.h @@ -56,7 +56,7 @@ class Q_GUI_EXPORT QFormLayout : public QLayout { Q_OBJECT Q_ENUMS(FormStyle FieldGrowthPolicy RowWrapPolicy ItemRole) - Q_DECLARE_PRIVATE(QFormLayout) + Q_DECLARE_SCOPED_PRIVATE(QFormLayout) Q_PROPERTY(FieldGrowthPolicy fieldGrowthPolicy READ fieldGrowthPolicy WRITE setFieldGrowthPolicy RESET resetFieldGrowthPolicy) Q_PROPERTY(RowWrapPolicy rowWrapPolicy READ rowWrapPolicy WRITE setRowWrapPolicy RESET resetRowWrapPolicy) Q_PROPERTY(Qt::Alignment labelAlignment READ labelAlignment WRITE setLabelAlignment RESET resetLabelAlignment) diff --git a/src/gui/kernel/qgesture.h b/src/gui/kernel/qgesture.h index f3c95cc..a7aba22 100644 --- a/src/gui/kernel/qgesture.h +++ b/src/gui/kernel/qgesture.h @@ -59,7 +59,7 @@ class QGesturePrivate; class Q_GUI_EXPORT QGesture : public QObject { Q_OBJECT - Q_DECLARE_PRIVATE(QGesture) + Q_DECLARE_SCOPED_PRIVATE(QGesture) Q_PROPERTY(QString type READ type) Q_PROPERTY(Qt::GestureState state READ state) @@ -128,7 +128,7 @@ class QPanningGesturePrivate; class Q_GUI_EXPORT QPanningGesture : public QGesture { Q_OBJECT - Q_DECLARE_PRIVATE(QPanningGesture) + Q_DECLARE_SCOPED_PRIVATE(QPanningGesture) Q_PROPERTY(Qt::DirectionType lastDirection READ lastDirection) Q_PROPERTY(Qt::DirectionType direction READ direction) diff --git a/src/gui/kernel/qgesturerecognizer.h b/src/gui/kernel/qgesturerecognizer.h index 2c1c61b..65c4ca0 100644 --- a/src/gui/kernel/qgesturerecognizer.h +++ b/src/gui/kernel/qgesturerecognizer.h @@ -53,7 +53,7 @@ class QGestureRecognizerPrivate; class Q_GUI_EXPORT QGestureRecognizer : public QObject { Q_OBJECT - Q_DECLARE_PRIVATE(QGestureRecognizer) + Q_DECLARE_SCOPED_PRIVATE(QGestureRecognizer) public: enum Result diff --git a/src/gui/kernel/qgridlayout.h b/src/gui/kernel/qgridlayout.h index 89a04a4..2b5299e 100644 --- a/src/gui/kernel/qgridlayout.h +++ b/src/gui/kernel/qgridlayout.h @@ -60,7 +60,7 @@ class QGridLayoutPrivate; class Q_GUI_EXPORT QGridLayout : public QLayout { Q_OBJECT - Q_DECLARE_PRIVATE(QGridLayout) + Q_DECLARE_SCOPED_PRIVATE(QGridLayout) QDOC_PROPERTY(int horizontalSpacing READ horizontalSpacing WRITE setHorizontalSpacing) QDOC_PROPERTY(int verticalSpacing READ verticalSpacing WRITE setVerticalSpacing) diff --git a/src/gui/kernel/qguieventdispatcher_glib_p.h b/src/gui/kernel/qguieventdispatcher_glib_p.h index 65d233e..8543836 100644 --- a/src/gui/kernel/qguieventdispatcher_glib_p.h +++ b/src/gui/kernel/qguieventdispatcher_glib_p.h @@ -62,7 +62,7 @@ class QGuiEventDispatcherGlibPrivate; class QGuiEventDispatcherGlib : public QEventDispatcherGlib { Q_OBJECT - Q_DECLARE_PRIVATE(QGuiEventDispatcherGlib) + Q_DECLARE_SCOPED_PRIVATE(QGuiEventDispatcherGlib) public: explicit QGuiEventDispatcherGlib(QObject *parent = 0); diff --git a/src/gui/kernel/qkeymapper_mac.cpp b/src/gui/kernel/qkeymapper_mac.cpp index 017c13c..87dad1e 100644 --- a/src/gui/kernel/qkeymapper_mac.cpp +++ b/src/gui/kernel/qkeymapper_mac.cpp @@ -563,7 +563,7 @@ QKeyMapperPrivate::QKeyMapperPrivate() QKeyMapperPrivate::~QKeyMapperPrivate() { - clearMappings(); + deleteLayouts(); } bool @@ -658,7 +658,7 @@ QKeyMapperPrivate::updateKeyboard() } void -QKeyMapperPrivate::clearMappings() +QKeyMapperPrivate::deleteLayouts() { keyboard_mode = NullMode; for (int i = 0; i < 255; ++i) { @@ -667,6 +667,12 @@ QKeyMapperPrivate::clearMappings() keyLayout[i] = 0; } } +} + +void +QKeyMapperPrivate::clearMappings() +{ + deleteLayouts(); updateKeyboard(); } diff --git a/src/gui/kernel/qkeymapper_p.h b/src/gui/kernel/qkeymapper_p.h index ba1fcfe..6c12b0f 100644 --- a/src/gui/kernel/qkeymapper_p.h +++ b/src/gui/kernel/qkeymapper_p.h @@ -85,7 +85,7 @@ public: private: friend QKeyMapperPrivate *qt_keymapper_private(); - Q_DECLARE_PRIVATE(QKeyMapper) + Q_DECLARE_SCOPED_PRIVATE(QKeyMapper) Q_DISABLE_COPY(QKeyMapper) }; @@ -161,6 +161,7 @@ public: bool translateKeyEvent(QWidget *receiver, const MSG &msg, bool grab); void updatePossibleKeyCodes(unsigned char *kbdBuffer, quint32 scancode, quint32 vk_key); bool isADeadKey(unsigned int vk_key, unsigned int modifiers); + void deleteLayouts(); KeyboardLayoutItem *keyLayout[256]; @@ -189,6 +190,7 @@ public: bool updateKeyboard(); void updateKeyMap(EventHandlerCallRef, EventRef, void *); bool translateKeyEvent(QWidget *, EventHandlerCallRef, EventRef, void *, bool); + void deleteLayouts(); enum { NullMode, UnicodeMode, OtherMode } keyboard_mode; union { diff --git a/src/gui/kernel/qkeymapper_win.cpp b/src/gui/kernel/qkeymapper_win.cpp index e40dfa0..d1b3456 100644 --- a/src/gui/kernel/qkeymapper_win.cpp +++ b/src/gui/kernel/qkeymapper_win.cpp @@ -621,10 +621,10 @@ QKeyMapperPrivate::QKeyMapperPrivate() QKeyMapperPrivate::~QKeyMapperPrivate() { - clearMappings(); + deleteLayouts(); } -void QKeyMapperPrivate::clearMappings() +void QKeyMapperPrivate::deleteLayouts() { for (int i = 0; i < 255; ++i) { if (keyLayout[i]) { @@ -632,6 +632,11 @@ void QKeyMapperPrivate::clearMappings() keyLayout[i] = 0; } } +} + +void QKeyMapperPrivate::clearMappings() +{ + deleteLayouts(); /* MAKELCID()'s first argument is a WORD, and GetKeyboardLayout() * returns a DWORD. */ diff --git a/src/gui/kernel/qkeysequence.cpp b/src/gui/kernel/qkeysequence.cpp index 6563dae..e2a5b27 100644 --- a/src/gui/kernel/qkeysequence.cpp +++ b/src/gui/kernel/qkeysequence.cpp @@ -753,7 +753,9 @@ QKeySequence::QKeySequence(StandardKey key) */ QKeySequence::QKeySequence() { - d = new QKeySequencePrivate(); + static QKeySequencePrivate shared_empty; + d = &shared_empty; + d->ref.ref(); } /*! diff --git a/src/gui/kernel/qlayout.h b/src/gui/kernel/qlayout.h index 4f46c1d..ec95ca8 100644 --- a/src/gui/kernel/qlayout.h +++ b/src/gui/kernel/qlayout.h @@ -89,7 +89,7 @@ class QLayoutPrivate; class Q_GUI_EXPORT QLayout : public QObject, public QLayoutItem { Q_OBJECT - Q_DECLARE_PRIVATE(QLayout) + Q_DECLARE_SCOPED_PRIVATE(QLayout) Q_ENUMS(SizeConstraint) Q_PROPERTY(int margin READ margin WRITE setMargin) diff --git a/src/gui/kernel/qsessionmanager.h b/src/gui/kernel/qsessionmanager.h index f27dbaa..0a55d0c 100644 --- a/src/gui/kernel/qsessionmanager.h +++ b/src/gui/kernel/qsessionmanager.h @@ -60,7 +60,7 @@ class QSessionManagerPrivate; class Q_GUI_EXPORT QSessionManager : public QObject { Q_OBJECT - Q_DECLARE_PRIVATE(QSessionManager) + Q_DECLARE_SCOPED_PRIVATE(QSessionManager) QSessionManager(QApplication *app, QString &id, QString &key); ~QSessionManager(); public: diff --git a/src/gui/kernel/qshortcut.h b/src/gui/kernel/qshortcut.h index c81ce7c..7b79faa 100644 --- a/src/gui/kernel/qshortcut.h +++ b/src/gui/kernel/qshortcut.h @@ -57,7 +57,7 @@ class QShortcutPrivate; class Q_GUI_EXPORT QShortcut : public QObject { Q_OBJECT - Q_DECLARE_PRIVATE(QShortcut) + Q_DECLARE_SCOPED_PRIVATE(QShortcut) Q_PROPERTY(QKeySequence key READ key WRITE setKey) Q_PROPERTY(QString whatsThis READ whatsThis WRITE setWhatsThis) Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled) diff --git a/src/gui/kernel/qshortcutmap_p.h b/src/gui/kernel/qshortcutmap_p.h index 8962ac7..53a39ec 100644 --- a/src/gui/kernel/qshortcutmap_p.h +++ b/src/gui/kernel/qshortcutmap_p.h @@ -74,7 +74,7 @@ class QObject; class QShortcutMap { - Q_DECLARE_PRIVATE(QShortcutMap) + Q_DECLARE_SCOPED_PRIVATE(QShortcutMap) public: QShortcutMap(); ~QShortcutMap(); diff --git a/src/gui/kernel/qsound.h b/src/gui/kernel/qsound.h index 22cfdde..eeef047 100644 --- a/src/gui/kernel/qsound.h +++ b/src/gui/kernel/qsound.h @@ -82,7 +82,7 @@ public: static inline QT3_SUPPORT bool available() { return isAvailable(); } #endif private: - Q_DECLARE_PRIVATE(QSound) + Q_DECLARE_SCOPED_PRIVATE(QSound) friend class QAuServer; }; diff --git a/src/gui/kernel/qstackedlayout.h b/src/gui/kernel/qstackedlayout.h index d14b2ab..ab215fa 100644 --- a/src/gui/kernel/qstackedlayout.h +++ b/src/gui/kernel/qstackedlayout.h @@ -55,7 +55,7 @@ class QStackedLayoutPrivate; class Q_GUI_EXPORT QStackedLayout : public QLayout { Q_OBJECT - Q_DECLARE_PRIVATE(QStackedLayout) + Q_DECLARE_SCOPED_PRIVATE(QStackedLayout) Q_ENUMS(StackingMode) Q_PROPERTY(int currentIndex READ currentIndex WRITE setCurrentIndex NOTIFY currentChanged) Q_PROPERTY(StackingMode stackingMode READ stackingMode WRITE setStackingMode) diff --git a/src/gui/kernel/qt_s60_p.h b/src/gui/kernel/qt_s60_p.h index bcbe48f..802a2f7 100644 --- a/src/gui/kernel/qt_s60_p.h +++ b/src/gui/kernel/qt_s60_p.h @@ -80,11 +80,6 @@ QT_BEGIN_NAMESPACE // system evens seems to start with 0x10 const TInt KInternalStatusPaneChange = 0x50000000; -struct QS60Data; -extern QS60Data *qt_s60Data; - -#define S60 qt_s60Data - class QS60Data { public: @@ -114,6 +109,9 @@ public: #endif }; +QS60Data* qGlobalS60Data(); +#define S60 qGlobalS60Data() + class QAbstractLongTapObserver { public: @@ -241,7 +239,7 @@ inline CEikButtonGroupContainer* QS60Data::buttonGroupContainer() static inline QFont qt_TFontSpec2QFontL(const TFontSpec &fontSpec) { return QFont( - qt_TDesC2QStringL(fontSpec.iTypeface.iName), + qt_TDesC2QString(fontSpec.iTypeface.iName), fontSpec.iHeight / KTwipsPerPoint, fontSpec.iFontStyle.StrokeWeight() == EStrokeWeightNormal ? QFont::Normal : QFont::Bold, fontSpec.iFontStyle.Posture() == EPostureItalic diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index 4c2fe9d..bfcb02b 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -922,8 +922,8 @@ void QWidget::setAutoFillBackground(bool enabled) */ -QWidgetMapper *QWidgetPrivate::mapper = 0; // widget with wid -QWidgetSet *QWidgetPrivate::uncreatedWidgets = 0; // widgets with no wid +QWidgetMapper *QWidgetPrivate::mapper = 0; // widget with wid +QWidgetSet *QWidgetPrivate::allWidgets = 0; // widgets with no wid /***************************************************************************** @@ -969,7 +969,7 @@ struct QWidgetExceptionCleaner static inline void cleanup(QWidget *that, QWidgetPrivate *d) { #ifndef QT_NO_EXCEPTIONS - QWidgetPrivate::uncreatedWidgets->remove(that); + QWidgetPrivate::allWidgets->remove(that); if (d->focus_next != that) { if (d->focus_next) d->focus_next->d_func()->focus_prev = d->focus_prev; @@ -1121,8 +1121,8 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f) if (QApplication::type() == QApplication::Tty) qFatal("QWidget: Cannot create a QWidget when no GUI is being used"); - Q_ASSERT(uncreatedWidgets); - uncreatedWidgets->insert(q); + Q_ASSERT(allWidgets); + allWidgets->insert(q); QWidget *desktopWidget = 0; if (parentWidget && parentWidget->windowType() == Qt::Desktop) { @@ -1415,15 +1415,31 @@ QWidget::~QWidget() } #endif - clearFocus(); + QT_TRY { + clearFocus(); + } QT_CATCH(...) { + // swallow this problem because we are in a destructor + } d->setDirtyOpaqueRegion(); - if (isWindow() && isVisible() && internalWinId()) - d->close_helper(QWidgetPrivate::CloseNoEvent); + if (isWindow() && isVisible() && internalWinId()) { + QT_TRY { + d->close_helper(QWidgetPrivate::CloseNoEvent); + } QT_CATCH(...) { + // if we're out of memory, at least hide the window. + QT_TRY { + hide(); + } QT_CATCH(...) { + // and if that also doesn't work, then give up + } + } + } + #if defined(Q_WS_WIN) || defined(Q_WS_X11) - else if (!internalWinId() && isVisible()) + else if (!internalWinId() && isVisible()) { qApp->d_func()->sendSyntheticEnterLeave(this); + } #endif if (QWidgetBackingStore *bs = d->maybeBackingStore()) { @@ -1443,12 +1459,15 @@ QWidget::~QWidget() QApplication::removePostedEvents(this); - destroy(); // platform-dependent cleanup - + QT_TRY { + destroy(); // platform-dependent cleanup + } QT_CATCH(...) { + // if this fails we can't do anything about it but at least we are not allowed to throw. + } --QWidgetPrivate::instanceCounter; - if (QWidgetPrivate::uncreatedWidgets) // might have been deleted by ~QApplication - QWidgetPrivate::uncreatedWidgets->remove(this); + if (QWidgetPrivate::allWidgets) // might have been deleted by ~QApplication + QWidgetPrivate::allWidgets->remove(this); QEvent e(QEvent::Destroy); QCoreApplication::sendEvent(this, &e); @@ -1468,7 +1487,6 @@ void QWidgetPrivate::setWinId(WId id) // set widget identifier bool userDesktopWidget = qt_desktopWidget != 0 && qt_desktopWidget != q && q->windowType() == Qt::Desktop; if (mapper && data.winid && !userDesktopWidget) { mapper->remove(data.winid); - uncreatedWidgets->insert(q); } data.winid = id; @@ -1477,7 +1495,6 @@ void QWidgetPrivate::setWinId(WId id) // set widget identifier #endif if (mapper && id && !userDesktopWidget) { mapper->insert(data.winid, q); - uncreatedWidgets->remove(q); } } @@ -4645,8 +4662,9 @@ void QWidget::setCursor(const QCursor &cursor) #endif { d->createExtra(); + QCursor *newCursor = new QCursor(cursor); delete d->extra->curs; - d->extra->curs = new QCursor(cursor); + d->extra->curs = newCursor; } setAttribute(Qt::WA_SetCursor); d->setCursor_sys(cursor); @@ -5359,6 +5377,17 @@ QString QWidget::windowTitle() const return QString(); } +/*! + Returns a modified window title with the [*] place holder + replaced according to the rules described in QWidget::setWindowTitle + + This function assumes that "[*]" can be quoted by another + "[*]", so it will replace two place holders by one and + a single last one by either "*" or nothing depending on + the modified flag. + + \internal +*/ QString qt_setWindowTitle_helperHelper(const QString &title, const QWidget *widget) { Q_ASSERT(widget); @@ -5370,16 +5399,21 @@ QString qt_setWindowTitle_helperHelper(const QString &title, const QWidget *widg QString cap = title; #endif - QString placeHolder(QLatin1String("[*]")); + if (cap.isEmpty()) + return cap; + + QLatin1String placeHolder("[*]"); + int placeHolderLength = 3; // QLatin1String doesn't have length() int index = cap.indexOf(placeHolder); + // here the magic begins while (index != -1) { - index += placeHolder.length(); + index += placeHolderLength; int count = 1; while (cap.indexOf(placeHolder, index) == index) { ++count; - index += placeHolder.length(); + index += placeHolderLength; } if (count%2) { // odd number of [*] -> replace last one @@ -5394,7 +5428,7 @@ QString qt_setWindowTitle_helperHelper(const QString &title, const QWidget *widg index = cap.indexOf(placeHolder, index); } - cap.replace(QLatin1String("[*][*]"), QLatin1String("[*]")); + cap.replace(QLatin1String("[*][*]"), placeHolder); return cap; } diff --git a/src/gui/kernel/qwidget.h b/src/gui/kernel/qwidget.h index 2008723..51605ba 100644 --- a/src/gui/kernel/qwidget.h +++ b/src/gui/kernel/qwidget.h @@ -143,7 +143,7 @@ class QWidgetPrivate; class Q_GUI_EXPORT QWidget : public QObject, public QPaintDevice { Q_OBJECT - Q_DECLARE_PRIVATE(QWidget) + Q_DECLARE_SCOPED_PRIVATE(QWidget) Q_PROPERTY(bool modal READ isModal) Q_PROPERTY(Qt::WindowModality windowModality READ windowModality WRITE setWindowModality) diff --git a/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm index 045bcb3..4797ddf 100644 --- a/src/gui/kernel/qwidget_mac.mm +++ b/src/gui/kernel/qwidget_mac.mm @@ -2575,7 +2575,11 @@ void QWidget::destroy(bool destroyWindow, bool destroySubWindows) qt_mac_destructWindow(window); } } - d->setWinId(0); + QT_TRY { + d->setWinId(0); + } QT_CATCH (const std::bad_alloc &) { + // swallow - destructors must not throw + } } } diff --git a/src/gui/kernel/qwidget_p.h b/src/gui/kernel/qwidget_p.h index 84a15ed..b425450 100644 --- a/src/gui/kernel/qwidget_p.h +++ b/src/gui/kernel/qwidget_p.h @@ -490,10 +490,11 @@ public: QWidgetItemV2 *widgetItem; QPaintEngine *extraPaintEngine; mutable const QMetaObject *polished; - // All widgets are initially added into the uncreatedWidgets set. Once - // they receive a window id they are removed and added to the mapper + // All widgets are added into the allWidgets set. Once + // they receive a window id they are also added to the mapper. + // This should just ensure that all widgets are deleted by QApplication static QWidgetMapper *mapper; - static QWidgetSet *uncreatedWidgets; + static QWidgetSet *allWidgets; #if !defined(QT_NO_IM) QPointer<QInputContext> ic; Qt::InputMethodHints imHints; diff --git a/src/gui/kernel/qwidget_qws.cpp b/src/gui/kernel/qwidget_qws.cpp index 4ded5cf..eacf656 100644 --- a/src/gui/kernel/qwidget_qws.cpp +++ b/src/gui/kernel/qwidget_qws.cpp @@ -298,11 +298,16 @@ void QWidget::destroy(bool destroyWindow, bool destroySubWindows) d->hide_sys(); } if (destroyWindow && isWindow()) { - d->extra->topextra->backingStore->windowSurface->setGeometry(QRect()); + if (d->extra && d->extra->topextra && d->extra->topextra->backingStore) + d->extra->topextra->backingStore->windowSurface->setGeometry(QRect()); qwsDisplay()->destroyRegion(internalWinId()); } } - d->setWinId(0); + QT_TRY { + d->setWinId(0); + } QT_CATCH (const std::bad_alloc &) { + // swallow - destructors must not throw + } } } diff --git a/src/gui/kernel/qwidget_s60.cpp b/src/gui/kernel/qwidget_s60.cpp index d860eba..bf53f5d 100644 --- a/src/gui/kernel/qwidget_s60.cpp +++ b/src/gui/kernel/qwidget_s60.cpp @@ -89,7 +89,7 @@ void QWidgetPrivate::setSoftKeys_sys(const QList<QAction*> &softkeys) return; } CEikButtonGroupContainer* nativeContainer = S60->buttonGroupContainer(); - nativeContainer->SetCommandSetL(R_AVKON_SOFTKEYS_EMPTY_WITH_IDS); + QT_TRAP_THROWING(nativeContainer->SetCommandSetL(R_AVKON_SOFTKEYS_EMPTY_WITH_IDS)); int position = -1; int command; @@ -137,12 +137,12 @@ void QWidgetPrivate::setSoftKeys_sys(const QList<QAction*> &softkeys) if (position != -1) { TPtrC text = qt_QString2TPtrC(softKeyAction->text()); - nativeContainer->SetCommandL(position, command, text); + QT_TRAP_THROWING(nativeContainer->SetCommandL(position, command, text)); } } if (needsExitButton) - nativeContainer->SetCommandL(2, EAknSoftkeyExit, qt_QString2TPtrC(QObject::tr("Exit"))); + QT_TRAP_THROWING(nativeContainer->SetCommandL(2, EAknSoftkeyExit, qt_QString2TPtrC(QObject::tr("Exit")))); nativeContainer->DrawDeferred(); // 3.1 needs an extra invitation #else @@ -310,10 +310,8 @@ void QWidgetPrivate::create_sys(WId window, bool /* initializeWindow */, bool de } else if (topLevel) { if (!q->testAttribute(Qt::WA_Moved) && !q->testAttribute(Qt::WA_DontShowOnScreen)) data.crect.moveTopLeft(QPoint(clientRect.iTl.iX, clientRect.iTl.iY)); - QSymbianControl *control= new QSymbianControl(q); - control->ConstructL(true,desktop); - - + QSymbianControl *control= q_check_ptr(new QSymbianControl(q)); + QT_TRAP_THROWING(control->ConstructL(true,desktop)); if (!desktop) { TInt stackingFlags; if ((q->windowType() & Qt::Popup) == Qt::Popup) { @@ -350,7 +348,7 @@ void QWidgetPrivate::create_sys(WId window, bool /* initializeWindow */, bool de control->SetRect(TRect(TPoint(x, y), TSize(w, h))); } else if (q->testAttribute(Qt::WA_NativeWindow) || paintOnScreen()) { // create native child widget QSymbianControl *control = new QSymbianControl(q); - control->ConstructL(!parentWidget); + QT_TRAP_THROWING(control->ConstructL(!parentWidget)); TInt stackingFlags; if ((q->windowType() & Qt::Popup) == Qt::Popup) { @@ -362,7 +360,7 @@ void QWidgetPrivate::create_sys(WId window, bool /* initializeWindow */, bool de setWinId(control); WId parentw = parentWidget->effectiveWinId(); - control->SetContainerWindowL(*parentw); + QT_TRAP_THROWING(control->SetContainerWindowL(*parentw)); q->setAttribute(Qt::WA_WState_Created); int x, y, w, h; @@ -397,7 +395,7 @@ void QWidgetPrivate::show_sys() WId id = q->internalWinId(); if (!extra->topextra->activated) { - id->ActivateL(); + QT_TRAP_THROWING(id->ActivateL()); extra->topextra->activated = 1; } id->MakeVisible(true); @@ -621,9 +619,9 @@ void QWidgetPrivate::s60UpdateIsOpaque() } } -CFbsBitmap* qt_pixmapToNativeBitmapL(QPixmap pixmap, bool invert) +CFbsBitmap* qt_pixmapToNativeBitmap(QPixmap pixmap, bool invert) { - CFbsBitmap* fbsBitmap = new(ELeave)CFbsBitmap; + CFbsBitmap* fbsBitmap = q_check_ptr(new CFbsBitmap); // CBase derived object needs check on new TSize size(pixmap.size().width(), pixmap.size().height()); TDisplayMode mode(EColor16MU); @@ -659,7 +657,7 @@ CFbsBitmap* qt_pixmapToNativeBitmapL(QPixmap pixmap, bool invert) break; } - User::LeaveIfError(fbsBitmap->Create(size, mode)); + qt_throwIfError(fbsBitmap->Create(size, mode)); fbsBitmap->LockHeap(); QImage image = pixmap.toImage(); @@ -714,7 +712,7 @@ void QWidgetPrivate::setWindowIcon_sys(bool forceReset) contextPane->SetPicture(nBitmap,nMask); } else { // Icon set to null -> set context pane picture to default - contextPane->SetPictureToDefaultL(); + QT_TRAP_THROWING(contextPane->SetPictureToDefaultL()); } } else { // Context pane does not exist, try setting small icon to title pane @@ -769,7 +767,7 @@ void QWidgetPrivate::setWindowTitle_sys(const QString &caption) if(caption.isEmpty()) titlePane->SetTextToDefaultL(); else - titlePane->SetTextL(qt_QString2TPtrC(caption)); + QT_TRAP_THROWING(titlePane->SetTextL(qt_QString2TPtrC(caption))); } } #else @@ -1125,7 +1123,11 @@ void QWidget::destroy(bool destroyWindow, bool destroySubWindows) } - d->setWinId(0); + QT_TRY { + d->setWinId(0); + } QT_CATCH (const std::bad_alloc &) { + // swallow - destructors must not throw + } } } diff --git a/src/gui/kernel/qwidget_win.cpp b/src/gui/kernel/qwidget_win.cpp index e39ca77..9d31f57 100644 --- a/src/gui/kernel/qwidget_win.cpp +++ b/src/gui/kernel/qwidget_win.cpp @@ -577,7 +577,11 @@ void QWidget::destroy(bool destroyWindow, bool destroySubWindows) } #endif - d->setWinId(0); + QT_TRY { + d->setWinId(0); + } QT_CATCH (const std::bad_alloc &) { + // swallow - destructors must not throw + } } } diff --git a/src/gui/kernel/qwidget_x11.cpp b/src/gui/kernel/qwidget_x11.cpp index 2a3d2f3..2bb3626 100644 --- a/src/gui/kernel/qwidget_x11.cpp +++ b/src/gui/kernel/qwidget_x11.cpp @@ -1008,7 +1008,11 @@ void QWidget::destroy(bool destroyWindow, bool destroySubWindows) if (destroyWindow) qt_XDestroyWindow(this, X11->display, data->winid); } - d->setWinId(0); + QT_TRY { + d->setWinId(0); + } QT_CATCH (const std::bad_alloc &) { + // swallow - destructors must not throw + } extern void qPRCleanup(QWidget *widget); // from qapplication_x11.cpp if (testAttribute(Qt::WA_WState_Reparented)) diff --git a/src/gui/kernel/qwidgetaction.h b/src/gui/kernel/qwidgetaction.h index 4ec489e..a39b281 100644 --- a/src/gui/kernel/qwidgetaction.h +++ b/src/gui/kernel/qwidgetaction.h @@ -57,7 +57,7 @@ class QWidgetActionPrivate; class Q_GUI_EXPORT QWidgetAction : public QAction { Q_OBJECT - Q_DECLARE_PRIVATE(QWidgetAction) + Q_DECLARE_SCOPED_PRIVATE(QWidgetAction) public: explicit QWidgetAction(QObject *parent); diff --git a/src/gui/kernel/qx11embed_x11.cpp b/src/gui/kernel/qx11embed_x11.cpp index 3ddde1b..84d7d0a 100644 --- a/src/gui/kernel/qx11embed_x11.cpp +++ b/src/gui/kernel/qx11embed_x11.cpp @@ -269,7 +269,7 @@ const int XButtonRelease = ButtonRelease; // need to to inspect window()'s embedded state. class QHackWidget : public QWidget { - Q_DECLARE_PRIVATE(QWidget) + Q_DECLARE_SCOPED_PRIVATE(QWidget) public: QTLWExtra* topData() { return d_func()->topData(); } }; diff --git a/src/gui/kernel/qx11embed_x11.h b/src/gui/kernel/qx11embed_x11.h index 8659ed6..0d67c23 100644 --- a/src/gui/kernel/qx11embed_x11.h +++ b/src/gui/kernel/qx11embed_x11.h @@ -80,7 +80,7 @@ protected: void resizeEvent(QResizeEvent *); private: - Q_DECLARE_PRIVATE(QX11EmbedWidget) + Q_DECLARE_SCOPED_PRIVATE(QX11EmbedWidget) Q_DISABLE_COPY(QX11EmbedWidget) }; @@ -121,7 +121,7 @@ protected: bool event(QEvent *); private: - Q_DECLARE_PRIVATE(QX11EmbedContainer) + Q_DECLARE_SCOPED_PRIVATE(QX11EmbedContainer) Q_DISABLE_COPY(QX11EmbedContainer) }; diff --git a/src/gui/painting/qbrush.cpp b/src/gui/painting/qbrush.cpp index 519e02e..97cbecc 100644 --- a/src/gui/painting/qbrush.cpp +++ b/src/gui/painting/qbrush.cpp @@ -230,7 +230,7 @@ struct QGradientBrushData : public QBrushData QGradient gradient; }; -struct QBrushDataPointerHandler +struct QBrushDataPointerDeleter { static inline void deleteData(QBrushData *d) { @@ -254,12 +254,6 @@ struct QBrushDataPointerHandler deleteData(d); } } - - static inline void reset(QBrushData *&d, QBrushData *other) - { - cleanup(d); - d = other; - } }; /*! @@ -580,7 +574,7 @@ QBrush::~QBrush() void QBrush::cleanUp(QBrushData *x) { - QBrushDataPointerHandler::deleteData(x); + QBrushDataPointerDeleter::deleteData(x); } diff --git a/src/gui/painting/qbrush.h b/src/gui/painting/qbrush.h index 5479305..69adee2 100644 --- a/src/gui/painting/qbrush.h +++ b/src/gui/painting/qbrush.h @@ -62,7 +62,7 @@ struct QBrushData; class QPixmap; class QGradient; class QVariant; -struct QBrushDataPointerHandler; +struct QBrushDataPointerDeleter; class Q_GUI_EXPORT QBrush { @@ -128,7 +128,7 @@ private: friend bool Q_GUI_EXPORT qHasPixmapTexture(const QBrush& brush); void detach(Qt::BrushStyle newStyle); void init(const QColor &color, Qt::BrushStyle bs); - QScopedCustomPointer<QBrushData, QBrushDataPointerHandler> d; + QCustomScopedPointer<QBrushData, QBrushDataPointerDeleter> d; void cleanUp(QBrushData *x); public: diff --git a/src/gui/painting/qgrayraster.c b/src/gui/painting/qgrayraster.c index 888fd9a..f908d48 100644 --- a/src/gui/painting/qgrayraster.c +++ b/src/gui/painting/qgrayraster.c @@ -1880,6 +1880,10 @@ if (memory) fprintf(stderr, "gray_raster_new(), memory ignored"); memory = malloc(sizeof(TRaster)); + if (!memory) { + *araster = 0; + return ErrRaster_Memory_Overflow; + } QT_FT_MEM_ZERO(memory, sizeof(TRaster)); *araster = (QT_FT_Raster) memory; diff --git a/src/gui/painting/qpaintengine.h b/src/gui/painting/qpaintengine.h index 92aa506..6460afa 100644 --- a/src/gui/painting/qpaintengine.h +++ b/src/gui/painting/qpaintengine.h @@ -89,7 +89,7 @@ Q_DECLARE_TYPEINFO(QTextItem, Q_PRIMITIVE_TYPE); class Q_GUI_EXPORT QPaintEngine { - Q_DECLARE_PRIVATE(QPaintEngine) + Q_DECLARE_SCOPED_PRIVATE(QPaintEngine) public: enum PaintEngineFeature { PrimitiveTransform = 0x00000001, // Can transform primitives brushes diff --git a/src/gui/painting/qpaintengine_alpha_p.h b/src/gui/painting/qpaintengine_alpha_p.h index 7f45ad6..1a0b1ac 100644 --- a/src/gui/painting/qpaintengine_alpha_p.h +++ b/src/gui/painting/qpaintengine_alpha_p.h @@ -62,7 +62,7 @@ class QAlphaPaintEnginePrivate; class QAlphaPaintEngine : public QPaintEngine { - Q_DECLARE_PRIVATE(QAlphaPaintEngine) + Q_DECLARE_SCOPED_PRIVATE(QAlphaPaintEngine) public: ~QAlphaPaintEngine(); diff --git a/src/gui/painting/qpaintengine_mac_p.h b/src/gui/painting/qpaintengine_mac_p.h index 755b7b1..58150d0 100644 --- a/src/gui/painting/qpaintengine_mac_p.h +++ b/src/gui/painting/qpaintengine_mac_p.h @@ -174,7 +174,7 @@ public: class QCoreGraphicsPaintEnginePrivate; class QCoreGraphicsPaintEngine : public QPaintEngine { - Q_DECLARE_PRIVATE(QCoreGraphicsPaintEngine) + Q_DECLARE_SCOPED_PRIVATE(QCoreGraphicsPaintEngine) public: QCoreGraphicsPaintEngine(); diff --git a/src/gui/painting/qpaintengine_preview_p.h b/src/gui/painting/qpaintengine_preview_p.h index 9f96d40..d8e2b08 100644 --- a/src/gui/painting/qpaintengine_preview_p.h +++ b/src/gui/painting/qpaintengine_preview_p.h @@ -65,7 +65,7 @@ class QPreviewPaintEnginePrivate; class QPreviewPaintEngine : public QPaintEngine, public QPrintEngine { - Q_DECLARE_PRIVATE(QPreviewPaintEngine) + Q_DECLARE_SCOPED_PRIVATE(QPreviewPaintEngine) public: QPreviewPaintEngine(); ~QPreviewPaintEngine(); diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp index c5e342c..ead3355 100644 --- a/src/gui/painting/qpaintengine_raster.cpp +++ b/src/gui/painting/qpaintengine_raster.cpp @@ -351,30 +351,33 @@ void QRasterPaintEngine::init() Q_CHECK_PTR(d->rasterPoolBase); // The antialiasing raster. - d->grayRaster = new QT_FT_Raster; - qt_ft_grays_raster.raster_new(0, d->grayRaster); - qt_ft_grays_raster.raster_reset(*d->grayRaster, d->rasterPoolBase, d->rasterPoolSize); + d->grayRaster.reset(new QT_FT_Raster); + Q_CHECK_PTR(d->grayRaster.data()); + if (qt_ft_grays_raster.raster_new(0, d->grayRaster.data())) + QT_THROW(std::bad_alloc()); // an error creating the raster is caused by a bad malloc - d->rasterizer = new QRasterizer; - d->rasterBuffer = new QRasterBuffer(); - d->outlineMapper = new QOutlineMapper; + + qt_ft_grays_raster.raster_reset(*d->grayRaster.data(), d->rasterPoolBase, d->rasterPoolSize); + + d->rasterizer.reset(new QRasterizer); + d->rasterBuffer.reset(new QRasterBuffer()); + d->outlineMapper.reset(new QOutlineMapper); d->outlinemapper_xform_dirty = true; d->basicStroker.setMoveToHook(qt_ft_outline_move_to); d->basicStroker.setLineToHook(qt_ft_outline_line_to); d->basicStroker.setCubicToHook(qt_ft_outline_cubic_to); - d->dashStroker = 0; - d->baseClip = new QClipData(d->device->height()); + d->baseClip.reset(new QClipData(d->device->height())); d->baseClip->setClipRect(QRect(0, 0, d->device->width(), d->device->height())); - d->image_filler.init(d->rasterBuffer, this); + d->image_filler.init(d->rasterBuffer.data(), this); d->image_filler.type = QSpanData::Texture; - d->image_filler_xform.init(d->rasterBuffer, this); + d->image_filler_xform.init(d->rasterBuffer.data(), this); d->image_filler_xform.type = QSpanData::Texture; - d->solid_color_filler.init(d->rasterBuffer, this); + d->solid_color_filler.init(d->rasterBuffer.data(), this); d->solid_color_filler.type = QSpanData::Solid; d->deviceDepth = d->device->depth(); @@ -443,15 +446,7 @@ QRasterPaintEngine::~QRasterPaintEngine() free(d->rasterPoolBase); #endif - qt_ft_grays_raster.raster_done(*d->grayRaster); - delete d->grayRaster; - - delete d->rasterBuffer; - delete d->outlineMapper; - delete d->rasterizer; - delete d->dashStroker; - - delete d->baseClip; + qt_ft_grays_raster.raster_done(*d->grayRaster.data()); } /*! @@ -487,12 +482,12 @@ bool QRasterPaintEngine::begin(QPaintDevice *device) d->rasterizer->setClipRect(d->deviceRect); - s->penData.init(d->rasterBuffer, this); + s->penData.init(d->rasterBuffer.data(), this); s->penData.setup(s->pen.brush(), s->intOpacity, s->composition_mode); s->stroker = &d->basicStroker; d->basicStroker.setClipRect(d->deviceRect); - s->brushData.init(d->rasterBuffer, this); + s->brushData.init(d->rasterBuffer.data(), this); s->brushData.setup(s->brush, s->intOpacity, s->composition_mode); d->rasterBuffer->compositionMode = QPainter::CompositionMode_SourceOver; @@ -556,8 +551,7 @@ bool QRasterPaintEngine::end() void QRasterPaintEngine::releaseBuffer() { Q_D(QRasterPaintEngine); - delete d->rasterBuffer; - d->rasterBuffer = new QRasterBuffer; + d->rasterBuffer.reset(new QRasterBuffer); } /*! @@ -801,8 +795,8 @@ void QRasterPaintEngine::updatePen(const QPen &pen) if(pen_style == Qt::SolidLine) { s->stroker = &d->basicStroker; } else if (pen_style != Qt::NoPen) { - if (!d->dashStroker) - d->dashStroker = new QDashStroker(&d->basicStroker); + if (!d->dashStroker.data()) + d->dashStroker.reset(new QDashStroker(&d->basicStroker)); if (pen.isCosmetic()) { d->dashStroker->setClipRect(d->deviceRect); } else { @@ -812,7 +806,7 @@ void QRasterPaintEngine::updatePen(const QPen &pen) } d->dashStroker->setDashPattern(pen.dashPattern()); d->dashStroker->setDashOffset(pen.dashOffset()); - s->stroker = d->dashStroker; + s->stroker = d->dashStroker.data(); } else { s->stroker = 0; } @@ -1245,7 +1239,7 @@ void QRasterPaintEngine::clip(const QVectorPath &path, Qt::ClipOperation op) qrasterpaintengine_state_setNoClip(s); } else { - QClipData *base = d->baseClip; + QClipData *base = d->baseClip.data(); // Intersect with current clip when available... if (op == Qt::IntersectClip && s->clip) @@ -1370,7 +1364,7 @@ void QRasterPaintEngine::clip(const QRegion ®ion, Qt::ClipOperation op) QRasterPaintEngineState *s = state(); const QClipData *clip = d->clip(); - const QClipData *baseClip = d->baseClip; + const QClipData *baseClip = d->baseClip.data(); if (op == Qt::NoClip) { qrasterpaintengine_state_setNoClip(s); @@ -1438,7 +1432,7 @@ void QRasterPaintEngine::fillPath(const QPainterPath &path, QSpanData *fillData) } ensureOutlineMapper(); - d->rasterize(d->outlineMapper->convertPath(path), blend, fillData, d->rasterBuffer); + d->rasterize(d->outlineMapper->convertPath(path), blend, fillData, d->rasterBuffer.data()); } static void fillRect_normalized(const QRect &r, QSpanData *data, @@ -1699,7 +1693,7 @@ void QRasterPaintEnginePrivate::strokeProjective(const QPainterPath &path) ? pathStroker.createStroke(s->matrix.map(path)) : s->matrix.map(pathStroker.createStroke(path)); - rasterize(outlineMapper->convertPath(stroke), s->penData.blend, &s->penData, rasterBuffer); + rasterize(outlineMapper->convertPath(stroke), s->penData.blend, &s->penData, rasterBuffer.data()); outlinemapper_xform_dirty = true; } @@ -1875,7 +1869,7 @@ void QRasterPaintEngine::fill(const QVectorPath &path, const QBrush &brush) // } ensureOutlineMapper(); - d->rasterize(d->outlineMapper->convertPath(path), blend, &s->brushData, d->rasterBuffer); + d->rasterize(d->outlineMapper->convertPath(path), blend, &s->brushData, d->rasterBuffer.data()); } void QRasterPaintEngine::fillRect(const QRectF &r, QSpanData *data) @@ -1996,20 +1990,20 @@ void QRasterPaintEngine::drawPath(const QPainterPath &path) d->dashStroker->setClipRect(d->deviceRect); d->basicStroker.setStrokeWidth(strokeWidth * txscale); d->outlineMapper->setMatrix(QTransform()); - s->stroker->strokePath(path, d->outlineMapper, s->matrix); + s->stroker->strokePath(path, d->outlineMapper.data(), s->matrix); d->outlinemapper_xform_dirty = true; d->basicStroker.setStrokeWidth(strokeWidth); - if (d->dashStroker) + if (d->dashStroker.data()) d->dashStroker->setClipRect(clipRect); } else { ensureOutlineMapper(); - s->stroker->strokePath(path, d->outlineMapper, QTransform()); + s->stroker->strokePath(path, d->outlineMapper.data(), QTransform()); } d->outlineMapper->endOutline(); ProcessSpans blend = d->getPenFunc(d->outlineMapper->controlPointRect, &s->penData); - d->rasterize(d->outlineMapper->outline(), blend, &s->penData, d->rasterBuffer); + d->rasterize(d->outlineMapper->outline(), blend, &s->penData, d->rasterBuffer.data()); } } @@ -2103,7 +2097,7 @@ void QRasterPaintEngine::fillPolygon(const QPointF *points, int pointCount, Poly // scanconvert. ProcessSpans brushBlend = d->getBrushFunc(d->outlineMapper->controlPointRect, &s->brushData); - d->rasterize(outline, brushBlend, &s->brushData, d->rasterBuffer); + d->rasterize(outline, brushBlend, &s->brushData, d->rasterBuffer.data()); } /*! @@ -2199,7 +2193,7 @@ void QRasterPaintEngine::drawPolygon(const QPoint *points, int pointCount, Polyg // scanconvert. ProcessSpans brushBlend = d->getBrushFunc(d->outlineMapper->controlPointRect, &s->brushData); - d->rasterize(d->outlineMapper->outline(), brushBlend, &s->brushData, d->rasterBuffer); + d->rasterize(d->outlineMapper->outline(), brushBlend, &s->brushData, d->rasterBuffer.data()); d->outlineMapper->setCoordinateRounding(false); } } @@ -2824,7 +2818,7 @@ void QRasterPaintEngine::alphaPenBlt(const void* src, int bpl, int depth, int rx if (!s->penData.blend) return; - QRasterBuffer *rb = d->rasterBuffer; + QRasterBuffer *rb = d->rasterBuffer.data(); const QRect rect(rx, ry, w, h); const QClipData *clip = d->clip(); @@ -4086,7 +4080,7 @@ void QRasterPaintEnginePrivate::rasterize(QT_FT_Outline *outline, rasterParams.flags |= (QT_FT_RASTER_FLAG_AA | QT_FT_RASTER_FLAG_DIRECT); rasterParams.gray_spans = callback; - error = qt_ft_grays_raster.raster_render(*grayRaster, &rasterParams); + error = qt_ft_grays_raster.raster_render(*grayRaster.data(), &rasterParams); // Out of memory, reallocate some more and try again... if (error == -6) { // -6 is Result_err_OutOfMemory @@ -4113,9 +4107,9 @@ void QRasterPaintEnginePrivate::rasterize(QT_FT_Outline *outline, #endif Q_CHECK_PTR(rasterPoolBase); // note: we just freed the old rasterPoolBase. I hope it's not fatal. - qt_ft_grays_raster.raster_done(*grayRaster); - qt_ft_grays_raster.raster_new(0, grayRaster); - qt_ft_grays_raster.raster_reset(*grayRaster, rasterPoolBase, rasterPoolSize); + qt_ft_grays_raster.raster_done(*grayRaster.data()); + qt_ft_grays_raster.raster_new(0, grayRaster.data()); + qt_ft_grays_raster.raster_reset(*grayRaster.data(), rasterPoolBase, rasterPoolSize); } else { done = true; } @@ -4149,6 +4143,8 @@ QImage QRasterBuffer::colorizeBitmap(const QImage &image, const QColor &color) for (int y=0; y<height; ++y) { uchar *source = sourceImage.scanLine(y); QRgb *target = reinterpret_cast<QRgb *>(dest.scanLine(y)); + if (!source || !target) + QT_THROW(std::bad_alloc()); // we must have run out of memory for (int x=0; x < width; ++x) target[x] = (source[x>>3] >> (x&7)) & 1 ? fg : bg; } @@ -4352,7 +4348,7 @@ void QClipData::initialize() Q_CHECK_PTR(m_clipLines); QT_TRY { m_spans = (QSpan *)malloc(clipSpanHeight*sizeof(QSpan)); - allocated = clipSpanHeight; + allocated = clipSpanHeight; Q_CHECK_PTR(m_spans); QT_TRY { @@ -4392,9 +4388,7 @@ void QClipData::initialize() { // resize const int maxSpans = (ymax - ymin) * numRects; if (maxSpans > allocated) { - QSpan *newSpans = (QSpan *)realloc(m_spans, maxSpans * sizeof(QSpan)); - Q_CHECK_PTR(newSpans); - m_spans = newSpans; + m_spans = q_check_ptr((QSpan *)realloc(m_spans, maxSpans * sizeof(QSpan))); allocated = maxSpans; } } @@ -4446,11 +4440,13 @@ void QClipData::initialize() } } QT_CATCH(...) { - free(m_spans); + free(m_spans); // have to free m_spans again or someone might think that we were successfully initialized. + m_spans = 0; QT_RETHROW; } } QT_CATCH(...) { - free(m_clipLines); + free(m_clipLines); // same for clipLines + m_clipLines = 0; QT_RETHROW; } } @@ -4824,9 +4820,7 @@ static void qt_span_clip(int count, const QSpan *spans, void *userData) &newspans, newClip->allocated - newClip->count); newClip->count = newspans - newClip->m_spans; if (spans < end) { - QSpan *newSpan = (QSpan *)realloc(newClip->m_spans, newClip->allocated*2*sizeof(QSpan)); - Q_CHECK_PTR(newSpan); - newClip->m_spans = newSpan; + newClip->m_spans = q_check_ptr((QSpan *)realloc(newClip->m_spans, newClip->allocated*2*sizeof(QSpan))); newClip->allocated *= 2; } } diff --git a/src/gui/painting/qpaintengine_raster_p.h b/src/gui/painting/qpaintengine_raster_p.h index 283c442..e0f4f6d 100644 --- a/src/gui/painting/qpaintengine_raster_p.h +++ b/src/gui/painting/qpaintengine_raster_p.h @@ -134,7 +134,7 @@ Q_GUI_EXPORT #endif QRasterPaintEngine : public QPaintEngineEx { - Q_DECLARE_PRIVATE(QRasterPaintEngine) + Q_DECLARE_SCOPED_PRIVATE(QRasterPaintEngine) public: QRasterPaintEngine(QPaintDevice *device); @@ -333,8 +333,8 @@ public: void recalculateFastImages(); QPaintDevice *device; - QOutlineMapper *outlineMapper; - QRasterBuffer *rasterBuffer; + QScopedPointer<QOutlineMapper> outlineMapper; + QScopedPointer<QRasterBuffer> rasterBuffer; #if defined (Q_WS_WIN) HDC hdc; @@ -345,9 +345,9 @@ public: QRect deviceRect; QStroker basicStroker; - QDashStroker *dashStroker; + QScopedPointer<QDashStroker> dashStroker; - QT_FT_Raster *grayRaster; + QScopedPointer<QT_FT_Raster> grayRaster; unsigned long rasterPoolSize; unsigned char *rasterPoolBase; @@ -359,7 +359,7 @@ public: QFontEngineGlyphCache::Type glyphCacheType; - QClipData *baseClip; + QScopedPointer<QClipData> baseClip; int deviceDepth; @@ -370,7 +370,7 @@ public: uint isPlain45DegreeRotation : 1; #endif - QRasterizer *rasterizer; + QScopedPointer<QRasterizer> rasterizer; }; @@ -541,7 +541,7 @@ inline const QClipData *QRasterPaintEnginePrivate::clip() const { Q_Q(const QRasterPaintEngine); if (q->state() && q->state()->clip && q->state()->clip->enabled) return q->state()->clip; - return baseClip; + return baseClip.data(); } diff --git a/src/gui/painting/qpaintengine_x11.cpp b/src/gui/painting/qpaintengine_x11.cpp index e3248ea..6ab39da 100644 --- a/src/gui/painting/qpaintengine_x11.cpp +++ b/src/gui/painting/qpaintengine_x11.cpp @@ -271,7 +271,7 @@ void QXRenderTessellator::addTrap(const Trapezoid &trap) { if (size == allocated) { allocated = qMax(2*allocated, 64); - traps = (XTrapezoid *)realloc(traps, allocated * sizeof(XTrapezoid)); + traps = q_check_ptr((XTrapezoid *)realloc(traps, allocated * sizeof(XTrapezoid))); } traps[size].top = Q27Dot5ToXFixed(trap.top); traps[size].bottom = Q27Dot5ToXFixed(trap.bottom); diff --git a/src/gui/painting/qpaintengine_x11_p.h b/src/gui/painting/qpaintengine_x11_p.h index 738a155..2a7894d 100644 --- a/src/gui/painting/qpaintengine_x11_p.h +++ b/src/gui/painting/qpaintengine_x11_p.h @@ -76,7 +76,7 @@ struct qt_float_point class QX11PaintEngine : public QPaintEngine { - Q_DECLARE_PRIVATE(QX11PaintEngine) + Q_DECLARE_SCOPED_PRIVATE(QX11PaintEngine) public: QX11PaintEngine(); ~QX11PaintEngine(); diff --git a/src/gui/painting/qpaintengineex_p.h b/src/gui/painting/qpaintengineex_p.h index 2a50a51..c38716f 100644 --- a/src/gui/painting/qpaintengineex_p.h +++ b/src/gui/painting/qpaintengineex_p.h @@ -143,7 +143,7 @@ class QPixmapFilter; class Q_GUI_EXPORT QPaintEngineEx : public QPaintEngine { - Q_DECLARE_PRIVATE(QPaintEngineEx) + Q_DECLARE_SCOPED_PRIVATE(QPaintEngineEx) public: QPaintEngineEx(); diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp index 8738f54..5e106fb 100644 --- a/src/gui/painting/qpainter.cpp +++ b/src/gui/painting/qpainter.cpp @@ -80,21 +80,6 @@ QT_BEGIN_NAMESPACE bool qt_show_painter_debug_output = true; #endif -class QPainterPrivateCleaner -{ -public: - static inline void cleanup(QPainterPrivate *d) - { - delete d; - } - - static inline void reset(QPainterPrivate *&d, QPainterPrivate *other) - { - delete d; - d = other; - } -}; - extern QPixmap qt_pixmapForBrush(int style, bool invert); void qt_format_text(const QFont &font, @@ -276,9 +261,7 @@ bool QPainterPrivate::attachPainterPrivate(QPainter *q, QPaintDevice *pdev) // However, to support corner cases we grow the array dynamically if needed. sp->d_ptr->d_ptrs_size <<= 1; const int newSize = sp->d_ptr->d_ptrs_size * sizeof(QPainterPrivate *); - QPainterPrivate ** newPointers = (QPainterPrivate **)realloc(sp->d_ptr->d_ptrs, newSize); - Q_CHECK_PTR(newPointers); - sp->d_ptr->d_ptrs = newPointers; + sp->d_ptr->d_ptrs = q_check_ptr((QPainterPrivate **)realloc(sp->d_ptr->d_ptrs, newSize)); } sp->d_ptr->d_ptrs[++sp->d_ptr->refcount - 2] = q->d_ptr.data(); q->d_ptr.data_ptr() = sp->d_ptr.data(); diff --git a/src/gui/painting/qpainter.h b/src/gui/painting/qpainter.h index c81f5d4..227c6f5 100644 --- a/src/gui/painting/qpainter.h +++ b/src/gui/painting/qpainter.h @@ -79,11 +79,11 @@ class QTextItem; class QMatrix; class QTransform; -class QPainterPrivateCleaner; +class QPainterPrivateDeleter; class Q_GUI_EXPORT QPainter { - Q_DECLARE_PRIVATE(QPainter) + Q_DECLARE_SCOPED_PRIVATE(QPainter) Q_GADGET Q_FLAGS(RenderHint RenderHints) @@ -500,7 +500,7 @@ private: Q_DISABLE_COPY(QPainter) friend class Q3Painter; - QScopedCustomPointer<QPainterPrivate, QPainterPrivateCleaner> d_ptr; + QCustomScopedPointer<QPainterPrivate> d_ptr; friend class QFontEngine; friend class QFontEngineBox; diff --git a/src/gui/painting/qpainterpath.cpp b/src/gui/painting/qpainterpath.cpp index ec8a46c..713cb14 100644 --- a/src/gui/painting/qpainterpath.cpp +++ b/src/gui/painting/qpainterpath.cpp @@ -73,7 +73,7 @@ QT_BEGIN_NAMESPACE -struct QPainterPathPrivateHandler +struct QPainterPathPrivateDeleter { static inline void cleanup(QPainterPathPrivate *d) { @@ -82,13 +82,6 @@ struct QPainterPathPrivateHandler if (d && !d->ref.deref()) delete static_cast<QPainterPathData *>(d); } - - static inline void reset(QPainterPathPrivate *&d, QPainterPathPrivate *other) - { - QPainterPathPrivate *oldD = d; - d = other; - cleanup(oldD); - } }; // This value is used to determine the length of control point vectors diff --git a/src/gui/painting/qpainterpath.h b/src/gui/painting/qpainterpath.h index 5068739..ef92397 100644 --- a/src/gui/painting/qpainterpath.h +++ b/src/gui/painting/qpainterpath.h @@ -57,7 +57,7 @@ QT_MODULE(Gui) class QFont; class QPainterPathPrivate; -struct QPainterPathPrivateHandler; +struct QPainterPathPrivateDeleter; class QPainterPathData; class QPainterPathStrokerPrivate; class QPolygonF; @@ -203,7 +203,7 @@ public: QPainterPath &operator-=(const QPainterPath &other); private: - QScopedCustomPointer<QPainterPathPrivate, QPainterPathPrivateHandler> d_ptr; + QScopedPointer<QPainterPathPrivate, QPainterPathPrivateDeleter> d_ptr; inline void ensureData() { if (!d_ptr) ensureData_helper(); } void ensureData_helper(); @@ -237,7 +237,7 @@ public: friend class QPainterPathStrokerPrivate; friend class QMatrix; friend class QTransform; - friend struct QPainterPathPrivateHandler; + friend struct QPainterPathPrivateDeleter; #ifndef QT_NO_DATASTREAM friend Q_GUI_EXPORT QDataStream &operator<<(QDataStream &, const QPainterPath &); friend Q_GUI_EXPORT QDataStream &operator>>(QDataStream &, QPainterPath &); @@ -256,7 +256,7 @@ Q_GUI_EXPORT QDataStream &operator>>(QDataStream &, QPainterPath &); class Q_GUI_EXPORT QPainterPathStroker { - Q_DECLARE_PRIVATE(QPainterPathStroker) + Q_DECLARE_SCOPED_PRIVATE(QPainterPathStroker) public: QPainterPathStroker(); ~QPainterPathStroker(); diff --git a/src/gui/painting/qpdf_p.h b/src/gui/painting/qpdf_p.h index 0e023d6..26f5bd7 100644 --- a/src/gui/painting/qpdf_p.h +++ b/src/gui/painting/qpdf_p.h @@ -183,7 +183,7 @@ class QPdfBaseEnginePrivate; class QPdfBaseEngine : public QAlphaPaintEngine, public QPrintEngine { - Q_DECLARE_PRIVATE(QPdfBaseEngine) + Q_DECLARE_SCOPED_PRIVATE(QPdfBaseEngine) public: QPdfBaseEngine(QPdfBaseEnginePrivate &d, PaintEngineFeatures f); ~QPdfBaseEngine() {} diff --git a/src/gui/painting/qprintengine_mac_p.h b/src/gui/painting/qprintengine_mac_p.h index 23e99cd..1fdb172 100644 --- a/src/gui/painting/qprintengine_mac_p.h +++ b/src/gui/painting/qprintengine_mac_p.h @@ -72,7 +72,7 @@ class QPrinterPrivate; class QMacPrintEnginePrivate; class QMacPrintEngine : public QPaintEngine, public QPrintEngine { - Q_DECLARE_PRIVATE(QMacPrintEngine) + Q_DECLARE_SCOPED_PRIVATE(QMacPrintEngine) public: QMacPrintEngine(QPrinter::PrinterMode mode); diff --git a/src/gui/painting/qprintengine_pdf_p.h b/src/gui/painting/qprintengine_pdf_p.h index 6f884a9..e130ada 100644 --- a/src/gui/painting/qprintengine_pdf_p.h +++ b/src/gui/painting/qprintengine_pdf_p.h @@ -84,7 +84,7 @@ class QPdfEnginePrivate; class QPdfEngine : public QPdfBaseEngine { - Q_DECLARE_PRIVATE(QPdfEngine) + Q_DECLARE_SCOPED_PRIVATE(QPdfEngine) public: QPdfEngine(QPrinter::PrinterMode m); virtual ~QPdfEngine(); diff --git a/src/gui/painting/qprintengine_ps_p.h b/src/gui/painting/qprintengine_ps_p.h index 986be38a..4b8034e 100644 --- a/src/gui/painting/qprintengine_ps_p.h +++ b/src/gui/painting/qprintengine_ps_p.h @@ -70,7 +70,7 @@ class QPSPrintEnginePrivate; class QPSPrintEngine : public QPdfBaseEngine { - Q_DECLARE_PRIVATE(QPSPrintEngine) + Q_DECLARE_SCOPED_PRIVATE(QPSPrintEngine) public: // QPrinter uses these explicit QPSPrintEngine(QPrinter::PrinterMode m); diff --git a/src/gui/painting/qprintengine_qws_p.h b/src/gui/painting/qprintengine_qws_p.h index 41cf935..5e552fe 100644 --- a/src/gui/painting/qprintengine_qws_p.h +++ b/src/gui/painting/qprintengine_qws_p.h @@ -70,7 +70,7 @@ class QImage; class QtopiaPrintEngine : public QPaintEngine, public QPrintEngine { - Q_DECLARE_PRIVATE(QtopiaPrintEngine) + Q_DECLARE_SCOPED_PRIVATE(QtopiaPrintEngine) public: QtopiaPrintEngine(QPrinter::PrinterMode mode); diff --git a/src/gui/painting/qprintengine_win_p.h b/src/gui/painting/qprintengine_win_p.h index 9eb0b69..4438ce7 100644 --- a/src/gui/painting/qprintengine_win_p.h +++ b/src/gui/painting/qprintengine_win_p.h @@ -69,7 +69,7 @@ class QPainterState; class QWin32PrintEngine : public QAlphaPaintEngine, public QPrintEngine { - Q_DECLARE_PRIVATE(QWin32PrintEngine) + Q_DECLARE_SCOPED_PRIVATE(QWin32PrintEngine) public: QWin32PrintEngine(QPrinter::PrinterMode mode); diff --git a/src/gui/painting/qprinter.h b/src/gui/painting/qprinter.h index 25c2f0c..842845b 100644 --- a/src/gui/painting/qprinter.h +++ b/src/gui/painting/qprinter.h @@ -65,7 +65,7 @@ class QPrinterInfo; class Q_GUI_EXPORT QPrinter : public QPaintDevice { - Q_DECLARE_PRIVATE(QPrinter) + Q_DECLARE_SCOPED_PRIVATE(QPrinter) public: enum PrinterMode { ScreenResolution, PrinterResolution, HighResolution }; diff --git a/src/gui/painting/qprinterinfo.h b/src/gui/painting/qprinterinfo.h index c34e591..5c0a25f 100644 --- a/src/gui/painting/qprinterinfo.h +++ b/src/gui/painting/qprinterinfo.h @@ -53,10 +53,10 @@ QT_MODULE(Gui) #ifndef QT_NO_PRINTER class QPrinterInfoPrivate; -class QPrinterInfoPrivateCleanup; +class QPrinterInfoPrivateDeleter; class Q_GUI_EXPORT QPrinterInfo { -Q_DECLARE_PRIVATE(QPrinterInfo) +Q_DECLARE_SCOPED_PRIVATE(QPrinterInfo) public: QPrinterInfo(); @@ -77,7 +77,7 @@ public: private: QPrinterInfo(const QString& name); - QScopedCustomPointer<QPrinterInfoPrivate, QPrinterInfoPrivateCleanup> d_ptr; + QScopedPointer<QPrinterInfoPrivate, QPrinterInfoPrivateDeleter> d_ptr; }; #endif // QT_NO_PRINTER diff --git a/src/gui/painting/qprinterinfo_mac.cpp b/src/gui/painting/qprinterinfo_mac.cpp index 6932015..66455d9 100644 --- a/src/gui/painting/qprinterinfo_mac.cpp +++ b/src/gui/painting/qprinterinfo_mac.cpp @@ -65,7 +65,7 @@ private: static QPrinterInfoPrivate nullQPrinterInfoPrivate; -class QPrinterInfoPrivateCleanup +class QPrinterInfoPrivateDeleter { public: static inline void cleanup(QPrinterInfoPrivate *d) @@ -73,12 +73,6 @@ public: if (d != &nullQPrinterInfoPrivate) delete d; } - - static inline void reset(QPrinterInfoPrivate *&d, QPrinterInfoPrivate *other) - { - cleanup(d); - d = other; - } }; extern QPrinter::PaperSize qSizeFTopaperSize(const QSizeF& size); diff --git a/src/gui/painting/qprinterinfo_unix.cpp b/src/gui/painting/qprinterinfo_unix.cpp index b9f1f3b..11f94dc 100644 --- a/src/gui/painting/qprinterinfo_unix.cpp +++ b/src/gui/painting/qprinterinfo_unix.cpp @@ -82,7 +82,7 @@ private: static QPrinterInfoPrivate nullQPrinterInfoPrivate; -class QPrinterInfoPrivateCleanup +class QPrinterInfoPrivateDeleter { public: static inline void cleanup(QPrinterInfoPrivate *d) @@ -90,12 +90,6 @@ public: if (d != &nullQPrinterInfoPrivate) delete d; } - - static inline void reset(QPrinterInfoPrivate *&d, QPrinterInfoPrivate *other) - { - cleanup(d); - d = other; - } }; ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gui/painting/qprinterinfo_win.cpp b/src/gui/painting/qprinterinfo_win.cpp index e047f5d..3f2c510 100644 --- a/src/gui/painting/qprinterinfo_win.cpp +++ b/src/gui/painting/qprinterinfo_win.cpp @@ -69,7 +69,7 @@ private: static QPrinterInfoPrivate nullQPrinterInfoPrivate; -class QPrinterInfoPrivateCleanup +class QPrinterInfoPrivateDeleter { public: static inline void cleanup(QPrinterInfoPrivate *d) @@ -77,12 +77,6 @@ public: if (d != &nullQPrinterInfoPrivate) delete d; } - - static inline void reset(QPrinterInfoPrivate *&d, QPrinterInfoPrivate *other) - { - cleanup(d); - d = other; - } }; ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gui/painting/qrasterizer.cpp b/src/gui/painting/qrasterizer.cpp index 6d15271..346b31d 100644 --- a/src/gui/painting/qrasterizer.cpp +++ b/src/gui/painting/qrasterizer.cpp @@ -437,10 +437,8 @@ inline void QScanConverter::allocate(int size) { if (m_alloc < size) { int newAlloc = qMax(size, 2 * m_alloc); - Intersection *newIntersections = (Intersection *)realloc(m_intersections, newAlloc * sizeof(Intersection)); - Q_CHECK_PTR(newIntersections); + m_intersections = q_check_ptr((Intersection *)realloc(m_intersections, newAlloc * sizeof(Intersection))); m_alloc = newAlloc; - m_intersections = newIntersections; } } diff --git a/src/gui/painting/qtessellator.cpp b/src/gui/painting/qtessellator.cpp index 711f997..6c16772 100644 --- a/src/gui/painting/qtessellator.cpp +++ b/src/gui/painting/qtessellator.cpp @@ -406,9 +406,9 @@ void QTessellatorPrivate::Scanline::init(int maxActiveEdges) if (!edges || maxActiveEdges > default_alloc) { max_edges = maxActiveEdges; int s = qMax(maxActiveEdges + 1, default_alloc + 1); - edges = (Edge **)realloc(edges, s*sizeof(Edge *)); - edge_table = (Edge *)realloc(edge_table, s*sizeof(Edge)); - old = (Edge **)realloc(old, s*sizeof(Edge *)); + edges = q_check_ptr((Edge **)realloc(edges, s*sizeof(Edge *))); + edge_table = q_check_ptr((Edge *)realloc(edge_table, s*sizeof(Edge))); + old = q_check_ptr((Edge **)realloc(old, s*sizeof(Edge *))); } size = 0; old_size = 0; @@ -566,8 +566,8 @@ void QTessellatorPrivate::Vertices::init(int maxVertices) { if (!storage || maxVertices > allocated) { int size = qMax((int)default_alloc, maxVertices); - storage = (Vertex *)realloc(storage, size*sizeof(Vertex)); - sorted = (Vertex **)realloc(sorted, size*sizeof(Vertex *)); + storage = q_check_ptr((Vertex *)realloc(storage, size*sizeof(Vertex))); + sorted = q_check_ptr((Vertex **)realloc(sorted, size*sizeof(Vertex *))); allocated = maxVertices; } } @@ -739,7 +739,7 @@ void QTessellatorPrivate::cancelCoincidingEdges() if (testListSize > tlSize - 2) { tlSize = qMax(tlSize*2, 16); - tl = (QCoincidingEdge *)realloc(tl, tlSize*sizeof(QCoincidingEdge)); + tl = q_check_ptr((QCoincidingEdge *)realloc(tl, tlSize*sizeof(QCoincidingEdge))); } if (n->flags & (LineBeforeStarts|LineBeforeHorizontal)) { tl[testListSize].start = n; diff --git a/src/gui/painting/qwindowsurface_raster_p.h b/src/gui/painting/qwindowsurface_raster_p.h index 0f02a45..1b09914 100644 --- a/src/gui/painting/qwindowsurface_raster_p.h +++ b/src/gui/painting/qwindowsurface_raster_p.h @@ -111,7 +111,7 @@ public: private: void prepareBuffer(QImage::Format format, QWidget *widget); - Q_DECLARE_PRIVATE(QRasterWindowSurface) + Q_DECLARE_SCOPED_PRIVATE(QRasterWindowSurface) QScopedPointer<QRasterWindowSurfacePrivate> d_ptr; }; diff --git a/src/gui/painting/qwindowsurface_s60.cpp b/src/gui/painting/qwindowsurface_s60.cpp index e81adcc..5de4317 100644 --- a/src/gui/painting/qwindowsurface_s60.cpp +++ b/src/gui/painting/qwindowsurface_s60.cpp @@ -75,8 +75,8 @@ QS60WindowSurface::QS60WindowSurface(QWidget* widget) // We create empty CFbsBitmap here -> it will be resized in setGeometry - d_ptr->bitmap = new (ELeave) CFbsBitmap; - User::LeaveIfError( d_ptr->bitmap->Create(TSize(0, 0), mode ) ); + d_ptr->bitmap = q_check_ptr(new CFbsBitmap); // CBase derived object needs check on new + qt_throwIfError( d_ptr->bitmap->Create(TSize(0, 0), mode ) ); updatePaintDeviceOnBitmap(); @@ -141,7 +141,8 @@ bool QS60WindowSurface::scroll(const QRegion &area, int dx, int dy) if (d_ptr->device.isNull()) return false; - CFbsBitmapDevice *bitmapDevice = CFbsBitmapDevice::NewL(d_ptr->bitmap); + CFbsBitmapDevice *bitmapDevice = 0; + QT_TRAP_THROWING(bitmapDevice = CFbsBitmapDevice::NewL(d_ptr->bitmap)); CBitmapContext *bitmapContext; TInt err = bitmapDevice->CreateBitmapContext(bitmapContext); if (err != KErrNone) { @@ -177,7 +178,7 @@ void QS60WindowSurface::setGeometry(const QRect& rect) QWindowSurface::setGeometry(rect); TRect nativeRect(qt_QRect2TRect(rect)); - User::LeaveIfError(d_ptr->bitmap->Resize(nativeRect.Size())); + qt_throwIfError(d_ptr->bitmap->Resize(nativeRect.Size())); if (!rect.isNull()) updatePaintDeviceOnBitmap(); diff --git a/src/gui/statemachine/qbasickeyeventtransition_p.h b/src/gui/statemachine/qbasickeyeventtransition_p.h index 1d507b3..038c7d1 100644 --- a/src/gui/statemachine/qbasickeyeventtransition_p.h +++ b/src/gui/statemachine/qbasickeyeventtransition_p.h @@ -88,7 +88,7 @@ protected: private: Q_DISABLE_COPY(QBasicKeyEventTransition) - Q_DECLARE_PRIVATE(QBasicKeyEventTransition) + Q_DECLARE_SCOPED_PRIVATE(QBasicKeyEventTransition) }; QT_END_NAMESPACE diff --git a/src/gui/statemachine/qbasicmouseeventtransition_p.h b/src/gui/statemachine/qbasicmouseeventtransition_p.h index 8ca6118..eb0dc0f 100644 --- a/src/gui/statemachine/qbasicmouseeventtransition_p.h +++ b/src/gui/statemachine/qbasicmouseeventtransition_p.h @@ -91,7 +91,7 @@ protected: private: Q_DISABLE_COPY(QBasicMouseEventTransition) - Q_DECLARE_PRIVATE(QBasicMouseEventTransition) + Q_DECLARE_SCOPED_PRIVATE(QBasicMouseEventTransition) }; QT_END_NAMESPACE diff --git a/src/gui/statemachine/qkeyeventtransition.h b/src/gui/statemachine/qkeyeventtransition.h index f5e8de3..aeae620 100644 --- a/src/gui/statemachine/qkeyeventtransition.h +++ b/src/gui/statemachine/qkeyeventtransition.h @@ -79,7 +79,7 @@ protected: private: Q_DISABLE_COPY(QKeyEventTransition) - Q_DECLARE_PRIVATE(QKeyEventTransition) + Q_DECLARE_SCOPED_PRIVATE(QKeyEventTransition) }; #endif //QT_NO_STATEMACHINE diff --git a/src/gui/statemachine/qmouseeventtransition.h b/src/gui/statemachine/qmouseeventtransition.h index 73ae6c9..5f2d57b 100644 --- a/src/gui/statemachine/qmouseeventtransition.h +++ b/src/gui/statemachine/qmouseeventtransition.h @@ -84,7 +84,7 @@ protected: private: Q_DISABLE_COPY(QMouseEventTransition) - Q_DECLARE_PRIVATE(QMouseEventTransition) + Q_DECLARE_SCOPED_PRIVATE(QMouseEventTransition) }; #endif //QT_NO_STATEMACHINE diff --git a/src/gui/styles/qcleanlooksstyle.h b/src/gui/styles/qcleanlooksstyle.h index ebfb707..834f238 100644 --- a/src/gui/styles/qcleanlooksstyle.h +++ b/src/gui/styles/qcleanlooksstyle.h @@ -56,7 +56,7 @@ class QCleanlooksStylePrivate; class Q_GUI_EXPORT QCleanlooksStyle : public QWindowsStyle { Q_OBJECT - Q_DECLARE_PRIVATE(QCleanlooksStyle) + Q_DECLARE_SCOPED_PRIVATE(QCleanlooksStyle) public: QCleanlooksStyle(); diff --git a/src/gui/styles/qcommonstyle.cpp b/src/gui/styles/qcommonstyle.cpp index 7b8b75e..ba23499 100644 --- a/src/gui/styles/qcommonstyle.cpp +++ b/src/gui/styles/qcommonstyle.cpp @@ -3176,8 +3176,10 @@ QRect QCommonStyle::subElementRect(SubElement sr, const QStyleOption *opt, if (const QStyleOptionViewItemV4 *vopt = qstyleoption_cast<const QStyleOptionViewItemV4 *>(opt)) { if (!d->isViewItemCached(*vopt)) { d->viewItemLayout(vopt, &d->checkRect, &d->decorationRect, &d->displayRect, false); - if (d->cachedOption) + if (d->cachedOption) { delete d->cachedOption; + d->cachedOption = 0; + } d->cachedOption = new QStyleOptionViewItemV4(*vopt); } if (sr == SE_ViewItemCheckIndicator) diff --git a/src/gui/styles/qcommonstyle.h b/src/gui/styles/qcommonstyle.h index ce54a96..1f64fb3 100644 --- a/src/gui/styles/qcommonstyle.h +++ b/src/gui/styles/qcommonstyle.h @@ -98,7 +98,7 @@ protected: QCommonStyle(QCommonStylePrivate &dd); private: - Q_DECLARE_PRIVATE(QCommonStyle) + Q_DECLARE_SCOPED_PRIVATE(QCommonStyle) Q_DISABLE_COPY(QCommonStyle) }; diff --git a/src/gui/styles/qgtkstyle.h b/src/gui/styles/qgtkstyle.h index e12f175..3feeafa 100644 --- a/src/gui/styles/qgtkstyle.h +++ b/src/gui/styles/qgtkstyle.h @@ -60,7 +60,7 @@ class QGtkStylePrivate; class Q_GUI_EXPORT QGtkStyle : public QCleanlooksStyle { Q_OBJECT - Q_DECLARE_PRIVATE(QGtkStyle) + Q_DECLARE_SCOPED_PRIVATE(QGtkStyle) public: QGtkStyle(); diff --git a/src/gui/styles/qmotifstyle.h b/src/gui/styles/qmotifstyle.h index e848eb4..356f420 100644 --- a/src/gui/styles/qmotifstyle.h +++ b/src/gui/styles/qmotifstyle.h @@ -113,7 +113,7 @@ protected: bool eventFilter(QObject *o, QEvent *e); private: - Q_DECLARE_PRIVATE(QMotifStyle) + Q_DECLARE_SCOPED_PRIVATE(QMotifStyle) Q_DISABLE_COPY(QMotifStyle) bool highlightCols; diff --git a/src/gui/styles/qplastiquestyle.h b/src/gui/styles/qplastiquestyle.h index ac3da41..74560fc 100644 --- a/src/gui/styles/qplastiquestyle.h +++ b/src/gui/styles/qplastiquestyle.h @@ -56,7 +56,7 @@ class QPlastiqueStylePrivate; class Q_GUI_EXPORT QPlastiqueStyle : public QWindowsStyle { Q_OBJECT - Q_DECLARE_PRIVATE(QPlastiqueStyle) + Q_DECLARE_SCOPED_PRIVATE(QPlastiqueStyle) public: QPlastiqueStyle(); ~QPlastiqueStyle(); diff --git a/src/gui/styles/qproxystyle.h b/src/gui/styles/qproxystyle.h index c9edaff..33f252a 100644 --- a/src/gui/styles/qproxystyle.h +++ b/src/gui/styles/qproxystyle.h @@ -102,7 +102,7 @@ protected Q_SLOTS: Qt::Orientation orientation, const QStyleOption *option = 0, const QWidget *widget = 0) const; private: Q_DISABLE_COPY(QProxyStyle) - Q_DECLARE_PRIVATE(QProxyStyle) + Q_DECLARE_SCOPED_PRIVATE(QProxyStyle) }; #endif // QT_NO_STYLE_PROXY diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp index b083f4b..888a6ed 100644 --- a/src/gui/styles/qs60style.cpp +++ b/src/gui/styles/qs60style.cpp @@ -88,16 +88,16 @@ static const QByteArray propertyKeyCurrentlayout = "currentlayout"; const layoutHeader QS60StylePrivate::m_layoutHeaders[] = { // *** generated layout data *** -{240,320,1,14,true,QLatin1String("QVGA Landscape Mirrored")}, -{240,320,1,14,false,QLatin1String("QVGA Landscape")}, -{320,240,1,14,true,QLatin1String("QVGA Portrait Mirrored")}, -{320,240,1,14,false,QLatin1String("QVGA Portrait")}, -{360,640,1,14,true,QLatin1String("NHD Landscape Mirrored")}, -{360,640,1,14,false,QLatin1String("NHD Landscape")}, -{640,360,1,14,true,QLatin1String("NHD Portrait Mirrored")}, -{640,360,1,14,false,QLatin1String("NHD Portrait")}, -{352,800,1,12,true,QLatin1String("E90 Landscape Mirrored")}, -{352,800,1,12,false,QLatin1String("E90 Landscape")} +{240,320,1,14,true,"QVGA Landscape Mirrored"}, +{240,320,1,14,false,"QVGA Landscape"}, +{320,240,1,14,true,"QVGA Portrait Mirrored"}, +{320,240,1,14,false,"QVGA Portrait"}, +{360,640,1,14,true,"NHD Landscape Mirrored"}, +{360,640,1,14,false,"NHD Landscape"}, +{640,360,1,14,true,"NHD Portrait Mirrored"}, +{640,360,1,14,false,"NHD Portrait"}, +{352,800,1,12,true,"E90 Landscape Mirrored"}, +{352,800,1,12,false,"E90 Landscape"} // *** End of generated data *** }; const int QS60StylePrivate::m_numberOfLayouts = @@ -319,7 +319,7 @@ QVariant QS60StylePrivate::styleProperty(const char *name) const static QStringList layouts; if (layouts.isEmpty()) for (int i = 0; i < m_numberOfLayouts; i++) - layouts.append(m_layoutHeaders[i].layoutName); + layouts.append(QLatin1String(m_layoutHeaders[i].layoutName)); return layouts; } return QVariant(); diff --git a/src/gui/styles/qs60style.h b/src/gui/styles/qs60style.h index d8e9a40..38d8e48 100644 --- a/src/gui/styles/qs60style.h +++ b/src/gui/styles/qs60style.h @@ -57,7 +57,7 @@ class QS60StylePrivate; class Q_GUI_EXPORT QS60Style : public QCommonStyle { Q_OBJECT - Q_DECLARE_PRIVATE(QS60Style) + Q_DECLARE_SCOPED_PRIVATE(QS60Style) public: QS60Style(); diff --git a/src/gui/styles/qs60style_p.h b/src/gui/styles/qs60style_p.h index 7240978..2eb40de 100644 --- a/src/gui/styles/qs60style_p.h +++ b/src/gui/styles/qs60style_p.h @@ -75,7 +75,7 @@ typedef struct { int major_version; int minor_version; bool mirroring; // TODO: (nice to have) Use Qt::LayoutDirection - QString layoutName; + const char* layoutName; } layoutHeader; #ifdef Q_OS_SYMBIAN diff --git a/src/gui/styles/qs60style_s60.cpp b/src/gui/styles/qs60style_s60.cpp index 63346da..8e9918e 100644 --- a/src/gui/styles/qs60style_s60.cpp +++ b/src/gui/styles/qs60style_s60.cpp @@ -106,10 +106,10 @@ public: static QPixmap generateMissingThemeGraphic(QS60StyleEnums::SkinParts &part, const QSize &size, QS60StylePrivate::SkinElementFlags flags); private: - static QPixmap createSkinnedGraphicsL(QS60StyleEnums::SkinParts part, + static QPixmap createSkinnedGraphicsLX(QS60StyleEnums::SkinParts part, const QSize &size, QS60StylePrivate::SkinElementFlags flags); - static QPixmap createSkinnedGraphicsL(QS60StylePrivate::SkinFrameElements frameElement, const QSize &size, QS60StylePrivate::SkinElementFlags flags); - static QPixmap colorSkinnedGraphicsL(const QS60StyleEnums::SkinParts &stylepart, + static QPixmap createSkinnedGraphicsLX(QS60StylePrivate::SkinFrameElements frameElement, const QSize &size, QS60StylePrivate::SkinElementFlags flags); + static QPixmap colorSkinnedGraphicsLX(const QS60StyleEnums::SkinParts &stylepart, const QSize &size, QS60StylePrivate::SkinElementFlags flags); static void frameIdAndCenterId(QS60StylePrivate::SkinFrameElements frameElement, TAknsItemID &frameId, TAknsItemID ¢erId); static TRect innerRectFromElement(QS60StylePrivate::SkinFrameElements frameElement, const TRect &outerRect); @@ -336,10 +336,10 @@ QPixmap QS60StyleModeSpecifics::skinnedGraphics( QS60StylePrivate::SkinElementFlags flags) { QPixmap themedImage; - TRAPD( error, { - const QPixmap skinnedImage = createSkinnedGraphicsL(stylepart, size, flags); + TRAPD( error, QT_TRYCATCH_LEAVING({ + const QPixmap skinnedImage = createSkinnedGraphicsLX(stylepart, size, flags); themedImage = skinnedImage; - }); + })); if (error) return themedImage = QPixmap(); return themedImage; @@ -349,10 +349,10 @@ QPixmap QS60StyleModeSpecifics::skinnedGraphics( QS60StylePrivate::SkinFrameElements frame, const QSize &size, QS60StylePrivate::SkinElementFlags flags) { QPixmap themedImage; - TRAPD( error, { - const QPixmap skinnedImage = createSkinnedGraphicsL(frame, size, flags); + TRAPD( error, QT_TRYCATCH_LEAVING({ + const QPixmap skinnedImage = createSkinnedGraphicsLX(frame, size, flags); themedImage = skinnedImage; - }); + })); if (error) return themedImage = QPixmap(); return themedImage; @@ -363,7 +363,7 @@ QPixmap QS60StyleModeSpecifics::colorSkinnedGraphics( const QSize &size, QS60StylePrivate::SkinElementFlags flags) { QPixmap colorGraphics; - TRAPD(error, colorGraphics = colorSkinnedGraphicsL(stylepart, size, flags)); + TRAPD(error, QT_TRYCATCH_LEAVING(colorGraphics = colorSkinnedGraphicsLX(stylepart, size, flags))); return error ? QPixmap() : colorGraphics; } @@ -521,10 +521,11 @@ void QS60StyleModeSpecifics::fallbackInfo(const QS60StyleEnums::SkinParts &style } } -QPixmap QS60StyleModeSpecifics::colorSkinnedGraphicsL( +QPixmap QS60StyleModeSpecifics::colorSkinnedGraphicsLX( const QS60StyleEnums::SkinParts &stylepart, const QSize &size, QS60StylePrivate::SkinElementFlags flags) { + // this function can throw both exceptions and leaves. There are no cleanup dependencies between Qt and Symbian parts. const int stylepartIndex = (int)stylepart; const TAknsItemID skinId = m_partMap[stylepartIndex].skinID; @@ -563,6 +564,13 @@ QColor QS60StyleModeSpecifics::colorValue(const TAknsItemID &colorGroup, int col return QColor(skinnedColor.Red(),skinnedColor.Green(),skinnedColor.Blue()); } +struct QAutoFbsBitmapHeapLock +{ + QAutoFbsBitmapHeapLock(CFbsBitmap* aBmp) : mBmp(aBmp) { mBmp->LockHeap(); } + ~QAutoFbsBitmapHeapLock() { mBmp->UnlockHeap(); } + CFbsBitmap* mBmp; +}; + QPixmap QS60StyleModeSpecifics::fromFbsBitmap(CFbsBitmap *icon, CFbsBitmap *mask, QS60StylePrivate::SkinElementFlags flags, QImage::Format format) { Q_ASSERT(icon); @@ -589,13 +597,13 @@ QPixmap QS60StyleModeSpecifics::fromFbsBitmap(CFbsBitmap *icon, CFbsBitmap *mask if (mask) { //checkAndUnCompressBitmap might set mask to NULL const TSize maskSize = icon->SizeInPixels(); const int maskBytesPerLine = CFbsBitmap::ScanLineLength(maskSize.iWidth, mask->DisplayMode()); - mask->LockHeap(); + // heap lock object required because QImage ctor might throw + QAutoFbsBitmapHeapLock maskHeapLock(mask); const uchar *const maskBytes = (uchar *)mask->DataAddress(); // Since no other bitmap should be locked, we can just "borrow" the mask data for setAlphaChannel const QImage maskImage(maskBytes, maskSize.iWidth, maskSize.iHeight, maskBytesPerLine, QImage::Format_Indexed8); if (!maskImage.isNull()) iconImage.setAlphaChannel(maskImage); - mask->UnlockHeap(); } } @@ -631,10 +639,11 @@ QPoint qt_s60_fill_background_offset(const QWidget *targetWidget) return QPoint(globalPos.iX, globalPos.iY); } -QPixmap QS60StyleModeSpecifics::createSkinnedGraphicsL( +QPixmap QS60StyleModeSpecifics::createSkinnedGraphicsLX( QS60StyleEnums::SkinParts part, const QSize &size, QS60StylePrivate::SkinElementFlags flags) { + // this function can throw both exceptions and leaves. There are no cleanup dependencies between Qt and Symbian parts. if (!size.isValid()) return QPixmap(); @@ -712,9 +721,10 @@ QPixmap QS60StyleModeSpecifics::createSkinnedGraphicsL( return result; } -QPixmap QS60StyleModeSpecifics::createSkinnedGraphicsL(QS60StylePrivate::SkinFrameElements frameElement, +QPixmap QS60StyleModeSpecifics::createSkinnedGraphicsLX(QS60StylePrivate::SkinFrameElements frameElement, const QSize &size, QS60StylePrivate::SkinElementFlags flags) { + // this function can throw both exceptions and leaves. There are no cleanup dependencies between Qt and Symbian parts. if (!size.isValid()) return QPixmap(); @@ -892,7 +902,10 @@ void QS60StyleModeSpecifics::checkAndUnCompressBitmap(CFbsBitmap*& aOriginalBitm void QS60StyleModeSpecifics::checkAndUnCompressBitmapL(CFbsBitmap*& aOriginalBitmap) { - if (aOriginalBitmap->IsCompressedInRAM()) { + const TSize iconSize = aOriginalBitmap->SizeInPixels(); + const int iconBytesPerLine = CFbsBitmap::ScanLineLength(iconSize.iWidth, aOriginalBitmap->DisplayMode()); + const int iconBytesCount = iconBytesPerLine * iconSize.iHeight; + if (aOriginalBitmap->IsCompressedInRAM() || aOriginalBitmap->DataSize() < iconBytesCount) { const TSize iconSize(aOriginalBitmap->SizeInPixels().iWidth, aOriginalBitmap->SizeInPixels().iHeight); CFbsBitmap* uncompressedBitmap = new (ELeave) CFbsBitmap(); @@ -941,7 +954,7 @@ QFont QS60StylePrivate::s60Font_specific( } QFont result; - TRAPD( error, { + TRAPD( error, QT_TRYCATCH_LEAVING({ const CAknLayoutFont* aknFont = AknFontAccess::CreateLayoutFontFromSpecificationL(*dev, spec); @@ -950,7 +963,7 @@ QFont QS60StylePrivate::s60Font_specific( result.setPointSize(pointSize); // Correct the font size returned by CreateLayoutFontFromSpecificationL() delete aknFont; - }); + })); if (error) result = QFont(); return result; } @@ -1178,7 +1191,9 @@ void QS60StyleModeSpecifics::unCompressBitmapL(const TRect& aTrgRect, CFbsBitmap User::Leave(KErrArgument); // Note! aSrcBitmap->IsCompressedInRAM() is always ETrue, since this method is called only if that applies! - ASSERT(aSrcBitmap->IsCompressedInRAM()); + // Extra note! this function is also being used when bitmaps appear to be compressed (because DataSize is too small) + // even when they pretend they are not. Assert removed. +// ASSERT(aSrcBitmap->IsCompressedInRAM()); TDisplayMode displayMode = aSrcBitmap->DisplayMode(); diff --git a/src/gui/styles/qstyle.h b/src/gui/styles/qstyle.h index d79c39c..61a4ed5 100644 --- a/src/gui/styles/qstyle.h +++ b/src/gui/styles/qstyle.h @@ -68,7 +68,7 @@ class QStylePrivate; class Q_GUI_EXPORT QStyle : public QObject { Q_OBJECT - Q_DECLARE_PRIVATE(QStyle) + Q_DECLARE_SCOPED_PRIVATE(QStyle) protected: QStyle(QStylePrivate &dd); diff --git a/src/gui/styles/qstylesheetstyle_p.h b/src/gui/styles/qstylesheetstyle_p.h index 9b7b79d..399e449 100644 --- a/src/gui/styles/qstylesheetstyle_p.h +++ b/src/gui/styles/qstylesheetstyle_p.h @@ -182,7 +182,7 @@ public: private: Q_DISABLE_COPY(QStyleSheetStyle) - Q_DECLARE_PRIVATE(QStyleSheetStyle) + Q_DECLARE_SCOPED_PRIVATE(QStyleSheetStyle) }; diff --git a/src/gui/styles/qwindowsmobilestyle.h b/src/gui/styles/qwindowsmobilestyle.h index ab32e8e..9892dec 100644 --- a/src/gui/styles/qwindowsmobilestyle.h +++ b/src/gui/styles/qwindowsmobilestyle.h @@ -104,7 +104,7 @@ protected: QWindowsMobileStyle(QWindowsMobileStylePrivate &dd); private: - Q_DECLARE_PRIVATE(QWindowsMobileStyle) + Q_DECLARE_SCOPED_PRIVATE(QWindowsMobileStyle) }; #endif // QT_NO_STYLE_WINDOWSMOBILE diff --git a/src/gui/styles/qwindowsstyle.h b/src/gui/styles/qwindowsstyle.h index c169a84..45260e8 100644 --- a/src/gui/styles/qwindowsstyle.h +++ b/src/gui/styles/qwindowsstyle.h @@ -98,7 +98,7 @@ protected: private: Q_DISABLE_COPY(QWindowsStyle) - Q_DECLARE_PRIVATE(QWindowsStyle) + Q_DECLARE_SCOPED_PRIVATE(QWindowsStyle) void *reserved; }; diff --git a/src/gui/styles/qwindowsvistastyle.h b/src/gui/styles/qwindowsvistastyle.h index 97b1e74..60cd7a5 100644 --- a/src/gui/styles/qwindowsvistastyle.h +++ b/src/gui/styles/qwindowsvistastyle.h @@ -96,7 +96,7 @@ protected Q_SLOTS: private: Q_DISABLE_COPY(QWindowsVistaStyle) - Q_DECLARE_PRIVATE(QWindowsVistaStyle) + Q_DECLARE_SCOPED_PRIVATE(QWindowsVistaStyle) friend class QStyleFactory; }; #endif //QT_NO_STYLE_WINDOWSVISTA diff --git a/src/gui/styles/qwindowsxpstyle.h b/src/gui/styles/qwindowsxpstyle.h index ab26f56..21e24ff 100644 --- a/src/gui/styles/qwindowsxpstyle.h +++ b/src/gui/styles/qwindowsxpstyle.h @@ -93,7 +93,7 @@ protected Q_SLOTS: private: Q_DISABLE_COPY(QWindowsXPStyle) - Q_DECLARE_PRIVATE(QWindowsXPStyle) + Q_DECLARE_SCOPED_PRIVATE(QWindowsXPStyle) friend class QStyleFactory; void *reserved; }; diff --git a/src/gui/text/qabstractfontengine_qws.h b/src/gui/text/qabstractfontengine_qws.h index e6be611..8403f87 100644 --- a/src/gui/text/qabstractfontengine_qws.h +++ b/src/gui/text/qabstractfontengine_qws.h @@ -118,7 +118,7 @@ public: virtual QList<QFontEngineInfo> availableFontEngines() const = 0; private: - Q_DECLARE_PRIVATE(QFontEnginePlugin) + Q_DECLARE_SCOPED_PRIVATE(QFontEnginePlugin) Q_DISABLE_COPY(QFontEnginePlugin) }; @@ -207,7 +207,7 @@ public: */ private: - Q_DECLARE_PRIVATE(QAbstractFontEngine) + Q_DECLARE_SCOPED_PRIVATE(QAbstractFontEngine) Q_DISABLE_COPY(QAbstractFontEngine) }; diff --git a/src/gui/text/qabstracttextdocumentlayout.h b/src/gui/text/qabstracttextdocumentlayout.h index 070c301..3681eec 100644 --- a/src/gui/text/qabstracttextdocumentlayout.h +++ b/src/gui/text/qabstracttextdocumentlayout.h @@ -62,7 +62,7 @@ class QTextFrame; class Q_GUI_EXPORT QAbstractTextDocumentLayout : public QObject { Q_OBJECT - Q_DECLARE_PRIVATE(QAbstractTextDocumentLayout) + Q_DECLARE_SCOPED_PRIVATE(QAbstractTextDocumentLayout) public: explicit QAbstractTextDocumentLayout(QTextDocument *doc); diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp index 844c3f9..d33cdf0 100644 --- a/src/gui/text/qfontdatabase.cpp +++ b/src/gui/text/qfontdatabase.cpp @@ -226,7 +226,9 @@ struct QtFontStyle delete [] setwidthName; #endif #if defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN) - while (count--) { + while (count) { + // bitfield count-- in while condition does not work correctly in mwccsym2 + count--; #ifdef Q_WS_X11 free(pixelSizes[count].encodings); #endif diff --git a/src/gui/text/qfontdatabase_qws.cpp b/src/gui/text/qfontdatabase_qws.cpp index 1ac87ea..f4e37b7 100644 --- a/src/gui/text/qfontdatabase_qws.cpp +++ b/src/gui/text/qfontdatabase_qws.cpp @@ -757,21 +757,21 @@ QFontDatabase::findFont(int script, const QFontPrivate *fp, if (!privateDb()->count) initializeDb(); - QFontEngine *fe = 0; + QScopedPointer<QFontEngine> fe; if (fp) { if (fp->rawMode) { - fe = loadEngine(script, fp, request, 0, 0, 0, 0 - ); + fe.reset(loadEngine(script, fp, request, 0, 0, 0, 0)); // if we fail to load the rawmode font, use a 12pixel box engine instead - if (! fe) fe = new QFontEngineBox(12); - return fe; + if (fe.isNull()) + fe.reset(new QFontEngineBox(12)); + return fe.take(); } QFontCache::Key key(request, script); - fe = QFontCache::instance()->findEngine(key); - if (fe) - return fe; + fe.reset(QFontCache::instance()->findEngine(key)); + if (! fe.isNull()) + return fe.take(); } QString family_name, foundry_name; @@ -795,11 +795,11 @@ QFontDatabase::findFont(int script, const QFontPrivate *fp, script, request.weight, request.style, request.stretch, request.pixelSize, pitch); if (qt_enable_test_font && request.family == QLatin1String("__Qt__Box__Engine__")) { - fe = new QTestFontEngine(request.pixelSize); + fe.reset(new QTestFontEngine(request.pixelSize)); fe->fontDef = request; } - if (!fe) + if (fe.isNull()) { QtFontDesc desc; match(script, request, family_name, foundry_name, force_encoding_id, &desc); @@ -820,16 +820,28 @@ QFontDatabase::findFont(int script, const QFontPrivate *fp, 'p', 0 ); - fe = loadEngine(script, fp, request, desc.family, desc.foundry, desc.style, desc.size - ); + fe.reset(loadEngine(script, fp, request, desc.family, desc.foundry, desc.style, desc.size + )); } else { FM_DEBUG(" NO MATCH FOUND\n"); } - if (fe) + if (! fe.isNull()) initFontDef(desc, request, &fe->fontDef); } - if (fe) { +#ifndef QT_NO_FREETYPE + if (! fe.isNull()) { + if (scriptRequiresOpenType(script) && fe->type() == QFontEngine::Freetype) { + HB_Face hbFace = static_cast<QFontEngineFT *>(fe.data())->harfbuzzFace(); + if (!hbFace || !hbFace->supported_scripts[script]) { + FM_DEBUG(" OpenType support missing for script\n"); + fe.reset(0); + } + } + } +#endif + + if (! fe.isNull()) { if (fp) { QFontDef def = request; if (def.family.isEmpty()) { @@ -837,32 +849,21 @@ QFontDatabase::findFont(int script, const QFontPrivate *fp, def.family = def.family.left(def.family.indexOf(QLatin1Char(','))); } QFontCache::Key key(def, script); - QFontCache::instance()->insertEngine(key, fe); - } - -#ifndef QT_NO_FREETYPE - if (scriptRequiresOpenType(script) && fe->type() == QFontEngine::Freetype) { - HB_Face hbFace = static_cast<QFontEngineFT *>(fe)->harfbuzzFace(); - if (!hbFace || !hbFace->supported_scripts[script]) { - FM_DEBUG(" OpenType support missing for script\n"); - delete fe; - fe = 0; - } + QFontCache::instance()->insertEngine(key, fe.data()); } -#endif } - if (!fe) { + if (fe.isNull()) { if (!request.family.isEmpty()) return 0; FM_DEBUG("returning box engine"); - fe = new QFontEngineBox(request.pixelSize); + fe.reset(new QFontEngineBox(request.pixelSize)); if (fp) { QFontCache::Key key(request, script); - QFontCache::instance()->insertEngine(key, fe); + QFontCache::instance()->insertEngine(key, fe.data()); } } @@ -872,7 +873,7 @@ QFontDatabase::findFont(int script, const QFontPrivate *fp, fe->fontDef.pointSize = request.pointSize; } - return fe; + return fe.take(); } void QFontDatabase::load(const QFontPrivate *d, int script) @@ -893,7 +894,13 @@ void QFontDatabase::load(const QFontPrivate *d, int script) if (!d->engineData) { // create a new one d->engineData = new QFontEngineData; - QFontCache::instance()->insertEngineData(key, d->engineData); + QT_TRY { + QFontCache::instance()->insertEngineData(key, d->engineData); + } QT_CATCH(...) { + delete d->engineData; + d->engineData = 0; + QT_RETHROW; + } } else { d->engineData->ref.ref(); } @@ -902,8 +909,6 @@ void QFontDatabase::load(const QFontPrivate *d, int script) // the cached engineData could have already loaded the engine we want if (d->engineData->engines[script]) return; - // load the font - QFontEngine *engine = 0; // double scale = 1.0; // ### TODO: fix the scale calculations // list of families to try @@ -935,20 +940,15 @@ void QFontDatabase::load(const QFontPrivate *d, int script) // null family means find the first font matching the specified script family_list << QString(); + // load the font + QFontEngine *engine = 0; QStringList::ConstIterator it = family_list.constBegin(), end = family_list.constEnd(); - for (; ! engine && it != end; ++it) { + for (; !engine && it != end; ++it) { req.family = *it; engine = QFontDatabase::findFont(script, d, req); - if (engine) { - if (engine->type() != QFontEngine::Box) - break; - - if (! req.family.isEmpty()) - engine = 0; - - continue; - } + if (engine && (engine->type()==QFontEngine::Box) && !req.family.isEmpty()) + engine = 0; } engine->ref.ref(); diff --git a/src/gui/text/qfontdatabase_s60.cpp b/src/gui/text/qfontdatabase_s60.cpp index 416c3d1..6838d17 100644 --- a/src/gui/text/qfontdatabase_s60.cpp +++ b/src/gui/text/qfontdatabase_s60.cpp @@ -107,9 +107,12 @@ private: QFontDatabaseS60StoreImplementation::QFontDatabaseS60StoreImplementation() { m_heap = User::ChunkHeap(NULL, 0x1000, 0x100000); - m_store = CFontStore::NewL(m_heap); - m_rasterizer = COpenFontRasterizer::NewL(TUid::Uid(0x101F7F5E)); - m_store->InstallRasterizerL(m_rasterizer); + QT_TRAP_THROWING( + m_store = CFontStore::NewL(m_heap); + m_rasterizer = COpenFontRasterizer::NewL(TUid::Uid(0x101F7F5E)); + CleanupStack::PushL(m_rasterizer); + m_store->InstallRasterizerL(m_rasterizer); + CleanupStack::Pop(m_rasterizer);); QStringList filters; filters.append(QString::fromLatin1("*.ttf")); @@ -117,14 +120,14 @@ QFontDatabaseS60StoreImplementation::QFontDatabaseS60StoreImplementation() const QFileInfoList fontFiles = alternativeFilePaths(QString::fromLatin1("resource\\Fonts"), filters); foreach (const QFileInfo &fontFileInfo, fontFiles) { const QString fontFile = QDir::toNativeSeparators(fontFileInfo.absoluteFilePath()); - m_store->AddFileL(qt_QString2TPtrC(fontFile)); + TPtrC fontFilePtr(qt_QString2TPtrC(fontFile)); + QT_TRAP_THROWING(m_store->AddFileL(fontFilePtr)); } } QFontDatabaseS60StoreImplementation::~QFontDatabaseS60StoreImplementation() { qDeleteAll(m_extensions); - delete m_rasterizer; - delete m_store; + // TODO m_store cleanup removed because it was crashing m_heap->Close(); } @@ -218,7 +221,7 @@ static void initializeDb() QS60Data::screenDevice()->TypefaceSupport(typefaceSupport, i); CFont *font; // We have to get a font instance in order to know all the details TFontSpec fontSpec(typefaceSupport.iTypeface.iName, 11); - QS60Data::screenDevice()->GetNearestFontInPixels(font, fontSpec); + qt_throwIfError(QS60Data::screenDevice()->GetNearestFontInPixels(font, fontSpec)); if (font->TypeUid() == KCFbsFontUid) { TOpenFontFaceAttrib faceAttrib; const CFbsFont *cfbsFont = dynamic_cast<const CFbsFont *>(font); diff --git a/src/gui/text/qfontengine.cpp b/src/gui/text/qfontengine.cpp index 730137e..794fd79 100644 --- a/src/gui/text/qfontengine.cpp +++ b/src/gui/text/qfontengine.cpp @@ -236,8 +236,10 @@ HB_Font QFontEngine::harfbuzzFont() const HB_Face QFontEngine::harfbuzzFace() const { - if (!hbFace) + if (!hbFace) { hbFace = qHBNewFace(const_cast<QFontEngine *>(this), hb_getSFntTable); + Q_CHECK_PTR(hbFace); + } return hbFace; } diff --git a/src/gui/text/qfontengine_ft.cpp b/src/gui/text/qfontengine_ft.cpp index ab04dc7..ecc4b4f 100644 --- a/src/gui/text/qfontengine_ft.cpp +++ b/src/gui/text/qfontengine_ft.cpp @@ -205,7 +205,9 @@ QFreetypeFace *QFreetypeFace::getFace(const QFontEngine::FaceId &face_id) FT_Init_FreeType(&freetypeData->library); QFreetypeFace *freetype = freetypeData->faces.value(face_id, 0); - if (!freetype) { + if (freetype) { + freetype->ref.ref(); + } else { QScopedPointer<QFreetypeFace> newFreetype(new QFreetypeFace); FT_Face face; QFile file(QString::fromUtf8(face_id.filename)); @@ -234,7 +236,8 @@ QFreetypeFace *QFreetypeFace::getFace(const QFontEngine::FaceId &face_id) newFreetype->face = face; newFreetype->hbFace = qHBNewFace(face, hb_getSFntTable); - newFreetype->ref = 0; + Q_CHECK_PTR(newFreetype->hbFace); + newFreetype->ref = 1; newFreetype->xsize = 0; newFreetype->ysize = 0; newFreetype->matrix.xx = 0x10000; @@ -289,10 +292,15 @@ QFreetypeFace *QFreetypeFace::getFace(const QFontEngine::FaceId &face_id) #endif FT_Set_Charmap(newFreetype->face, newFreetype->unicode_map); - freetypeData->faces.insert(face_id, newFreetype.data()); + QT_TRY { + freetypeData->faces.insert(face_id, newFreetype.data()); + } QT_CATCH(...) { + newFreetype.take()->release(face_id); + // we could return null in principle instead of throwing + QT_RETHROW; + } freetype = newFreetype.take(); } - freetype->ref.ref(); return freetype; } @@ -306,7 +314,8 @@ void QFreetypeFace::release(const QFontEngine::FaceId &face_id) if (charset) FcCharSetDestroy(charset); #endif - freetypeData->faces.take(face_id); + if(freetypeData->faces.contains(face_id)) + freetypeData->faces.take(face_id); delete this; } if (freetypeData->faces.isEmpty()) { diff --git a/src/gui/text/qfontengine_ft_p.h b/src/gui/text/qfontengine_ft_p.h index aa1cd0a..0572e92 100644 --- a/src/gui/text/qfontengine_ft_p.h +++ b/src/gui/text/qfontengine_ft_p.h @@ -119,7 +119,7 @@ struct QFreetypeFace static void addBitmapToPath(FT_GlyphSlot slot, const QFixedPoint &point, QPainterPath *path, bool = false); private: - friend class QScopedPointer<QFreetypeFace>; + friend class QScopedPointerDeleter<QFreetypeFace>; QFreetypeFace() : _lock(QMutex::Recursive) {} ~QFreetypeFace() {} QAtomicInt ref; diff --git a/src/gui/text/qfontengine_s60.cpp b/src/gui/text/qfontengine_s60.cpp index f485afb..d1e591e 100644 --- a/src/gui/text/qfontengine_s60.cpp +++ b/src/gui/text/qfontengine_s60.cpp @@ -130,11 +130,11 @@ QFontEngineS60::QFontEngineS60(const QFontDef &request, const QFontEngineS60Exte m_fontSizeInPixels = (request.pixelSize >= 0)? request.pixelSize:pointsToPixels(request.pointSize); QS60WindowSurface::unlockBitmapHeap(); - m_textRenderBitmap = new (ELeave) CFbsBitmap(); + m_textRenderBitmap = q_check_ptr(new CFbsBitmap()); // CBase derived object needs check on new const TSize bitmapSize(1, 1); // It is just a dummy bitmap that I need to keep the font alive (or maybe not) - User::LeaveIfError(m_textRenderBitmap->Create(bitmapSize, EGray256)); - m_textRenderBitmapDevice = CFbsBitmapDevice::NewL(m_textRenderBitmap); - User::LeaveIfError(m_textRenderBitmapDevice->CreateContext(m_textRenderBitmapGc)); + qt_throwIfError(m_textRenderBitmap->Create(bitmapSize, EGray256)); + QT_TRAP_THROWING(m_textRenderBitmapDevice = CFbsBitmapDevice::NewL(m_textRenderBitmap)); + qt_throwIfError(m_textRenderBitmapDevice->CreateContext(m_textRenderBitmapGc)); cache_cost = sizeof(QFontEngineS60) + bitmapSize.iHeight * bitmapSize.iWidth * 4; TFontSpec fontSpec(qt_QString2TPtrC(request.family), m_fontSizeInPixels); diff --git a/src/gui/text/qfontengine_win.cpp b/src/gui/text/qfontengine_win.cpp index 9715aef..8e4bb55 100644 --- a/src/gui/text/qfontengine_win.cpp +++ b/src/gui/text/qfontengine_win.cpp @@ -495,7 +495,7 @@ bool QFontEngineWin::stringToCMap(const QChar *str, int len, QGlyphLayout *glyph unsigned int glyph = glyphs->glyphs[glyph_pos]; if(int(glyph) >= designAdvancesSize) { int newSize = (glyph + 256) >> 8 << 8; - designAdvances = (QFixed *)realloc(designAdvances, newSize*sizeof(QFixed)); + designAdvances = q_check_ptr((QFixed *)realloc(designAdvances, newSize*sizeof(QFixed))); for(int i = designAdvancesSize; i < newSize; ++i) designAdvances[i] = -1000000; designAdvancesSize = newSize; @@ -528,7 +528,8 @@ bool QFontEngineWin::stringToCMap(const QChar *str, int len, QGlyphLayout *glyph if (glyph >= widthCacheSize) { int newSize = (glyph + 256) >> 8 << 8; - widthCache = (unsigned char *)realloc(widthCache, newSize*sizeof(QFixed)); + widthCache = q_check_ptr((unsigned char *)realloc(widthCache, + newSize*sizeof(QFixed))); memset(widthCache + widthCacheSize, 0, newSize - widthCacheSize); widthCacheSize = newSize; } @@ -570,7 +571,8 @@ void QFontEngineWin::recalcAdvances(QGlyphLayout *glyphs, QTextEngine::ShaperFla unsigned int glyph = glyphs->glyphs[i]; if(int(glyph) >= designAdvancesSize) { int newSize = (glyph + 256) >> 8 << 8; - designAdvances = (QFixed *)realloc(designAdvances, newSize*sizeof(QFixed)); + designAdvances = q_check_ptr((QFixed *)realloc(designAdvances, + newSize*sizeof(QFixed))); for(int i = designAdvancesSize; i < newSize; ++i) designAdvances[i] = -1000000; designAdvancesSize = newSize; @@ -620,7 +622,8 @@ void QFontEngineWin::recalcAdvances(QGlyphLayout *glyphs, QTextEngine::ShaperFla if (glyph >= widthCacheSize) { int newSize = (glyph + 256) >> 8 << 8; - widthCache = (unsigned char *)realloc(widthCache, newSize*sizeof(QFixed)); + widthCache = q_check_ptr((unsigned char *)realloc(widthCache, + newSize*sizeof(QFixed))); memset(widthCache + widthCacheSize, 0, newSize - widthCacheSize); widthCacheSize = newSize; } diff --git a/src/gui/text/qfragmentmap_p.h b/src/gui/text/qfragmentmap_p.h index c2ba2b4..9c2a673 100644 --- a/src/gui/text/qfragmentmap_p.h +++ b/src/gui/text/qfragmentmap_p.h @@ -222,13 +222,19 @@ QFragmentMapData<Fragment>::QFragmentMapData() template <class Fragment> void QFragmentMapData<Fragment>::init() { - fragments = (Fragment *)malloc(64*fragmentSize); + // the following code will realloc an existing fragment or create a new one. + // it will also ignore errors when shrinking an existing fragment. + Fragment *newFragments = (Fragment *)realloc(fragments, 64*fragmentSize); + if (newFragments) { + fragments = newFragments; + head->allocated = 64; + } Q_CHECK_PTR(fragments); + head->tag = (((quint32)'p') << 24) | (((quint32)'m') << 16) | (((quint32)'a') << 8) | 'p'; //TAG('p', 'm', 'a', 'p'); head->root = 0; head->freelist = 1; head->node_count = 0; - head->allocated = 64; // mark all items to the right as unused F(head->freelist).right = 0; } @@ -236,7 +242,7 @@ void QFragmentMapData<Fragment>::init() template <class Fragment> QFragmentMapData<Fragment>::~QFragmentMapData() { - free(head); + free(fragments); } template <class Fragment> @@ -800,7 +806,6 @@ public: inline void clear() { for (Iterator it = begin(); !it.atEnd(); ++it) it.value()->free(); - ::free(data.head); data.init(); } diff --git a/src/gui/text/qsyntaxhighlighter.h b/src/gui/text/qsyntaxhighlighter.h index 4e5271b..b2fee15 100644 --- a/src/gui/text/qsyntaxhighlighter.h +++ b/src/gui/text/qsyntaxhighlighter.h @@ -66,7 +66,7 @@ class QTextEdit; class Q_GUI_EXPORT QSyntaxHighlighter : public QObject { Q_OBJECT - Q_DECLARE_PRIVATE(QSyntaxHighlighter) + Q_DECLARE_SCOPED_PRIVATE(QSyntaxHighlighter) public: QSyntaxHighlighter(QObject *parent); QSyntaxHighlighter(QTextDocument *parent); diff --git a/src/gui/text/qtextcontrol_p.h b/src/gui/text/qtextcontrol_p.h index 872bcd5..8ba6a06 100644 --- a/src/gui/text/qtextcontrol_p.h +++ b/src/gui/text/qtextcontrol_p.h @@ -86,7 +86,7 @@ class QTimerEvent; class Q_AUTOTEST_EXPORT QTextControl : public QObject { Q_OBJECT - Q_DECLARE_PRIVATE(QTextControl) + Q_DECLARE_SCOPED_PRIVATE(QTextControl) #ifndef QT_NO_TEXTHTMLPARSER Q_PROPERTY(QString html READ toHtml WRITE setHtml NOTIFY textChanged USER true) #endif diff --git a/src/gui/text/qtextdocument.h b/src/gui/text/qtextdocument.h index 40b6621..cfbb558 100644 --- a/src/gui/text/qtextdocument.h +++ b/src/gui/text/qtextdocument.h @@ -286,7 +286,7 @@ public: QTextDocumentPrivate *docHandle() const; private: Q_DISABLE_COPY(QTextDocument) - Q_DECLARE_PRIVATE(QTextDocument) + Q_DECLARE_SCOPED_PRIVATE(QTextDocument) friend class QTextObjectPrivate; }; diff --git a/src/gui/text/qtextdocument_p.cpp b/src/gui/text/qtextdocument_p.cpp index ea37e04..71baa88 100644 --- a/src/gui/text/qtextdocument_p.cpp +++ b/src/gui/text/qtextdocument_p.cpp @@ -179,6 +179,7 @@ QTextDocumentPrivate::QTextDocumentPrivate() docChangeOldLength(0), docChangeLength(0), framesDirty(true), + rtFrame(0), initialBlockCharFormatIndex(-1) // set correctly later in init() { editBlock = 0; @@ -209,7 +210,6 @@ QTextDocumentPrivate::QTextDocumentPrivate() void QTextDocumentPrivate::init() { - rtFrame = 0; framesDirty = false; bool undoState = undoEnabled; @@ -232,42 +232,48 @@ void QTextDocumentPrivate::clear() } QList<QTextCursorPrivate *>oldCursors = cursors; - cursors.clear(); - changedCursors.clear(); - - QMap<int, QTextObject *>::Iterator objectIt = objects.begin(); - while (objectIt != objects.end()) { - if (*objectIt != rtFrame) { - delete *objectIt; - objectIt = objects.erase(objectIt); - } else { - ++objectIt; + QT_TRY{ + cursors.clear(); + changedCursors.clear(); + + QMap<int, QTextObject *>::Iterator objectIt = objects.begin(); + while (objectIt != objects.end()) { + if (*objectIt != rtFrame) { + delete *objectIt; + objectIt = objects.erase(objectIt); + } else { + ++objectIt; + } } - } - // also clear out the remaining root frame pointer - // (we're going to delete the object further down) - objects.clear(); + // also clear out the remaining root frame pointer + // (we're going to delete the object further down) + objects.clear(); - title.clear(); - undoState = 0; - truncateUndoStack(); - text = QString(); - unreachableCharacterCount = 0; - modifiedState = 0; - modified = false; - formats = QTextFormatCollection(); - int len = fragments.length(); - fragments.clear(); - blocks.clear(); - cachedResources.clear(); - delete rtFrame; - init(); - cursors = oldCursors; - inContentsChange = true; - q->contentsChange(0, len, 0); - inContentsChange = false; - if (lout) - lout->documentChanged(0, len, 0); + title.clear(); + undoState = 0; + truncateUndoStack(); + text = QString(); + unreachableCharacterCount = 0; + modifiedState = 0; + modified = false; + formats = QTextFormatCollection(); + int len = fragments.length(); + fragments.clear(); + blocks.clear(); + cachedResources.clear(); + delete rtFrame; + rtFrame = 0; + init(); + cursors = oldCursors; + inContentsChange = true; + q->contentsChange(0, len, 0); + inContentsChange = false; + if (lout) + lout->documentChanged(0, len, 0); + } QT_CATCH(...) { + cursors = oldCursors; // at least recover the cursors + QT_RETHROW; + } } QTextDocumentPrivate::~QTextDocumentPrivate() diff --git a/src/gui/text/qtextdocumentlayout_p.h b/src/gui/text/qtextdocumentlayout_p.h index 41507b0..4dc18d0 100644 --- a/src/gui/text/qtextdocumentlayout_p.h +++ b/src/gui/text/qtextdocumentlayout_p.h @@ -65,7 +65,7 @@ class QTextDocumentLayoutPrivate; class Q_AUTOTEST_EXPORT QTextDocumentLayout : public QAbstractTextDocumentLayout { - Q_DECLARE_PRIVATE(QTextDocumentLayout) + Q_DECLARE_SCOPED_PRIVATE(QTextDocumentLayout) Q_OBJECT Q_PROPERTY(int cursorWidth READ cursorWidth WRITE setCursorWidth) Q_PROPERTY(qreal idealWidth READ idealWidth) diff --git a/src/gui/text/qtextformat.cpp b/src/gui/text/qtextformat.cpp index 9bc62b1..9b91f7e 100644 --- a/src/gui/text/qtextformat.cpp +++ b/src/gui/text/qtextformat.cpp @@ -2996,12 +2996,18 @@ int QTextFormatCollection::indexForFormat(const QTextFormat &format) int idx = formats.size(); formats.append(format); - QTextFormat &f = formats.last(); - if (!f.d) - f.d = new QTextFormatPrivate; - f.d->resolveFont(defaultFnt); + QT_TRY{ + QTextFormat &f = formats.last(); + if (!f.d) + f.d = new QTextFormatPrivate; + f.d->resolveFont(defaultFnt); - hashes.insert(hash); + hashes.insert(hash); + + } QT_CATCH(...) { + formats.pop_back(); + QT_RETHROW; + } return idx; } diff --git a/src/gui/text/qtextlist.h b/src/gui/text/qtextlist.h index 04f1838..3d07be8 100644 --- a/src/gui/text/qtextlist.h +++ b/src/gui/text/qtextlist.h @@ -81,7 +81,7 @@ public: private: Q_DISABLE_COPY(QTextList) - Q_DECLARE_PRIVATE(QTextList) + Q_DECLARE_SCOPED_PRIVATE(QTextList) }; inline void QTextList::setFormat(const QTextListFormat &aformat) diff --git a/src/gui/text/qtextobject.h b/src/gui/text/qtextobject.h index 4f239b2..f22f77c 100644 --- a/src/gui/text/qtextobject.h +++ b/src/gui/text/qtextobject.h @@ -84,7 +84,7 @@ protected: QTextObject(QTextObjectPrivate &p, QTextDocument *doc); private: - Q_DECLARE_PRIVATE(QTextObject) + Q_DECLARE_SCOPED_PRIVATE(QTextObject) Q_DISABLE_COPY(QTextObject) friend class QTextDocumentPrivate; }; @@ -107,7 +107,7 @@ protected: protected: QTextBlockGroup(QTextBlockGroupPrivate &p, QTextDocument *doc); private: - Q_DECLARE_PRIVATE(QTextBlockGroup) + Q_DECLARE_SCOPED_PRIVATE(QTextBlockGroup) Q_DISABLE_COPY(QTextBlockGroup) friend class QTextDocumentPrivate; }; @@ -182,7 +182,7 @@ protected: QTextFrame(QTextFramePrivate &p, QTextDocument *doc); private: friend class QTextDocumentPrivate; - Q_DECLARE_PRIVATE(QTextFrame) + Q_DECLARE_SCOPED_PRIVATE(QTextFrame) Q_DISABLE_COPY(QTextFrame) }; Q_DECLARE_TYPEINFO(QTextFrame::iterator, Q_MOVABLE_TYPE); diff --git a/src/gui/text/qtexttable.cpp b/src/gui/text/qtexttable.cpp index 11ea2a7..160eb35 100644 --- a/src/gui/text/qtexttable.cpp +++ b/src/gui/text/qtexttable.cpp @@ -446,9 +446,7 @@ void QTextTablePrivate::update() const nRows = (cells.size() + nCols-1)/nCols; // qDebug(">>>> QTextTablePrivate::update, nRows=%d, nCols=%d", nRows, nCols); - int* newGrid = (int *)realloc(grid, nRows*nCols*sizeof(int)); - Q_CHECK_PTR(newGrid); - grid = newGrid; + grid = q_check_ptr((int *)realloc(grid, nRows*nCols*sizeof(int))); memset(grid, 0, nRows*nCols*sizeof(int)); QTextDocumentPrivate *p = pieceTable; @@ -472,9 +470,7 @@ void QTextTablePrivate::update() const cellIndices[i] = cell; if (r + rowspan > nRows) { - newGrid = (int *)realloc(grid, sizeof(int)*(r + rowspan)*nCols); - Q_CHECK_PTR(newGrid); - grid = newGrid; + grid = q_check_ptr((int *)realloc(grid, sizeof(int)*(r + rowspan)*nCols)); memset(grid + (nRows*nCols), 0, sizeof(int)*(r+rowspan-nRows)*nCols); nRows = r + rowspan; } diff --git a/src/gui/text/qtexttable.h b/src/gui/text/qtexttable.h index 612c71c..2deb3fa 100644 --- a/src/gui/text/qtexttable.h +++ b/src/gui/text/qtexttable.h @@ -134,7 +134,7 @@ public: private: Q_DISABLE_COPY(QTextTable) - Q_DECLARE_PRIVATE(QTextTable) + Q_DECLARE_SCOPED_PRIVATE(QTextTable) friend class QTextTableCell; }; diff --git a/src/gui/util/qcompleter.cpp b/src/gui/util/qcompleter.cpp index 8fe32bd..89cb283 100644 --- a/src/gui/util/qcompleter.cpp +++ b/src/gui/util/qcompleter.cpp @@ -158,7 +158,7 @@ QT_BEGIN_NAMESPACE QCompletionModel::QCompletionModel(QCompleterPrivate *c, QObject *parent) : QAbstractProxyModel(*new QCompletionModelPrivate, parent), - c(c), engine(0), showAll(false) + c(c), showAll(false) { createEngine(); } @@ -208,11 +208,10 @@ void QCompletionModel::createEngine() break; } - delete engine; if (sortedEngine) - engine = new QSortedModelEngine(c); + engine.reset(new QSortedModelEngine(c)); else - engine = new QUnsortedModelEngine(c); + engine.reset(new QUnsortedModelEngine(c)); } QModelIndex QCompletionModel::mapToSource(const QModelIndex& index) const diff --git a/src/gui/util/qcompleter.h b/src/gui/util/qcompleter.h index c1169ef..35ecc56 100644 --- a/src/gui/util/qcompleter.h +++ b/src/gui/util/qcompleter.h @@ -150,7 +150,7 @@ Q_SIGNALS: private: Q_DISABLE_COPY(QCompleter) - Q_DECLARE_PRIVATE(QCompleter) + Q_DECLARE_SCOPED_PRIVATE(QCompleter) Q_PRIVATE_SLOT(d_func(), void _q_complete(QModelIndex)) Q_PRIVATE_SLOT(d_func(), void _q_completionSelected(const QItemSelection&)) diff --git a/src/gui/util/qcompleter_p.h b/src/gui/util/qcompleter_p.h index dc4189f..def0235 100644 --- a/src/gui/util/qcompleter_p.h +++ b/src/gui/util/qcompleter_p.h @@ -213,7 +213,6 @@ class QCompletionModel : public QAbstractProxyModel public: QCompletionModel(QCompleterPrivate *c, QObject *parent); - ~QCompletionModel() { delete engine; } void createEngine(); void setFiltered(bool); @@ -236,10 +235,10 @@ public: QModelIndex mapFromSource(const QModelIndex& sourceIndex) const; QCompleterPrivate *c; - QCompletionEngine *engine; + QScopedPointer<QCompletionEngine> engine; bool showAll; - Q_DECLARE_PRIVATE(QCompletionModel) + Q_DECLARE_SCOPED_PRIVATE(QCompletionModel) signals: void rowsAdded(); diff --git a/src/gui/util/qdesktopservices_s60.cpp b/src/gui/util/qdesktopservices_s60.cpp index 77cf254..567b4ee 100644 --- a/src/gui/util/qdesktopservices_s60.cpp +++ b/src/gui/util/qdesktopservices_s60.cpp @@ -74,8 +74,31 @@ _LIT(KBrowserPrefix, "4 " ); _LIT(KFontsDir, "z:\\resource\\Fonts\\"); const TUid KUidBrowser = { 0x10008D39 }; -static void handleMailtoSchemeL(const QUrl &url) +template<class R> +class QAutoClose { +public: + QAutoClose(R& aObj) : mPtr(&aObj) {} + ~QAutoClose() + { + if (mPtr) + mPtr->Close(); + } + void Forget() + { + mPtr = 0; + } +private: + QAutoClose(const QAutoClose&); + QAutoClose& operator=(const QAutoClose&); +private: + R* mPtr; +}; + +static void handleMailtoSchemeLX(const QUrl &url) +{ + // this function has many intermingled leaves and throws. Qt and Symbian objects do not have + // destructor dependencies, and cleanup object is used to prevent cleanup stack dependency on stack. QString recipient = url.path(); QString subject = url.queryItemValue("subject"); QString body = url.queryItemValue("body"); @@ -84,15 +107,15 @@ static void handleMailtoSchemeL(const QUrl &url) QString bcc = url.queryItemValue("bcc"); // these fields might have comma separated addresses - QStringList recipients = recipient.split(","); - QStringList tos = to.split(","); - QStringList ccs = cc.split(","); - QStringList bccs = bcc.split(","); + QStringList recipients = recipient.split(",", QString::SkipEmptyParts); + QStringList tos = to.split(",", QString::SkipEmptyParts); + QStringList ccs = cc.split(",", QString::SkipEmptyParts); + QStringList bccs = bcc.split(",", QString::SkipEmptyParts); RSendAs sendAs; User::LeaveIfError(sendAs.Connect()); - CleanupClosePushL(sendAs); + QAutoClose<RSendAs> sendAsCleanup(sendAs); CSendAsAccounts* accounts = CSendAsAccounts::NewL(); @@ -109,7 +132,7 @@ static void handleMailtoSchemeL(const QUrl &url) } else { RSendAsMessage sendAsMessage; sendAsMessage.CreateL(sendAs, KUidMsgTypeSMTP); - CleanupClosePushL(sendAsMessage); + QAutoClose<RSendAsMessage> sendAsMessageCleanup(sendAsMessage); // Subject @@ -135,17 +158,14 @@ static void handleMailtoSchemeL(const QUrl &url) // send the message sendAsMessage.LaunchEditorAndCloseL(); - - // sendAsMessage (already closed) - CleanupStack::Pop(); + // sendAsMessage is already closed + sendAsMessageCleanup.Forget(); } - // sendAs - CleanupStack::PopAndDestroy(); } static bool handleMailtoScheme(const QUrl &url) { - TRAPD(err, handleMailtoSchemeL(url)); + TRAPD(err, QT_TRYCATCH_LEAVING(handleMailtoSchemeLX(url))); return err ? false : true; } @@ -182,7 +202,9 @@ static void handleOtherSchemesL(const TDesC& aUrl) static bool handleOtherSchemes(const QUrl &url) { - TRAPD( err, handleOtherSchemesL(qt_QString2TPtrC(url.toEncoded()))); + QString encUrl(url.toEncoded()); + TPtrC urlPtr(qt_QString2TPtrC(encUrl)); + TRAPD( err, handleOtherSchemesL(urlPtr)); return err ? false : true; } @@ -276,7 +298,9 @@ static bool handleUrl(const QUrl &url) if (!url.isValid()) return false; - TRAPD( err, handleUrlL(qt_QString2TPtrC(url.toString()))); + QString urlString(url.toString()); + TPtrC urlPtr(qt_QString2TPtrC(urlString)); + TRAPD( err, handleUrlL(urlPtr)); return err ? false : true; } @@ -316,7 +340,8 @@ static bool openDocument(const QUrl &file) QString filePath = file.toLocalFile(); filePath = QDir::toNativeSeparators(filePath); - TRAPD(err, openDocumentL(qt_QString2TPtrC(filePath))); + TPtrC filePathPtr(qt_QString2TPtrC(filePath)); + TRAPD(err, openDocumentL(filePathPtr)); return err ? false : true; } diff --git a/src/gui/util/qsystemtrayicon.h b/src/gui/util/qsystemtrayicon.h index 0f1e2d2..ac90487 100644 --- a/src/gui/util/qsystemtrayicon.h +++ b/src/gui/util/qsystemtrayicon.h @@ -117,7 +117,7 @@ protected: private: Q_DISABLE_COPY(QSystemTrayIcon) - Q_DECLARE_PRIVATE(QSystemTrayIcon) + Q_DECLARE_SCOPED_PRIVATE(QSystemTrayIcon) friend class QSystemTrayIconSys; friend class QBalloonTip; diff --git a/src/gui/util/qundogroup.h b/src/gui/util/qundogroup.h index ddab6e0..24d4e12 100644 --- a/src/gui/util/qundogroup.h +++ b/src/gui/util/qundogroup.h @@ -60,7 +60,7 @@ QT_MODULE(Gui) class Q_GUI_EXPORT QUndoGroup : public QObject { Q_OBJECT - Q_DECLARE_PRIVATE(QUndoGroup) + Q_DECLARE_SCOPED_PRIVATE(QUndoGroup) public: explicit QUndoGroup(QObject *parent = 0); diff --git a/src/gui/util/qundostack.h b/src/gui/util/qundostack.h index 8efad0e..8ad4b198 100644 --- a/src/gui/util/qundostack.h +++ b/src/gui/util/qundostack.h @@ -90,7 +90,7 @@ private: class Q_GUI_EXPORT QUndoStack : public QObject { Q_OBJECT - Q_DECLARE_PRIVATE(QUndoStack) + Q_DECLARE_SCOPED_PRIVATE(QUndoStack) Q_PROPERTY(bool active READ isActive WRITE setActive) Q_PROPERTY(int undoLimit READ undoLimit WRITE setUndoLimit) diff --git a/src/gui/util/qundoview.h b/src/gui/util/qundoview.h index fa0c163..293c0c2 100644 --- a/src/gui/util/qundoview.h +++ b/src/gui/util/qundoview.h @@ -61,7 +61,7 @@ QT_MODULE(Gui) class Q_GUI_EXPORT QUndoView : public QListView { Q_OBJECT - Q_DECLARE_PRIVATE(QUndoView) + Q_DECLARE_SCOPED_PRIVATE(QUndoView) Q_PROPERTY(QString emptyLabel READ emptyLabel WRITE setEmptyLabel) Q_PROPERTY(QIcon cleanIcon READ cleanIcon WRITE setCleanIcon) diff --git a/src/gui/widgets/qabstractbutton.h b/src/gui/widgets/qabstractbutton.h index 29e9bf9..9e33479 100644 --- a/src/gui/widgets/qabstractbutton.h +++ b/src/gui/widgets/qabstractbutton.h @@ -168,7 +168,7 @@ protected: QAbstractButton(QAbstractButtonPrivate &dd, QWidget* parent = 0); private: - Q_DECLARE_PRIVATE(QAbstractButton) + Q_DECLARE_SCOPED_PRIVATE(QAbstractButton) Q_DISABLE_COPY(QAbstractButton) friend class QButtonGroup; }; diff --git a/src/gui/widgets/qabstractscrollarea.h b/src/gui/widgets/qabstractscrollarea.h index 3ec41d1..9a7e844 100644 --- a/src/gui/widgets/qabstractscrollarea.h +++ b/src/gui/widgets/qabstractscrollarea.h @@ -123,7 +123,7 @@ protected: virtual void scrollContentsBy(int dx, int dy); private: - Q_DECLARE_PRIVATE(QAbstractScrollArea) + Q_DECLARE_SCOPED_PRIVATE(QAbstractScrollArea) Q_DISABLE_COPY(QAbstractScrollArea) Q_PRIVATE_SLOT(d_func(), void _q_hslide(int)) Q_PRIVATE_SLOT(d_func(), void _q_vslide(int)) diff --git a/src/gui/widgets/qabstractslider.h b/src/gui/widgets/qabstractslider.h index 7e03b6e..6517944 100644 --- a/src/gui/widgets/qabstractslider.h +++ b/src/gui/widgets/qabstractslider.h @@ -174,7 +174,7 @@ protected: private: Q_DISABLE_COPY(QAbstractSlider) - Q_DECLARE_PRIVATE(QAbstractSlider) + Q_DECLARE_SCOPED_PRIVATE(QAbstractSlider) }; QT_END_NAMESPACE diff --git a/src/gui/widgets/qabstractspinbox.h b/src/gui/widgets/qabstractspinbox.h index e65f27b..2e8f7f9 100644 --- a/src/gui/widgets/qabstractspinbox.h +++ b/src/gui/widgets/qabstractspinbox.h @@ -165,7 +165,7 @@ private: Q_PRIVATE_SLOT(d_func(), void _q_editorTextChanged(const QString &)) Q_PRIVATE_SLOT(d_func(), void _q_editorCursorPositionChanged(int, int)) - Q_DECLARE_PRIVATE(QAbstractSpinBox) + Q_DECLARE_SCOPED_PRIVATE(QAbstractSpinBox) Q_DISABLE_COPY(QAbstractSpinBox) }; Q_DECLARE_OPERATORS_FOR_FLAGS(QAbstractSpinBox::StepEnabled) diff --git a/src/gui/widgets/qbuttongroup.h b/src/gui/widgets/qbuttongroup.h index 708c91c..fca1524 100644 --- a/src/gui/widgets/qbuttongroup.h +++ b/src/gui/widgets/qbuttongroup.h @@ -98,7 +98,7 @@ public: private: Q_DISABLE_COPY(QButtonGroup) - Q_DECLARE_PRIVATE(QButtonGroup) + Q_DECLARE_SCOPED_PRIVATE(QButtonGroup) friend class QAbstractButton; friend class QAbstractButtonPrivate; }; diff --git a/src/gui/widgets/qcalendarwidget.h b/src/gui/widgets/qcalendarwidget.h index f567180..edd1511 100644 --- a/src/gui/widgets/qcalendarwidget.h +++ b/src/gui/widgets/qcalendarwidget.h @@ -179,7 +179,7 @@ Q_SIGNALS: void currentPageChanged(int year, int month); private: - Q_DECLARE_PRIVATE(QCalendarWidget) + Q_DECLARE_SCOPED_PRIVATE(QCalendarWidget) Q_DISABLE_COPY(QCalendarWidget) Q_PRIVATE_SLOT(d_func(), void _q_slotShowDate(const QDate &date)) diff --git a/src/gui/widgets/qcheckbox.h b/src/gui/widgets/qcheckbox.h index 1d61783..cd41626 100644 --- a/src/gui/widgets/qcheckbox.h +++ b/src/gui/widgets/qcheckbox.h @@ -102,7 +102,7 @@ public: #endif private: - Q_DECLARE_PRIVATE(QCheckBox) + Q_DECLARE_SCOPED_PRIVATE(QCheckBox) Q_DISABLE_COPY(QCheckBox) }; diff --git a/src/gui/widgets/qcombobox.cpp b/src/gui/widgets/qcombobox.cpp index 7b91731..65a4279 100644 --- a/src/gui/widgets/qcombobox.cpp +++ b/src/gui/widgets/qcombobox.cpp @@ -1249,8 +1249,12 @@ QComboBox::~QComboBox() // ### check delegateparent and delete delegate if us? Q_D(QComboBox); - disconnect(d->model, SIGNAL(destroyed()), - this, SLOT(_q_modelDestroyed())); + QT_TRY { + disconnect(d->model, SIGNAL(destroyed()), + this, SLOT(_q_modelDestroyed())); + } QT_CATCH(...) { + ; // objects can't throw in destructor + } } /*! diff --git a/src/gui/widgets/qcombobox.h b/src/gui/widgets/qcombobox.h index 22f6928..2807a4f 100644 --- a/src/gui/widgets/qcombobox.h +++ b/src/gui/widgets/qcombobox.h @@ -300,7 +300,7 @@ protected: QComboBox(QComboBoxPrivate &, QWidget *); private: - Q_DECLARE_PRIVATE(QComboBox) + Q_DECLARE_SCOPED_PRIVATE(QComboBox) Q_DISABLE_COPY(QComboBox) Q_PRIVATE_SLOT(d_func(), void _q_itemSelected(const QModelIndex &item)) Q_PRIVATE_SLOT(d_func(), void _q_emitHighlighted(const QModelIndex &)) diff --git a/src/gui/widgets/qcommandlinkbutton.h b/src/gui/widgets/qcommandlinkbutton.h index bf30242..5191252 100644 --- a/src/gui/widgets/qcommandlinkbutton.h +++ b/src/gui/widgets/qcommandlinkbutton.h @@ -75,7 +75,7 @@ protected: private: Q_DISABLE_COPY(QCommandLinkButton) - Q_DECLARE_PRIVATE(QCommandLinkButton) + Q_DECLARE_SCOPED_PRIVATE(QCommandLinkButton) }; QT_END_NAMESPACE diff --git a/src/gui/widgets/qdatetimeedit.h b/src/gui/widgets/qdatetimeedit.h index e43a3fa..1e4c621 100644 --- a/src/gui/widgets/qdatetimeedit.h +++ b/src/gui/widgets/qdatetimeedit.h @@ -197,7 +197,7 @@ protected: QDateTimeEdit(const QVariant &val, QVariant::Type parserType, QWidget *parent = 0); private: - Q_DECLARE_PRIVATE(QDateTimeEdit) + Q_DECLARE_SCOPED_PRIVATE(QDateTimeEdit) Q_DISABLE_COPY(QDateTimeEdit) Q_PRIVATE_SLOT(d_func(), void _q_resetButton()) diff --git a/src/gui/widgets/qdial.h b/src/gui/widgets/qdial.h index 91b8c5e..f07999b 100644 --- a/src/gui/widgets/qdial.h +++ b/src/gui/widgets/qdial.h @@ -109,7 +109,7 @@ Q_SIGNALS: #endif private: - Q_DECLARE_PRIVATE(QDial) + Q_DECLARE_SCOPED_PRIVATE(QDial) Q_DISABLE_COPY(QDial) }; diff --git a/src/gui/widgets/qdialogbuttonbox.h b/src/gui/widgets/qdialogbuttonbox.h index df40a66..97a6a59 100644 --- a/src/gui/widgets/qdialogbuttonbox.h +++ b/src/gui/widgets/qdialogbuttonbox.h @@ -154,7 +154,7 @@ protected: private: Q_DISABLE_COPY(QDialogButtonBox) - Q_DECLARE_PRIVATE(QDialogButtonBox) + Q_DECLARE_SCOPED_PRIVATE(QDialogButtonBox) Q_PRIVATE_SLOT(d_func(), void _q_handleButtonClicked()) Q_PRIVATE_SLOT(d_func(), void _q_handleButtonDestroyed()) }; diff --git a/src/gui/widgets/qdockwidget.h b/src/gui/widgets/qdockwidget.h index f0c0b46..b1abbdd 100644 --- a/src/gui/widgets/qdockwidget.h +++ b/src/gui/widgets/qdockwidget.h @@ -124,7 +124,7 @@ protected: void initStyleOption(QStyleOptionDockWidget *option) const; private: - Q_DECLARE_PRIVATE(QDockWidget) + Q_DECLARE_SCOPED_PRIVATE(QDockWidget) Q_DISABLE_COPY(QDockWidget) Q_PRIVATE_SLOT(d_func(), void _q_toggleView(bool)) Q_PRIVATE_SLOT(d_func(), void _q_toggleTopLevel()) diff --git a/src/gui/widgets/qfocusframe.h b/src/gui/widgets/qfocusframe.h index 139374c..e496343 100644 --- a/src/gui/widgets/qfocusframe.h +++ b/src/gui/widgets/qfocusframe.h @@ -71,7 +71,7 @@ protected: void initStyleOption(QStyleOption *option) const; private: - Q_DECLARE_PRIVATE(QFocusFrame) + Q_DECLARE_SCOPED_PRIVATE(QFocusFrame) Q_DISABLE_COPY(QFocusFrame) }; diff --git a/src/gui/widgets/qfontcombobox.h b/src/gui/widgets/qfontcombobox.h index 6034881..41f9d72 100644 --- a/src/gui/widgets/qfontcombobox.h +++ b/src/gui/widgets/qfontcombobox.h @@ -97,7 +97,7 @@ protected: private: Q_DISABLE_COPY(QFontComboBox) - Q_DECLARE_PRIVATE(QFontComboBox) + Q_DECLARE_SCOPED_PRIVATE(QFontComboBox) Q_PRIVATE_SLOT(d_func(), void _q_currentChanged(const QString &)) Q_PRIVATE_SLOT(d_func(), void _q_updateModel()) }; diff --git a/src/gui/widgets/qframe.h b/src/gui/widgets/qframe.h index 7b6073b..f8776c6 100644 --- a/src/gui/widgets/qframe.h +++ b/src/gui/widgets/qframe.h @@ -138,7 +138,7 @@ protected: private: Q_DISABLE_COPY(QFrame) - Q_DECLARE_PRIVATE(QFrame) + Q_DECLARE_SCOPED_PRIVATE(QFrame) }; QT_END_NAMESPACE diff --git a/src/gui/widgets/qgroupbox.h b/src/gui/widgets/qgroupbox.h index d3f76e1..c4bef6e 100644 --- a/src/gui/widgets/qgroupbox.h +++ b/src/gui/widgets/qgroupbox.h @@ -109,7 +109,7 @@ public: private: Q_DISABLE_COPY(QGroupBox) - Q_DECLARE_PRIVATE(QGroupBox) + Q_DECLARE_SCOPED_PRIVATE(QGroupBox) Q_PRIVATE_SLOT(d_func(), void _q_setChildrenEnabled(bool b)) }; diff --git a/src/gui/widgets/qlabel.h b/src/gui/widgets/qlabel.h index b7a7c11..520d661 100644 --- a/src/gui/widgets/qlabel.h +++ b/src/gui/widgets/qlabel.h @@ -156,7 +156,7 @@ public: private: Q_DISABLE_COPY(QLabel) - Q_DECLARE_PRIVATE(QLabel) + Q_DECLARE_SCOPED_PRIVATE(QLabel) #ifndef QT_NO_MOVIE Q_PRIVATE_SLOT(d_func(), void _q_movieUpdated(const QRect&)) Q_PRIVATE_SLOT(d_func(), void _q_movieResized(const QSize&)) diff --git a/src/gui/widgets/qlcdnumber.h b/src/gui/widgets/qlcdnumber.h index 1437427..3d7cf43 100644 --- a/src/gui/widgets/qlcdnumber.h +++ b/src/gui/widgets/qlcdnumber.h @@ -128,7 +128,7 @@ public: private: Q_DISABLE_COPY(QLCDNumber) - Q_DECLARE_PRIVATE(QLCDNumber) + Q_DECLARE_SCOPED_PRIVATE(QLCDNumber) }; #endif // QT_NO_LCDNUMBER diff --git a/src/gui/widgets/qlineedit.h b/src/gui/widgets/qlineedit.h index a97dc9a..0d01253 100644 --- a/src/gui/widgets/qlineedit.h +++ b/src/gui/widgets/qlineedit.h @@ -265,7 +265,7 @@ private: friend class QDateTimeEdit; #endif Q_DISABLE_COPY(QLineEdit) - Q_DECLARE_PRIVATE(QLineEdit) + Q_DECLARE_SCOPED_PRIVATE(QLineEdit) Q_PRIVATE_SLOT(d_func(), void _q_handleWindowActivate()) Q_PRIVATE_SLOT(d_func(), void _q_deleteSelected()) #ifndef QT_NO_COMPLETER diff --git a/src/gui/widgets/qmaccocoaviewcontainer_mac.h b/src/gui/widgets/qmaccocoaviewcontainer_mac.h index 8ca1073..0fdaac5 100644 --- a/src/gui/widgets/qmaccocoaviewcontainer_mac.h +++ b/src/gui/widgets/qmaccocoaviewcontainer_mac.h @@ -63,7 +63,7 @@ public: void *cocoaView() const; private: - Q_DECLARE_PRIVATE(QMacCocoaViewContainer) + Q_DECLARE_SCOPED_PRIVATE(QMacCocoaViewContainer) }; QT_END_NAMESPACE diff --git a/src/gui/widgets/qmacnativewidget_mac.h b/src/gui/widgets/qmacnativewidget_mac.h index 5c654b5..904108e 100644 --- a/src/gui/widgets/qmacnativewidget_mac.h +++ b/src/gui/widgets/qmacnativewidget_mac.h @@ -64,7 +64,7 @@ protected: bool event(QEvent *ev); private: - Q_DECLARE_PRIVATE(QMacNativeWidget) + Q_DECLARE_SCOPED_PRIVATE(QMacNativeWidget) }; QT_END_NAMESPACE diff --git a/src/gui/widgets/qmainwindow.h b/src/gui/widgets/qmainwindow.h index 9c2fb88..a221131 100644 --- a/src/gui/widgets/qmainwindow.h +++ b/src/gui/widgets/qmainwindow.h @@ -202,7 +202,7 @@ protected: bool event(QEvent *event); private: - Q_DECLARE_PRIVATE(QMainWindow) + Q_DECLARE_SCOPED_PRIVATE(QMainWindow) Q_DISABLE_COPY(QMainWindow) }; diff --git a/src/gui/widgets/qmdiarea.h b/src/gui/widgets/qmdiarea.h index 9f1014e..f64397b 100644 --- a/src/gui/widgets/qmdiarea.h +++ b/src/gui/widgets/qmdiarea.h @@ -153,7 +153,7 @@ protected: private: Q_DISABLE_COPY(QMdiArea) - Q_DECLARE_PRIVATE(QMdiArea) + Q_DECLARE_SCOPED_PRIVATE(QMdiArea) Q_PRIVATE_SLOT(d_func(), void _q_deactivateAllWindows()) Q_PRIVATE_SLOT(d_func(), void _q_processWindowStateChanged(Qt::WindowStates, Qt::WindowStates)) Q_PRIVATE_SLOT(d_func(), void _q_currentTabChanged(int index)) diff --git a/src/gui/widgets/qmdisubwindow.h b/src/gui/widgets/qmdisubwindow.h index 924cc9a..bfb523d 100644 --- a/src/gui/widgets/qmdisubwindow.h +++ b/src/gui/widgets/qmdisubwindow.h @@ -137,7 +137,7 @@ protected: private: Q_DISABLE_COPY(QMdiSubWindow) - Q_DECLARE_PRIVATE(QMdiSubWindow) + Q_DECLARE_SCOPED_PRIVATE(QMdiSubWindow) Q_PRIVATE_SLOT(d_func(), void _q_updateStaysOnTopHint()) Q_PRIVATE_SLOT(d_func(), void _q_enterInteractiveMode()) Q_PRIVATE_SLOT(d_func(), void _q_processFocusChanged(QWidget *, QWidget *)) diff --git a/src/gui/widgets/qmenu.cpp b/src/gui/widgets/qmenu.cpp index 43dc33a..f1cbd65 100644 --- a/src/gui/widgets/qmenu.cpp +++ b/src/gui/widgets/qmenu.cpp @@ -144,7 +144,7 @@ public slots: void onTrigger(QAction *action) { d_func()->activateAction(action, QAction::Trigger, false); } void onHovered(QAction *action) { d_func()->activateAction(action, QAction::Hover, false); } private: - Q_DECLARE_PRIVATE(QTornOffMenu) + Q_DECLARE_SCOPED_PRIVATE(QTornOffMenu) friend class QMenuPrivate; }; diff --git a/src/gui/widgets/qmenu.h b/src/gui/widgets/qmenu.h index 41890c4..9f9cdf5 100644 --- a/src/gui/widgets/qmenu.h +++ b/src/gui/widgets/qmenu.h @@ -77,7 +77,7 @@ class Q_GUI_EXPORT QMenu : public QWidget { private: Q_OBJECT - Q_DECLARE_PRIVATE(QMenu) + Q_DECLARE_SCOPED_PRIVATE(QMenu) Q_PROPERTY(bool tearOffEnabled READ isTearOffEnabled WRITE setTearOffEnabled) Q_PROPERTY(QString title READ title WRITE setTitle) diff --git a/src/gui/widgets/qmenu_symbian.cpp b/src/gui/widgets/qmenu_symbian.cpp index 76057e7..5207cc6 100644 --- a/src/gui/widgets/qmenu_symbian.cpp +++ b/src/gui/widgets/qmenu_symbian.cpp @@ -244,7 +244,7 @@ Q_GUI_EXPORT void qt_symbian_show_toplevel( CEikMenuPane* menuPane) return; rebuildMenu(); for (int i = 0; i < symbianMenus.count(); ++i) - menuPane->AddMenuItemL(symbianMenus.at(i)->menuItemData); + QT_TRAP_THROWING(menuPane->AddMenuItemL(symbianMenus.at(i)->menuItemData)); } Q_GUI_EXPORT void qt_symbian_show_submenu( CEikMenuPane* menuPane, int id) @@ -252,7 +252,7 @@ Q_GUI_EXPORT void qt_symbian_show_submenu( CEikMenuPane* menuPane, int id) SymbianMenuItem* menu = qt_symbian_find_menu(id, symbianMenus); if (menu) { for (int i = 0; i < menu->children.count(); ++i) - menuPane->AddMenuItemL(menu->children.at(i)->menuItemData); + QT_TRAP_THROWING(menuPane->AddMenuItemL(menu->children.at(i)->menuItemData)); } } diff --git a/src/gui/widgets/qmenubar.h b/src/gui/widgets/qmenubar.h index 1fda1c1..ddd2d67 100644 --- a/src/gui/widgets/qmenubar.h +++ b/src/gui/widgets/qmenubar.h @@ -336,7 +336,7 @@ private: #endif private: - Q_DECLARE_PRIVATE(QMenuBar) + Q_DECLARE_SCOPED_PRIVATE(QMenuBar) Q_DISABLE_COPY(QMenuBar) Q_PRIVATE_SLOT(d_func(), void _q_actionTriggered()) Q_PRIVATE_SLOT(d_func(), void _q_actionHovered()) diff --git a/src/gui/widgets/qplaintextedit.h b/src/gui/widgets/qplaintextedit.h index dc0851b..2366a29 100644 --- a/src/gui/widgets/qplaintextedit.h +++ b/src/gui/widgets/qplaintextedit.h @@ -69,7 +69,7 @@ class QMimeData; class Q_GUI_EXPORT QPlainTextEdit : public QAbstractScrollArea { Q_OBJECT - Q_DECLARE_PRIVATE(QPlainTextEdit) + Q_DECLARE_SCOPED_PRIVATE(QPlainTextEdit) Q_ENUMS(LineWrapMode) Q_PROPERTY(bool tabChangesFocus READ tabChangesFocus WRITE setTabChangesFocus) Q_PROPERTY(QString documentTitle READ documentTitle WRITE setDocumentTitle) @@ -277,7 +277,7 @@ class QPlainTextDocumentLayoutPrivate; class Q_GUI_EXPORT QPlainTextDocumentLayout : public QAbstractTextDocumentLayout { Q_OBJECT - Q_DECLARE_PRIVATE(QPlainTextDocumentLayout) + Q_DECLARE_SCOPED_PRIVATE(QPlainTextDocumentLayout) Q_PROPERTY(int cursorWidth READ cursorWidth WRITE setCursorWidth) public: diff --git a/src/gui/widgets/qprintpreviewwidget.h b/src/gui/widgets/qprintpreviewwidget.h index d74bf93..240306f 100644 --- a/src/gui/widgets/qprintpreviewwidget.h +++ b/src/gui/widgets/qprintpreviewwidget.h @@ -58,7 +58,7 @@ class QPrintPreviewWidgetPrivate; class Q_GUI_EXPORT QPrintPreviewWidget : public QWidget { Q_OBJECT - Q_DECLARE_PRIVATE(QPrintPreviewWidget) + Q_DECLARE_SCOPED_PRIVATE(QPrintPreviewWidget) public: enum ViewMode { diff --git a/src/gui/widgets/qprogressbar.h b/src/gui/widgets/qprogressbar.h index 5ac6b85..de995b6 100644 --- a/src/gui/widgets/qprogressbar.h +++ b/src/gui/widgets/qprogressbar.h @@ -117,7 +117,7 @@ protected: void initStyleOption(QStyleOptionProgressBar *option) const; private: - Q_DECLARE_PRIVATE(QProgressBar) + Q_DECLARE_SCOPED_PRIVATE(QProgressBar) Q_DISABLE_COPY(QProgressBar) }; diff --git a/src/gui/widgets/qpushbutton.h b/src/gui/widgets/qpushbutton.h index 2264cc3..1b4cb95 100644 --- a/src/gui/widgets/qpushbutton.h +++ b/src/gui/widgets/qpushbutton.h @@ -111,7 +111,7 @@ public: private: Q_DISABLE_COPY(QPushButton) - Q_DECLARE_PRIVATE(QPushButton) + Q_DECLARE_SCOPED_PRIVATE(QPushButton) #ifndef QT_NO_MENU Q_PRIVATE_SLOT(d_func(), void _q_popupPressed()) #endif diff --git a/src/gui/widgets/qradiobutton.h b/src/gui/widgets/qradiobutton.h index e631bab..d2eaa4d 100644 --- a/src/gui/widgets/qradiobutton.h +++ b/src/gui/widgets/qradiobutton.h @@ -77,7 +77,7 @@ public: #endif private: - Q_DECLARE_PRIVATE(QRadioButton) + Q_DECLARE_SCOPED_PRIVATE(QRadioButton) Q_DISABLE_COPY(QRadioButton) }; diff --git a/src/gui/widgets/qrubberband.h b/src/gui/widgets/qrubberband.h index 1e638fd..629bc29 100644 --- a/src/gui/widgets/qrubberband.h +++ b/src/gui/widgets/qrubberband.h @@ -87,7 +87,7 @@ protected: void initStyleOption(QStyleOptionRubberBand *option) const; private: - Q_DECLARE_PRIVATE(QRubberBand) + Q_DECLARE_SCOPED_PRIVATE(QRubberBand) }; inline void QRubberBand::setGeometry(int ax, int ay, int aw, int ah) diff --git a/src/gui/widgets/qscrollarea.h b/src/gui/widgets/qscrollarea.h index d713e15..d2179b8 100644 --- a/src/gui/widgets/qscrollarea.h +++ b/src/gui/widgets/qscrollarea.h @@ -88,7 +88,7 @@ protected: void scrollContentsBy(int dx, int dy); private: - Q_DECLARE_PRIVATE(QScrollArea) + Q_DECLARE_SCOPED_PRIVATE(QScrollArea) Q_DISABLE_COPY(QScrollArea) }; diff --git a/src/gui/widgets/qscrollbar.h b/src/gui/widgets/qscrollbar.h index 9d25359..b9302b3 100644 --- a/src/gui/widgets/qscrollbar.h +++ b/src/gui/widgets/qscrollbar.h @@ -92,7 +92,7 @@ private: friend Q_GUI_EXPORT QStyleOptionSlider qt_qscrollbarStyleOption(QScrollBar *scrollBar); Q_DISABLE_COPY(QScrollBar) - Q_DECLARE_PRIVATE(QScrollBar) + Q_DECLARE_SCOPED_PRIVATE(QScrollBar) }; #endif // QT_NO_SCROLLBAR diff --git a/src/gui/widgets/qsizegrip.h b/src/gui/widgets/qsizegrip.h index 5a0fb3b..7e9e6ac 100644 --- a/src/gui/widgets/qsizegrip.h +++ b/src/gui/widgets/qsizegrip.h @@ -82,7 +82,7 @@ public: #endif private: - Q_DECLARE_PRIVATE(QSizeGrip) + Q_DECLARE_SCOPED_PRIVATE(QSizeGrip) Q_DISABLE_COPY(QSizeGrip) Q_PRIVATE_SLOT(d_func(), void _q_showIfNotHidden()) }; diff --git a/src/gui/widgets/qslider.h b/src/gui/widgets/qslider.h index 18c2603..3ff3889 100644 --- a/src/gui/widgets/qslider.h +++ b/src/gui/widgets/qslider.h @@ -122,7 +122,7 @@ private: friend Q_GUI_EXPORT QStyleOptionSlider qt_qsliderStyleOption(QSlider *slider); Q_DISABLE_COPY(QSlider) - Q_DECLARE_PRIVATE(QSlider) + Q_DECLARE_SCOPED_PRIVATE(QSlider) }; #endif // QT_NO_SLIDER diff --git a/src/gui/widgets/qspinbox.h b/src/gui/widgets/qspinbox.h index a168528..96d7b96 100644 --- a/src/gui/widgets/qspinbox.h +++ b/src/gui/widgets/qspinbox.h @@ -119,7 +119,7 @@ Q_SIGNALS: private: Q_DISABLE_COPY(QSpinBox) - Q_DECLARE_PRIVATE(QSpinBox) + Q_DECLARE_SCOPED_PRIVATE(QSpinBox) }; class QDoubleSpinBoxPrivate; @@ -176,7 +176,7 @@ Q_SIGNALS: private: Q_DISABLE_COPY(QDoubleSpinBox) - Q_DECLARE_PRIVATE(QDoubleSpinBox) + Q_DECLARE_SCOPED_PRIVATE(QDoubleSpinBox) }; #endif // QT_NO_SPINBOX diff --git a/src/gui/widgets/qsplashscreen.h b/src/gui/widgets/qsplashscreen.h index d7c521c..23d4d34 100644 --- a/src/gui/widgets/qsplashscreen.h +++ b/src/gui/widgets/qsplashscreen.h @@ -87,7 +87,7 @@ protected: private: Q_DISABLE_COPY(QSplashScreen) - Q_DECLARE_PRIVATE(QSplashScreen) + Q_DECLARE_SCOPED_PRIVATE(QSplashScreen) }; #endif // QT_NO_SPLASHSCREEN diff --git a/src/gui/widgets/qsplitter.h b/src/gui/widgets/qsplitter.h index ad5620e..5f16db2 100644 --- a/src/gui/widgets/qsplitter.h +++ b/src/gui/widgets/qsplitter.h @@ -142,7 +142,7 @@ public: private: Q_DISABLE_COPY(QSplitter) - Q_DECLARE_PRIVATE(QSplitter) + Q_DECLARE_SCOPED_PRIVATE(QSplitter) private: friend class QSplitterHandle; }; @@ -179,7 +179,7 @@ protected: private: Q_DISABLE_COPY(QSplitterHandle) - Q_DECLARE_PRIVATE(QSplitterHandle) + Q_DECLARE_SCOPED_PRIVATE(QSplitterHandle) }; #endif // QT_NO_SPLITTER diff --git a/src/gui/widgets/qstackedwidget.h b/src/gui/widgets/qstackedwidget.h index 95d6d9f..6dd21bb 100644 --- a/src/gui/widgets/qstackedwidget.h +++ b/src/gui/widgets/qstackedwidget.h @@ -88,7 +88,7 @@ protected: private: Q_DISABLE_COPY(QStackedWidget) - Q_DECLARE_PRIVATE(QStackedWidget) + Q_DECLARE_SCOPED_PRIVATE(QStackedWidget) }; #endif // QT_NO_STACKEDWIDGET diff --git a/src/gui/widgets/qstatusbar.h b/src/gui/widgets/qstatusbar.h index 86d1cda..28cb2a9 100644 --- a/src/gui/widgets/qstatusbar.h +++ b/src/gui/widgets/qstatusbar.h @@ -104,7 +104,7 @@ protected: private: Q_DISABLE_COPY(QStatusBar) - Q_DECLARE_PRIVATE(QStatusBar) + Q_DECLARE_SCOPED_PRIVATE(QStatusBar) }; #endif // QT_NO_STATUSBAR diff --git a/src/gui/widgets/qtabbar.h b/src/gui/widgets/qtabbar.h index 7514486..23d914e 100644 --- a/src/gui/widgets/qtabbar.h +++ b/src/gui/widgets/qtabbar.h @@ -212,7 +212,7 @@ Q_SIGNALS: friend class QAccessibleTabBar; private: Q_DISABLE_COPY(QTabBar) - Q_DECLARE_PRIVATE(QTabBar) + Q_DECLARE_SCOPED_PRIVATE(QTabBar) Q_PRIVATE_SLOT(d_func(), void _q_scrollTabs()) Q_PRIVATE_SLOT(d_func(), void _q_closeTab()) Q_PRIVATE_SLOT(d_func(), void _q_moveTab(int)) diff --git a/src/gui/widgets/qtabwidget.h b/src/gui/widgets/qtabwidget.h index 10150af..138a612 100644 --- a/src/gui/widgets/qtabwidget.h +++ b/src/gui/widgets/qtabwidget.h @@ -234,7 +234,7 @@ Q_SIGNALS: #endif // QT3_SUPPORT private: - Q_DECLARE_PRIVATE(QTabWidget) + Q_DECLARE_SCOPED_PRIVATE(QTabWidget) Q_DISABLE_COPY(QTabWidget) Q_PRIVATE_SLOT(d_func(), void _q_showTab(int)) Q_PRIVATE_SLOT(d_func(), void _q_removeTab(int)) diff --git a/src/gui/widgets/qtextbrowser.h b/src/gui/widgets/qtextbrowser.h index d5bd956..b9a501f 100644 --- a/src/gui/widgets/qtextbrowser.h +++ b/src/gui/widgets/qtextbrowser.h @@ -125,7 +125,7 @@ public: private: Q_DISABLE_COPY(QTextBrowser) - Q_DECLARE_PRIVATE(QTextBrowser) + Q_DECLARE_SCOPED_PRIVATE(QTextBrowser) Q_PRIVATE_SLOT(d_func(), void _q_documentModified()) Q_PRIVATE_SLOT(d_func(), void _q_activateAnchor(const QString &)) Q_PRIVATE_SLOT(d_func(), void _q_highlightLink(const QString &)) diff --git a/src/gui/widgets/qtextedit.h b/src/gui/widgets/qtextedit.h index 617822a..c1c6360 100644 --- a/src/gui/widgets/qtextedit.h +++ b/src/gui/widgets/qtextedit.h @@ -70,7 +70,7 @@ class QMimeData; class Q_GUI_EXPORT QTextEdit : public QAbstractScrollArea { Q_OBJECT - Q_DECLARE_PRIVATE(QTextEdit) + Q_DECLARE_SCOPED_PRIVATE(QTextEdit) Q_FLAGS(AutoFormatting) Q_ENUMS(LineWrapMode) Q_PROPERTY(AutoFormatting autoFormatting READ autoFormatting WRITE setAutoFormatting) diff --git a/src/gui/widgets/qtoolbar.h b/src/gui/widgets/qtoolbar.h index 2ab4ffd..590a345 100644 --- a/src/gui/widgets/qtoolbar.h +++ b/src/gui/widgets/qtoolbar.h @@ -162,7 +162,7 @@ public: #endif private: - Q_DECLARE_PRIVATE(QToolBar) + Q_DECLARE_SCOPED_PRIVATE(QToolBar) Q_DISABLE_COPY(QToolBar) Q_PRIVATE_SLOT(d_func(), void _q_toggleView(bool)) Q_PRIVATE_SLOT(d_func(), void _q_updateIconSize(const QSize &)) diff --git a/src/gui/widgets/qtoolbox.h b/src/gui/widgets/qtoolbox.h index 2c38967..242efa6 100644 --- a/src/gui/widgets/qtoolbox.h +++ b/src/gui/widgets/qtoolbox.h @@ -124,7 +124,7 @@ public: #endif private: - Q_DECLARE_PRIVATE(QToolBox) + Q_DECLARE_SCOPED_PRIVATE(QToolBox) Q_DISABLE_COPY(QToolBox) Q_PRIVATE_SLOT(d_func(), void _q_buttonClicked()) Q_PRIVATE_SLOT(d_func(), void _q_widgetDestroyed(QObject*)) diff --git a/src/gui/widgets/qtoolbutton.h b/src/gui/widgets/qtoolbutton.h index 1e7d678..7286096 100644 --- a/src/gui/widgets/qtoolbutton.h +++ b/src/gui/widgets/qtoolbutton.h @@ -127,7 +127,7 @@ protected: private: Q_DISABLE_COPY(QToolButton) - Q_DECLARE_PRIVATE(QToolButton) + Q_DECLARE_SCOPED_PRIVATE(QToolButton) #ifndef QT_NO_MENU Q_PRIVATE_SLOT(d_func(), void _q_buttonPressed()) Q_PRIVATE_SLOT(d_func(), void _q_updateButtonDown()) diff --git a/src/gui/widgets/qvalidator.h b/src/gui/widgets/qvalidator.h index ce78959..a38b98f 100644 --- a/src/gui/widgets/qvalidator.h +++ b/src/gui/widgets/qvalidator.h @@ -90,7 +90,7 @@ protected: private: Q_DISABLE_COPY(QValidator) - Q_DECLARE_PRIVATE(QValidator) + Q_DECLARE_SCOPED_PRIVATE(QValidator) }; class Q_GUI_EXPORT QIntValidator : public QValidator @@ -168,7 +168,7 @@ public: QObject * parent, const char *name); #endif private: - Q_DECLARE_PRIVATE(QDoubleValidator) + Q_DECLARE_SCOPED_PRIVATE(QDoubleValidator) Q_DISABLE_COPY(QDoubleValidator) double b; diff --git a/src/gui/widgets/qworkspace.cpp b/src/gui/widgets/qworkspace.cpp index 58ef1e3..47b654e 100644 --- a/src/gui/widgets/qworkspace.cpp +++ b/src/gui/widgets/qworkspace.cpp @@ -228,7 +228,7 @@ void QMDIControl::paintEvent(QPaintEvent *) class QWorkspaceTitleBar : public QWidget { Q_OBJECT - Q_DECLARE_PRIVATE(QWorkspaceTitleBar) + Q_DECLARE_SCOPED_PRIVATE(QWorkspaceTitleBar) Q_PROPERTY(bool autoRaise READ autoRaise WRITE setAutoRaise) Q_PROPERTY(bool movable READ isMovable WRITE setMovable) diff --git a/src/gui/widgets/qworkspace.h b/src/gui/widgets/qworkspace.h index 8a64315..1a20d6c 100644 --- a/src/gui/widgets/qworkspace.h +++ b/src/gui/widgets/qworkspace.h @@ -115,7 +115,7 @@ protected: #endif private: - Q_DECLARE_PRIVATE(QWorkspace) + Q_DECLARE_SCOPED_PRIVATE(QWorkspace) Q_DISABLE_COPY(QWorkspace) Q_PRIVATE_SLOT(d_func(), void _q_normalizeActiveWindow()) Q_PRIVATE_SLOT(d_func(), void _q_minimizeActiveWindow()) |