Ignore:
Timestamp:
May 5, 2011, 5:36:53 AM (14 years ago)
Author:
Dmitry A. Kuminov
Message:

trunk: Merged in qt 4.7.2 sources from branches/vendor/nokia/qt.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/src/gui/kernel/qapplication_win.cpp

    r769 r846  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
     
    5353#include <tpcshell.h>
    5454#ifdef QT_WINCE_GESTURES
     55#ifndef QT_NO_GESTURES
    5556#include <gesture.h>
     57#endif
    5658#endif
    5759#endif
     
    6769#include "qpointer.h"
    6870#include "qhash.h"
    69 #include "qlibrary.h"
    7071#include "qmetaobject.h"
    7172#include "qmime.h"
     
    8081#include "qtooltip.h"
    8182#include "qt_windows.h"
     83#include "qscrollbar.h"
    8284#if defined(QT_NON_COMMERCIAL)
    8385#include "qnc_win.h"
     
    9294#include <private/qkeymapper_p.h>
    9395#include <private/qlocale_p.h>
     96#include <private/qsystemlibrary_p.h>
    9497#include "qevent_p.h"
    9598
     
    115118#  include <winable.h>
    116119#endif
    117 
    118 #include "private/qwinnativepangesturerecognizer_win_p.h"
    119120
    120121#ifndef WM_TOUCH
     
    198199#endif
    199200
     201#ifndef QT_NO_GESTURES
    200202typedef DWORD (API *AygRecognizeGesture)(SHRGINFO*);
    201203static AygRecognizeGesture ptrRecognizeGesture = 0;
     
    205207    if (!aygResolved) {
    206208        aygResolved = true;
    207         QLibrary ayglib(QLatin1String("aygshell"));
     209        QSystemLibrary ayglib(QLatin1String("aygshell"));
    208210        if (!ayglib.load())
    209211            return;
     
    211213    }
    212214}
     215#endif // QT_NO_GESTURES
    213216
    214217#endif
     
    442445#endif
    443446
    444 extern "C" LRESULT CALLBACK QtWndProc(HWND, UINT, WPARAM, LPARAM);
     447extern "C" LRESULT QT_WIN_CALLBACK QtWndProc(HWND, UINT, WPARAM, LPARAM);
    445448
    446449class QETWidget : public QWidget                // event translator widget
     
    463466    bool        translateCloseEvent(const MSG &msg);
    464467    bool        translateTabletEvent(const MSG &msg, PACKET *localPacketBuf, int numPackets);
     468#ifndef QT_NO_GESTURES
    465469    bool        translateGestureEvent(const MSG &msg, const GESTUREINFO &gi);
     470#endif
    466471    void        repolishStyle(QStyle &style);
    467472    inline void showChildren(bool spontaneous) { d_func()->showChildren(spontaneous); }
     
    702707}
    703708
     709static 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
    704726/*****************************************************************************
    705727  qt_init() - initializes Qt for Windows
     
    812834#ifndef Q_OS_WINCE
    813835    ptrUpdateLayeredWindowIndirect =
    814         (PtrUpdateLayeredWindowIndirect) QLibrary::resolve(QLatin1String("user32"),
     836        (PtrUpdateLayeredWindowIndirect) QSystemLibrary::resolve(QLatin1String("user32"),
    815837                                                           "UpdateLayeredWindowIndirect");
    816838    ptrUpdateLayeredWindow =
    817         (PtrUpdateLayeredWindow) QLibrary::resolve(QLatin1String("user32"),
     839        (PtrUpdateLayeredWindow) QSystemLibrary::resolve(QLatin1String("user32"),
    818840                                                   "UpdateLayeredWindow");
    819841
     
    823845    // Notify Vista and Windows 7 that we support highter DPI settings
    824846    ptrSetProcessDPIAware = (PtrSetProcessDPIAware)
    825         QLibrary::resolve(QLatin1String("user32"), "SetProcessDPIAware");
     847        QSystemLibrary::resolve(QLatin1String("user32"), "SetProcessDPIAware");
    826848    if (ptrSetProcessDPIAware)
    827849        ptrSetProcessDPIAware();
    828850#endif
    829851
     852#ifndef QT_NO_GESTURES
    830853    priv->GetGestureInfo = 0;
    831854    priv->GetGestureExtraArgs = 0;
     
    843866  #if !defined(QT_NO_NATIVE_GESTURES)
    844867    priv->GetGestureInfo =
    845             (PtrGetGestureInfo)QLibrary::resolve(QLatin1String("user32"),
     868            (PtrGetGestureInfo)QSystemLibrary::resolve(QLatin1String("user32"),
    846869                                                 "GetGestureInfo");
    847870    priv->GetGestureExtraArgs =
    848             (PtrGetGestureExtraArgs)QLibrary::resolve(QLatin1String("user32"),
     871            (PtrGetGestureExtraArgs)QSystemLibrary::resolve(QLatin1String("user32"),
    849872                                                      "GetGestureExtraArgs");
    850873    priv->CloseGestureInfoHandle =
    851             (PtrCloseGestureInfoHandle)QLibrary::resolve(QLatin1String("user32"),
     874            (PtrCloseGestureInfoHandle)QSystemLibrary::resolve(QLatin1String("user32"),
    852875                                                         "CloseGestureInfoHandle");
    853876    priv->SetGestureConfig =
    854             (PtrSetGestureConfig)QLibrary::resolve(QLatin1String("user32"),
     877            (PtrSetGestureConfig)QSystemLibrary::resolve(QLatin1String("user32"),
    855878                                                   "SetGestureConfig");
    856879    priv->GetGestureConfig =
    857             (PtrGetGestureConfig)QLibrary::resolve(QLatin1String("user32"),
     880            (PtrGetGestureConfig)QSystemLibrary::resolve(QLatin1String("user32"),
    858881                                                   "GetGestureConfig");
    859882  #endif // QT_NO_NATIVE_GESTURES
     883    QSystemLibrary libTheme(QLatin1String("uxtheme"));
    860884    priv->BeginPanningFeedback =
    861             (PtrBeginPanningFeedback)QLibrary::resolve(QLatin1String("uxtheme"),
    862                                                        "BeginPanningFeedback");
     885            (PtrBeginPanningFeedback)libTheme.resolve("BeginPanningFeedback");
    863886    priv->UpdatePanningFeedback =
    864             (PtrUpdatePanningFeedback)QLibrary::resolve(QLatin1String("uxtheme"),
    865                                                         "UpdatePanningFeedback");
     887            (PtrUpdatePanningFeedback)libTheme.resolve("UpdatePanningFeedback");
    866888    priv->EndPanningFeedback =
    867         (PtrEndPanningFeedback)QLibrary::resolve(QLatin1String("uxtheme"),
    868                                                    "EndPanningFeedback");
    869 #endif
     889        (PtrEndPanningFeedback)libTheme.resolve("EndPanningFeedback");
     890#endif
     891#endif // QT_NO_GESTURES
    870892}
    871893
     
    934956        cname = QLatin1String("QGLWidget");
    935957        style = CS_DBLCLKS;
     958#ifndef Q_WS_WINCE
     959        style |= CS_OWNDC;
     960#endif
    936961        icon  = true;
    937962    } else if (flags & Qt::MSWindowsOwnDC) {
     
    14011426}
    14021427
    1403 extern "C"
    1404 LRESULT CALLBACK QtWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
     1428extern "C" LRESULT QT_WIN_CALLBACK QtWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    14051429{
    14061430    bool result = true;
     
    14761500    switch (message) {
    14771501#ifndef Q_WS_WINCE
     1502#ifndef QT_NO_SESSIONMANAGER
    14781503    case WM_QUERYENDSESSION: {
    14791504        if (sm_smActive) // bogus message from windows
     
    15081533        RETURN(0);
    15091534    }
     1535#endif
    15101536    case WM_DISPLAYCHANGE:
    15111537        if (QApplication::type() == QApplication::Tty)
     
    15281554#ifdef Q_WS_WINCE
    15291555        // CE SIP hide/show
    1530         if (wParam == SPI_SETSIPINFO) {
     1556        if (qt_desktopWidget && wParam == SPI_SETSIPINFO) {
    15311557            QResizeEvent re(QSize(0, 0), QSize(0, 0)); // Calculated by QDesktopWidget
    15321558            QApplication::sendEvent(qt_desktopWidget, &re);
     
    15801606    case WM_RBUTTONDOWN:
    15811607    case WM_XBUTTONDOWN:
     1608    case WM_LBUTTONDBLCLK:
     1609    case WM_RBUTTONDBLCLK:
     1610    case WM_MBUTTONDBLCLK:
     1611    case WM_XBUTTONDBLCLK:
    15821612        if (qt_win_ignoreNextMouseReleaseEvent)
    15831613            qt_win_ignoreNextMouseReleaseEvent = false;
     
    16491679                        shrg.dwFlags = SHRG_RETURNCMD | SHRG_NOANIMATION;
    16501680                        resolveAygLibs();
     1681#ifndef QT_NO_GESTURES
    16511682                        if (ptrRecognizeGesture && (ptrRecognizeGesture(&shrg) == GN_CONTEXTMENU)) {
    16521683                            if (QApplication::activePopupWidget())
     
    16551686                            result = qt_sendSpontaneousEvent(alienWidget, &e);
    16561687                        }
     1688#endif // QT_NO_GESTURES
    16571689                    }
    16581690                }
     
    19181950                    if (!widget->testAttribute(Qt::WA_SetLocale))
    19191951                        widget->dptr()->setLocale_helper(QLocale(), true);
     1952                    QEvent e(QEvent::LocaleChange);
     1953                    QApplication::sendEvent(qApp, &e);
    19201954                }
    19211955            }
     
    19281962                }
    19291963            }
     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
    19301973            break;
    19311974
     
    21962239            break;
    21972240
     2241#ifndef QT_NO_CONTEXTMENU
    21982242            case WM_CONTEXTMENU:
    21992243            {
     
    22242268            break;
    22252269#endif
     2270#endif
    22262271
    22272272        case WM_IME_STARTCOMPOSITION:
     
    22802325            {
    22812326                // 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) {
    22832328                    result = false;
    22842329                    break;
     
    22922337                    oleaccChecked = true;
    22932338#if !defined(Q_OS_WINCE)
    2294                     ptrLresultFromObject = (PtrLresultFromObject)QLibrary::resolve(QLatin1String("oleacc.dll"), "LresultFromObject");
     2339                    ptrLresultFromObject = (PtrLresultFromObject)QSystemLibrary::resolve(QLatin1String("oleacc"), "LresultFromObject");
    22952340#endif
    22962341                }
     
    24452490                QApplication::postEvent(widget, new QEvent(QEvent::OkRequest));
    24462491            if (CancelCommand)
    2447                 QApplication::postEvent(widget, new QEvent(QEvent::Close));
     2492                widget->showMinimized();
    24482493            else
    24492494#ifndef QT_NO_MENUBAR
     
    25272572            result = false;
    25282573            break;
     2574#ifndef QT_NO_GESTURES
    25292575#if !defined(Q_WS_WINCE) || defined(QT_WINCE_GESTURES)
    25302576        case WM_GESTURE: {
     
    25612607        }
    25622608#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
    25632621        default:
    25642622            result = false;                        // event was not processed
     
    29833041                msgPtr->lParam = mouseMsg.lParam;
    29843042                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));
    29863047                // Remove the mouse move message
    29873048                PeekMessage(&mouseMsg, msg.hwnd, WM_MOUSEMOVE,
     
    30093070        }
    30103071    }
     3072#ifndef Q_OS_WINCE
     3073    static bool trackMouseEventLookup = false;
     3074    typedef BOOL (WINAPI *PtrTrackMouseEvent)(LPTRACKMOUSEEVENT);
     3075    static PtrTrackMouseEvent ptrTrackMouseEvent = 0;
     3076#endif
    30113077    state  = translateButtonState(msg.wParam, type, button); // button state
    30123078    const QPoint widgetPos = mapFromGlobal(QPoint(msg.pt.x, msg.pt.y));
     
    30733139
    30743140            if (curWin != 0) {
    3075                 static bool trackMouseEventLookup = false;
    3076                 typedef BOOL (WINAPI *PtrTrackMouseEvent)(LPTRACKMOUSEEVENT);
    3077                 static PtrTrackMouseEvent ptrTrackMouseEvent = 0;
    30783141                if (!trackMouseEventLookup) {
    30793142                    trackMouseEventLookup = true;
    3080                     ptrTrackMouseEvent = (PtrTrackMouseEvent)QLibrary::resolve(QLatin1String("comctl32"), "_TrackMouseEvent");
     3143                    ptrTrackMouseEvent = (PtrTrackMouseEvent)QSystemLibrary::resolve(QLatin1String("comctl32"), "_TrackMouseEvent");
    30813144                }
    30823145                if (ptrTrackMouseEvent && !qApp->d_func()->inPopupMode()) {
     
    31893252        }
    31903253
     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
    31913269        if (type == QEvent::MouseButtonPress
    31923270            && QApplication::activePopupWidget() != activePopupWidget
    31933271            && replayPopupMouseEvent) {
    3194             // the popup dissappeared. Replay the event
     3272            // the popup disappeared. Replay the event
    31953273            QWidget* w = QApplication::widgetAt(gpos.x, gpos.y);
    31963274            if (w && !QApplicationPrivate::isBlockedByModal(w)) {
     
    34293507#endif // QT_NO_TABLETEVENT
    34303508
    3431 // Update the "dynamic" informations of a cursor device (pen, airbrush, etc).
     3509// Update the "dynamic" information of a cursor device (pen, airbrush, etc).
    34323510// The dynamic information is the information of QTabletDeviceData that can change
    34333511// in time (eraser or pen if a device is turned around).
     
    35983676        return;
    35993677
    3600     QLibrary library(QLatin1String("wintab32"));
     3678    QSystemLibrary library(QLatin1String("wintab32"));
    36013679    if (library.load()) {
    36023680        ptrWTInfo = (PtrWTInfo)library.resolve("WTInfoW");
     
    37823860}
    37833861
     3862#ifndef QT_NO_GESTURES
    37843863bool QETWidget::translateGestureEvent(const MSG &, const GESTUREINFO &gi)
    37853864{
     
    38203899    return true;
    38213900}
    3822 
     3901#endif // QT_NO_GESTURES
    38233902
    38243903void  QApplication::setCursorFlashTime(int msecs)
     
    40104089void QApplicationPrivate::initializeMultitouch_sys()
    40114090{
    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"));
    40454102    // MinGW (g++ 3.4.5) accepts only C casts.
    40464103    RegisterTouchWindow = (PtrRegisterTouchWindow)(library.resolve("RegisterTouchWindow"));
Note: See TracChangeset for help on using the changeset viewer.