From 9b9895de8da08776e586f20807d4698e5d9e5680 Mon Sep 17 00:00:00 2001 From: Bjoern Breitmeyer Date: Thu, 10 May 2012 14:43:26 +0200 Subject: Fix for windows platform plugin to work with WINCE. Made opengl optional. Made Clipboard and Accessability optional. Moved internal mime data into its on source file, was implemented in the clipboard source which is just strange. Change-Id: I6ddf0c656533bd45e22e24492fc2254d15b7822f Reviewed-by: Friedemann Kleint --- .../windows/accessible/qwindowsaccessibility.cpp | 4 - .../windows/accessible/qwindowsmsaaaccessible.cpp | 3 - .../platforms/windows/qplatformfunctions_wince.h | 325 +++++++++++++++++++++ src/plugins/platforms/windows/qtwindowsglobal.h | 3 + .../platforms/windows/qwindowsclipboard.cpp | 73 ----- src/plugins/platforms/windows/qwindowscontext.cpp | 49 +++- src/plugins/platforms/windows/qwindowscontext.h | 5 +- .../platforms/windows/qwindowsdialoghelpers.cpp | 6 + src/plugins/platforms/windows/qwindowsdrag.cpp | 4 +- .../platforms/windows/qwindowsfontdatabase.cpp | 32 +- .../platforms/windows/qwindowsfontengine.cpp | 113 ++++++- .../platforms/windows/qwindowsintegration.cpp | 34 ++- .../platforms/windows/qwindowsintegration.h | 6 +- .../platforms/windows/qwindowsinternalmimedata.cpp | 116 ++++++++ .../platforms/windows/qwindowskeymapper.cpp | 34 +++ .../platforms/windows/qwindowsmousehandler.cpp | 6 + .../platforms/windows/qwindowsnativeimage.cpp | 2 + src/plugins/platforms/windows/qwindowsscreen.cpp | 9 +- src/plugins/platforms/windows/qwindowsscreen.h | 3 + src/plugins/platforms/windows/qwindowsservices.cpp | 13 +- src/plugins/platforms/windows/qwindowstheme.cpp | 17 ++ src/plugins/platforms/windows/qwindowswindow.cpp | 14 + src/plugins/platforms/windows/qwindowswindow.h | 15 +- src/plugins/platforms/windows/windows.pro | 26 +- 24 files changed, 802 insertions(+), 110 deletions(-) create mode 100644 src/plugins/platforms/windows/qplatformfunctions_wince.h create mode 100644 src/plugins/platforms/windows/qwindowsinternalmimedata.cpp (limited to 'src/plugins/platforms') diff --git a/src/plugins/platforms/windows/accessible/qwindowsaccessibility.cpp b/src/plugins/platforms/windows/accessible/qwindowsaccessibility.cpp index 6f2a601c50..21d0b839d7 100644 --- a/src/plugins/platforms/windows/accessible/qwindowsaccessibility.cpp +++ b/src/plugins/platforms/windows/accessible/qwindowsaccessibility.cpp @@ -84,10 +84,6 @@ #include #endif -#ifdef Q_OS_WINCE -#include "../qguifunctions_wince.h" -#endif - #include "../qtwindows_additional.h" diff --git a/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp b/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp index fafe624e4b..b8d46fe9cb 100644 --- a/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp +++ b/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp @@ -72,9 +72,6 @@ #include #endif -#ifdef Q_OS_WINCE -#include "../qguifunctions_wince.h" -#endif #include "../qtwindows_additional.h" diff --git a/src/plugins/platforms/windows/qplatformfunctions_wince.h b/src/plugins/platforms/windows/qplatformfunctions_wince.h new file mode 100644 index 0000000000..0e6a859b49 --- /dev/null +++ b/src/plugins/platforms/windows/qplatformfunctions_wince.h @@ -0,0 +1,325 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QPLATFORMFUNCTIONS_WCE_H +#define QPLATFORMFUNCTIONS_WCE_H + +#ifdef Q_OS_WINCE +#include +#define UNDER_NT +#include +#include + +#ifndef WM_MOUSELEAVE +# define WM_MOUSELEAVE 0x02A3 +#endif + +#ifndef WM_TOUCH +# define WM_TOUCH 0x0240 +#endif + +#ifndef WM_GETOBJECT +#define WM_GETOBJECT 0x003D +#endif + +#define GetWindowLongPtr GetWindowLong +#define SetWindowLongPtr SetWindowLong +#define GWLP_USERDATA GWL_USERDATA + +#ifndef CWP_SKIPINVISIBLE +#define CWP_SKIPINVISIBLE 0x0001 +#define findPlatformWindowAt(a, b, c) findPlatformWindowAt(a, b) +#endif + +#ifndef CS_OWNDC +#define CS_OWNDC 0x0020 +#endif + +#ifndef HWND_MESSAGE +#define HWND_MESSAGE 0 +#endif + +#ifndef CAPTUREBLT +#define CAPTUREBLT (DWORD)0x40000000 +#endif + +#define SW_SHOWMINIMIZED SW_MINIMIZE +#define SW_SHOWMINNOACTIVE SW_MINIMIZE + +#ifndef ChildWindowFromPointEx +#define ChildWindowFromPointEx(a, b, c) ChildWindowFromPoint(a, b) +#endif + +#ifndef CF_DIBV5 +#define CF_DIBV5 17 +#endif + +#ifndef WM_MOUSEACTIVATE +#define WM_MOUSEACTIVATE 0x0021 +#endif + +#ifndef WM_CHILDACTIVATE +#define WM_CHILDACTIVATE 0x0022 +#endif + +#ifndef WM_PARENTNOTIFY +#define WM_PARENTNOTIFY 0x0210 +#endif + +#ifndef WM_ENTERIDLE +#define WM_ENTERIDLE 0x0121 +#endif + +#ifndef WM_GETMINMAXINFO +#define WM_GETMINMAXINFO 0x0024 +#endif + +#ifndef WM_WINDOWPOSCHANGING +#define WM_WINDOWPOSCHANGING 0x0046 +#endif + +#ifndef WM_NCMOUSEMOVE +#define WM_NCMOUSEMOVE 0x00A0 +#endif + +#ifndef WM_NCMBUTTONDBLCLK +#define WM_NCMBUTTONDBLCLK 0x00A +#endif + +#ifndef WM_NCCREATE +#define WM_NCCREATE 0x0081 +#endif + +#ifndef WM_NCCALCSIZE +#define WM_NCCALCSIZE 0x0083 +#endif + +#ifndef WM_NCACTIVATE +#define WM_NCACTIVATE 0x0086 +#endif + +#ifndef WM_NCMOUSELEAVE +#define WM_NCMOUSELEAVE 0x02A2 +#endif + +#ifndef WM_NCLBUTTONDOWN +#define WM_NCLBUTTONDOWN 0x00A1 +#endif + +#ifndef WM_NCLBUTTONUP +#define WM_NCLBUTTONUP 0x00A2 +#endif + +#ifndef WM_NCPAINT +#define WM_NCPAINT 0x0085 +#endif + +#ifndef WM_NCHITTEST +#define WM_NCHITTEST 0x0084 +#endif + +#ifndef WM_THEMECHANGED +#define WM_THEMECHANGED 0x031A +#endif + +#ifndef WM_DISPLAYCHANGE +#define WM_DISPLAYCHANGE 0x007E +#endif + +#ifndef VREFRESH +#define VREFRESH 116 +#endif + +// application defines +#define SPI_SETNONCLIENTMETRICS 72 +#define SPI_SETICONTITLELOGFONT 0x0022 +#define WM_ACTIVATEAPP 0x001c +#define SW_PARENTCLOSING 1 +#define SW_OTHERMAXIMIZED 2 +#define SW_PARENTOPENING 3 +#define SW_OTHERRESTORED 4 +#define GET_XBUTTON_WPARAM(wParam) (HIWORD(wParam)) + +// drag n drop +#ifndef CFSTR_PERFORMEDDROPEFFECT +#define CFSTR_PERFORMEDDROPEFFECT TEXT("Performed DropEffect") +#endif + +// QWidget +#define SW_SHOWMINIMIZED SW_MINIMIZE + +// QRegion +#define ALTERNATE 0 +#define WINDING 1 + +// QFontEngine +typedef struct _FIXED { + WORD fract; + short value; +} FIXED; + +typedef struct tagPOINTFX { + FIXED x; + FIXED y; +} POINTFX; + +typedef struct _MAT2 { + FIXED eM11; + FIXED eM12; + FIXED eM21; + FIXED eM22; +} MAT2; + +typedef struct _GLYPHMETRICS { + UINT gmBlackBoxX; + UINT gmBlackBoxY; + POINT gmptGlyphOrigin; + short gmCellIncX; + short gmCellIncY; +} GLYPHMETRICS; + +typedef struct tagTTPOLYGONHEADER +{ + DWORD cb; + DWORD dwType; + POINTFX pfxStart; +} TTPOLYGONHEADER; + +typedef struct tagTTPOLYCURVE +{ + WORD wType; + WORD cpfx; + POINTFX apfx[1]; +} TTPOLYCURVE; + +#define GGO_NATIVE 2 +#define GGO_GLYPH_INDEX 0x0080 +#define TT_PRIM_LINE 1 +#define TT_PRIM_QSPLINE 2 +#define TT_PRIM_CSPLINE 3 +#define ANSI_VAR_FONT 12 + +#ifndef OleInitialize +#define OleInitialize(a) 0 +#endif + +#ifndef SPI_GETSNAPTODEFBUTTON +#define SPI_GETSNAPTODEFBUTTON 95 +#endif + +#ifndef WS_EX_LAYERED +#define WS_EX_LAYERED 0x00080000 +#endif + +// Clipboard -------------------------------------------------------- +#ifndef WM_CHANGECBCHAIN +#define WM_CHANGECBCHAIN 0x030D +#endif + +#ifndef WM_DRAWCLIPBOARD +#define WM_DRAWCLIPBOARD 0x0308 +#endif + +inline bool IsIconic( HWND /*hWnd*/ ) +{ + return false; +} + +inline bool IsZoomed( HWND /*hWnd*/ ) +{ + return true; +} + +inline int AddFontResourceExW( LPCWSTR /*name*/, DWORD /*fl*/, PVOID /*res*/) +{ + return 0; +} + +inline bool RemoveFontResourceExW( LPCWSTR /*name*/, DWORD /*fl*/, PVOID /*pdv*/) +{ + return 0; +} + +inline void OleUninitialize() +{ +} + +inline DWORD GetGlyphOutline( HDC /*hdc*/, UINT /*uChar*/, INT /*fuFormat*/, GLYPHMETRICS * /*lpgm*/, + DWORD /*cjBuffer*/, LPVOID /*pvBuffer*/, CONST MAT2 * /*lpmat2*/ ) +{ + return GDI_ERROR; +} + +#ifndef SPI_SETFONTSMOOTHINGTYPE +# define SPI_SETFONTSMOOTHINGTYPE 0x200B +#endif +#ifndef SPI_GETFONTSMOOTHINGTYPE +# define SPI_GETFONTSMOOTHINGTYPE 0x200A +#endif +#ifndef FE_FONTSMOOTHINGCLEARTYPE +# define FE_FONTSMOOTHINGCLEARTYPE 0x0002 +#endif + +#ifndef DEVICE_FONTTYPE +#define DEVICE_FONTTYPE 0x0002 +#endif + +#ifndef RASTER_FONTTYPE +#define RASTER_FONTTYPE 0x0001 +#endif + +#ifndef WM_DISPLAYCHANGE +#define WM_DISPLAYCHANGE 0x007E +#endif + +BOOL qt_wince_ChangeClipboardChain( + HWND hWndRemove, // handle to window to remove + HWND hWndNewNext // handle to next window +); +#define ChangeClipboardChain(a,b) qt_wince_ChangeClipboardChain(a,b); + +HWND qt_wince_SetClipboardViewer( + HWND hWndNewViewer // handle to clipboard viewer window +); +#define SetClipboardViewer(a) qt_wince_SetClipboardViewer(a) + +#endif // Q_OS_WINCE +#endif // QPLATFORMFUNCTIONS_WCE_H diff --git a/src/plugins/platforms/windows/qtwindowsglobal.h b/src/plugins/platforms/windows/qtwindowsglobal.h index 27cfbdc662..ab23b06302 100644 --- a/src/plugins/platforms/windows/qtwindowsglobal.h +++ b/src/plugins/platforms/windows/qtwindowsglobal.h @@ -44,6 +44,9 @@ #include "qtwindows_additional.h" #include +#ifdef Q_OS_WINCE +# include "qplatformfunctions_wince.h" +#endif QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/windows/qwindowsclipboard.cpp b/src/plugins/platforms/windows/qwindowsclipboard.cpp index 4166e567c4..41f22d5ae1 100644 --- a/src/plugins/platforms/windows/qwindowsclipboard.cpp +++ b/src/plugins/platforms/windows/qwindowsclipboard.cpp @@ -97,79 +97,6 @@ QDebug operator<<(QDebug d, const QMimeData &m) return d; } -/*! - \class QWindowsInternalMimeDataBase - \brief Base for implementations of QInternalMimeData using a IDataObject COM object. - - In clipboard handling and Drag and drop, static instances - of QInternalMimeData implementations are kept and passed to the client. - - QInternalMimeData provides virtuals that query the formats and retrieve - mime data on demand when the client invokes functions like QMimeData::hasHtml(), - QMimeData::html() on the instance returned. Otherwise, expensive - construction of a new QMimeData object containing all possible - formats would have to be done in each call to mimeData(). - - The base class introduces new virtuals to obtain and release - the instances IDataObject from the clipboard or Drag and Drop and - does conversion using QWindowsMime classes. - - \sa QInternalMimeData, QWindowsMime, QWindowsMimeConverter - \ingroup qt-lighthouse-win -*/ - -bool QWindowsInternalMimeData::hasFormat_sys(const QString &mime) const -{ - IDataObject *pDataObj = retrieveDataObject(); - if (!pDataObj) - return false; - - const QWindowsMimeConverter &mc = QWindowsContext::instance()->mimeConverter(); - const bool has = mc.converterToMime(mime, pDataObj) != 0; - releaseDataObject(pDataObj); - if (QWindowsContext::verboseOLE) - qDebug() << __FUNCTION__ << mime << has; - return has; -} - -QStringList QWindowsInternalMimeData::formats_sys() const -{ - IDataObject *pDataObj = retrieveDataObject(); - if (!pDataObj) - return QStringList(); - - const QWindowsMimeConverter &mc = QWindowsContext::instance()->mimeConverter(); - const QStringList fmts = mc.allMimesForFormats(pDataObj); - releaseDataObject(pDataObj); - if (QWindowsContext::verboseOLE) - qDebug() << __FUNCTION__ << fmts; - return fmts; -} - -QVariant QWindowsInternalMimeData::retrieveData_sys(const QString &mimeType, - QVariant::Type type) const -{ - IDataObject *pDataObj = retrieveDataObject(); - if (!pDataObj) - return QVariant(); - - QVariant result; - const QWindowsMimeConverter &mc = QWindowsContext::instance()->mimeConverter(); - if (const QWindowsMime *converter = mc.converterToMime(mimeType, pDataObj)) - result = converter->convertToMime(mimeType, pDataObj, type); - releaseDataObject(pDataObj); -#ifndef QT_NO_DEBUG_OUTPUT - if (QWindowsContext::verboseOLE) { - QDebug nospace = qDebug().nospace(); - nospace << __FUNCTION__ << ' ' << mimeType << ' ' << type - << " returns " << result.type(); - if (result.type() != QVariant::ByteArray) - nospace << ' ' << result; - } -#endif - return result; -} - /*! \class QWindowsClipboardRetrievalMimeData \brief Special mime data class managing delayed retrieval of clipboard data. diff --git a/src/plugins/platforms/windows/qwindowscontext.cpp b/src/plugins/platforms/windows/qwindowscontext.cpp index 3a2113520d..f44ce38c73 100644 --- a/src/plugins/platforms/windows/qwindowscontext.cpp +++ b/src/plugins/platforms/windows/qwindowscontext.cpp @@ -113,6 +113,9 @@ static inline bool hasTouchSupport(QSysInfo::WinVersion wv) static inline bool useRTL_Extensions(QSysInfo::WinVersion ver) { + // This is SDK dependent on CE so out of scope for now + if (QSysInfo::windowsVersion() & QSysInfo::WV_CE_based) + return false; if ((ver & QSysInfo::WV_NT_based) && (ver >= QSysInfo::WV_VISTA)) { // Since the IsValidLanguageGroup/IsValidLocale functions always return true on // Vista, check the Keyboard Layouts for enabling RTL. @@ -133,6 +136,7 @@ static inline bool useRTL_Extensions(QSysInfo::WinVersion ver) } return false; } // NT/Vista +#ifndef Q_OS_WINCE // Pre-NT: figure out whether a RTL language is installed return IsValidLanguageGroup(LGRPID_ARABIC, LGRPID_INSTALLED) || IsValidLanguageGroup(LGRPID_HEBREW, LGRPID_INSTALLED) @@ -140,6 +144,9 @@ static inline bool useRTL_Extensions(QSysInfo::WinVersion ver) || IsValidLocale(MAKELCID(MAKELANGID(LANG_HEBREW, SUBLANG_DEFAULT), SORT_DEFAULT), LCID_INSTALLED) || IsValidLocale(MAKELCID(MAKELANGID(LANG_SYRIAC, SUBLANG_DEFAULT), SORT_DEFAULT), LCID_INSTALLED) || IsValidLocale(MAKELCID(MAKELANGID(LANG_FARSI, SUBLANG_DEFAULT), SORT_DEFAULT), LCID_INSTALLED); +#else + return false; +#endif } /*! @@ -157,6 +164,8 @@ static inline bool useRTL_Extensions(QSysInfo::WinVersion ver) \ingroup qt-lighthouse-win */ +#ifndef Q_OS_WINCE + QWindowsUser32DLL::QWindowsUser32DLL() : setLayeredWindowAttributes(0), updateLayeredWindow(0), updateLayeredWindowIndirect(0), @@ -212,6 +221,8 @@ void QWindowsShell32DLL::init() QWindowsUser32DLL QWindowsContext::user32dll; QWindowsShell32DLL QWindowsContext::shell32dll; +#endif // !Q_OS_WINCE + QWindowsContext *QWindowsContext::m_instance = 0; /*! @@ -257,13 +268,16 @@ QWindowsContextPrivate::QWindowsContextPrivate() : m_oleInitializeResult(OleInitialize(NULL)), m_eventType(QByteArrayLiteral("windows_generic_MSG")) { +#ifndef Q_OS_WINCE QWindowsContext::user32dll.init(); QWindowsContext::shell32dll.init(); +#endif const QSysInfo::WinVersion ver = QSysInfo::windowsVersion(); - +#ifndef Q_OS_WINCE if (hasTouchSupport(ver) && QWindowsContext::user32dll.initTouch()) m_systemInfo |= QWindowsContext::SI_SupportsTouch; +#endif if (useRTL_Extensions(ver)) { m_systemInfo |= QWindowsContext::SI_RTL_Extensions; @@ -279,7 +293,9 @@ QWindowsContext::QWindowsContext() : # pragma warning( disable : 4996 ) #endif m_instance = this; - if (const char *v = getenv("QT_QPA_VERBOSE")) { + const QByteArray bv = qgetenv("QT_QPA_VERBOSE"); + if (bv.isEmpty()) { + const char *v = bv.data(); QWindowsContext::verboseIntegration = componentVerbose(v, "integration"); QWindowsContext::verboseWindows = componentVerbose(v, "windows"); QWindowsContext::verboseEvents = componentVerbose(v, "events"); @@ -419,13 +435,20 @@ QString QWindowsContext::registerWindowClass(QString cname, if (d->m_registeredWindowClassNames.contains(cname)) // already registered in our list return cname; +#ifndef Q_OS_WINCE WNDCLASSEX wc; wc.cbSize = sizeof(WNDCLASSEX); +#else + WNDCLASS wc; +#endif wc.style = style; wc.lpfnWndProc = proc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = appInstance; + wc.hCursor = 0; +#ifndef Q_OS_WINCE + wc.hbrBackground = brush; if (icon) { wc.hIcon = (HICON)LoadImage(appInstance, L"IDI_ICON1", IMAGE_ICON, 0, 0, LR_DEFAULTSIZE); if (wc.hIcon) { @@ -440,11 +463,21 @@ QString QWindowsContext::registerWindowClass(QString cname, wc.hIcon = 0; wc.hIconSm = 0; } - wc.hCursor = 0; - wc.hbrBackground = brush; +#else + if (icon) { + wc.hIcon = (HICON)LoadImage(appInstance, L"IDI_ICON1", IMAGE_ICON, 0, 0, LR_DEFAULTSIZE); + } else { + wc.hIcon = 0; + } +#endif + wc.lpszMenuName = 0; wc.lpszClassName = (wchar_t*)cname.utf16(); +#ifndef Q_OS_WINCE ATOM atom = RegisterClassEx(&wc); +#else + ATOM atom = RegisterClass(&wc); +#endif if (!atom) qErrnoWarning("QApplication::regClass: Registering window class '%s' failed.", @@ -719,9 +752,11 @@ bool QWindowsContext::windowsProc(HWND hwnd, UINT message, // Pass on to current creation context if (!platformWindow && !d->m_creationContext.isNull()) { switch (et) { +#ifndef Q_OS_WINCE // maybe available on some SDKs revisit WM_GETMINMAXINFO case QtWindows::QuerySizeHints: d->m_creationContext->applyToMinMaxInfo(reinterpret_cast(lParam)); return true; +#endif case QtWindows::ResizeEvent: d->m_creationContext->obtainedGeometry.setSize(QSize(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); return true; @@ -762,9 +797,10 @@ bool QWindowsContext::windowsProc(HWND hwnd, UINT message, case QtWindows::ResizeEvent: platformWindow->handleResized((int)wParam); return true; +#ifndef Q_OS_WINCE // maybe available on some SDKs revisit WM_GETMINMAXINFO case QtWindows::QuerySizeHints: platformWindow->getSizeHints(reinterpret_cast(lParam)); - return true; + return true;// maybe available on some SDKs revisit WM_NCCALCSIZE case QtWindows::CalculateSize: // NCCALCSIZE_PARAMS structure if wParam==TRUE if (wParam && QWindowsContext::verboseWindows) { @@ -772,6 +808,7 @@ bool QWindowsContext::windowsProc(HWND hwnd, UINT message, qDebug() << platformWindow->window() << *ncp; } break; +#endif case QtWindows::ExposeEvent: return platformWindow->handleWmPaint(hwnd, message, wParam, lParam); case QtWindows::MouseWheelEvent: @@ -800,11 +837,13 @@ bool QWindowsContext::windowsProc(HWND hwnd, UINT message, if (QWindowsTheme *theme = QWindowsTheme::instance()) theme->windowsThemeChanged(platformWindow->window()); return true; +#ifndef Q_OS_WINCE case QtWindows::ActivateWindowEvent: if (platformWindow->testFlag(QWindowsWindow::BlockedByModal)) if (const QWindow *modalWindow = QGuiApplication::modalWindow()) QWindowsWindow::baseWindowOf(modalWindow)->alertWindow(); break; +#endif default: break; } diff --git a/src/plugins/platforms/windows/qwindowscontext.h b/src/plugins/platforms/windows/qwindowscontext.h index 9f16ed232b..983f9409c9 100644 --- a/src/plugins/platforms/windows/qwindowscontext.h +++ b/src/plugins/platforms/windows/qwindowscontext.h @@ -59,6 +59,7 @@ struct QWindowCreationContext; struct QWindowsContextPrivate; class QPoint; +#ifndef Q_OS_WINCE struct QWindowsUser32DLL { QWindowsUser32DLL(); @@ -98,6 +99,7 @@ struct QWindowsShell32DLL SHCreateItemFromParsingName sHCreateItemFromParsingName; }; +#endif // Q_OS_WINCE class QWindowsContext { @@ -169,9 +171,10 @@ public: QWindowsMimeConverter &mimeConverter() const; QWindowsScreenManager &screenManager(); - +#ifndef Q_OS_WINCE static QWindowsUser32DLL user32dll; static QWindowsShell32DLL shell32dll; +#endif static QByteArray comErrorString(HRESULT hr); diff --git a/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp b/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp index e283848236..b4a6834dbb 100644 --- a/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp +++ b/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp @@ -725,6 +725,7 @@ void QWindowsNativeFileDialogBase::setWindowTitle(const QString &title) IShellItem *QWindowsNativeFileDialogBase::shellItem(const QString &path) { +#ifndef Q_OS_WINCE if (QWindowsContext::shell32dll.sHCreateItemFromParsingName) { IShellItem *result = 0; const QString native = QDir::toNativeSeparators(path); @@ -735,6 +736,7 @@ IShellItem *QWindowsNativeFileDialogBase::shellItem(const QString &path) if (SUCCEEDED(hr)) return result; } +#endif qErrnoWarning("%s: SHCreateItemFromParsingName()) failed", __FUNCTION__); return 0; } @@ -749,9 +751,11 @@ void QWindowsNativeFileDialogBase::setDirectory(const QString &directory) QString QWindowsNativeFileDialogBase::directory() const { +#ifndef Q_OS_WINCE IShellItem *item = 0; if (m_fileDialog && SUCCEEDED(m_fileDialog->GetFolder(&item)) && item) return QWindowsNativeFileDialogBase::itemPath(item); +#endif return QString(); } @@ -1230,6 +1234,7 @@ QString QWindowsFileDialogHelper::selectedNameFilter() const typedef QSharedPointer SharedPointerColor; +#ifdef USE_NATIVE_COLOR_DIALOG class QWindowsNativeColorDialog : public QWindowsNativeDialogBase { Q_OBJECT @@ -1336,6 +1341,7 @@ QWindowsNativeDialogBase *QWindowsColorDialogHelper::createNativeDialog() nativeDialog->setWindowTitle(options()->windowTitle()); return nativeDialog; } +#endif // USE_NATIVE_COLOR_DIALOG namespace QWindowsDialogs { diff --git a/src/plugins/platforms/windows/qwindowsdrag.cpp b/src/plugins/platforms/windows/qwindowsdrag.cpp index d75752bc04..d377e51b2d 100644 --- a/src/plugins/platforms/windows/qwindowsdrag.cpp +++ b/src/plugins/platforms/windows/qwindowsdrag.cpp @@ -41,7 +41,9 @@ #include "qwindowsdrag.h" #include "qwindowscontext.h" -#include "qwindowsclipboard.h" +#ifndef QT_NO_CLIPBOARD +# include "qwindowsclipboard.h" +#endif #include "qwindowsintegration.h" #include "qwindowsole.h" #include "qtwindows_additional.h" diff --git a/src/plugins/platforms/windows/qwindowsfontdatabase.cpp b/src/plugins/platforms/windows/qwindowsfontdatabase.cpp index caa1913bb5..7e8c70ee44 100644 --- a/src/plugins/platforms/windows/qwindowsfontdatabase.cpp +++ b/src/plugins/platforms/windows/qwindowsfontdatabase.cpp @@ -55,9 +55,13 @@ #include +#ifdef Q_OS_WINCE +# include "qplatformfunctions_wince.h" +#endif + #if !defined(QT_NO_DIRECTWRITE) -# include -# include +# include +# include #endif QT_BEGIN_NAMESPACE @@ -1002,6 +1006,17 @@ static bool addFontToDatabase(QString familyName, const QString &scriptName, quint32 codePageRange[2] = { signature->fsCsb[0], signature->fsCsb[1] }; +#ifdef Q_OS_WINCE + if (signature->fsUsb[0] == 0) { + // If the unicode ranges bit mask is zero then + // EnumFontFamiliesEx failed to determine it properly. + // In this case we just pretend that the font supports all languages. + unicodeRange[0] = 0xbfffffff; // second most significant bit must be zero + unicodeRange[1] = 0xffffffff; + unicodeRange[2] = 0xffffffff; + unicodeRange[3] = 0xffffffff; + } +#endif writingSystemsFromTrueTypeBits(unicodeRange, codePageRange, &writingSystems); // ### Hack to work around problem with Thai text on Windows 7. Segoe UI contains // the symbol for Baht, and Windows thus reports that it supports the Thai script. @@ -1603,6 +1618,7 @@ QFontEngine *QWindowsFontDatabase::createEngine(int script, const QFontDef &requ const QString fam = request.family.toLower(); if (fam == QStringLiteral("default") || fam == QStringLiteral("system")) f = SYSTEM_FONT; +#ifndef Q_OS_WINCE else if (fam == QStringLiteral("system_fixed")) f = SYSTEM_FIXED_FONT; else if (fam == QStringLiteral("ansi_fixed")) @@ -1613,6 +1629,7 @@ QFontEngine *QWindowsFontDatabase::createEngine(int script, const QFontDef &requ f = DEVICE_DEFAULT_FONT; else if (fam == QStringLiteral("oem_fixed")) f = OEM_FIXED_FONT; +#endif else if (fam.at(0) == QLatin1Char('#')) f = fam.right(fam.length()-1).toInt(); hfont = (HFONT)GetStockObject(f); @@ -1657,12 +1674,14 @@ QFontEngine *QWindowsFontDatabase::createEngine(int script, const QFontDef &requ int strat = OUT_DEFAULT_PRECIS; if (request.styleStrategy & QFont::PreferBitmap) { strat = OUT_RASTER_PRECIS; +#ifndef Q_OS_WINCE } else if (request.styleStrategy & QFont::PreferDevice) { strat = OUT_DEVICE_PRECIS; } else if (request.styleStrategy & QFont::PreferOutline) { strat = OUT_OUTLINE_PRECIS; } else if (request.styleStrategy & QFont::ForceOutline) { strat = OUT_TT_ONLY_PRECIS; +#endif } lf.lfOutPrecision = strat; @@ -1671,8 +1690,10 @@ QFontEngine *QWindowsFontDatabase::createEngine(int script, const QFontDef &requ if (request.styleStrategy & QFont::PreferMatch) qual = DRAFT_QUALITY; +#ifndef Q_OS_WINCE else if (request.styleStrategy & QFont::PreferQuality) qual = PROOF_QUALITY; +#endif if (request.styleStrategy & QFont::PreferAntialias) { if (QSysInfo::WindowsVersion >= QSysInfo::WV_XP) { @@ -1733,10 +1754,17 @@ QFontEngine *QWindowsFontDatabase::createEngine(int script, const QFontDef &requ qErrnoWarning("%s: CreateFontIndirect with stretch failed", __FUNCTION__); } +#ifndef Q_OS_WINCE if (hfont == 0) { hfont = (HFONT)GetStockObject(ANSI_VAR_FONT); stockFont = true; } +#else + if (hfont == 0) { + hfont = (HFONT)GetStockObject(SYSTEM_FONT); + stockFont = true; + } +#endif } #if !defined(QT_NO_DIRECTWRITE) diff --git a/src/plugins/platforms/windows/qwindowsfontengine.cpp b/src/plugins/platforms/windows/qwindowsfontengine.cpp index e367707ea3..801dba2e79 100644 --- a/src/plugins/platforms/windows/qwindowsfontengine.cpp +++ b/src/plugins/platforms/windows/qwindowsfontengine.cpp @@ -70,6 +70,10 @@ #include +#ifdef Q_OS_WINCE +# include "qplatformfunctions_wince.h" +#endif + QT_BEGIN_NAMESPACE //### mingw needed define @@ -199,6 +203,9 @@ int QWindowsFontEngine::getGlyphIndexes(const QChar *str, int numChars, QGlyphLa int i = 0; int glyph_pos = 0; if (mirrored) { +#if defined(Q_OS_WINCE) + { +#else if (symbol) { for (; i < numChars; ++i, ++glyph_pos) { unsigned int uc = getChar(str, i, numChars); @@ -212,18 +219,26 @@ int QWindowsFontEngine::getGlyphIndexes(const QChar *str, int numChars, QGlyphLa glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, QChar::mirroredChar(uc)); } } else { +#endif wchar_t first = tm.tmFirstChar; wchar_t last = tm.tmLastChar; for (; i < numChars; ++i, ++glyph_pos) { uint ucs = QChar::mirroredChar(getChar(str, i, numChars)); - if (ucs >= first && ucs <= last) + if ( +#ifdef Q_WS_WINCE + tm.tmFirstChar > 60000 || +#endif + ucs >= first && ucs <= last) glyphs->glyphs[glyph_pos] = ucs; else glyphs->glyphs[glyph_pos] = 0; } } } else { +#if defined(Q_OS_WINCE) + { +#else if (symbol) { for (; i < numChars; ++i, ++glyph_pos) { unsigned int uc = getChar(str, i, numChars); @@ -237,12 +252,17 @@ int QWindowsFontEngine::getGlyphIndexes(const QChar *str, int numChars, QGlyphLa glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, uc); } } else { +#endif wchar_t first = tm.tmFirstChar; wchar_t last = tm.tmLastChar; for (; i < numChars; ++i, ++glyph_pos) { uint uc = getChar(str, i, numChars); - if (uc >= first && uc <= last) + if ( +#ifdef Q_WS_WINCE + tm.tmFirstChar > 60000 || +#endif + uc >= first && uc <= last) glyphs->glyphs[glyph_pos] = uc; else glyphs->glyphs[glyph_pos] = 0; @@ -353,8 +373,12 @@ bool QWindowsFontEngine::stringToCMap(const QChar *str, int len, QGlyphLayout *g inline void calculateTTFGlyphWidth(HDC hdc, UINT glyph, int &width) { +#if defined(Q_OS_WINCE) + GetCharWidth32(hdc, glyph, glyph, &width); +#else if (ptrGetCharWidthI) ptrGetCharWidthI(hdc, glyph, 1, 0, &width); +#endif } void QWindowsFontEngine::recalcAdvances(QGlyphLayout *glyphs, QTextEngine::ShaperFlags flags) const @@ -442,7 +466,7 @@ glyph_metrics_t QWindowsFontEngine::boundingBox(const QGlyphLayout &glyphs) return glyph_metrics_t(0, -tm.tmAscent, w - lastRightBearing(glyphs), tm.tmHeight, w, 0); } - +#ifndef Q_OS_WINCE bool QWindowsFontEngine::getOutlineMetrics(glyph_t glyph, const QTransform &t, glyph_metrics_t *metrics) const { Q_ASSERT(metrics != 0); @@ -494,9 +518,11 @@ bool QWindowsFontEngine::getOutlineMetrics(glyph_t glyph, const QTransform &t, g return false; } } +#endif glyph_metrics_t QWindowsFontEngine::boundingBox(glyph_t glyph, const QTransform &t) { +#ifndef Q_OS_WINCE HDC hdc = m_fontEngineData->hdc; SelectObject(hdc, hfont); @@ -514,6 +540,34 @@ glyph_metrics_t QWindowsFontEngine::boundingBox(glyph_t glyph, const QTransform } return glyphMetrics; +#else + HDC hdc = m_fontEngineData->hdc; + HGDIOBJ oldFont = SelectObject(hdc, hfont); + + ABC abc; + int width; + int advance; +#ifdef GWES_MGTT // true type fonts + if (GetCharABCWidths(hdc, glyph, glyph, &abc)) { + width = qAbs(abc.abcA) + abc.abcB + qAbs(abc.abcC); + advance = abc.abcA + abc.abcB + abc.abcC; + } + else +#endif +#if defined(GWES_MGRAST) || defined(GWES_MGRAST2) // raster fonts + if (GetCharWidth32(hdc, glyph, glyph, &width)) { + advance = width; + } + else +#endif + { // fallback + width = tm.tmMaxCharWidth; + advance = width; + } + + SelectObject(hdc, oldFont); + return glyph_metrics_t(0, -tm.tmAscent, width, tm.tmHeight, advance, 0).transformed(t); +#endif } QFixed QWindowsFontEngine::ascent() const @@ -580,7 +634,9 @@ void QWindowsFontEngine::getGlyphBearings(glyph_t glyph, qreal *leftBearing, qre HDC hdc = m_fontEngineData->hdc; SelectObject(hdc, hfont); +#ifndef Q_OS_WINCE if (ttf) +#endif { ABC abcWidths; GetCharABCWidthsI(hdc, glyph, 1, 0, &abcWidths); @@ -588,9 +644,12 @@ void QWindowsFontEngine::getGlyphBearings(glyph_t glyph, qreal *leftBearing, qre *leftBearing = abcWidths.abcA; if (rightBearing) *rightBearing = abcWidths.abcC; - } else { + } +#ifndef Q_OS_WINCE + else { QFontEngine::getGlyphBearings(glyph, leftBearing, rightBearing); } +#endif } #endif // Q_CC_MINGW @@ -604,6 +663,7 @@ qreal QWindowsFontEngine::minLeftBearing() const qreal QWindowsFontEngine::minRightBearing() const { +#ifndef Q_OS_WINCE if (rbearing == SHRT_MIN) { int ml = 0; int mr = 0; @@ -659,6 +719,40 @@ qreal QWindowsFontEngine::minRightBearing() const } return rbearing; +#else // !Q_OS_WINCE + if (rbearing == SHRT_MIN) { + int ml = 0; + int mr = 0; + HDC hdc = m_fontEngineData->hdc; + SelectObject(hdc, hfont); + if (ttf) { + ABC *abc = 0; + int n = tm.tmLastChar - tm.tmFirstChar; + if (n <= max_font_count) { + abc = new ABC[n+1]; + GetCharABCWidths(hdc, tm.tmFirstChar, tm.tmLastChar, abc); + } else { + abc = new ABC[char_table_entries+1]; + for (int i = 0; i < char_table_entries; i++) + GetCharABCWidths(hdc, char_table[i], char_table[i], abc+i); + n = char_table_entries; + } + ml = abc[0].abcA; + mr = abc[0].abcC; + for (int i = 1; i < n; i++) { + if (abc[i].abcA + abc[i].abcB + abc[i].abcC != 0) { + ml = qMin(ml,abc[i].abcA); + mr = qMin(mr,abc[i].abcC); + } + } + delete [] abc; + } + lbearing = ml; + rbearing = mr; + } + + return rbearing; +#endif // Q_OS_WINCE } @@ -973,6 +1067,7 @@ QWindowsNativeImage *QWindowsFontEngine::drawGDIGlyph(HFONT font, glyph_t glyph, bool has_transformation = t.type() > QTransform::TxTranslate; +#ifndef Q_OS_WINCE unsigned int options = ttf ? ETO_GLYPH_INDEX : 0; XFORM xform; @@ -1011,6 +1106,14 @@ QWindowsNativeImage *QWindowsFontEngine::drawGDIGlyph(HFONT font, glyph_t glyph, SelectObject(hdc, old_font); ReleaseDC(0, hdc); } +#else // else wince + unsigned int options = 0; +#ifdef DEBUG + Q_ASSERT(!has_transformation); +#else + Q_UNUSED(has_transformation); +#endif +#endif // wince QWindowsNativeImage *ni = new QWindowsNativeImage(iw + 2 * margin + 4, ih + 2 * margin + 4, QWindowsNativeImage::systemFormat()); @@ -1030,11 +1133,13 @@ QWindowsNativeImage *QWindowsFontEngine::drawGDIGlyph(HFONT font, glyph_t glyph, HGDIOBJ old_font = SelectObject(hdc, font); +#ifndef Q_OS_WINCE if (has_transformation) { SetGraphicsMode(hdc, GM_ADVANCED); SetWorldTransform(hdc, &xform); ExtTextOut(hdc, 0, 0, options, 0, (LPCWSTR) &glyph, 1, 0); } else +#endif // !Q_OS_WINCE { ExtTextOut(hdc, -gx + margin, -gy + margin, options, 0, (LPCWSTR) &glyph, 1, 0); } diff --git a/src/plugins/platforms/windows/qwindowsintegration.cpp b/src/plugins/platforms/windows/qwindowsintegration.cpp index 255cf1454c..d46c138c96 100644 --- a/src/plugins/platforms/windows/qwindowsintegration.cpp +++ b/src/plugins/platforms/windows/qwindowsintegration.cpp @@ -43,20 +43,24 @@ #include "qwindowsbackingstore.h" #include "qwindowswindow.h" #include "qwindowscontext.h" -#include "qwindowsglcontext.h" +#ifndef QT_NO_OPENGL +# include "qwindowsglcontext.h" +#endif #include "qwindowsscreen.h" #include "qwindowstheme.h" #include "qwindowsservices.h" #ifndef QT_NO_FREETYPE -#include "qwindowsfontdatabase_ft.h" +# include "qwindowsfontdatabase_ft.h" #endif #include "qwindowsfontdatabase.h" #include "qwindowsguieventdispatcher.h" -#include "qwindowsclipboard.h" +#ifndef QT_NO_CLIPBOARD +# include "qwindowsclipboard.h" +#endif #include "qwindowsdrag.h" #include "qwindowsinputcontext.h" #include "qwindowskeymapper.h" -#ifndef QT_NO_ACCESSIBILITY +# ifndef QT_NO_ACCESSIBILITY #include "accessible/qwindowsaccessibility.h" #endif @@ -89,7 +93,9 @@ class QWindowsNativeInterface : public QPlatformNativeInterface { Q_OBJECT public: +#ifndef QT_NO_OPENGL virtual void *nativeResourceForContext(const QByteArray &resource, QOpenGLContext *context); +#endif virtual void *nativeResourceForWindow(const QByteArray &resource, QWindow *window); virtual void *nativeResourceForBackingStore(const QByteArray &resource, QBackingStore *bs); virtual EventFilter setEventFilter(const QByteArray &eventType, EventFilter filter) @@ -134,6 +140,7 @@ void *QWindowsNativeInterface::nativeResourceForBackingStore(const QByteArray &r return 0; } +#ifndef QT_NO_OPENGL void *QWindowsNativeInterface::nativeResourceForContext(const QByteArray &resource, QOpenGLContext *context) { if (!context || !context->handle()) { @@ -147,6 +154,7 @@ void *QWindowsNativeInterface::nativeResourceForContext(const QByteArray &resour qWarning("%s: Invalid key '%s' requested.", __FUNCTION__, resource.constData()); return 0; } +#endif // !QT_NO_OPENGL /*! \brief Creates a non-visible window handle for filtering messages. @@ -171,7 +179,9 @@ void *QWindowsNativeInterface::createMessageWindow(const QString &classNameTempl struct QWindowsIntegrationPrivate { +#ifndef QT_NO_OPENGL typedef QSharedPointer QOpenGLStaticContextPtr; +#endif QWindowsIntegrationPrivate(); ~QWindowsIntegrationPrivate(); @@ -179,10 +189,14 @@ struct QWindowsIntegrationPrivate QWindowsContext m_context; QPlatformFontDatabase *m_fontDatabase; QWindowsNativeInterface m_nativeInterface; +#ifndef QT_NO_CLIPBOARD QWindowsClipboard m_clipboard; +#endif QWindowsDrag m_drag; QWindowsGuiEventDispatcher *m_eventDispatcher; +#ifndef QT_NO_OPENGL QOpenGLStaticContextPtr m_staticOpenGLContext; +#endif QWindowsInputContext m_inputContext; #ifndef QT_NO_ACCESSIBILITY QWindowsAccessibility m_accessibility; @@ -205,7 +219,9 @@ QWindowsIntegration::QWindowsIntegration() : d(new QWindowsIntegrationPrivate) { QGuiApplicationPrivate::instance()->setEventDispatcher(d->m_eventDispatcher); +#ifndef QT_NO_CLIPBOARD d->m_clipboard.registerViewer(); +#endif d->m_context.screenManager().handleScreenChanges(); } @@ -220,10 +236,12 @@ bool QWindowsIntegration::hasCapability(QPlatformIntegration::Capability cap) co switch (cap) { case ThreadedPixmaps: return true; +#ifndef QT_NO_OPENGL case OpenGL: return true; case ThreadedOpenGL: return true; +#endif default: return QPlatformIntegration::hasCapability(cap); } @@ -267,6 +285,7 @@ QPlatformBackingStore *QWindowsIntegration::createPlatformBackingStore(QWindow * return new QWindowsBackingStore(window); } +#ifndef QT_NO_OPENGL QPlatformOpenGLContext *QWindowsIntegration::createPlatformOpenGLContext(QOpenGLContext *context) const { @@ -280,6 +299,7 @@ QPlatformOpenGLContext return result.take(); return 0; } +#endif // !QT_NO_OPENGL /* Workaround for QTBUG-24205: In 'Auto', pick the FreeType engine for * QML2 applications. */ @@ -319,6 +339,7 @@ QPlatformFontDatabase *QWindowsIntegration::fontDatabase() const return d->m_fontDatabase; } +#ifdef SPI_GETKEYBOARDSPEED static inline int keyBoardAutoRepeatRateMS() { DWORD time = 0; @@ -326,6 +347,7 @@ static inline int keyBoardAutoRepeatRateMS() return time ? 1000 / static_cast(time) : 500; return 30; } +#endif QVariant QWindowsIntegration::styleHint(QPlatformIntegration::StyleHint hint) const { @@ -334,8 +356,10 @@ QVariant QWindowsIntegration::styleHint(QPlatformIntegration::StyleHint hint) co if (const unsigned timeMS = GetCaretBlinkTime()) return QVariant(int(timeMS)); break; +#ifdef SPI_GETKEYBOARDSPEED case KeyboardAutoRepeatRate: return QVariant(keyBoardAutoRepeatRateMS()); +#endif case QPlatformIntegration::StartDragTime: case QPlatformIntegration::StartDragDistance: case QPlatformIntegration::MouseDoubleClickInterval: @@ -358,10 +382,12 @@ QPlatformNativeInterface *QWindowsIntegration::nativeInterface() const return &d->m_nativeInterface; } +#ifndef QT_NO_CLIPBOARD QPlatformClipboard * QWindowsIntegration::clipboard() const { return &d->m_clipboard; } +#endif // !QT_NO_CLIPBOARD QPlatformDrag *QWindowsIntegration::drag() const { diff --git a/src/plugins/platforms/windows/qwindowsintegration.h b/src/plugins/platforms/windows/qwindowsintegration.h index 76393be402..ecae46321e 100644 --- a/src/plugins/platforms/windows/qwindowsintegration.h +++ b/src/plugins/platforms/windows/qwindowsintegration.h @@ -42,6 +42,7 @@ #ifndef QWINDOWSINTEGRATION_H #define QWINDOWSINTEGRATION_H +#include #include #include @@ -60,10 +61,13 @@ public: virtual QPlatformPixmap *createPlatformPixmap(QPlatformPixmap::PixelType type) const; QPlatformWindow *createPlatformWindow(QWindow *window) const; QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const; +#ifndef QT_NO_OPENGL virtual QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const; +#endif virtual QAbstractEventDispatcher *guiThreadEventDispatcher() const; - +#ifndef QT_NO_CLIPBOARD virtual QPlatformClipboard *clipboard() const; +#endif virtual QPlatformDrag *drag() const; virtual QPlatformInputContext *inputContext() const; #ifndef QT_NO_ACCESSIBILITY diff --git a/src/plugins/platforms/windows/qwindowsinternalmimedata.cpp b/src/plugins/platforms/windows/qwindowsinternalmimedata.cpp new file mode 100644 index 0000000000..9bed609fb8 --- /dev/null +++ b/src/plugins/platforms/windows/qwindowsinternalmimedata.cpp @@ -0,0 +1,116 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwindowsinternalmimedata.h" +#include "qwindowscontext.h" +#include "qplatformfunctions_wince.h" +#include "qwindowsmime.h" +#include +/*! + \class QWindowsInternalMimeDataBase + \brief Base for implementations of QInternalMimeData using a IDataObject COM object. + + In clipboard handling and Drag and drop, static instances + of QInternalMimeData implementations are kept and passed to the client. + + QInternalMimeData provides virtuals that query the formats and retrieve + mime data on demand when the client invokes functions like QMimeData::hasHtml(), + QMimeData::html() on the instance returned. Otherwise, expensive + construction of a new QMimeData object containing all possible + formats would have to be done in each call to mimeData(). + + The base class introduces new virtuals to obtain and release + the instances IDataObject from the clipboard or Drag and Drop and + does conversion using QWindowsMime classes. + + \sa QInternalMimeData, QWindowsMime, QWindowsMimeConverter + \ingroup qt-lighthouse-win +*/ + +bool QWindowsInternalMimeData::hasFormat_sys(const QString &mime) const +{ + IDataObject *pDataObj = retrieveDataObject(); + if (!pDataObj) + return false; + + const QWindowsMimeConverter &mc = QWindowsContext::instance()->mimeConverter(); + const bool has = mc.converterToMime(mime, pDataObj) != 0; + releaseDataObject(pDataObj); + if (QWindowsContext::verboseOLE) + qDebug() << __FUNCTION__ << mime << has; + return has; +} + +QStringList QWindowsInternalMimeData::formats_sys() const +{ + IDataObject *pDataObj = retrieveDataObject(); + if (!pDataObj) + return QStringList(); + + const QWindowsMimeConverter &mc = QWindowsContext::instance()->mimeConverter(); + const QStringList fmts = mc.allMimesForFormats(pDataObj); + releaseDataObject(pDataObj); + if (QWindowsContext::verboseOLE) + qDebug() << __FUNCTION__ << fmts; + return fmts; +} + +QVariant QWindowsInternalMimeData::retrieveData_sys(const QString &mimeType, + QVariant::Type type) const +{ + IDataObject *pDataObj = retrieveDataObject(); + if (!pDataObj) + return QVariant(); + + QVariant result; + const QWindowsMimeConverter &mc = QWindowsContext::instance()->mimeConverter(); + if (const QWindowsMime *converter = mc.converterToMime(mimeType, pDataObj)) + result = converter->convertToMime(mimeType, pDataObj, type); + releaseDataObject(pDataObj); + if (QWindowsContext::verboseOLE) { + QDebug nospace = qDebug().nospace(); + nospace << __FUNCTION__ << ' ' << mimeType << ' ' << type + << " returns " << result.type(); + if (result.type() != QVariant::ByteArray) + nospace << ' ' << result; + } + return result; +} diff --git a/src/plugins/platforms/windows/qwindowskeymapper.cpp b/src/plugins/platforms/windows/qwindowskeymapper.cpp index 4b5e95824a..25d3d43bfb 100644 --- a/src/plugins/platforms/windows/qwindowskeymapper.cpp +++ b/src/plugins/platforms/windows/qwindowskeymapper.cpp @@ -444,6 +444,34 @@ inline int winceKeyBend(int keyCode) return KeyTbl[keyCode]; } +#ifdef Q_OS_WINCE +QT_BEGIN_INCLUDE_NAMESPACE +int ToUnicode(UINT vk, int /*scancode*/, unsigned char* /*kbdBuffer*/, LPWSTR unicodeBuffer, int, int) +{ + QT_USE_NAMESPACE + QChar* buf = reinterpret_cast< QChar*>(unicodeBuffer); + if (KeyTbl[vk] == 0) { + buf[0] = vk; + return 1; + } + return 0; +} + +int ToAscii(UINT vk, int scancode, unsigned char *kbdBuffer, LPWORD unicodeBuffer, int flag) +{ + return ToUnicode(vk, scancode, kbdBuffer, (LPWSTR) unicodeBuffer, 0, flag); + +} + +bool GetKeyboardState(unsigned char* kbuffer) +{ + for (int i=0; i< 256; ++i) + kbuffer[i] = GetAsyncKeyState(i); + return true; +} +QT_END_INCLUDE_NAMESPACE +#endif // Q_OS_WINCE + // Translate a VK into a Qt key code, or unicode character static inline int toKeyOrUnicode(int vk, int scancode, unsigned char *kbdBuffer, bool *isDeadkey = 0) { @@ -672,6 +700,7 @@ static void showSystemMenu(QWindow* w) if (!menu) return; // no menu for this window +#ifndef Q_OS_WINCE #define enabled (MF_BYCOMMAND | MF_ENABLED) #define disabled (MF_BYCOMMAND | MF_GRAYED) @@ -696,6 +725,7 @@ static void showSystemMenu(QWindow* w) #undef enabled #undef disabled +#endif // !Q_OS_WINCE const int ret = TrackPopupMenuEx(menu, TPM_LEFTALIGN | TPM_TOPALIGN | TPM_NONOTIFY | TPM_RETURNCMD, topLevel->geometry().x(), topLevel->geometry().y(), @@ -1014,6 +1044,7 @@ bool QWindowsKeyMapper::translateKeyEventInternal(QWindow *window, const MSG &ms Qt::KeyboardModifier(state), scancode, msg.wParam, nModifiers, text, false, 0); result =true; bool store = true; +#ifndef Q_OS_WINCE // Alt+ go to the Win32 menu system if unhandled by Qt if (msgType == WM_SYSKEYDOWN && !result && a) { HWND parent = GetParent(QWindowsWindow::handleOf(receiver)); @@ -1027,6 +1058,7 @@ bool QWindowsKeyMapper::translateKeyEventInternal(QWindow *window, const MSG &ms parent = GetParent(parent); } } +#endif // !Q_OS_WINCE if (!store) key_recorder.findKey(msg.wParam, true); } @@ -1055,6 +1087,7 @@ bool QWindowsKeyMapper::translateKeyEventInternal(QWindow *window, const MSG &ms Qt::KeyboardModifier(state), scancode, msg.wParam, nModifiers, (rec ? rec->text : QString()), false, 0); result = true; +#ifndef Q_OS_WINCE // don't pass Alt to Windows unless we are embedded in a non-Qt window if (code == Qt::Key_Alt) { const QWindowsContext *context = QWindowsContext::instance(); @@ -1067,6 +1100,7 @@ bool QWindowsKeyMapper::translateKeyEventInternal(QWindow *window, const MSG &ms parent = GetParent(parent); } } +#endif } } return result; diff --git a/src/plugins/platforms/windows/qwindowsmousehandler.cpp b/src/plugins/platforms/windows/qwindowsmousehandler.cpp index 63c2444957..f866f689b3 100644 --- a/src/plugins/platforms/windows/qwindowsmousehandler.cpp +++ b/src/plugins/platforms/windows/qwindowsmousehandler.cpp @@ -164,6 +164,7 @@ bool QWindowsMouseHandler::translateMouseEvent(QWindow *window, HWND hwnd, if (QWindowsContext::verboseEvents) qDebug() << "Entering " << window; QWindowsWindow::baseWindowOf(window)->applyCursor(); +#ifndef Q_OS_WINCE QWindowSystemInterface::handleEnterEvent(window); TRACKMOUSEEVENT tme; tme.cbSize = sizeof(TRACKMOUSEEVENT); @@ -172,6 +173,7 @@ bool QWindowsMouseHandler::translateMouseEvent(QWindow *window, HWND hwnd, tme.dwHoverTime = HOVER_DEFAULT; // if (!TrackMouseEvent(&tme)) qWarning("TrackMouseEvent failed."); +#endif // !Q_OS_WINCE } QWindowSystemInterface::handleMouseEvent(window, client, QWindowsGeometryHint::mapToGlobal(hwnd, client), @@ -220,6 +222,7 @@ bool QWindowsMouseHandler::translateTouchEvent(QWindow *window, HWND, QtWindows::WindowsEventType, MSG msg, LRESULT *) { +#ifndef Q_OS_WINCE typedef QWindowSystemInterface::TouchPoint QTouchPoint; typedef QList QTouchPointList; @@ -289,6 +292,9 @@ bool QWindowsMouseHandler::translateTouchEvent(QWindow *window, HWND, m_touchDevice, touchPoints); return true; +#else + return false; +#endif } QT_END_NAMESPACE diff --git a/src/plugins/platforms/windows/qwindowsnativeimage.cpp b/src/plugins/platforms/windows/qwindowsnativeimage.cpp index 8f727c6168..9cd30dff15 100644 --- a/src/plugins/platforms/windows/qwindowsnativeimage.cpp +++ b/src/plugins/platforms/windows/qwindowsnativeimage.cpp @@ -127,7 +127,9 @@ QWindowsNativeImage::QWindowsNativeImage(int width, int height, m_image = QImage(width, height, format); } +#ifndef Q_OS_WINCE GdiFlush(); +#endif } QWindowsNativeImage::~QWindowsNativeImage() diff --git a/src/plugins/platforms/windows/qwindowsscreen.cpp b/src/plugins/platforms/windows/qwindowsscreen.cpp index cc694fe0ea..0c24ff7aa6 100644 --- a/src/plugins/platforms/windows/qwindowsscreen.cpp +++ b/src/plugins/platforms/windows/qwindowsscreen.cpp @@ -99,7 +99,14 @@ BOOL QT_WIN_CALLBACK monitorEnumCallback(HMONITOR hMonitor, HDC, LPRECT, LPARAM WindowsScreenDataList *result = reinterpret_cast(p); QWindowsScreenData data; data.geometry = QRect(QPoint(info.rcMonitor.left, info.rcMonitor.top), QPoint(info.rcMonitor.right - 1, info.rcMonitor.bottom - 1)); - if (HDC hdc = CreateDC(info.szDevice, NULL, NULL, NULL)) { +#ifdef Q_OS_WINCE + //Windows CE, just supports one Display and expects to get only DISPLAY, + //instead of DISPLAY0 and so on, which are passed by info.szDevice + HDC hdc = CreateDC(TEXT("DISPLAY"), NULL, NULL, NULL); +#else + HDC hdc = CreateDC(info.szDevice, NULL, NULL, NULL); +#endif + if (hdc) { data.dpi = deviceDPI(hdc); data.depth = GetDeviceCaps(hdc, BITSPIXEL); data.format = data.depth == 16 ? QImage::Format_RGB16 : QImage::Format_RGB32; diff --git a/src/plugins/platforms/windows/qwindowsscreen.h b/src/plugins/platforms/windows/qwindowsscreen.h index 615d4faf15..b34d592de0 100644 --- a/src/plugins/platforms/windows/qwindowsscreen.h +++ b/src/plugins/platforms/windows/qwindowsscreen.h @@ -43,6 +43,9 @@ #define QWINDOWSSCREEN_H #include "qwindowscursor.h" +#ifdef Q_OS_WINCE +# include "qplatformfunctions_wince.h" +#endif #include #include diff --git a/src/plugins/platforms/windows/qwindowsservices.cpp b/src/plugins/platforms/windows/qwindowsservices.cpp index 905a1bd12c..a2688a1d61 100644 --- a/src/plugins/platforms/windows/qwindowsservices.cpp +++ b/src/plugins/platforms/windows/qwindowsservices.cpp @@ -46,7 +46,9 @@ #include #include -#include +#ifndef Q_OS_WINCE +# include +#endif QT_BEGIN_NAMESPACE @@ -54,6 +56,7 @@ enum { debug = 0 }; static inline bool shellExecute(const QString &file) { +#ifndef Q_OS_WINCE const quintptr result = (quintptr)ShellExecute(0, 0, (wchar_t*)file.utf16(), 0, 0, SW_SHOWNORMAL); // ShellExecute returns a value greater than 32 if successful if (result <= 32) { @@ -61,6 +64,10 @@ static inline bool shellExecute(const QString &file) return false; } return true; +#else + Q_UNUSED(file) + return false; +#endif } // Retrieve the commandline for the default mail client. It contains a @@ -95,9 +102,13 @@ static inline QString mailCommand() } if (!command[0]) return QString(); +#ifndef Q_OS_WINCE wchar_t expandedCommand[MAX_PATH] = {0}; return ExpandEnvironmentStrings(command, expandedCommand, MAX_PATH) ? QString::fromWCharArray(expandedCommand) : QString::fromWCharArray(command); +#else + return QString(); +#endif } static inline bool launchMail(const QUrl &url) diff --git a/src/plugins/platforms/windows/qwindowstheme.cpp b/src/plugins/platforms/windows/qwindowstheme.cpp index 63ed20eeef..0feb62dcea 100644 --- a/src/plugins/platforms/windows/qwindowstheme.cpp +++ b/src/plugins/platforms/windows/qwindowstheme.cpp @@ -45,6 +45,10 @@ #include "qwindowsintegration.h" #include "qt_windows.h" #include "qwindowsfontdatabase.h" +#ifdef Q_OS_WINCE +# include "qplatformfunctions_wince.h" +# include "winuser.h" +#endif #include #include @@ -226,8 +230,13 @@ static inline QPalette menuPalette(const QPalette &systemPalette) result.setColor(QPalette::Active, QPalette::ButtonText, menuTextColor); result.setColor(QPalette::Disabled, QPalette::WindowText, disabled); result.setColor(QPalette::Disabled, QPalette::Text, disabled); +#ifndef Q_OS_WINCE result.setColor(QPalette::Disabled, QPalette::Highlight, getSysColor(isFlat ? COLOR_MENUHILIGHT : COLOR_HIGHLIGHT)); +#else + result.setColor(QPalette::Disabled, QPalette::Highlight, + getSysColor(COLOR_HIGHLIGHT)); +#endif result.setColor(QPalette::Disabled, QPalette::HighlightedText, disabled); result.setColor(QPalette::Disabled, QPalette::Button, result.color(QPalette::Active, QPalette::Button)); @@ -253,7 +262,11 @@ static inline QPalette *menuBarPalette(const QPalette &menuPalette) QPalette *result = 0; if (booleanSystemParametersInfo(SPI_GETFLATMENU, false)) { result = new QPalette(menuPalette); +#ifndef Q_OS_WINCE const QColor menubar(getSysColor(COLOR_MENUBAR)); +#else + const QColor menubar(getSysColor(COLOR_MENU)); +#endif result->setColor(QPalette::Active, QPalette::Button, menubar); result->setColor(QPalette::Disabled, QPalette::Button, menubar); result->setColor(QPalette::Inactive, QPalette::Button, menubar); @@ -323,10 +336,12 @@ QVariant QWindowsTheme::themeHint(ThemeHint hint) const return QVariant(iconThemeSearchPaths()); case StyleNames: return QVariant(styleNames()); +#ifndef Q_OS_WINCE case TextCursorWidth: return QVariant(int(dWordSystemParametersInfo(SPI_GETCARETWIDTH, 1u))); case DropShadow: return QVariant(booleanSystemParametersInfo(SPI_GETDROPSHADOW, false)); +#endif // !Q_OS_WINCE case MaximumScrollBarDragDistance: return QVariant(qRound(qreal(QWindowsContext::instance()->defaultDPI()) * 1.375)); case KeyboardScheme: @@ -368,6 +383,7 @@ void QWindowsTheme::clearFonts() void QWindowsTheme::refreshFonts() { +#ifndef Q_OS_WINCE // ALL THIS FUNCTIONALITY IS MISSING ON WINCE clearFonts(); if (!QGuiApplication::desktopSettingsAware()) return; @@ -398,6 +414,7 @@ void QWindowsTheme::refreshFonts() qDebug() << __FUNCTION__ << '\n' << " menuFont=" << menuFont << " messageBox=" << MessageBoxFont; +#endif // !Q_OS_WINCE } bool QWindowsTheme::usePlatformNativeDialog(DialogType type) const diff --git a/src/plugins/platforms/windows/qwindowswindow.cpp b/src/plugins/platforms/windows/qwindowswindow.cpp index c300f0f5a9..ca23623dc1 100644 --- a/src/plugins/platforms/windows/qwindowswindow.cpp +++ b/src/plugins/platforms/windows/qwindowswindow.cpp @@ -112,6 +112,7 @@ static QByteArray debugWindowStates(Qt::WindowStates s) return rc; } +#ifndef Q_OS_WINCE // maybe available on some SDKs revisit WM_GETMINMAXINFO QDebug operator<<(QDebug d, const MINMAXINFO &i) { d.nospace() << "MINMAXINFO maxSize=" << i.ptMaxSize.x << ',' @@ -122,6 +123,7 @@ QDebug operator<<(QDebug d, const MINMAXINFO &i) << i.ptMaxTrackSize.y; return d; } +#endif // !Q_OS_WINCE static inline QSize qSizeOfRect(const RECT &rect) { @@ -148,6 +150,7 @@ QDebug operator<<(QDebug d, const RECT &r) return d; } +#ifndef Q_OS_WINCE // maybe available on some SDKs revisit WM_NCCALCSIZE QDebug operator<<(QDebug d, const NCCALCSIZE_PARAMS &p) { qDebug().nospace() << "NCCALCSIZE_PARAMS " @@ -156,6 +159,7 @@ QDebug operator<<(QDebug d, const NCCALCSIZE_PARAMS &p) << qrectFromRECT(p.rgrc[2]); return d; } +#endif // !Q_OS_WINCE // Return the frame geometry relative to the parent // if there is one. @@ -507,6 +511,7 @@ QMargins QWindowsGeometryHint::frame(DWORD style, DWORD exStyle) return result; } +#ifndef Q_OS_WINCE void QWindowsGeometryHint::applyToMinMaxInfo(HWND hwnd, MINMAXINFO *mmi) const { return applyToMinMaxInfo(GetWindowLong(hwnd, GWL_STYLE), @@ -541,6 +546,7 @@ void QWindowsGeometryHint::applyToMinMaxInfo(DWORD style, DWORD exStyle, MINMAXI << " frame=" << margins << ' ' << frameWidth << ',' << frameHeight << " out " << *mmi; } +#endif // !Q_OS_WINCE bool QWindowsGeometryHint::positionIncludesFrame(const QWindow *w) { @@ -1264,6 +1270,9 @@ void QWindowsWindow::setOpacity(qreal level) void QWindowsWindow::setOpacity_sys(qreal level) const { +#ifdef Q_OS_WINCE // maybe needs revisit WS_EX_LAYERED + Q_UNUSED(level); +#else const long wl = GetWindowLong(m_data.hwnd, GWL_EXSTYLE); const bool isOpaque = level == 1.0; @@ -1280,6 +1289,7 @@ void QWindowsWindow::setOpacity_sys(qreal level) const QWindowsContext::user32dll.setLayeredWindowAttributes(m_data.hwnd, 0, (int)(level * 255), LWA_ALPHA); } } +#endif // !Q_OS_WINCE } void QWindowsWindow::requestActivateWindow() @@ -1340,6 +1350,7 @@ void QWindowsWindow::setMouseGrabEnabled_sys(bool grab) } } +#ifndef Q_OS_WINCE // maybe available on some SDKs revisit WM_GETMINMAXINFO void QWindowsWindow::getSizeHints(MINMAXINFO *mmi) const { const QWindowsGeometryHint hint(window()); @@ -1347,6 +1358,7 @@ void QWindowsWindow::getSizeHints(MINMAXINFO *mmi) const if (QWindowsContext::verboseWindows) qDebug() << __FUNCTION__ << window() << *mmi; } +#endif // !Q_OS_WINCE /*! \brief Applies to cursor property set on the window to the global cursor. @@ -1392,6 +1404,7 @@ QWindowsWindow *QWindowsWindow::childAt(const QPoint &clientPoint, unsigned cwex return 0; } +#ifndef Q_OS_WINCE void QWindowsWindow::alertWindow(int durationMs) { DWORD timeOutMs = GetCaretBlinkTime(); @@ -1417,6 +1430,7 @@ void QWindowsWindow::stopAlertWindow() info.uCount = 0; FlashWindowEx(&info); } +#endif // !Q_OS_WINCE bool QWindowsWindow::isEnabled() const { diff --git a/src/plugins/platforms/windows/qwindowswindow.h b/src/plugins/platforms/windows/qwindowswindow.h index 64fd78d1ce..b558252968 100644 --- a/src/plugins/platforms/windows/qwindowswindow.h +++ b/src/plugins/platforms/windows/qwindowswindow.h @@ -43,6 +43,9 @@ #define QWINDOWSWINDOW_H #include "qtwindows_additional.h" +#ifdef Q_OS_WINCE +# include "qplatformfunctions_wince.h" +#endif #include "qwindowscursor.h" #include @@ -57,8 +60,10 @@ struct QWindowsGeometryHint QWindowsGeometryHint() {} explicit QWindowsGeometryHint(const QWindow *w); static QMargins frame(DWORD style, DWORD exStyle); +#ifndef Q_OS_WINCE //MinMax maybe define struct if not available void applyToMinMaxInfo(DWORD style, DWORD exStyle, MINMAXINFO *mmi) const; void applyToMinMaxInfo(HWND hwnd, MINMAXINFO *mmi) const; +#endif bool validSize(const QSize &s) const; static inline QPoint mapToGlobal(HWND hwnd, const QPoint &); @@ -76,9 +81,10 @@ struct QWindowCreationContext { QWindowCreationContext(const QWindow *w, const QRect &r, DWORD style, DWORD exStyle); - +#ifndef Q_OS_WINCE //MinMax maybe define struct if not available void applyToMinMaxInfo(MINMAXINFO *mmi) const { geometryHint.applyToMinMaxInfo(style, exStyle, mmi); } +#endif QWindowsGeometryHint geometryHint; DWORD style; @@ -176,8 +182,9 @@ public: HDC getDC(); void releaseDC(); - +#ifndef Q_OS_WINCE // maybe available on some SDKs revisit WM_GETMINMAXINFO void getSizeHints(MINMAXINFO *mmi) const; +#endif QWindowsWindowCursor cursor() const { return m_cursor; } void setCursor(const QWindowsWindowCursor &c); @@ -197,8 +204,10 @@ public: void setEnabled(bool enabled); bool isEnabled() const; +#ifndef Q_OS_WINCE void alertWindow(int durationMs = 0); void stopAlertWindow(); +#endif private: inline void show_sys() const; @@ -242,8 +251,10 @@ inline QRect operator-(const QRect &r, const QMargins &m) // Debug QDebug operator<<(QDebug d, const RECT &r); +#ifndef Q_OS_WINCE // maybe available on some SDKs revisit WM_GETMINMAXINFO/WM_NCCALCSIZE QDebug operator<<(QDebug d, const MINMAXINFO &i); QDebug operator<<(QDebug d, const NCCALCSIZE_PARAMS &p); +#endif // ---------- QWindowsGeometryHint inline functions. QPoint QWindowsGeometryHint::mapToGlobal(HWND hwnd, const QPoint &qp) diff --git a/src/plugins/platforms/windows/windows.pro b/src/plugins/platforms/windows/windows.pro index 63275d3402..5fcf9bfcc9 100644 --- a/src/plugins/platforms/windows/windows.pro +++ b/src/plugins/platforms/windows/windows.pro @@ -9,11 +9,13 @@ INCLUDEPATH += ../../../3rdparty/harfbuzz/src QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms # Note: OpenGL32 must precede Gdi32 as it overwrites some functions. -LIBS *= -lOpenGL32 -lGdi32 -lUser32 -lOle32 -lWinspool -lImm32 -lWinmm -lOleaut32 +LIBS *= -lole32 +!wince*:LIBS *= -lgdi32 -luser32 -lwinspool -limm32 -lwinmm -loleaut32 +contains(QT_CONFIG, opengl):LIBS *= -lOpenGL32 win32-g++: LIBS *= -luuid # For the dialog helpers: -LIBS *= -lshlwapi -lShell32 -LIBS *= -lAdvapi32 +!wince*:LIBS *= -lshlwapi -lshell32 +!wince*:LIBS *= -ladvapi32 DEFINES *= QT_NO_CAST_FROM_ASCII @@ -38,11 +40,10 @@ SOURCES += \ qwindowsfontdatabase.cpp \ qwindowsmousehandler.cpp \ qwindowsguieventdispatcher.cpp \ - qwindowsglcontext.cpp \ - qwindowsclipboard.cpp \ qwindowsole.cpp \ qwindowsmime.cpp \ qwindowsdrag.cpp \ + qwindowsinternalmimedata.cpp \ qwindowscursor.cpp \ qwindowsinputcontext.cpp \ qwindowstheme.cpp \ @@ -63,8 +64,6 @@ HEADERS += \ qwindowsguieventdispatcher.h \ qtwindowsglobal.h \ qtwindows_additional.h \ - qwindowsglcontext.h \ - qwindowsclipboard.h \ qwindowsole.h \ qwindowsmime.h \ qwindowsdrag.h \ @@ -74,7 +73,18 @@ HEADERS += \ qwindowsinputcontext.h \ qwindowstheme.h \ qwindowsdialoghelpers.h \ - qwindowsservices.h + qwindowsservices.h \ + qplatformfunctions_wince.h + +contains(QT_CONFIG, opengl) { + SOURCES += qwindowsglcontext.cpp + HEADERS += qwindowsglcontext.h +} + +!contains( DEFINES, QT_NO_CLIPBOARD ) { + SOURCES += qwindowsclipboard.cpp + HEADERS += qwindowsclipboard.h +} # Enable access to HB_Face in harfbuzz includes included by qfontengine_p.h. DEFINES *= QT_COMPILES_IN_HARFBUZZ -- cgit v1.2.3