1 | /* |
2 | This file is part of the KDE libraries |
3 | SPDX-FileCopyrightText: 1998 Kurt Granroth <granroth@kde.org> |
4 | SPDX-FileCopyrightText: 2000 Carsten Pfeiffer <pfeiffer@kde.org> |
5 | |
6 | SPDX-License-Identifier: LGPL-2.0-only |
7 | */ |
8 | |
9 | #ifndef KCURSOR_H |
10 | #define KCURSOR_H |
11 | |
12 | #include <kwidgetsaddons_export.h> |
13 | |
14 | class QEvent; |
15 | class QObject; |
16 | class QWidget; |
17 | |
18 | /*! |
19 | * \class KCursor |
20 | * \inmodule KWidgetsAddons |
21 | * |
22 | * \brief The KCursor class provides a set of static |
23 | * convenience methods for auto-hiding cursors on widgets. |
24 | */ |
25 | class KWIDGETSADDONS_EXPORT KCursor |
26 | { |
27 | public: |
28 | /*! |
29 | * Sets auto-hiding the cursor for widget \a w. Enabling it will result in |
30 | * the cursor being hidden when |
31 | * \list |
32 | * \li a key-event happens |
33 | * \li there are no key-events for a configured time-frame (see |
34 | * setHideCursorDelay()) |
35 | * \endlist |
36 | * |
37 | * The cursor will be shown again when the focus is lost or a mouse-event |
38 | * happens. |
39 | * |
40 | * Side effect: when enabling auto-hide, mouseTracking is enabled for the |
41 | * specified widget, because it's needed to get mouse-move-events. So |
42 | * don't disable mouseTracking for a widget while using auto-hide for it. |
43 | * |
44 | * When disabling auto-hide, mouseTracking will be disabled, so if you need |
45 | * mouseTracking after disabling auto-hide, you have to re-enable |
46 | * mouseTracking. |
47 | * |
48 | * If you want to use auto-hiding for widgets that don't take focus, e.g. |
49 | * a QCanvasView, then you have to pass all key-events that should trigger |
50 | * auto-hiding to autoHideEventFilter(). |
51 | */ |
52 | static void setAutoHideCursor(QWidget *w, bool enable, bool customEventFilter = false); |
53 | |
54 | /*! |
55 | * Sets the delay time in milliseconds for auto-hiding. When no keyboard |
56 | * events arrive for that time-frame, the cursor will be hidden. |
57 | * |
58 | * Default is 5000, i.e. 5 seconds. |
59 | */ |
60 | static void setHideCursorDelay(int ms); |
61 | |
62 | /*! |
63 | * Returns the current auto-hide delay time. |
64 | * |
65 | * Default is 5000, i.e. 5 seconds. |
66 | */ |
67 | static int hideCursorDelay(); |
68 | |
69 | /*! |
70 | * KCursor has to install an eventFilter over the widget you want to |
71 | * auto-hide. If you have an own eventFilter() on that widget and stop |
72 | * some events by returning true, you might break auto-hiding, because |
73 | * KCursor doesn't get those events. |
74 | * |
75 | * In this case, you need to call setAutoHideCursor( widget, true, true ); |
76 | * to tell KCursor not to install an eventFilter. Then you call this method |
77 | * from the beginning of your eventFilter, for example: |
78 | * \code |
79 | * edit = new KEdit( this, "some edit widget" ); |
80 | * edit->installEventFilter( this ); |
81 | * KCursor::setAutoHideCursor( edit, true, true ); |
82 | * |
83 | * [...] |
84 | * |
85 | * bool YourClass::eventFilter( QObject *o, QEvent *e ) |
86 | * { |
87 | * if ( o == edit ) // only that widget where you enabled auto-hide! |
88 | * KCursor::autoHideEventFilter( o, e ); |
89 | * |
90 | * // now you can do your own event-processing |
91 | * [...] |
92 | * } |
93 | * \endcode |
94 | * |
95 | * Note that you must not call KCursor::autoHideEventFilter() when you |
96 | * didn't enable or after disabling auto-hiding. |
97 | */ |
98 | static void autoHideEventFilter(QObject *, QEvent *); |
99 | |
100 | private: |
101 | KCursor() = delete; |
102 | }; |
103 | |
104 | #endif // _KCURSOR_H |
105 | |