From 7d9d6cbda6bbbc715c6101db3f19ca3ede205520 Mon Sep 17 00:00:00 2001 From: "Bradley T. Hughes" Date: Mon, 9 Nov 2009 15:53:37 +0100 Subject: Add error handling for SetTimer() with the sentinel timer id If SetTimer() fails when trying to delay sendPostedEvents(), emit a warning and try to continue. Reviewed-by: mauricek --- src/corelib/kernel/qeventdispatcher_win.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/corelib/kernel/qeventdispatcher_win.cpp b/src/corelib/kernel/qeventdispatcher_win.cpp index f2e66c5..3050b82 100644 --- a/src/corelib/kernel/qeventdispatcher_win.cpp +++ b/src/corelib/kernel/qeventdispatcher_win.cpp @@ -70,7 +70,8 @@ extern uint qGlobalPostedEventsCount(); enum { WM_QT_SOCKETNOTIFIER = WM_USER, - WM_QT_SENDPOSTEDEVENTS = WM_USER + 1 + WM_QT_SENDPOSTEDEVENTS = WM_USER + 1, + SendPostedEventsTimerId = ~1u }; #if defined(Q_OS_WINCE) @@ -470,7 +471,7 @@ LRESULT CALLBACK qt_internal_proc(HWND hwnd, UINT message, WPARAM wp, LPARAM lp) } return 0; } else if (message == WM_TIMER) { - if (wp == ~1u) { + if (wp == SendPostedEventsTimerId) { KillTimer(d->internalHwnd, wp); int localSerialNumber = d->serialNumber; (void) d->wakeUps.fetchAndStoreRelease(0); @@ -488,7 +489,14 @@ LRESULT CALLBACK qt_internal_proc(HWND hwnd, UINT message, WPARAM wp, LPARAM lp) if (GetQueueStatus(QS_INPUT | QS_RAWINPUT | QS_TIMER) != 0) { // delay the next pass of sendPostedEvents() until we get the special // WM_TIMER, which allows all pending Windows messages to be processed - SetTimer(d->internalHwnd, ~1u, 0, 0); + if (SetTimer(d->internalHwnd, SendPostedEventsTimerId, 0, 0) == 0) { + // failed to start the timer, oops, clear wakeUps in an attempt to keep things running + qErrnoWarning("Qt: INTERNAL ERROR: failed to start sendPostedEvents() timer"); + d->wakeUps.fetchAndStoreRelease(0); + } else { + // SetTimer() succeeded, nothing to do now + ; + } } else { // nothing pending in the queue, let sendPostedEvents go through d->wakeUps.fetchAndStoreRelease(0); -- cgit v0.12 From f656909791819b3f033f9ec1bd0de524b92919e2 Mon Sep 17 00:00:00 2001 From: Denis Dzyubenko Date: Mon, 9 Nov 2009 18:58:57 +0100 Subject: Modified windowflags manualtest Added a few buttons to maximize a window from the code. Reviewed-by: trustme --- tests/manual/windowflags/previewwindow.cpp | 20 ++++++++++++++++++++ tests/manual/windowflags/previewwindow.h | 6 ++++++ 2 files changed, 26 insertions(+) diff --git a/tests/manual/windowflags/previewwindow.cpp b/tests/manual/windowflags/previewwindow.cpp index 78f9fcb..31e8b3e 100644 --- a/tests/manual/windowflags/previewwindow.cpp +++ b/tests/manual/windowflags/previewwindow.cpp @@ -103,8 +103,18 @@ PreviewWindow::PreviewWindow(QWidget *parent) closeButton = new QPushButton(tr("&Close")); connect(closeButton, SIGNAL(clicked()), this, SLOT(close())); + showNormalButton = new QPushButton(tr("Show normal")); + connect(showNormalButton, SIGNAL(clicked()), this, SLOT(showNormal())); + showMaximizedButton = new QPushButton(tr("Show maximized")); + connect(showMaximizedButton, SIGNAL(clicked()), this, SLOT(showMaximized())); + showFullScreenButton = new QPushButton(tr("Show fullscreen")); + connect(showFullScreenButton, SIGNAL(clicked()), this, SLOT(showFullScreen())); + QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(textEdit); + layout->addWidget(showNormalButton); + layout->addWidget(showMaximizedButton); + layout->addWidget(showFullScreenButton); layout->addWidget(closeButton); setLayout(layout); @@ -129,8 +139,18 @@ PreviewDialog::PreviewDialog(QWidget *parent) closeButton = new QPushButton(tr("&Close")); connect(closeButton, SIGNAL(clicked()), this, SLOT(close())); + showNormalButton = new QPushButton(tr("Show normal")); + connect(showNormalButton, SIGNAL(clicked()), this, SLOT(showNormal())); + showMaximizedButton = new QPushButton(tr("Show maximized")); + connect(showMaximizedButton, SIGNAL(clicked()), this, SLOT(showMaximized())); + showFullScreenButton = new QPushButton(tr("Show fullscreen")); + connect(showFullScreenButton, SIGNAL(clicked()), this, SLOT(showFullScreen())); + QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(textEdit); + layout->addWidget(showNormalButton); + layout->addWidget(showMaximizedButton); + layout->addWidget(showFullScreenButton); layout->addWidget(closeButton); setLayout(layout); diff --git a/tests/manual/windowflags/previewwindow.h b/tests/manual/windowflags/previewwindow.h index fdd21d7..fbf822b 100644 --- a/tests/manual/windowflags/previewwindow.h +++ b/tests/manual/windowflags/previewwindow.h @@ -62,6 +62,9 @@ public: private: QTextEdit *textEdit; QPushButton *closeButton; + QPushButton *showNormalButton; + QPushButton *showMaximizedButton; + QPushButton *showFullScreenButton; }; class PreviewDialog : public QDialog @@ -76,6 +79,9 @@ public: private: QTextEdit *textEdit; QPushButton *closeButton; + QPushButton *showNormalButton; + QPushButton *showMaximizedButton; + QPushButton *showFullScreenButton; }; #endif -- cgit v0.12 From 64946cdc9a5e934132f5c21cbd85e4c21bb5e161 Mon Sep 17 00:00:00 2001 From: Denis Dzyubenko Date: Tue, 10 Nov 2009 14:37:28 +0100 Subject: Fixed opening files in the findfile example. QDesktopServices::openUrl expects a proper url, not just a filename. Reviewed-by: Jedrzej Nowacki --- examples/dialogs/findfiles/window.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/dialogs/findfiles/window.cpp b/examples/dialogs/findfiles/window.cpp index f8fc00b..afe6399 100644 --- a/examples/dialogs/findfiles/window.cpp +++ b/examples/dialogs/findfiles/window.cpp @@ -243,7 +243,7 @@ void Window::openFileOfItem(int row, int /* column */) { QTableWidgetItem *item = filesTable->item(row, 0); - QDesktopServices::openUrl(currentDir.absoluteFilePath(item->text())); + QDesktopServices::openUrl(QUrl::fromLocalFile(currentDir.absoluteFilePath(item->text()))); } //! [12] -- cgit v0.12 From 791c4035c28257e5a8426e6519866546faaf5286 Mon Sep 17 00:00:00 2001 From: Denis Dzyubenko Date: Wed, 11 Nov 2009 11:02:09 +0100 Subject: Pinchzoom example zooms more smooth Remember the scale factor so it won't reset each time a new touch sequence starts. Reviewed-by: Bradley T. Hughes --- examples/multitouch/pinchzoom/graphicsview.cpp | 20 +++++++++++++++----- examples/multitouch/pinchzoom/graphicsview.h | 3 +++ 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/examples/multitouch/pinchzoom/graphicsview.cpp b/examples/multitouch/pinchzoom/graphicsview.cpp index 0c79073..00e620a 100644 --- a/examples/multitouch/pinchzoom/graphicsview.cpp +++ b/examples/multitouch/pinchzoom/graphicsview.cpp @@ -45,7 +45,7 @@ #include GraphicsView::GraphicsView(QGraphicsScene *scene, QWidget *parent) - : QGraphicsView(scene, parent) + : QGraphicsView(scene, parent), totalScaleFactor(1) { viewport()->setAttribute(Qt::WA_AcceptTouchEvents); setDragMode(ScrollHandDrag); @@ -58,14 +58,24 @@ bool GraphicsView::viewportEvent(QEvent *event) case QEvent::TouchUpdate: case QEvent::TouchEnd: { - QList touchPoints = static_cast(event)->touchPoints(); + QTouchEvent *touchEvent = static_cast(event); + QList touchPoints = touchEvent->touchPoints(); if (touchPoints.count() == 2) { // determine scale factor const QTouchEvent::TouchPoint &touchPoint0 = touchPoints.first(); const QTouchEvent::TouchPoint &touchPoint1 = touchPoints.last(); - const qreal scaleFactor = QLineF(touchPoint0.pos(), touchPoint1.pos()).length() - / QLineF(touchPoint0.startPos(), touchPoint1.startPos()).length(); - setTransform(QTransform().scale(scaleFactor, scaleFactor)); + qreal currentScaleFactor = + QLineF(touchPoint0.pos(), touchPoint1.pos()).length() + / QLineF(touchPoint0.startPos(), touchPoint1.startPos()).length(); + if (touchEvent->touchPointStates() & Qt::TouchPointReleased) { + // if one of the fingers is released, remember the current scale + // factor so that adding another finger later will continue zooming + // by adding new scale factor to the existing remembered value. + totalScaleFactor *= currentScaleFactor; + currentScaleFactor = 1; + } + setTransform(QTransform().scale(totalScaleFactor * currentScaleFactor, + totalScaleFactor * currentScaleFactor)); } return true; } diff --git a/examples/multitouch/pinchzoom/graphicsview.h b/examples/multitouch/pinchzoom/graphicsview.h index c5195cd..81a115d 100644 --- a/examples/multitouch/pinchzoom/graphicsview.h +++ b/examples/multitouch/pinchzoom/graphicsview.h @@ -50,4 +50,7 @@ public: GraphicsView(QGraphicsScene *scene = 0, QWidget *parent = 0); bool viewportEvent(QEvent *event); + +private: + qreal totalScaleFactor; }; -- cgit v0.12