#ifndef SLOPPYFOCUS_H #define SLOPPYFOCUS_H #include #include #include #include #include #include #include #include class SloppyFocusPlugin : public KTextEditor::Plugin { Q_OBJECT public: explicit SloppyFocusPlugin(QObject *parent, const QVariantList &args); ~SloppyFocusPlugin() override; QObject *createView(KTextEditor::MainWindow *mainWindow) override; int configPages() const override; KTextEditor::ConfigPage *configPage(int number, QWidget *parent) override; // Configuration int focusDelay() const { return m_focusDelay; } int minimumStayTime() const { return m_minimumStayTime; } bool raiseOnFocus() const { return m_raiseOnFocus; } bool ignoreDialogs() const { return m_ignoreDialogs; } bool ignoreFloatingWidgets() const { return m_ignoreFloatingWidgets; } void setFocusDelay(int ms); void setMinimumStayTime(int ms); void setRaiseOnFocus(bool raise); void setIgnoreDialogs(bool ignore); void setIgnoreFloatingWidgets(bool ignore); void readConfig(); void writeConfig(); Q_SIGNALS: void configChanged(); private: int m_focusDelay = 150; int m_minimumStayTime = 50; bool m_raiseOnFocus = false; bool m_ignoreDialogs = true; bool m_ignoreFloatingWidgets = true; }; class SloppyFocusView : public QObject { Q_OBJECT public: explicit SloppyFocusView(SloppyFocusPlugin *plugin, KTextEditor::MainWindow *mainWindow); ~SloppyFocusView() override; protected: bool eventFilter(QObject *obj, QEvent *event) override; private Q_SLOTS: void activatePendingPane(); void onConfigChanged(); private: QWidget *paneForWidget(QWidget *widget) const; bool shouldIgnoreFocus() const; SloppyFocusPlugin *m_plugin; KTextEditor::MainWindow *m_mainWindow; QTimer m_focusTimer; QElapsedTimer m_lastFocusChange; QPointer m_pendingPane; QPointer m_currentPane; }; class SloppyFocusConfigPage : public KTextEditor::ConfigPage { Q_OBJECT public: explicit SloppyFocusConfigPage(SloppyFocusPlugin *plugin, QWidget *parent); ~SloppyFocusConfigPage() override; QString name() const override; QString fullName() const override; QIcon icon() const override; void apply() override; void defaults() override; void reset() override; private: SloppyFocusPlugin *m_plugin; class QSpinBox *m_focusDelaySpin; class QSpinBox *m_minimumStaySpin; class QCheckBox *m_raiseOnFocusCheck; class QCheckBox *m_ignoreDialogsCheck; class QCheckBox *m_ignoreFloatingCheck; }; #endif // SLOPPYFOCUS_H