Changeset 846 for trunk/src/gui/kernel/qapplication_win.cpp
- Timestamp:
- May 5, 2011, 5:36:53 AM (14 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk
- Property svn:mergeinfo changed
/branches/vendor/nokia/qt/4.7.2 (added) merged: 845 /branches/vendor/nokia/qt/current merged: 844 /branches/vendor/nokia/qt/4.6.3 removed
- Property svn:mergeinfo changed
-
trunk/src/gui/kernel/qapplication_win.cpp
r769 r846 1 1 /**************************************************************************** 2 2 ** 3 ** Copyright (C) 201 0Nokia Corporation and/or its subsidiary(-ies).3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). 4 4 ** All rights reserved. 5 5 ** Contact: Nokia Corporation (qt-info@nokia.com) … … 53 53 #include <tpcshell.h> 54 54 #ifdef QT_WINCE_GESTURES 55 #ifndef QT_NO_GESTURES 55 56 #include <gesture.h> 57 #endif 56 58 #endif 57 59 #endif … … 67 69 #include "qpointer.h" 68 70 #include "qhash.h" 69 #include "qlibrary.h"70 71 #include "qmetaobject.h" 71 72 #include "qmime.h" … … 80 81 #include "qtooltip.h" 81 82 #include "qt_windows.h" 83 #include "qscrollbar.h" 82 84 #if defined(QT_NON_COMMERCIAL) 83 85 #include "qnc_win.h" … … 92 94 #include <private/qkeymapper_p.h> 93 95 #include <private/qlocale_p.h> 96 #include <private/qsystemlibrary_p.h> 94 97 #include "qevent_p.h" 95 98 … … 115 118 # include <winable.h> 116 119 #endif 117 118 #include "private/qwinnativepangesturerecognizer_win_p.h"119 120 120 121 #ifndef WM_TOUCH … … 198 199 #endif 199 200 201 #ifndef QT_NO_GESTURES 200 202 typedef DWORD (API *AygRecognizeGesture)(SHRGINFO*); 201 203 static AygRecognizeGesture ptrRecognizeGesture = 0; … … 205 207 if (!aygResolved) { 206 208 aygResolved = true; 207 Q Library ayglib(QLatin1String("aygshell"));209 QSystemLibrary ayglib(QLatin1String("aygshell")); 208 210 if (!ayglib.load()) 209 211 return; … … 211 213 } 212 214 } 215 #endif // QT_NO_GESTURES 213 216 214 217 #endif … … 442 445 #endif 443 446 444 extern "C" LRESULT CALLBACK QtWndProc(HWND, UINT, WPARAM, LPARAM);447 extern "C" LRESULT QT_WIN_CALLBACK QtWndProc(HWND, UINT, WPARAM, LPARAM); 445 448 446 449 class QETWidget : public QWidget // event translator widget … … 463 466 bool translateCloseEvent(const MSG &msg); 464 467 bool translateTabletEvent(const MSG &msg, PACKET *localPacketBuf, int numPackets); 468 #ifndef QT_NO_GESTURES 465 469 bool translateGestureEvent(const MSG &msg, const GESTUREINFO &gi); 470 #endif 466 471 void repolishStyle(QStyle &style); 467 472 inline void showChildren(bool spontaneous) { d_func()->showChildren(spontaneous); } … … 702 707 } 703 708 709 static void qt_set_windows_updateScrollBar(QWidget *widget) 710 { 711 QList<QObject*> children = widget->children(); 712 for (int i = 0; i < children.size(); ++i) { 713 QObject *o = children.at(i); 714 if(!o->isWidgetType()) 715 continue; 716 if (QWidget *w = static_cast<QWidget *>(o)) 717 qt_set_windows_updateScrollBar(w); 718 } 719 #ifndef QT_NO_SCROLLBAR 720 if (qobject_cast<QScrollBar*>(widget)) 721 widget->updateGeometry(); 722 #endif 723 } 724 725 704 726 /***************************************************************************** 705 727 qt_init() - initializes Qt for Windows … … 812 834 #ifndef Q_OS_WINCE 813 835 ptrUpdateLayeredWindowIndirect = 814 (PtrUpdateLayeredWindowIndirect) Q Library::resolve(QLatin1String("user32"),836 (PtrUpdateLayeredWindowIndirect) QSystemLibrary::resolve(QLatin1String("user32"), 815 837 "UpdateLayeredWindowIndirect"); 816 838 ptrUpdateLayeredWindow = 817 (PtrUpdateLayeredWindow) Q Library::resolve(QLatin1String("user32"),839 (PtrUpdateLayeredWindow) QSystemLibrary::resolve(QLatin1String("user32"), 818 840 "UpdateLayeredWindow"); 819 841 … … 823 845 // Notify Vista and Windows 7 that we support highter DPI settings 824 846 ptrSetProcessDPIAware = (PtrSetProcessDPIAware) 825 Q Library::resolve(QLatin1String("user32"), "SetProcessDPIAware");847 QSystemLibrary::resolve(QLatin1String("user32"), "SetProcessDPIAware"); 826 848 if (ptrSetProcessDPIAware) 827 849 ptrSetProcessDPIAware(); 828 850 #endif 829 851 852 #ifndef QT_NO_GESTURES 830 853 priv->GetGestureInfo = 0; 831 854 priv->GetGestureExtraArgs = 0; … … 843 866 #if !defined(QT_NO_NATIVE_GESTURES) 844 867 priv->GetGestureInfo = 845 (PtrGetGestureInfo)Q Library::resolve(QLatin1String("user32"),868 (PtrGetGestureInfo)QSystemLibrary::resolve(QLatin1String("user32"), 846 869 "GetGestureInfo"); 847 870 priv->GetGestureExtraArgs = 848 (PtrGetGestureExtraArgs)Q Library::resolve(QLatin1String("user32"),871 (PtrGetGestureExtraArgs)QSystemLibrary::resolve(QLatin1String("user32"), 849 872 "GetGestureExtraArgs"); 850 873 priv->CloseGestureInfoHandle = 851 (PtrCloseGestureInfoHandle)Q Library::resolve(QLatin1String("user32"),874 (PtrCloseGestureInfoHandle)QSystemLibrary::resolve(QLatin1String("user32"), 852 875 "CloseGestureInfoHandle"); 853 876 priv->SetGestureConfig = 854 (PtrSetGestureConfig)Q Library::resolve(QLatin1String("user32"),877 (PtrSetGestureConfig)QSystemLibrary::resolve(QLatin1String("user32"), 855 878 "SetGestureConfig"); 856 879 priv->GetGestureConfig = 857 (PtrGetGestureConfig)Q Library::resolve(QLatin1String("user32"),880 (PtrGetGestureConfig)QSystemLibrary::resolve(QLatin1String("user32"), 858 881 "GetGestureConfig"); 859 882 #endif // QT_NO_NATIVE_GESTURES 883 QSystemLibrary libTheme(QLatin1String("uxtheme")); 860 884 priv->BeginPanningFeedback = 861 (PtrBeginPanningFeedback)QLibrary::resolve(QLatin1String("uxtheme"), 862 "BeginPanningFeedback"); 885 (PtrBeginPanningFeedback)libTheme.resolve("BeginPanningFeedback"); 863 886 priv->UpdatePanningFeedback = 864 (PtrUpdatePanningFeedback)QLibrary::resolve(QLatin1String("uxtheme"), 865 "UpdatePanningFeedback"); 887 (PtrUpdatePanningFeedback)libTheme.resolve("UpdatePanningFeedback"); 866 888 priv->EndPanningFeedback = 867 (PtrEndPanningFeedback) QLibrary::resolve(QLatin1String("uxtheme"),868 "EndPanningFeedback"); 869 #endif 889 (PtrEndPanningFeedback)libTheme.resolve("EndPanningFeedback"); 890 #endif 891 #endif // QT_NO_GESTURES 870 892 } 871 893 … … 934 956 cname = QLatin1String("QGLWidget"); 935 957 style = CS_DBLCLKS; 958 #ifndef Q_WS_WINCE 959 style |= CS_OWNDC; 960 #endif 936 961 icon = true; 937 962 } else if (flags & Qt::MSWindowsOwnDC) { … … 1401 1426 } 1402 1427 1403 extern "C" 1404 LRESULT CALLBACK QtWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) 1428 extern "C" LRESULT QT_WIN_CALLBACK QtWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) 1405 1429 { 1406 1430 bool result = true; … … 1476 1500 switch (message) { 1477 1501 #ifndef Q_WS_WINCE 1502 #ifndef QT_NO_SESSIONMANAGER 1478 1503 case WM_QUERYENDSESSION: { 1479 1504 if (sm_smActive) // bogus message from windows … … 1508 1533 RETURN(0); 1509 1534 } 1535 #endif 1510 1536 case WM_DISPLAYCHANGE: 1511 1537 if (QApplication::type() == QApplication::Tty) … … 1528 1554 #ifdef Q_WS_WINCE 1529 1555 // CE SIP hide/show 1530 if ( wParam == SPI_SETSIPINFO) {1556 if (qt_desktopWidget && wParam == SPI_SETSIPINFO) { 1531 1557 QResizeEvent re(QSize(0, 0), QSize(0, 0)); // Calculated by QDesktopWidget 1532 1558 QApplication::sendEvent(qt_desktopWidget, &re); … … 1580 1606 case WM_RBUTTONDOWN: 1581 1607 case WM_XBUTTONDOWN: 1608 case WM_LBUTTONDBLCLK: 1609 case WM_RBUTTONDBLCLK: 1610 case WM_MBUTTONDBLCLK: 1611 case WM_XBUTTONDBLCLK: 1582 1612 if (qt_win_ignoreNextMouseReleaseEvent) 1583 1613 qt_win_ignoreNextMouseReleaseEvent = false; … … 1649 1679 shrg.dwFlags = SHRG_RETURNCMD | SHRG_NOANIMATION; 1650 1680 resolveAygLibs(); 1681 #ifndef QT_NO_GESTURES 1651 1682 if (ptrRecognizeGesture && (ptrRecognizeGesture(&shrg) == GN_CONTEXTMENU)) { 1652 1683 if (QApplication::activePopupWidget()) … … 1655 1686 result = qt_sendSpontaneousEvent(alienWidget, &e); 1656 1687 } 1688 #endif // QT_NO_GESTURES 1657 1689 } 1658 1690 } … … 1918 1950 if (!widget->testAttribute(Qt::WA_SetLocale)) 1919 1951 widget->dptr()->setLocale_helper(QLocale(), true); 1952 QEvent e(QEvent::LocaleChange); 1953 QApplication::sendEvent(qApp, &e); 1920 1954 } 1921 1955 } … … 1928 1962 } 1929 1963 } 1964 else if (msg.wParam == SPI_SETNONCLIENTMETRICS) { 1965 widget = (QETWidget*)QWidget::find(hwnd); 1966 if (widget && !widget->parentWidget()) { 1967 qt_set_windows_updateScrollBar(widget); 1968 QEvent e(QEvent::LayoutRequest); 1969 QApplication::sendEvent(widget, &e); 1970 } 1971 } 1972 1930 1973 break; 1931 1974 … … 2196 2239 break; 2197 2240 2241 #ifndef QT_NO_CONTEXTMENU 2198 2242 case WM_CONTEXTMENU: 2199 2243 { … … 2224 2268 break; 2225 2269 #endif 2270 #endif 2226 2271 2227 2272 case WM_IME_STARTCOMPOSITION: … … 2280 2325 { 2281 2326 // Ignoring all requests while starting up 2282 if (QApplication::startingUp() || QApplication::closingDown() || ( DWORD)lParam != OBJID_CLIENT) {2327 if (QApplication::startingUp() || QApplication::closingDown() || (LONG)lParam != OBJID_CLIENT) { 2283 2328 result = false; 2284 2329 break; … … 2292 2337 oleaccChecked = true; 2293 2338 #if !defined(Q_OS_WINCE) 2294 ptrLresultFromObject = (PtrLresultFromObject)Q Library::resolve(QLatin1String("oleacc.dll"), "LresultFromObject");2339 ptrLresultFromObject = (PtrLresultFromObject)QSystemLibrary::resolve(QLatin1String("oleacc"), "LresultFromObject"); 2295 2340 #endif 2296 2341 } … … 2445 2490 QApplication::postEvent(widget, new QEvent(QEvent::OkRequest)); 2446 2491 if (CancelCommand) 2447 QApplication::postEvent(widget, new QEvent(QEvent::Close));2492 widget->showMinimized(); 2448 2493 else 2449 2494 #ifndef QT_NO_MENUBAR … … 2527 2572 result = false; 2528 2573 break; 2574 #ifndef QT_NO_GESTURES 2529 2575 #if !defined(Q_WS_WINCE) || defined(QT_WINCE_GESTURES) 2530 2576 case WM_GESTURE: { … … 2561 2607 } 2562 2608 #endif // !defined(Q_WS_WINCE) || defined(QT_WINCE_GESTURES) 2609 #endif // QT_NO_GESTURES 2610 #ifndef QT_NO_CURSOR 2611 case WM_SETCURSOR: { 2612 QCursor *ovr = QApplication::overrideCursor(); 2613 if (ovr) { 2614 SetCursor(ovr->handle()); 2615 RETURN(TRUE); 2616 } 2617 result = false; 2618 break; 2619 } 2620 #endif 2563 2621 default: 2564 2622 result = false; // event was not processed … … 2983 3041 msgPtr->lParam = mouseMsg.lParam; 2984 3042 msgPtr->wParam = mouseMsg.wParam; 2985 msgPtr->pt = mouseMsg.pt; 3043 // Extract the x,y coordinates from the lParam as we do in the WndProc 3044 msgPtr->pt.x = GET_X_LPARAM(mouseMsg.lParam); 3045 msgPtr->pt.y = GET_Y_LPARAM(mouseMsg.lParam); 3046 ClientToScreen(msg.hwnd, &(msgPtr->pt)); 2986 3047 // Remove the mouse move message 2987 3048 PeekMessage(&mouseMsg, msg.hwnd, WM_MOUSEMOVE, … … 3009 3070 } 3010 3071 } 3072 #ifndef Q_OS_WINCE 3073 static bool trackMouseEventLookup = false; 3074 typedef BOOL (WINAPI *PtrTrackMouseEvent)(LPTRACKMOUSEEVENT); 3075 static PtrTrackMouseEvent ptrTrackMouseEvent = 0; 3076 #endif 3011 3077 state = translateButtonState(msg.wParam, type, button); // button state 3012 3078 const QPoint widgetPos = mapFromGlobal(QPoint(msg.pt.x, msg.pt.y)); … … 3073 3139 3074 3140 if (curWin != 0) { 3075 static bool trackMouseEventLookup = false;3076 typedef BOOL (WINAPI *PtrTrackMouseEvent)(LPTRACKMOUSEEVENT);3077 static PtrTrackMouseEvent ptrTrackMouseEvent = 0;3078 3141 if (!trackMouseEventLookup) { 3079 3142 trackMouseEventLookup = true; 3080 ptrTrackMouseEvent = (PtrTrackMouseEvent)Q Library::resolve(QLatin1String("comctl32"), "_TrackMouseEvent");3143 ptrTrackMouseEvent = (PtrTrackMouseEvent)QSystemLibrary::resolve(QLatin1String("comctl32"), "_TrackMouseEvent"); 3081 3144 } 3082 3145 if (ptrTrackMouseEvent && !qApp->d_func()->inPopupMode()) { … … 3189 3252 } 3190 3253 3254 #ifndef Q_OS_WINCE 3255 if (type == QEvent::MouseButtonPress 3256 && QApplication::activePopupWidget() != activePopupWidget 3257 && ptrTrackMouseEvent 3258 && curWin) { 3259 // Since curWin is already the window we clicked on, 3260 // we have to setup the mouse tracking here. 3261 TRACKMOUSEEVENT tme; 3262 tme.cbSize = sizeof(TRACKMOUSEEVENT); 3263 tme.dwFlags = 0x00000002; // TME_LEAVE 3264 tme.hwndTrack = curWin; // Track on window receiving msgs 3265 tme.dwHoverTime = (DWORD)-1; // HOVER_DEFAULT 3266 ptrTrackMouseEvent(&tme); 3267 } 3268 #endif 3191 3269 if (type == QEvent::MouseButtonPress 3192 3270 && QApplication::activePopupWidget() != activePopupWidget 3193 3271 && replayPopupMouseEvent) { 3194 // the popup dis sappeared. Replay the event3272 // the popup disappeared. Replay the event 3195 3273 QWidget* w = QApplication::widgetAt(gpos.x, gpos.y); 3196 3274 if (w && !QApplicationPrivate::isBlockedByModal(w)) { … … 3429 3507 #endif // QT_NO_TABLETEVENT 3430 3508 3431 // Update the "dynamic" information sof a cursor device (pen, airbrush, etc).3509 // Update the "dynamic" information of a cursor device (pen, airbrush, etc). 3432 3510 // The dynamic information is the information of QTabletDeviceData that can change 3433 3511 // in time (eraser or pen if a device is turned around). … … 3598 3676 return; 3599 3677 3600 Q Library library(QLatin1String("wintab32"));3678 QSystemLibrary library(QLatin1String("wintab32")); 3601 3679 if (library.load()) { 3602 3680 ptrWTInfo = (PtrWTInfo)library.resolve("WTInfoW"); … … 3782 3860 } 3783 3861 3862 #ifndef QT_NO_GESTURES 3784 3863 bool QETWidget::translateGestureEvent(const MSG &, const GESTUREINFO &gi) 3785 3864 { … … 3820 3899 return true; 3821 3900 } 3822 3901 #endif // QT_NO_GESTURES 3823 3902 3824 3903 void QApplication::setCursorFlashTime(int msecs) … … 4010 4089 void QApplicationPrivate::initializeMultitouch_sys() 4011 4090 { 4012 static const IID QT_IID_IInkTablets = {0x112086D9, 0x7779, 0x4535, {0xA6, 0x99, 0x86, 0x2B, 0x43, 0xAC, 0x18, 0x63} }; 4013 static const IID QT_IID_IInkTablet2 = {0x90c91ad2, 0xfa36, 0x49d6, {0x95, 0x16, 0xce, 0x8d, 0x57, 0x0f, 0x6f, 0x85} }; 4014 static const CLSID QT_CLSID_InkTablets = {0x6E4FCB12, 0x510A, 0x4d40, {0x93, 0x04, 0x1D, 0xA1, 0x0A, 0xE9, 0x14, 0x7C} }; 4015 4016 IInkTablets *iInkTablets = 0; 4017 HRESULT hr = CoCreateInstance(QT_CLSID_InkTablets, NULL, CLSCTX_ALL, QT_IID_IInkTablets, (void**)&iInkTablets); 4018 if (SUCCEEDED(hr)) { 4019 long count = 0; 4020 iInkTablets->get_Count(&count); 4021 for (long i = 0; i < count; ++i) { 4022 IInkTablet *iInkTablet = 0; 4023 hr = iInkTablets->Item(i, &iInkTablet); 4024 if (FAILED(hr)) 4025 continue; 4026 IInkTablet2 *iInkTablet2 = 0; 4027 hr = iInkTablet->QueryInterface(QT_IID_IInkTablet2, (void**)&iInkTablet2); 4028 iInkTablet->Release(); 4029 if (FAILED(hr)) 4030 continue; 4031 TabletDeviceKind kind; 4032 hr = iInkTablet2->get_DeviceKind(&kind); 4033 iInkTablet2->Release(); 4034 if (FAILED(hr)) 4035 continue; 4036 if (kind == TDK_Touch) { 4037 QApplicationPrivate::HasTouchSupport = true; 4038 break; 4039 } 4040 } 4041 iInkTablets->Release(); 4042 } 4043 4044 QLibrary library(QLatin1String("user32")); 4091 if (QSysInfo::windowsVersion() >= QSysInfo::WV_WINDOWS7) { 4092 static const int QT_SM_DIGITIZER = 94; 4093 int value = GetSystemMetrics(QT_SM_DIGITIZER); 4094 static const int QT_NID_INTEGRATED_TOUCH = 0x01; 4095 static const int QT_NID_EXTERNAL_TOUCH = 0x02; 4096 static const int QT_NID_MULTI_INPUT = 0x40; 4097 QApplicationPrivate::HasTouchSupport = 4098 value & (QT_NID_INTEGRATED_TOUCH | QT_NID_EXTERNAL_TOUCH | QT_NID_MULTI_INPUT); 4099 } 4100 4101 QSystemLibrary library(QLatin1String("user32")); 4045 4102 // MinGW (g++ 3.4.5) accepts only C casts. 4046 4103 RegisterTouchWindow = (PtrRegisterTouchWindow)(library.resolve("RegisterTouchWindow"));
Note:
See TracChangeset
for help on using the changeset viewer.