File indexing completed on 2024-04-28 16:54:27

0001 /*
0002     SPDX-FileCopyrightText: 2014 Marco Martin <mart@kde.org>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include <KConfigGroup>
0010 #include <KConfigWatcher>
0011 #include <KPluginMetaData>
0012 #include <KSharedConfig>
0013 #include <QPointer>
0014 #include <QQuickView>
0015 
0016 #include <KRunner/RunnerManager>
0017 #include <KWayland/Client/plasmashell.h>
0018 
0019 #include <PlasmaQuick/Dialog>
0020 
0021 namespace KDeclarative
0022 {
0023 class QmlObject;
0024 }
0025 
0026 namespace KWayland
0027 {
0028 namespace Client
0029 {
0030 class PlasmaShell;
0031 class PlasmaShellSurface;
0032 }
0033 }
0034 
0035 class ViewPrivate;
0036 
0037 class View : public PlasmaQuick::Dialog
0038 {
0039     Q_OBJECT
0040     Q_CLASSINFO("D-Bus Interface", "org.kde.krunner.App")
0041 
0042     Q_PROPERTY(bool pinned READ pinned WRITE setPinned NOTIFY pinnedChanged)
0043     Q_PROPERTY(bool helpEnabled READ helpEnabled NOTIFY helpEnabledChanged)
0044 
0045 public:
0046     explicit View(QWindow *parent = nullptr);
0047     ~View() override;
0048 
0049     void positionOnScreen();
0050 
0051     bool freeFloating() const;
0052     void setFreeFloating(bool floating);
0053 
0054     bool pinned() const;
0055     void setPinned(bool pinned);
0056 
0057     bool helpEnabled()
0058     {
0059         const static auto metaData = KPluginMetaData(QStringLiteral("kf5/krunner/helprunner"));
0060         const KConfigGroup grp = KSharedConfig::openConfig()->group("Plugins");
0061         return metaData.isEnabled(grp);
0062     }
0063 
0064 Q_SIGNALS:
0065     void pinnedChanged();
0066     void helpEnabledChanged();
0067 
0068 protected:
0069     bool event(QEvent *event) override;
0070     void resizeEvent(QResizeEvent *event) override;
0071     void showEvent(QShowEvent *event) override;
0072 
0073 public Q_SLOTS:
0074     void setVisible(bool visible);
0075     void display();
0076     void toggleDisplay();
0077     void displaySingleRunner(const QString &runnerName);
0078     void displayWithClipboardContents();
0079     void query(const QString &term);
0080     void querySingleRunner(const QString &runnerName, const QString &term);
0081     void switchUser();
0082     void displayConfiguration();
0083 
0084 protected Q_SLOTS:
0085     void screenGeometryChanged();
0086     void resetScreenPos();
0087     void loadConfig();
0088     void objectIncubated();
0089     void slotFocusWindowChanged();
0090 
0091 private:
0092     void writeHistory();
0093     QPoint m_customPos;
0094     KDeclarative::QmlObject *m_qmlObj;
0095     KConfigGroup m_config;
0096     KConfigGroup m_stateData;
0097     KConfigWatcher::Ptr m_configWatcher;
0098     qreal m_offset;
0099     bool m_floating : 1;
0100     bool m_requestedVisible = false;
0101     bool m_pinned = false;
0102     bool m_requestedClipboardSelection = false;
0103     QStringList m_history;
0104     Plasma::RunnerManager *m_manager = nullptr;
0105 };