Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
qohosplatformdrag.cpp
Go to the documentation of this file.
1
// Copyright (C) 2025 The Qt Company Ltd.
2
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4
#
include
<
qohosplatformdrag
.
h
>
5
#
include
<
QtCore
/
private
/
qohoslogger_p
.
h
>
6
#
include
<
QtCore
/
qobject
.
h
>
7
#
include
<
QtGui
/
private
/
qguiapplication_p
.
h
>
8
#
include
<
QtGui
/
qdrag
.
h
>
9
#
include
<
QtGui
/
qwindow
.
h
>
10
#
include
<
qohosinputmethodeventhandler
.
h
>
11
#
include
<
qohosjsmain
.
h
>
12
#
include
<
qohosplatformwindow
.
h
>
13
#
include
<
qohosutils
.
h
>
14
#
include
<
render
/
qohosview
.
h
>
15
16
QT_BEGIN_NAMESPACE
17
18
namespace
{
19
20
class
DragEventFilterObject
:
public
QObject
21
{
22
public
:
23
DragEventFilterObject
();
24
25
protected
:
26
bool
eventFilter
(QObject *watched, QEvent *event)
override
;
27
};
28
29
class
QOhosPlatformDragImpl
:
public
QOhosPlatformDrag
30
{
31
public
:
32
QOhosPlatformDragImpl
();
33
~
QOhosPlatformDragImpl
()
override
;
34
35
void
handlePreDrop
()
override
;
36
37
void
updateDropAction
(Qt::DropAction dropAction)
override
;
38
39
protected
:
40
Qt
::
DropAction
drag
(QDrag *drag)
override
;
41
42
private
:
43
void
startDrag();
44
45
Qt::DropAction m_dropAction =
Qt
::
IgnoreAction
;
46
std
::shared_ptr<
void
> m_activeEventFilterHandle;
47
};
48
49
std
::shared_ptr<
void
>
installDragEventFilter
()
50
{
51
auto
eventFilterObject =
std
::make_shared<
DragEventFilterObject
>();
52
53
qApp->installEventFilter(eventFilterObject.get());
54
55
return
QtOhos::makeDestroyNotifier(
56
[eventFilterObject]() {
57
qApp->removeEventFilter(eventFilterObject.get());
58
});
59
}
60
61
QOhosView
*
findInitiatorViewForDragOrNull
()
62
{
63
QWindow *currentMouseWindow = QGuiApplicationPrivate::currentMouseWindow;
64
auto
*touchedWindow =
QOhosPlatformIntegration
::
instance
(
)
->
inputMethodEventHandler
(
)
->lastTouchedWindowOrNull();
65
auto
*qWindow = touchedWindow !=
nullptr
? touchedWindow : currentMouseWindow;
66
if
(qWindow !=
nullptr
) {
67
auto
*platformWindow = QOhosPlatformWindow::fromQWindowOrNull(qWindow);
68
return
platformWindow !=
nullptr
69
? platformWindow->ownedViewOrNull()
70
:
nullptr
;
71
}
else
{
72
return
nullptr
;
73
}
74
}
75
76
DragEventFilterObject
::
DragEventFilterObject
() =
default
;
77
78
bool
DragEventFilterObject
::
eventFilter
(QObject *, QEvent *event)
79
{
80
switch
(event->type()) {
81
case
QEvent::ShortcutOverride:
82
case
QEvent::KeyPress:
83
case
QEvent::KeyRelease:
84
case
QEvent::MouseMove:
85
case
QEvent::MouseButtonRelease:
86
case
QEvent::MouseButtonDblClick:
87
case
QEvent::Wheel:
88
return
true
;
89
default
:
90
return
false
;
91
}
92
}
93
94
QOhosPlatformDragImpl
::
QOhosPlatformDragImpl
() =
default
;
95
96
QOhosPlatformDragImpl
::~
QOhosPlatformDragImpl
() =
default
;
97
98
void
QOhosPlatformDragImpl
::
handlePreDrop
()
99
{
100
m_activeEventFilterHandle.reset();
101
}
102
103
void
QOhosPlatformDragImpl
::
updateDropAction
(Qt::DropAction dropAction)
104
{
105
m_dropAction = dropAction;
106
}
107
108
Qt
::
DropAction
QOhosPlatformDragImpl
::
drag
(QDrag *drag)
109
{
110
auto
*initiatorView =
findInitiatorViewForDragOrNull
(
)
;
111
if
(initiatorView ==
nullptr
|| drag ==
nullptr
|| drag->mimeData() ==
nullptr
)
112
return
Qt::IgnoreAction;
113
114
m_activeEventFilterHandle = installDragEventFilter();
115
116
auto
eventLoop = std::make_shared<QEventLoop>();
117
118
m_dropAction = drag->defaultAction();
119
120
auto
dragPixmap = !drag->pixmap().isNull() ? drag->pixmap() : QPlatformDrag::defaultPixmap();
121
initiatorView->startDrag(
122
{dragPixmap.toImage()}, drag->hotSpot(),
123
*drag->mimeData(),
124
[
this
, eventLoop](Qt::DropAction dropAction) {
125
m_dropAction = dropAction;
126
eventLoop->quit();
127
});
128
129
eventLoop->exec();
130
131
m_activeEventFilterHandle.reset();
132
133
return
m_dropAction;
134
}
135
136
}
137
138
QOhosPlatformDrag::QOhosPlatformDrag() =
default
;
139
140
QOhosPlatformDrag::~QOhosPlatformDrag() =
default
;
141
142
std
::
unique_ptr
<
QOhosPlatformDrag
>
makeQOhosPlatformDrag
()
143
{
144
return
std
::make_unique<
QOhosPlatformDragImpl
>();
145
}
146
147
QT_END_NAMESPACE
QOhosPlatformIntegration
Definition
qohosplatformintegration.h:44
QOhosPlatformIntegration::instance
static QOhosPlatformIntegration * instance()
Definition
qohosplatformintegration.cpp:126
QOhosPlatformIntegration::inputMethodEventHandler
QOhosInputMethodEventHandler * inputMethodEventHandler() const
Definition
qohosplatformintegration.cpp:185
QOhosView
Definition
qohosview.h:45
QT_BEGIN_NAMESPACE::DragEventFilterObject
Definition
qohosplatformdrag.cpp:21
QT_BEGIN_NAMESPACE::DragEventFilterObject::eventFilter
bool eventFilter(QObject *watched, QEvent *event) override
Filters events if this object has been installed as an event filter for the watched object.
Definition
qohosplatformdrag.cpp:78
QT_BEGIN_NAMESPACE::DragEventFilterObject::DragEventFilterObject
DragEventFilterObject()
QT_BEGIN_NAMESPACE::QOhosPlatformDragImpl
Definition
qohosplatformdrag.cpp:30
QT_BEGIN_NAMESPACE::QOhosPlatformDragImpl::drag
Qt::DropAction drag(QDrag *drag) override
Definition
qohosplatformdrag.cpp:108
QT_BEGIN_NAMESPACE::QOhosPlatformDragImpl::~QOhosPlatformDragImpl
~QOhosPlatformDragImpl() override
QT_BEGIN_NAMESPACE::QOhosPlatformDragImpl::updateDropAction
void updateDropAction(Qt::DropAction dropAction) override
Definition
qohosplatformdrag.cpp:103
QT_BEGIN_NAMESPACE::QOhosPlatformDragImpl::handlePreDrop
void handlePreDrop() override
Definition
qohosplatformdrag.cpp:98
QT_BEGIN_NAMESPACE::QOhosPlatformDragImpl::QOhosPlatformDragImpl
QOhosPlatformDragImpl()
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qsequentialanimationgroup.cpp:47
QT_BEGIN_NAMESPACE::installDragEventFilter
std::shared_ptr< void > installDragEventFilter()
Definition
qohosplatformdrag.cpp:49
QT_BEGIN_NAMESPACE::findInitiatorViewForDragOrNull
QOhosView * findInitiatorViewForDragOrNull()
Definition
qohosplatformdrag.cpp:61
std
[33]
Definition
src_corelib_tools_qhash.cpp:421
makeQOhosPlatformDrag
std::unique_ptr< QOhosPlatformDrag > makeQOhosPlatformDrag()
Definition
qohosplatformdrag.cpp:142
qtbase
src
plugins
platforms
ohos
qohosplatformdrag.cpp
Generated on
for Qt by
1.18.0