1 /*
2     This file is part of the KDE libraries
3     SPDX-FileCopyrightText: 2000 Carsten Pfeiffer <pfeiffer@kde.org>
4 
5     SPDX-License-Identifier: LGPL-2.0-or-later
6 */
7 
8 #ifndef KCURSOR_P_H
9 #define KCURSOR_P_H
10 
11 #include <QCursor>
12 #include <QHash>
13 #include <QObject>
14 #include <QTimer>
15 
16 class QWidget;
17 
18 /**
19  * @internal
20  * I don't want the eventFilter to be in KCursor, so we have another class
21  * for that stuff
22  * @author John Firebaugh <jfirebaugh@kde.org>
23  * @author Carsten Pfeiffer <pfeiffer@kde.org>
24  */
25 class KCursorPrivateAutoHideEventFilter : public QObject
26 {
27     Q_OBJECT
28 
29 public:
30     explicit KCursorPrivateAutoHideEventFilter(QWidget *widget);
31     ~KCursorPrivateAutoHideEventFilter() override;
32 
33     bool eventFilter(QObject *o, QEvent *e) override;
34 
35     void resetWidget();
36 
37 private Q_SLOTS:
38     void hideCursor();
39     void unhideCursor();
40 
41 private:
42     QWidget *mouseWidget() const;
43 
44     QTimer m_autoHideTimer;
45     QWidget *m_widget;
46     bool m_wasMouseTracking;
47     bool m_isCursorHidden;
48     bool m_isOwnCursor;
49     QCursor m_oldCursor;
50 };
51 
52 /**
53  * @internal
54  * @author Carsten Pfeiffer <pfeiffer@kde.org>
55  * @author John Firebaugh <jfirebaugh@kde.org>
56  */
57 class KCursorPrivate : public QObject
58 {
59     friend class KCursor; // to shut up the compiler
60     Q_OBJECT
61 
62 public:
63     static KCursorPrivate *self();
64 
65     void setAutoHideCursor(QWidget *w, bool enable, bool customEventFilter);
66     bool eventFilter(QObject *o, QEvent *e) override;
67 
68     int hideCursorDelay;
69 
70 private Q_SLOTS:
71     void slotViewportDestroyed(QObject *);
72     void slotWidgetDestroyed(QObject *);
73 
74 private:
75     KCursorPrivate();
76     ~KCursorPrivate() override;
77 
78     bool enabled;
79     static KCursorPrivate *s_self;
80 
81     QHash<QObject *, KCursorPrivateAutoHideEventFilter *> m_eventFilters;
82 };
83 
84 #endif // KCURSOR_PRIVATE_H
85