Plasma-framework

tooltipdialog.cpp
1/*
2 SPDX-FileCopyrightText: 2013 Sebastian Kügler <sebas@kde.org>
3
4 SPDX-License-Identifier: GPL-2.0-or-later
5*/
6
7#include "tooltipdialog.h"
8
9#include <QDebug>
10#include <QFile>
11#include <QPlatformSurfaceEvent>
12#include <QQmlEngine>
13#include <QQuickItem>
14
15#include <KWindowSystem>
16#include <plasmaquick/sharedqmlengine.h>
17
18#include "plasmashellwaylandintegration.h"
19
20ToolTipDialog::ToolTipDialog()
21 : PopupPlasmaWindow(QStringLiteral("widgets/tooltip"))
22 , m_qmlObject(nullptr)
23 , m_hideTimeout(-1)
24 , m_interactive(false)
25 , m_owner(nullptr)
26{
30 } else {
32 PlasmaShellWaylandIntegration::get(this)->setRole(QtWayland::org_kde_plasma_surface::role_tooltip);
33 }
34 setFlags(flags);
35
36 m_showTimer = new QTimer(this);
37 m_showTimer->setSingleShot(true);
38 connect(m_showTimer, &QTimer::timeout, this, [this]() {
39 setVisible(false);
40 });
41
42 connect(this, &PlasmaQuick::PlasmaWindow::mainItemChanged, this, [this]() {
43 if (m_lastMainItem) {
44 disconnect(m_lastMainItem, &QQuickItem::implicitWidthChanged, this, &ToolTipDialog::updateSize);
45 disconnect(m_lastMainItem, &QQuickItem::implicitHeightChanged, this, &ToolTipDialog::updateSize);
46 }
47 m_lastMainItem = mainItem();
48
49 if (!mainItem()) {
50 return;
51 }
52 connect(mainItem(), &QQuickItem::implicitWidthChanged, this, &ToolTipDialog::updateSize);
53 connect(mainItem(), &QQuickItem::implicitHeightChanged, this, &ToolTipDialog::updateSize);
54 updateSize();
55 });
56}
57
58ToolTipDialog::~ToolTipDialog()
59{
60}
61
62void ToolTipDialog::updateSize()
63{
64 QSize popupSize = QSize(mainItem()->implicitWidth(), mainItem()->implicitHeight());
65 popupSize = popupSize.grownBy(padding());
66 if (!popupSize.isEmpty()) {
67 resize(popupSize);
68 }
69}
70
71QQuickItem *ToolTipDialog::loadDefaultItem()
72{
73 if (!m_qmlObject) {
74 m_qmlObject = new PlasmaQuick::SharedQmlEngine(this);
75 }
76
77 if (!m_qmlObject->rootObject()) {
78 m_qmlObject->setSource(QUrl(QStringLiteral("qrc:/plasma/DefaultToolTip.qml")));
79 }
80
81 return qobject_cast<QQuickItem *>(m_qmlObject->rootObject());
82}
83
84void ToolTipDialog::showEvent(QShowEvent *event)
85{
86 keepalive();
87
89}
90
92{
93 m_showTimer->stop();
94
96}
97
98bool ToolTipDialog::event(QEvent *e)
99{
100 if (e->type() == QEvent::Enter) {
101 if (m_interactive) {
102 m_showTimer->stop();
103 }
104 } else if (e->type() == QEvent::Leave) {
105 dismiss();
106 }
107
108 return PopupPlasmaWindow::event(e);
109}
110
111QObject *ToolTipDialog::owner() const
112{
113 return m_owner;
114}
115
116void ToolTipDialog::setOwner(QObject *owner)
117{
118 m_owner = owner;
119}
120
121void ToolTipDialog::dismiss()
122{
123 m_showTimer->start(200);
124}
125
126void ToolTipDialog::keepalive()
127{
128 if (m_hideTimeout > 0) {
129 m_showTimer->start(m_hideTimeout);
130 } else {
131 m_showTimer->stop();
132 }
133}
134
135bool ToolTipDialog::interactive()
136{
137 return m_interactive;
138}
139
140void ToolTipDialog::setInteractive(bool interactive)
141{
142 m_interactive = interactive;
143}
144
145void ToolTipDialog::valueChanged(const QVariant &value)
146{
147 setPosition(value.toPoint());
148}
149
150void ToolTipDialog::setHideTimeout(int timeout)
151{
152 m_hideTimeout = timeout;
153}
154
155int ToolTipDialog::hideTimeout() const
156{
157 return m_hideTimeout;
158}
159
160#include "moc_tooltipdialog.cpp"
static bool isPlatformX11()
An object that instantiates an entire QML context, with its own declarative engine.
static PlasmaShellWaylandIntegration * get(QWindow *window)
Returns the relevant PlasmaWaylandShellIntegration instance for this window creating one if needed.
KCRASH_EXPORT void setFlags(KCrash::CrashFlags flags)
Type type() const const
void implicitHeightChanged()
void implicitWidthChanged()
virtual void hideEvent(QHideEvent *) override
QSize grownBy(QMargins margins) const const
bool isEmpty() const const
typedef WindowFlags
QFuture< ArgsType< Signal > > connect(Sender *sender, Signal signal)
void timeout()
QPoint toPoint() const const
virtual void hideEvent(QHideEvent *ev)
void resize(const QSize &newSize)
void setPosition(const QPoint &pt)
virtual void showEvent(QShowEvent *ev)
This file is part of the KDE documentation.
Documentation copyright © 1996-2024 The KDE developers.
Generated on Fri May 17 2024 11:54:11 by doxygen 1.10.0 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.