35 : m_isScreenLocker(surface->client() ==
waylandServer()->screenLockerClientConnection())
44 this, &WaylandWindow::updateIcon);
53 return std::make_unique<WindowItemWayland>(
this, scene);
58 return m_captionNormal;
63 return m_captionSuffix;
78 return m_isScreenLocker;
99 if (
width > area.width()) {
100 width = area.width();
102 if (
height > area.height()) {
105 return QRectF(geometry.topLeft(), QSizeF(
width,
height));
114 if (c->processId() == getpid() || c->processId() == 0) {
118 ::kill(c->processId(), SIGTERM);
135 if (
auto s = other->
surface()) {
145 return std::any_of(clients.constBegin(), clients.constEnd(),
147 if (belongsToSameApplication(client, SameApplicationChecks())) {
148 return client->isDesktop();
154void WaylandWindow::updateClientOutputs()
159 surface()->setOutputs(
waylandServer()->display()->outputsIntersecting(frameGeometry().toAlignedRect()),
160 waylandServer()->display()->largestIntersectingOutput(frameGeometry().toAlignedRect()));
162 surface()->setPreferredBufferScale(output()->scale());
163 surface()->setPreferredBufferTransform(output()->transform());
164 surface()->setPreferredColorDescription(output()->colorDescription());
168void WaylandWindow::updateIcon()
170 const QString waylandIconName = QStringLiteral(
"wayland");
171 const QString dfIconName = iconFromDesktopFile();
172 const QString iconName = dfIconName.isEmpty() ? waylandIconName : dfIconName;
173 if (iconName == icon().name()) {
176 setIcon(QIcon::fromTheme(iconName));
179void WaylandWindow::updateResourceName()
181 const QFileInfo fileInfo(surface()->client()->executablePath());
182 if (fileInfo.exists()) {
183 const QByteArray executableFileName = fileInfo.fileName().toUtf8();
184 setResourceClass(executableFileName, executableFileName);
188void WaylandWindow::updateCaption()
190 const QString suffix = shortcutCaptionSuffix();
191 if (m_captionSuffix != suffix) {
192 m_captionSuffix = suffix;
193 Q_EMIT captionChanged();
197void WaylandWindow::setCaption(
const QString &caption)
199 const QString simplified = caption.simplified();
200 if (m_captionNormal != simplified) {
201 m_captionNormal = simplified;
202 Q_EMIT captionNormalChanged();
203 Q_EMIT captionChanged();
207void WaylandWindow::doSetActive()
215void WaylandWindow::cleanGrouping()
220 if (transientFor()) {
221 transientFor()->removeTransientFromList(
this);
222 setTransientFor(
nullptr);
225 const auto children = transients();
226 for (
Window *transient : children) {
227 removeTransientFromList(transient);
228 transient->setTransientFor(
nullptr);
232QRectF WaylandWindow::frameRectToBufferRect(
const QRectF &rect)
const
234 return QRectF(rect.topLeft(), surface()->size());
237void WaylandWindow::updateGeometry(
const QRectF &rect)
239 const QRectF oldClientGeometry = m_clientGeometry;
240 const QRectF oldFrameGeometry = m_frameGeometry;
241 const QRectF oldBufferGeometry = m_bufferGeometry;
242 const Output *oldOutput = m_output;
244 m_clientGeometry = frameRectToClientRect(rect);
245 m_frameGeometry = rect;
246 m_bufferGeometry = frameRectToBufferRect(rect);
248 WaylandGeometryTypes changedGeometries;
250 if (m_clientGeometry != oldClientGeometry) {
253 if (m_frameGeometry != oldFrameGeometry) {
256 if (m_bufferGeometry != oldBufferGeometry) {
260 if (!changedGeometries) {
265 updateWindowRules(Rules::Position | Rules::Size);
268 Q_EMIT bufferGeometryChanged(oldBufferGeometry);
271 Q_EMIT clientGeometryChanged(oldClientGeometry);
274 Q_EMIT frameGeometryChanged(oldFrameGeometry);
276 if (oldOutput != m_output) {
277 Q_EMIT outputChanged();
281void WaylandWindow::markAsMapped()
283 if (Q_UNLIKELY(!ready_for_painting)) {
285 setReadyForPainting();
291#include "moc_waylandwindow.cpp"
Resource representing a wl_surface.
ClientConnection * client() const
QList< Window * > windows() const
QString captionSuffix() const override
bool isLocalhost() const override
bool belongsToSameApplication(const Window *other, SameApplicationChecks checks) const override
bool isClient() const override
QString windowRole() const override
QString captionNormal() const override
void killWindow() override
std::unique_ptr< WindowItem > createItem(Scene *scene) override
pid_t pid() const override
bool belongsToDesktop() const override
void updateClientOutputs()
QRectF resizeWithChecks(const QRectF &geometry, const QSizeF &size) override
bool isLockScreen() const override
Window * findModal(bool allow_itself=false) override
SurfaceInterface * surface() const
void desktopFileNameChanged()
void frameGeometryChanged(const QRectF &oldGeometry)
QPointer< Decoration::DecoratedClientImpl > client
QRectF clientArea(clientAreaOption, const Output *output, const VirtualDesktop *desktop) const
Output * outputAt(const QPointF &pos) const
WaylandServer * waylandServer()