Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qwlbuffermanager.cpp
Go to the documentation of this file.
1
// Copyright (C) 2017 The Qt Company Ltd.
2
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
// Qt-Security score:significant reason:default
4
5
#
include
"qwlbuffermanager_p.h"
6
#
include
<
QWaylandCompositor
>
7
#
include
<
QtWaylandCompositor
/
private
/
qwaylandcompositor_p
.
h
>
8
#
include
<
QtWaylandCompositor
/
private
/
qwlclientbufferintegration_p
.
h
>
9
#
include
<
QDebug
>
10
11
QT_BEGIN_NAMESPACE
12
13
namespace
QtWayland
{
14
15
BufferManager
::
BufferManager
(
QWaylandCompositor
*
compositor
)
16
:
QObject
(
compositor
)
17
,
m_compositor
(
compositor
)
18
{
19
20
}
21
22
struct
buffer_manager_destroy_listener
: wl_listener
23
{
24
buffer_manager_destroy_listener
()
25
{
26
notify = BufferManager::destroy_listener_callback;
27
wl_list_init(&
this
->link);
28
}
29
30
BufferManager
*
d
=
nullptr
;
31
};
32
33
void
BufferManager
::
registerBuffer
(
wl_resource
*
buffer_resource
,
ClientBuffer
*
clientBuffer
)
34
{
35
m_buffers
[
buffer_resource
] =
clientBuffer
;
36
37
auto
*
destroy_listener
=
new
buffer_manager_destroy_listener
;
38
destroy_listener
->
d
=
this
;
39
wl_resource_add_destroy_listener
(
buffer_resource
,
destroy_listener
);
40
41
}
42
43
ClientBuffer
*
BufferManager
::
getBuffer
(
wl_resource
*
buffer_resource
)
44
{
45
if
(!
buffer_resource
)
46
return
nullptr
;
47
48
auto
it
=
m_buffers
.
find
(
buffer_resource
);
49
if
(
it
!=
m_buffers
.
end
())
50
return
it
.
value
();
51
52
ClientBuffer
*
newBuffer
=
nullptr
;
53
54
for
(
auto
*
integration
:
QWaylandCompositorPrivate
::
get
(
m_compositor
)->
clientBufferIntegrations
()) {
55
newBuffer
=
integration
->
createBufferFor
(
buffer_resource
);
56
if
(
newBuffer
)
57
break
;
58
}
59
60
if
(
newBuffer
)
61
registerBuffer
(
buffer_resource
,
newBuffer
);
62
else
63
qCWarning
(
qLcWaylandCompositorHardwareIntegration
) <<
"Could not create buffer for resource."
;
64
65
return
newBuffer
;
66
}
67
68
69
void
BufferManager
::
destroy_listener_callback
(
wl_listener
*
listener
,
void
*
data
)
70
{
71
buffer_manager_destroy_listener
*
destroy_listener
=
static_cast
<
buffer_manager_destroy_listener
*>(
listener
);
72
BufferManager
*
self
=
destroy_listener
->
d
;
73
struct
::
wl_resource
*
buffer
=
static_cast
<
struct
::
wl_resource
*>(
data
);
74
75
wl_list_remove
(&
destroy_listener
->
link
);
76
delete
destroy_listener
;
77
78
Q_ASSERT
(
self
);
79
Q_ASSERT
(
buffer
);
80
81
ClientBuffer
*
clientBuffer
=
self
->
m_buffers
.
take
(
buffer
);
82
83
if
(!
clientBuffer
)
84
return
;
85
86
clientBuffer
->
setDestroyed
();
87
}
88
89
}
90
QT_END_NAMESPACE
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qsequentialanimationgroup.cpp:47
QtWayland
Definition
qwaylanddisplay_p.h:54
QtWayland::buffer_manager_destroy_listener
Definition
qwlbuffermanager.cpp:23
QtWayland::buffer_manager_destroy_listener::buffer_manager_destroy_listener
buffer_manager_destroy_listener()
Definition
qwlbuffermanager.cpp:24
QtWayland::buffer_manager_destroy_listener::d
BufferManager * d
Definition
qwlbuffermanager.cpp:30
qtwayland
src
compositor
wayland_wrapper
qwlbuffermanager.cpp
Generated on
for Qt by
1.16.1