diff options
author | Morten Johan Sørvig <morten.sorvig@nokia.com> | 2009-11-06 07:28:11 (GMT) |
---|---|---|
committer | Morten Johan Sørvig <morten.sorvig@nokia.com> | 2009-11-06 07:28:11 (GMT) |
commit | 7e774bedf20d5e0ec4ab799461f785a913a46947 (patch) | |
tree | a58d5e7966f74c7094e42324542b3e0efa8f7156 | |
parent | ebe228f3ecaa379bbfa1e8a48b0aba820a5c8254 (diff) | |
parent | 7efc64e6a8dbf670bbc46243664d44df7acc5892 (diff) | |
download | Qt-7e774bedf20d5e0ec4ab799461f785a913a46947.zip Qt-7e774bedf20d5e0ec4ab799461f785a913a46947.tar.gz Qt-7e774bedf20d5e0ec4ab799461f785a913a46947.tar.bz2 |
Merge branch '4.6' of scm.dev.nokia.troll.no:qt/qt-platform-team into 4.6
-rw-r--r-- | dist/changes-4.6.0 | 35 | ||||
-rw-r--r-- | src/gui/kernel/qapplication_mac.mm | 26 | ||||
-rw-r--r-- | src/gui/kernel/qcocoaapplicationdelegate_mac.mm | 11 | ||||
-rw-r--r-- | src/gui/kernel/qcocoaapplicationdelegate_mac_p.h | 1 | ||||
-rw-r--r-- | src/gui/kernel/qevent.cpp | 33 | ||||
-rw-r--r-- | src/gui/kernel/qevent.h | 2 | ||||
-rw-r--r-- | src/gui/kernel/qevent_p.h | 13 | ||||
-rw-r--r-- | tests/auto/qgridlayout/tst_qgridlayout.cpp | 4 |
8 files changed, 116 insertions, 9 deletions
diff --git a/dist/changes-4.6.0 b/dist/changes-4.6.0 index 7596943..6ad73f6 100644 --- a/dist/changes-4.6.0 +++ b/dist/changes-4.6.0 @@ -23,6 +23,8 @@ information about a particular change. * The minimum required version of the D-Bus reference library is now 0.93. + - [MR#1742] Added new multimedia keys to the Qt::Key enum. + Third party components ---------------------- @@ -39,6 +41,11 @@ Third party components * Since the 4.6 beta Qt::RenderHint has been moved to QGraphicsBlurEffect::BlurHint. + * Input contexts are not activated for disabled widgets anymore. + + * [250555] Data copied from Mozilla Firefox can now be pasted correctly to + a Qt application. + QtCore - QVariant @@ -64,6 +71,8 @@ QtCore - QTextStream * [221316] Fixed crash on large input. + * Improved reading utf8/utf16/utf32 data by correctly skipping the + ByteOrderMark when reading data by one character at a time. QtGui @@ -155,7 +164,8 @@ QtGui - QWidget * [201649] Added QWidget::previousInFocusChain - + * [254563] Fixed a crash when setting a focus in a widget tree that + contains invisible widgets **************************************************************************** * Platform Specific Changes * @@ -190,6 +200,29 @@ QtGui - KDE Integration: Improved the integration into KDE desktop (loading of KDE palette, usage of KColorDialog and KFileDialog) using the GuiPlatformPlugin + - Fixed pasting the clipboard content to non-Qt application on X11 when the + requested format is image/ppm. Patch by Ritt.K + + - On Windows when a file cannot be accessed (stat()ed), we are now restoring + the error mode to the original value. + + - On X11 Qt now supports the _NET_WM_SYNC protocol. + + - On X11 Qt now supports the SAVE_TARGET protocol that allows to keep + clipboard contents if the application that owns the clipboards exits + + - [QTBUG-4652] On X11 clipboard content can be properly retrieved even when an + application asks the unsupported target. This fixes copying and pasting data + when using Synergy. + + - [QTBUG-4418] Fixed maximizing and restoring a window on Mac. + + - [MR#797] Fixed a crash when using QX11EmbedContainer/Widget on x86_64. + + - [MR#1111] Emit workAreaResized when _NET_WORKAREA is changed on X11. + + - Add support for GetURL events on Mac OS X + **************************************************************************** * Tools * **************************************************************************** diff --git a/src/gui/kernel/qapplication_mac.mm b/src/gui/kernel/qapplication_mac.mm index 84e0d50..84da56e 100644 --- a/src/gui/kernel/qapplication_mac.mm +++ b/src/gui/kernel/qapplication_mac.mm @@ -104,6 +104,7 @@ #include "qdir.h" #include "qdebug.h" #include "qtimer.h" +#include "qurl.h" #include "private/qmacinputcontext_p.h" #include "private/qpaintengine_mac_p.h" #include "private/qcursor_p.h" @@ -966,7 +967,8 @@ struct QMacAppleEventTypeSpec { AEEventID mac_id; } app_apple_events[] = { { kCoreEventClass, kAEQuitApplication }, - { kCoreEventClass, kAEOpenDocuments } + { kCoreEventClass, kAEOpenDocuments }, + { kInternetEventClass, kAEGetURL }, }; #ifndef QT_MAC_USE_COCOA @@ -1201,7 +1203,7 @@ void qt_init(QApplicationPrivate *priv, int) app_proc_ae_handlerUPP = AEEventHandlerUPP(QApplicationPrivate::globalAppleEventProcessor); for(uint i = 0; i < sizeof(app_apple_events) / sizeof(QMacAppleEventTypeSpec); ++i) AEInstallEventHandler(app_apple_events[i].mac_class, app_apple_events[i].mac_id, - app_proc_ae_handlerUPP, SRefCon(qApp), true); + app_proc_ae_handlerUPP, SRefCon(qApp), false); } if (QApplicationPrivate::app_style) { @@ -1237,6 +1239,10 @@ void qt_init(QApplicationPrivate *priv, int) [cocoaApp setMenu:[qtMenuLoader menu]]; [newDelegate setMenuLoader:qtMenuLoader]; [qtMenuLoader release]; + + NSAppleEventManager *eventManager = [NSAppleEventManager sharedAppleEventManager]; + [eventManager setEventHandler:newDelegate andSelector:@selector(getUrl:withReplyEvent:) + forEventClass:kInternetEventClass andEventID:kAEGetURL]; } #endif // Register for Carbon tablet proximity events on the event monitor target. @@ -2477,6 +2483,22 @@ OSStatus QApplicationPrivate::globalAppleEventProcessor(const AppleEvent *ae, Ap default: break; } + } else if (aeClass == kInternetEventClass) { + switch (aeID) { + case kAEGetURL: { + char urlData[1024]; + Size actualSize; + if (AEGetParamPtr(ae, keyDirectObject, typeChar, 0, urlData, + sizeof(urlData) - 1, &actualSize) == noErr) { + urlData[actualSize] = 0; + QFileOpenEvent ev(QUrl(QString::fromUtf8(urlData))); + QApplication::sendSpontaneousEvent(app, &ev); + } + break; + } + default: + break; + } } #ifdef DEBUG_EVENTS qDebug("Qt: internal: %shandled Apple event! %c%c%c%c %c%c%c%c", handled_event ? "(*)" : "", diff --git a/src/gui/kernel/qcocoaapplicationdelegate_mac.mm b/src/gui/kernel/qcocoaapplicationdelegate_mac.mm index d103cbd..37dcc67 100644 --- a/src/gui/kernel/qcocoaapplicationdelegate_mac.mm +++ b/src/gui/kernel/qcocoaapplicationdelegate_mac.mm @@ -83,6 +83,7 @@ #include <private/qt_cocoa_helpers_mac_p.h> #include <private/qdesktopwidget_mac_p.h> #include <qevent.h> +#include <qurl.h> #include <qapplication.h> QT_BEGIN_NAMESPACE @@ -303,5 +304,15 @@ static void cleanupCocoaApplicationDelegate() [self doesNotRecognizeSelector:invocationSelector]; } +- (void)getUrl:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent +{ + Q_UNUSED(replyEvent); + + NSString *urlString = [[event paramDescriptorForKeyword:keyDirectObject] stringValue]; + QUrl url(qt_mac_NSStringToQString(urlString)); + QFileOpenEvent qtEvent(url); + qt_sendSpontaneousEvent(qAppInstance(), &qtEvent); +} + @end #endif diff --git a/src/gui/kernel/qcocoaapplicationdelegate_mac_p.h b/src/gui/kernel/qcocoaapplicationdelegate_mac_p.h index 80df645..a137744 100644 --- a/src/gui/kernel/qcocoaapplicationdelegate_mac_p.h +++ b/src/gui/kernel/qcocoaapplicationdelegate_mac_p.h @@ -123,5 +123,6 @@ QT_FORWARD_DECLARE_CLASS(QApplicationPrivate); - (void)setMenuLoader:(QT_MANGLE_NAMESPACE(QCocoaMenuLoader)*)menuLoader; - (QT_MANGLE_NAMESPACE(QCocoaMenuLoader) *)menuLoader; - (void)setReflectionDelegate:(NSObject <NSApplicationDelegate> *)oldDelegate; +- (void)getUrl:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent; @end #endif diff --git a/src/gui/kernel/qevent.cpp b/src/gui/kernel/qevent.cpp index ad68aea..ff97405 100644 --- a/src/gui/kernel/qevent.cpp +++ b/src/gui/kernel/qevent.cpp @@ -2976,13 +2976,13 @@ QShowEvent::~QShowEvent() /*! \class QFileOpenEvent \brief The QFileOpenEvent class provides an event that will be - sent when there is a request to open a file. + sent when there is a request to open a file or a URL. \ingroup events File open events will be sent to the QApplication::instance() - when the operating system requests that a file be opened. This is - a high-level event that can be caused by different user actions + when the operating system requests that a file or URL should be opened. + This is a high-level event that can be caused by different user actions depending on the user's desktop environment; for example, double clicking on an file icon in the Finder on Mac OS X. @@ -2999,12 +2999,27 @@ QShowEvent::~QShowEvent() */ QFileOpenEvent::QFileOpenEvent(const QString &file) : QEvent(FileOpen), f(file) -{} +{ + d = reinterpret_cast<QEventPrivate *>(new QFileOpenEventPrivate(QUrl::fromLocalFile(file))); +} + +/*! + \internal + + Constructs a file open event for the given \a url. +*/ +QFileOpenEvent::QFileOpenEvent(const QUrl &url) + : QEvent(FileOpen) +{ + d = reinterpret_cast<QEventPrivate *>(new QFileOpenEventPrivate(url)); + f = url.toLocalFile(); +} /*! \internal */ QFileOpenEvent::~QFileOpenEvent() { + delete reinterpret_cast<QFileOpenEventPrivate *>(d); } /*! @@ -3013,6 +3028,16 @@ QFileOpenEvent::~QFileOpenEvent() Returns the file that is being opened. */ +/*! + \fn QUrl QFileOpenEvent::url() const + + Returns the url that is being opened. +*/ +QUrl QFileOpenEvent::url() const +{ + return reinterpret_cast<const QFileOpenEventPrivate *>(d)->url; +} + #ifndef QT_NO_TOOLBAR /*! \internal diff --git a/src/gui/kernel/qevent.h b/src/gui/kernel/qevent.h index b9512fa..9839269 100644 --- a/src/gui/kernel/qevent.h +++ b/src/gui/kernel/qevent.h @@ -638,9 +638,11 @@ class Q_GUI_EXPORT QFileOpenEvent : public QEvent { public: QFileOpenEvent(const QString &file); + QFileOpenEvent(const QUrl &url); ~QFileOpenEvent(); inline QString file() const { return f; } + QUrl url() const; private: QString f; }; diff --git a/src/gui/kernel/qevent_p.h b/src/gui/kernel/qevent_p.h index 6e6ab01..4aaaa8b 100644 --- a/src/gui/kernel/qevent_p.h +++ b/src/gui/kernel/qevent_p.h @@ -43,6 +43,7 @@ #define QEVENT_P_H #include <QtCore/qglobal.h> +#include <QtCore/qurl.h> #include <QtGui/qevent.h> QT_BEGIN_NAMESPACE @@ -164,6 +165,18 @@ public: QMap<Qt::GestureType, QWidget *> targetWidgets; }; + +class QFileOpenEventPrivate +{ +public: + inline QFileOpenEventPrivate(const QUrl &url) + : url(url) + { + } + + QUrl url; +}; + QT_END_NAMESPACE #endif // QEVENT_P_H diff --git a/tests/auto/qgridlayout/tst_qgridlayout.cpp b/tests/auto/qgridlayout/tst_qgridlayout.cpp index 7c320be..46e2a03 100644 --- a/tests/auto/qgridlayout/tst_qgridlayout.cpp +++ b/tests/auto/qgridlayout/tst_qgridlayout.cpp @@ -920,9 +920,9 @@ void tst_QGridLayout::minMaxSize() #if defined(Q_WS_X11) qt_x11_wait_for_window_manager(m_toplevel); // wait for the show #endif - QTest::qWait(20); + QTest::qWait(40); m_toplevel->adjustSize(); - QTest::qWait(120); // wait for the implicit adjustSize + QTest::qWait(240); // wait for the implicit adjustSize // If the following fails we might have to wait longer. // If that does not help there is likely a problem with the implicit adjustSize in show() if (!fixedSize.isValid()) { |