File: texteditclickhandler.cpp

package info (click to toggle)
plasma-workspace 4%3A5.27.5-2%2Bdeb12u2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 102,040 kB
  • sloc: cpp: 121,800; xml: 3,238; python: 645; perl: 586; sh: 254; javascript: 113; ruby: 62; makefile: 15; ansic: 13
file content (58 lines) | stat: -rw-r--r-- 1,380 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/*
    SPDX-FileCopyrightText: 2021 Kai Uwe Broulik <kde@broulik.de>

    SPDX-License-Identifier: LGPL-2.1-or-later
*/

#include "texteditclickhandler.h"

#include <QGuiApplication>
#include <QMouseEvent>
#include <QQuickItem>
#include <QStyleHints>

TextEditClickHandler::TextEditClickHandler(QObject *parent)
    : QObject(parent)
{
}

TextEditClickHandler::~TextEditClickHandler() = default;

QQuickItem *TextEditClickHandler::target() const
{
    return m_target.data();
}

void TextEditClickHandler::setTarget(QQuickItem *target)
{
    if (m_target.data() == target) {
        return;
    }

    if (m_target) {
        m_target->removeEventFilter(this);
    }

    m_target = target;
    m_target->installEventFilter(this);
    Q_EMIT targetChanged(target);
}

bool TextEditClickHandler::eventFilter(QObject *watched, QEvent *event)
{
    Q_ASSERT(watched == m_target.data());

    if (event->type() == QEvent::MouseButtonPress) {
        const auto *e = static_cast<QMouseEvent *>(event);
        m_pressPos = e->pos();
    } else if (event->type() == QEvent::MouseButtonRelease) {
        const auto *e = static_cast<QMouseEvent *>(event);

        if (m_pressPos.x() > -1 && m_pressPos.y() > -1 //
            && (m_pressPos - e->pos()).manhattanLength() < qGuiApp->styleHints()->startDragDistance()) {
            Q_EMIT clicked();
        }
    }

    return false;
}