13#if QT_CONFIG(clipboard) 
   21#if defined(Q_OS_MACOS) 
   22#  include <QtGui/private/qcoretextfontdatabase_p.h> 
   23#  include <QtGui/private/qfontengine_coretext_p.h> 
   25#  include <QtGui/private/qgenericunixfontdatabase_p.h> 
   27#include <QtGui/private/qgenericunixeventdispatcher_p.h> 
   28#include <QtGui/private/qgenericunixthemes_p.h> 
   30#include <QtGui/private/qguiapplication_p.h> 
   32#include <qpa/qwindowsysteminterface.h> 
   33#include <qpa/qplatformcursor.h> 
   34#include <QtGui/QSurfaceFormat> 
   36#include <QtGui/QOpenGLContext> 
   38#include <QSocketNotifier> 
   40#include <qpa/qplatforminputcontextfactory_p.h> 
   41#include <qpa/qplatformaccessibility.h> 
   42#include <qpa/qplatforminputcontext.h> 
   59#if QT_CONFIG(accessibility_atspi_bridge) 
   60#include <QtGui/private/qspiaccessiblebridge_p.h> 
   63#if QT_CONFIG(xkbcommon) 
   64#include <QtGui/private/qxkbcommon_p.h> 
   76QWaylandIntegration *QWaylandIntegration::sInstance = 
nullptr;
 
   79#if defined(Q_OS_MACOS) 
  105    return mNativeInterface.
data();
 
  113        return mDisplay->clientBufferIntegration();
 
  115        return mDisplay->clientBufferIntegration() && 
mDisplay->clientBufferIntegration()->supportsThreadedOpenGL();
 
  134        && 
mDisplay->clientBufferIntegration())
 
  135        return mDisplay->clientBufferIntegration()->createEglWindow(
window);
 
  148    if (
mDisplay->clientBufferIntegration())
 
  149        return mDisplay->clientBufferIntegration()->createPlatformOpenGLContext(
context->format(), 
context->shareHandle());
 
  161    return createUnixEventDispatcher();
 
  170void QWaylandIntegration::initializePlatform()
 
  175    initializeInputDeviceIntegration();
 
  176#if QT_CONFIG(clipboard) 
  179#if QT_CONFIG(draganddrop) 
  188    initializePlatform();
 
  201    return mFontDb.
data();
 
  204#if QT_CONFIG(clipboard) 
  207    return mClipboard.data();
 
  211#if QT_CONFIG(draganddrop) 
  226        return mDisplay->windowManagerIntegration()->showIsFullScreen();
 
  231#if QT_CONFIG(accessibility) 
  232QPlatformAccessibility *QWaylandIntegration::accessibility()
 const 
  234    if (!mAccessibility) {
 
  235#if QT_CONFIG(accessibility_atspi_bridge) 
  237            "Initializing accessibility without event-dispatcher!");
 
  240        mAccessibility.reset(
new QPlatformAccessibility());
 
  243    return mAccessibility.data();
 
  249    return mDisplay->windowManagerIntegration();
 
  259    if (
auto *seat = 
mDisplay->currentInputDevice(); seat && seat->keyboardFocus()) {
 
  260        return seat->modifiers();
 
  267    if (
auto *seat = 
mDisplay->currentInputDevice())
 
  268        return seat->possibleKeys(
event);
 
  289   return new QWaylandCursor(
display);
 
  303    if (
Q_UNLIKELY(!mClientBufferIntegrationInitialized))
 
  306    Q_ASSERT(mClientBufferIntegrationInitialized);
 
  312    if (!mServerBufferIntegrationInitialized)
 
  320    if (!mShellIntegrationInitialized)
 
  327void QWaylandIntegration::initializeClientBufferIntegration()
 
  330    if (mClientBufferIntegrationInitialized)
 
  337                && 
mDisplay->hardwareIntegration()->clientBufferIntegration() != 
QLatin1String(
"wayland-eglstream-controller")
 
  338                && 
mDisplay->hardwareIntegration()->clientBufferIntegration() != 
QLatin1String(
"linux-dmabuf-unstable-v1")) {
 
  339            targetKey = 
mDisplay->hardwareIntegration()->clientBufferIntegration();
 
  346        qWarning(
"Failed to determine what client buffer integration to use");
 
  349        qCDebug(lcQpaWayland) << 
"Available client buffer integrations:" << 
keys;
 
  351        if (
keys.contains(targetKey))
 
  355            qCDebug(lcQpaWayland) << 
"Initializing client buffer integration" << targetKey;
 
  358            qCWarning(lcQpaWayland) << 
"Failed to load client buffer integration:" << targetKey;
 
  359            qCWarning(lcQpaWayland) << 
"Available client buffer integrations:" << 
keys;
 
  365    mClientBufferIntegrationInitialized = 
true;
 
  368void QWaylandIntegration::initializeServerBufferIntegration()
 
  370    mServerBufferIntegrationInitialized = 
true;
 
  375        targetKey = 
mDisplay->hardwareIntegration()->serverBufferIntegration();
 
  378        qWarning(
"Failed to determine what server buffer integration to use");
 
  383    qCDebug(lcQpaWayland) << 
"Available server buffer integrations:" << 
keys;
 
  385    if (
keys.contains(targetKey))
 
  389        qCDebug(lcQpaWayland) << 
"Initializing server buffer integration" << targetKey;
 
  392        qCWarning(lcQpaWayland) << 
"Failed to load server buffer integration: " <<  targetKey;
 
  393        qCWarning(lcQpaWayland) << 
"Available server buffer integrations:" << 
keys;
 
  397void QWaylandIntegration::initializeShellIntegration()
 
  399    mShellIntegrationInitialized = 
true;
 
  413    for (
const QString &preferredShell : 
std::as_const(preferredShells)) {
 
  416            qCDebug(lcQpaWayland, 
"Using the '%s' shell integration", 
qPrintable(preferredShell));
 
  422        qCWarning(lcQpaWayland) << 
"Loading shell integration failed.";
 
  423        qCWarning(lcQpaWayland) << 
"Attempted to load the following shells" << preferredShells;
 
  437void QWaylandIntegration::initializeInputDeviceIntegration()
 
  447    if (
keys.contains(targetKey)) {
 
  451        qWarning(
"Wayland inputdevice integration '%s' not found, using default", 
qPrintable(targetKey));
 
  467        qCWarning(lcQpaWayland) << 
"qtvirtualkeyboard currently is not supported at client-side," 
  468                                   " use QT_IM_MODULE=qtvirtualkeyboard at compositor-side.";
 
  470    if (!
mDisplay->isClientSideInputContextRequested()) {
 
  471        if (
mDisplay->textInputMethodManager() != 
nullptr)
 
  473#if QT_WAYLAND_TEXT_INPUT_V4_WIP 
  474        else if (
mDisplay->textInputManagerv1() != 
nullptr || 
mDisplay->textInputManagerv2() != 
nullptr || 
mDisplay->textInputManagerv4() != 
nullptr)
 
  476        else if (
mDisplay->textInputManagerv1() != 
nullptr || 
mDisplay->textInputManagerv2() != 
nullptr)
 
  487#if QT_CONFIG(xkbcommon) 
  490        waylandInput->setXkbContext(
mDisplay->xkbContext());
 
  502        qCWarning(lcQpaWayland) << 
"No shell integration named" << integrationName << 
"found";
 
  510    mServerBufferIntegrationInitialized = 
false;
 
  515    mClientBufferIntegrationInitialized = 
false;
 
  520    auto unixServices = 
mDisplay->windowManagerIntegration();
 
  521    unixServices->setApplicationBadge(
number);
 
static QAbstractEventDispatcher * eventDispatcher
 
static QAbstractEventDispatcher * eventDispatcher()
Returns a pointer to the event dispatcher object for the main thread.
 
static QPlatformTheme * createUnixTheme(const QString &name)
Creates a UNIX theme according to the detected desktop environment.
 
static QStringList themeNames()
 
The QKeyEvent class describes a key event.
 
static QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
\threadsafe
 
static QString requested()
 
static QPlatformInputContext * create()
 
The QPlatformInputContext class abstracts the input method dependent data and composing state.
 
virtual bool isValid() const
Returns input context validity.
 
The QPlatformOpenGLContext class provides an abstraction for native GL contexts.
 
T * data() const noexcept
Returns the value of the pointer referenced by this object.
 
void reset(T *other=nullptr) noexcept(noexcept(Cleanup::cleanup(std::declval< T * >())))
Deletes the existing object it is pointing to (if any), and sets its pointer to other.
 
\macro QT_RESTRICTED_CAST_FROM_ASCII
 
QStringList split(const QString &sep, Qt::SplitBehavior behavior=Qt::KeepEmptyParts, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Splits the string into substrings wherever sep occurs, and returns the list of those strings.
 
static QString fromLocal8Bit(QByteArrayView ba)
This is an overloaded member function, provided for convenience. It differs from the above function o...
 
bool isEmpty() const
Returns true if the string has no characters; otherwise returns false.
 
The QVulkanInstance class represents a native Vulkan instance, enabling Vulkan rendering onto a QSurf...
 
static void setPlatformSynthesizesMouse(bool v)
 
static void setXkbContext(QPlatformInputContext *inputContext, struct xkb_context *context)
 
static QStringList keys()
 
static QWaylandClientBufferIntegration * create(const QString &name, const QStringList &args)
 
QScopedPointer< QWaylandInputDeviceIntegration > mInputDeviceIntegration
 
QVariant styleHint(StyleHint hint) const override
 
virtual QWaylandServerBufferIntegration * serverBufferIntegration() const
 
QPlatformNativeInterface * nativeInterface() const override
 
QPlatformWindow * createPlatformWindow(QWindow *window) const override
Factory function for QPlatformWindow.
 
QPlatformFontDatabase * fontDatabase() const override
Accessor for the platform integration's fontdatabase.
 
bool hasCapability(QPlatformIntegration::Capability cap) const override
 
QScopedPointer< QWaylandClientBufferIntegration > mClientBufferIntegration
 
QPlatformTheme * createPlatformTheme(const QString &name) const override
 
virtual QWaylandCursor * createPlatformCursor(QWaylandDisplay *display) const
 
virtual QWaylandScreen * createPlatformScreen(QWaylandDisplay *waylandDisplay, int version, uint32_t id) const
 
QStringList themeNames() const override
 
static QWaylandIntegration * instance()
 
QScopedPointer< QWaylandDisplay > mDisplay
 
QPlatformServices * services() const override
 
QScopedPointer< QWaylandShellIntegration > mShellIntegration
 
virtual QWaylandShellIntegration * shellIntegration() const
 
QWaylandDisplay * display() const
 
void initialize() override
Performs initialization steps that depend on having an event dispatcher available.
 
QScopedPointer< QWaylandServerBufferIntegration > mServerBufferIntegration
 
virtual QWaylandClientBufferIntegration * clientBufferIntegration() const
 
QPlatformInputContext * inputContext() const override
Returns the platforms input context.
 
virtual QPlatformNativeInterface * createPlatformNativeInterface()
 
QList< int > possibleKeys(const QKeyEvent *event) const override
Should be used to obtain a list of possible shortcuts for the given key event.
 
QPlatformBackingStore * createPlatformBackingStore(QWindow *window) const override
Factory function for QPlatformBackingStore.
 
void reconfigureInputContext()
 
QScopedPointer< QPlatformInputContext > mInputContext
 
virtual QWaylandInputDevice * createInputDevice(QWaylandDisplay *display, int version, uint32_t id) const
 
Qt::KeyboardModifiers queryKeyboardModifiers() const override
 
QAbstractEventDispatcher * createEventDispatcher() const override
Factory function for the GUI event dispatcher.
 
~QWaylandIntegration() override
 
void setApplicationBadge(qint64 number) override
 
static QWaylandServerBufferIntegration * create(const QString &name, const QStringList &args)
 
static QStringList keys()
 
static QStringList keys()
 
static QWaylandShellIntegration * create(const QString &name, QWaylandDisplay *display, const QStringList &args=QStringList())
 
static bool fixedToplevelPositions
 
struct wl_display * display
 
Combined button and popup list for selecting options.
 
QPlatformFontDatabase QGenericUnixFontDatabase
 
#define qCWarning(category,...)
 
#define qCDebug(category,...)
 
static bool contains(const QJsonArray &haystack, unsigned needle)
 
#define Q_ASSERT_X(cond, x, msg)
 
#define qPrintable(string)
 
QLatin1StringView QLatin1String
 
#define QStringLiteral(str)
 
static QT_BEGIN_NAMESPACE QVariant hint(QPlatformIntegration::StyleHint h)
 
Q_CORE_EXPORT QByteArray qgetenv(const char *varName)
 
Q_CORE_EXPORT bool qEnvironmentVariableIsSet(const char *varName) noexcept
 
\inmodule QtCore \reentrant