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

source code of kwidgetsaddons/src/kcursor.h