8#include "tabletmodewatcher.h"
9#include <QCoreApplication>
11#if defined(KIRIGAMI_ENABLE_DBUS)
12#include "settings_interface.h"
13#include <QDBusConnection>
25class TabletModeWatcherSingleton
28 TabletModeWatcher self;
31Q_GLOBAL_STATIC(TabletModeWatcherSingleton, privateTabletModeWatcherSelf)
33class TabletModeWatcherPrivate
35 static constexpr auto PORTAL_GROUP =
"org.kde.TabletMode"_L1;
36 static constexpr auto KEY_AVAILABLE =
"available"_L1;
37 static constexpr auto KEY_ENABLED =
"enabled"_L1;
40 TabletModeWatcherPrivate(TabletModeWatcher *watcher)
46#if !defined(KIRIGAMI_ENABLE_DBUS) && (defined(Q_OS_ANDROID) || defined(Q_OS_IOS))
47 isTabletModeAvailable =
true;
49#elif defined(KIRIGAMI_ENABLE_DBUS)
52 if (qEnvironmentVariableIsSet(
"QT_QUICK_CONTROLS_MOBILE") || qEnvironmentVariableIsSet(
"KDE_KIRIGAMI_TABLET_MODE")) {
60 isTabletModeAvailable = isTabletMode;
61 }
else if (qEnvironmentVariableIsSet(
"QT_NO_XDG_DESKTOP_PORTAL")) {
64 qDBusRegisterMetaType<VariantMapMap>();
65 auto portal =
new OrgFreedesktopPortalSettingsInterface(u
"org.freedesktop.portal.Desktop"_s,
66 u
"/org/freedesktop/portal/desktop"_s,
71 &OrgFreedesktopPortalSettingsInterface::SettingChanged,
74 if (group != PORTAL_GROUP) {
77 if (key == KEY_AVAILABLE) {
78 Q_EMIT q->tabletModeAvailableChanged(value.
variant().
toBool());
79 }
else if (key == KEY_ENABLED) {
84 const auto reply = portal->ReadAll({PORTAL_GROUP});
87 watcher->deleteLater();
90 Q_EMIT q->tabletModeAvailableChanged(properties[KEY_AVAILABLE].toBool());
91 setIsTablet(properties[KEY_ENABLED].toBool());
97 ~TabletModeWatcherPrivate(){};
98 void setIsTablet(
bool tablet);
100 TabletModeWatcher *q;
102 bool isTabletModeAvailable =
false;
103 bool isTabletMode =
false;
106void TabletModeWatcherPrivate::setIsTablet(
bool tablet)
108 if (isTabletMode == tablet) {
112 isTabletMode = tablet;
113 TabletModeChangedEvent
event{tablet};
114 Q_EMIT q->tabletModeChanged(tablet);
115 for (
auto *w : watchers) {
120TabletModeWatcher::TabletModeWatcher(
QObject *parent)
122 , d(new TabletModeWatcherPrivate(this))
126TabletModeWatcher::~TabletModeWatcher()
131TabletModeWatcher *TabletModeWatcher::self()
133 return &privateTabletModeWatcherSelf()->self;
136bool TabletModeWatcher::isTabletModeAvailable()
const
138 return d->isTabletModeAvailable;
141bool TabletModeWatcher::isTabletMode()
const
143 return d->isTabletMode;
146void TabletModeWatcher::addWatcher(
QObject *watcher)
148 d->watchers.append(watcher);
151void TabletModeWatcher::removeWatcher(
QObject *watcher)
153 d->watchers.removeAll(watcher);
159#include "moc_tabletmodewatcher.cpp"
bool sendEvent(QObject *receiver, QEvent *event)
QDBusConnection sessionBus()
void finished(QDBusPendingCallWatcher *self)
typename Select< 0 >::Type value() const const
QVariant variant() const const
int registerEventType(int hint)
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
QString fromLatin1(QByteArrayView str)
bool toBool() const const