106 lines
2.7 KiB
C++
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 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<QWidget> m_pendingPane;
|
|
QPointer<QWidget> 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
|