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
qohosplatformclipboard.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
"qohosplatformclipboard.h"
5
#
include
"qohosjsmain.h"
6
#
include
"qohosplatformintegration.h"
7
#
include
<
QtCore
/
qmetaobject
.
h
>
8
#
include
<
QtCore
/
qobject
.
h
>
9
#
include
<
QtCore
/
private
/
qohoscommon_p
.
h
>
10
#
include
<
QtCore
/
private
/
qohoslogger_p
.
h
>
11
#
include
<
qohosclipboardobject
.
h
>
12
#
include
<
functional
>
13
14
QT_BEGIN_NAMESPACE
15
16
namespace
{
17
18
std
::shared_ptr<
QOhosClipboardObject
>
makeClipboardObjectInstance
(
19
std
::function<
void
(
std
::optional<
QOhosClipboardObject
::
PasteboardDataSource
>)> &&pasteboardUpdatesNotifier)
20
{
21
return
QOhosClipboardObject::makeInstance(
std
::move(pasteboardUpdatesNotifier));
22
}
23
24
}
25
26
std
::optional<
bool
> &
QOhosPlatformClipboard
::shareInAppOnlyFlagRef()
27
{
28
static
std
::optional<
bool
> shareInAppOnly;
29
return
shareInAppOnly;
30
}
31
32
QOhosPlatformClipboard
::
QOhosPlatformClipboard
()
33
{
34
m_clipboardObject = makeClipboardObjectInstance(
35
[
this
](std::optional<QOhosClipboardObject::PasteboardDataSource> dataSource) {
36
if
(dataSource == QOhosClipboardObject::PasteboardDataSource::OtherProcess
37
|| (!dataSource.has_value() && m_mimeData)) {
38
m_mimeData =
nullptr
;
39
m_mimeDataIsOurs =
false
;
40
}
41
emitChanged(QClipboard::Clipboard);
42
});
43
}
44
45
QOhosPlatformClipboard
::~
QOhosPlatformClipboard
() =
default
;
46
47
QMimeData *
QOhosPlatformClipboard
::
mimeData
(QClipboard::Mode mode)
48
{
49
Q_UNUSED(mode);
50
Q_ASSERT(supportsMode(mode));
51
52
// FIXME:
53
// as per client's request - try to fetch the clipboard content if the previous attempt resulted
54
// in an empty QMimeData object (in this case: due to clipboard content being inaccessible for
55
// an app with all windows inactive).
56
if
(!m_mimeDataIsOurs && (m_mimeData ==
nullptr
|| m_mimeData->formats().isEmpty()))
57
m_mimeData = m_clipboardObject->getPasteboardDataWithLazyFetch().lazyFetchingData;
58
59
return
m_mimeData.get();
60
}
61
62
void
QOhosPlatformClipboard
::
setMimeData
(QMimeData *mimeData, QClipboard::Mode mode)
63
{
64
Q_ASSERT(supportsMode(mode));
65
66
if
(supportsMode(mode)) {
67
bool
callerReusedMimeDataPointer = mimeData == m_mimeData.get();
68
if
(!callerReusedMimeDataPointer)
69
m_mimeData = std::shared_ptr<QMimeData>(mimeData);
70
m_mimeDataIsOurs =
true
;
71
if
(mimeData !=
nullptr
) {
72
m_clipboardObject->setMimeDataSync(m_mimeData, shareInAppOnlyFlagRef());
73
// HACK: reset share option state for next to come UdmfData to cross-app + cross-device.
74
shareInAppOnlyFlagRef() = {};
75
}
else
{
76
m_clipboardObject->setMimeDataSync(std::make_shared<QMimeData>(), {});
77
}
78
}
79
}
80
81
void
QOhosPlatformClipboard
::
setInAppOnlyPasteboardShareOption
(
bool
shareInAppOnly)
82
{
83
shareInAppOnlyFlagRef() = shareInAppOnly;
84
}
85
86
bool
QOhosPlatformClipboard
::
supportsMode
(QClipboard::Mode mode)
const
87
{
88
return
mode == QClipboard::Clipboard;
89
}
90
91
bool
QOhosPlatformClipboard
::
ownsMode
(QClipboard::Mode mode)
const
92
{
93
Q_UNUSED(mode);
94
return
false
;
95
}
96
97
std
::shared_ptr<QMimeData>
QOhosPlatformClipboard
::
getPasteboardDataWithLazyFetchOrLocalIfOwner
()
const
98
{
99
auto
pasteboardData = m_clipboardObject->getPasteboardDataWithLazyFetch();
100
101
if
(!pasteboardData.dataSource.has_value())
102
return
std
::make_shared<QMimeData>();
103
104
return
pasteboardData.dataSource ==
QOhosClipboardObject
::
PasteboardDataSource
::
OtherProcess
105
? std::move(pasteboardData.lazyFetchingData)
106
: m_mimeData
107
? m_mimeData
108
: std::make_shared<QMimeData>();
109
}
110
111
QT_END_NAMESPACE
QOhosClipboardObject
Definition
qohosclipboardobject.h:18
QOhosClipboardObject::PasteboardDataSource
PasteboardDataSource
Definition
qohosclipboardobject.h:21
QOhosClipboardObject::PasteboardDataSource::OtherProcess
@ OtherProcess
Definition
qohosclipboardobject.h:23
QOhosPlatformClipboard
Definition
qohosplatformclipboard.h:19
QOhosPlatformClipboard::QOhosPlatformClipboard
QOhosPlatformClipboard()
Definition
qohosplatformclipboard.cpp:32
QOhosPlatformClipboard::ownsMode
bool ownsMode(QClipboard::Mode mode) const override
Definition
qohosplatformclipboard.cpp:91
QOhosPlatformClipboard::~QOhosPlatformClipboard
virtual ~QOhosPlatformClipboard()
QOhosPlatformClipboard::getPasteboardDataWithLazyFetchOrLocalIfOwner
std::shared_ptr< QMimeData > getPasteboardDataWithLazyFetchOrLocalIfOwner() const
Definition
qohosplatformclipboard.cpp:97
QOhosPlatformClipboard::mimeData
QMimeData * mimeData(QClipboard::Mode mode=QClipboard::Clipboard) override
Definition
qohosplatformclipboard.cpp:47
QOhosPlatformClipboard::setInAppOnlyPasteboardShareOption
static void setInAppOnlyPasteboardShareOption(bool shareInAppOnly)
Definition
qohosplatformclipboard.cpp:81
QOhosPlatformClipboard::setMimeData
void setMimeData(QMimeData *mimeData, QClipboard::Mode mode=QClipboard::Clipboard) override
Definition
qohosplatformclipboard.cpp:62
QOhosPlatformClipboard::supportsMode
bool supportsMode(QClipboard::Mode mode) const override
Definition
qohosplatformclipboard.cpp:86
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qsequentialanimationgroup.cpp:47
QT_BEGIN_NAMESPACE::makeClipboardObjectInstance
std::shared_ptr< QOhosClipboardObject > makeClipboardObjectInstance(std::function< void(std::optional< QOhosClipboardObject::PasteboardDataSource >)> &&pasteboardUpdatesNotifier)
Definition
qohosplatformclipboard.cpp:18
std
[33]
Definition
src_corelib_tools_qhash.cpp:421
qtbase
src
plugins
platforms
ohos
qohosplatformclipboard.cpp
Generated on
for Qt by
1.18.0