kate-sloppyfocus/sloppyfocus.h

106 lines
2.7 KiB
C++

#ifndef SLOPPYFOCUS_H
#define SLOPPYFOCUS_H
#include <KTextEditor/Plugin>
#include <KTextEditor/MainWindow>
#include <KTextEditor/ConfigPage>
#include <KTextEditor/View>
#include <QObject>
#include <QTimer>
#include <QPointer>
#include <QElapsedTimer>
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 activatePendingView();
void onConfigChanged();
private:
KTextEditor::View *viewForWidget(QWidget *widget) const;
bool shouldIgnoreFocus() const;
SloppyFocusPlugin *m_plugin;
KTextEditor::MainWindow *m_mainWindow;
QTimer m_focusTimer;
QElapsedTimer m_lastFocusChange;
QPointer<KTextEditor::View> m_pendingView;
QPointer<KTextEditor::View> m_currentView;
};
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