123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 | // Copyright (C) 2016 The Qt Company Ltd.// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only#ifndef QAPPLICATION_P_H#define QAPPLICATION_P_H//// W A R N I N G// -------------//// This file is not part of the Qt API. It exists for the convenience// of qapplication_*.cpp, qwidget*.cpp, qcolor_x11.cpp, qfiledialog.cpp// and many other. This header file may change from version to version// without notice, or even be removed.//// We mean it.//#include <QtWidgets/private/qtwidgetsglobal_p.h>#include"QtWidgets/qapplication.h"#include"QtGui/qevent.h"#include"QtGui/qfont.h"#include"QtGui/qcursor.h"#include"QtGui/qregion.h"#include"QtGui/qwindow.h"#include"qwidget.h"#include <qpa/qplatformnativeinterface.h>#include"QtCore/qmutex.h"#include"QtCore/qtranslator.h"#include"QtCore/qbasictimer.h"#include"QtCore/qhash.h"#include"QtCore/qpointer.h"#include"private/qcoreapplication_p.h"#include"QtCore/qpoint.h"#include <QTime>#include <qpa/qwindowsysteminterface.h>#include <qpa/qwindowsysteminterface_p.h>#include <qpa/qplatformintegration.h>#include"private/qguiapplication_p.h" QT_BEGIN_NAMESPACE class QClipboard;class QGraphicsScene;class QObject;class QWidget;class QSocketNotifier;class QPointingDevice;#ifndef QT_NO_GESTURESclass QGestureManager;#endifextern Q_GUI_EXPORT bool qt_is_tty_app;#ifndef QT_NO_CLIPBOARDextern QClipboard *qt_clipboard;#endiftypedef QHash<QByteArray, QFont> FontHash; Q_WIDGETS_EXPORT FontHash *qt_app_fonts_hash();class Q_WIDGETS_EXPORT QApplicationPrivate :public QGuiApplicationPrivate {Q_DECLARE_PUBLIC(QApplication)public:QApplicationPrivate(int&argc,char**argv);~QApplicationPrivate();virtualvoidnotifyLayoutDirectionChange() override;virtualvoidnotifyActiveWindowChange(QWindow *) override;static bool autoSipEnabled;static QString desktopStyleKey();voidcreateEventDispatcher() override;static voiddispatchEnterLeave(QWidget *enter, QWidget *leave,const QPointF &globalPosF);static QWidget *desktop();voidnotifyWindowIconChanged() override;boolcompressEvent(QEvent *event, QObject *receiver, QPostEventList *postedEvents) final;#ifndef QT_NO_ACTION QActionPrivate *createActionPrivate()const override;#endif#ifndef QT_NO_SHORTCUT QShortcutPrivate *createShortcutPrivate()const override;#endif//modalityQt::WindowModality defaultModality()const override;boolwindowNeverBlocked(QWindow *window)const override;static boolisBlockedByModal(QWidget *widget);static boolmodalState();static booltryModalHelper(QWidget *widget, QWidget **rettop =nullptr);#ifdef QT_KEYPAD_NAVIGATIONstatic boolkeypadNavigationEnabled(){return navigationMode ==Qt::NavigationModeKeypadTabOrder || navigationMode ==Qt::NavigationModeKeypadDirectional;}#endifboolnotify_helper(QObject *receiver, QEvent * e);voidinit();voidinitialize();voidprocess_cmdline();static voidsetActiveWindow(QWidget* act);static boolinPopupMode();voidclosePopup(QWidget *popup);voidopenPopup(QWidget *popup);static bool replayMousePress;static voidsetFocusWidget(QWidget *focus,Qt::FocusReason reason);static QWidget *focusNextPrevChild_helper(QWidget *toplevel,bool next,bool*wrappingOccurred =nullptr);#if QT_CONFIG(graphicsview)// Maintain a list of all scenes to ensure font and palette propagation to// all scenes. QList<QGraphicsScene *> scene_list;#endif QBasicTimer toolTipWakeUp, toolTipFallAsleep; QPoint toolTipPos, toolTipGlobalPos, hoverGlobalPos; QPointer<QWidget> toolTipWidget;static QSize app_strut;static QWidgetList *popupWidgets;static QStyle *app_style;protected:voidhandleThemeChanged() override; QPalette basePalette()const override;voidhandlePaletteChanged(const char*className =nullptr) override;#if QT_CONFIG(draganddrop)voidnotifyDragStarted(const QDrag *) override;#endif// QT_CONFIG(draganddrop)public:static QFont *sys_font;static QFont *set_font;static QWidget *main_widget;static QWidget *focus_widget;static QWidget *hidden_focus_widget;#if QT_CONFIG(wheelevent)static QPointer<QWidget> wheel_widget;#endifstatic int enabledAnimations;// Combination of QPlatformTheme::UiEffectstatic bool widgetCount;// Coupled with -widgetcount switchstatic voidinitializeWidgetPalettesFromTheme();static voidinitializeWidgetFontHash();static voidsetSystemFont(const QFont &font);using PaletteHash = QHash<QByteArray, QPalette>;static PaletteHash widgetPalettes;static QApplicationPrivate *instance() {return self; }#ifdef QT_KEYPAD_NAVIGATIONstatic QWidget *oldEditFocus;staticQt::NavigationMode navigationMode;#endif#ifndef QT_NO_STYLE_STYLESHEETstatic QString styleSheet;#endifstatic QPointer<QWidget> leaveAfterRelease;static QWidget *pickMouseReceiver(QWidget *candidate,const QPointF &windowPos, QPointF *pos,QEvent::Type type,Qt::MouseButtons buttons, QWidget *buttonDown, QWidget *alienWidget);static boolsendMouseEvent(QWidget *receiver, QMouseEvent *event, QWidget *alienWidget, QWidget *native, QWidget **buttonDown, QPointer<QWidget> &lastMouseReceiver,bool spontaneous =true,bool onlyDispatchEnterLeave =false);voidsendSyntheticEnterLeave(QWidget *widget);static QWindow *windowForWidget(const QWidget *widget){if(QWindow *window = widget->windowHandle())return window;if(const QWidget *nativeParent = widget->nativeParentWidget())return nativeParent->windowHandle();returnnullptr;}#ifdef Q_OS_WINstatic HWND getHWNDForWidget(const QWidget *widget){if(QWindow *window =windowForWidget(widget))if(window->handle() &&QGuiApplication::platformNativeInterface())return static_cast<HWND> (QGuiApplication::platformNativeInterface()->nativeResourceForWindow(QByteArrayLiteral("handle"), window));return0;}#endif#ifndef QT_NO_GESTURES QGestureManager *gestureManager; QWidget *gestureWidget;#endifstatic boolupdateTouchPointsForWidget(QWidget *widget, QTouchEvent *touchEvent);voidinitializeMultitouch();voidinitializeMultitouch_sys();voidcleanupMultitouch();voidcleanupMultitouch_sys(); QWidget *findClosestTouchPointTarget(const QPointingDevice *device,const QEventPoint &touchPoint);voidappendTouchPoint(const QEventPoint &touchPoint);voidremoveTouchPoint(int touchPointId);enum ImplicitTouchGrabMode { GrabAcceptedPoints, GrabAllPoints };voidactivateImplicitTouchGrab(QWidget *widget, QTouchEvent *touchBeginEvent, ImplicitTouchGrabMode grabMode = GrabAcceptedPoints);static booltranslateRawTouchEvent(QWidget *widget,const QTouchEvent *touchEvent);static voidtranslateTouchCancel(const QPointingDevice *device, ulong timestamp); QPixmap applyQIconStyleHelper(QIcon::Mode mode,const QPixmap& base)const override;private:static QApplicationPrivate *self;static booltryCloseAllWidgetWindows(QWindowList *processedWindows);static voidgiveFocusAccordingToFocusPolicy(QWidget *w, QEvent *event, QPoint localPos);static boolshouldSetFocus(QWidget *w,Qt::FocusPolicy policy);static QWidget *active_window;static boolisAlien(QWidget *);};externvoidqt_qpa_set_cursor(QWidget * w,bool force); QT_END_NAMESPACE #endif// QAPPLICATION_P_H
|