From 91f883f5cadd1e8660cecc7e17824d1227879588 Mon Sep 17 00:00:00 2001 From: Vlad Zahorodnii Date: Fri, 8 Apr 2022 12:44:33 +0300 Subject: [PATCH] Simplify code that announces available modes and current mode If no mode has the current flag set, the first mode object will be announced twice. There's also no benefit from sending the current mode as last. If the current mode changes, the compositor will send the current_mode event, not the mode event. BUG: 452318 --- src/wayland/outputdevice_v2_interface.cpp | 35 +++++++---------------- 1 file changed, 11 insertions(+), 24 deletions(-) diff --git a/src/wayland/outputdevice_v2_interface.cpp b/src/wayland/outputdevice_v2_interface.cpp index d5c08afa25..400ec9ccc7 100644 --- a/src/wayland/outputdevice_v2_interface.cpp +++ b/src/wayland/outputdevice_v2_interface.cpp @@ -33,7 +33,7 @@ public: void sendGeometry(Resource *resource); wl_resource *sendNewMode(Resource *resource, OutputDeviceModeV2Interface *mode); - void sendCurrentMode(Resource *resource, OutputDeviceModeV2Interface *mode); + void sendCurrentMode(Resource *resource); void sendDone(Resource *resource); void sendUuid(Resource *resource); void sendEdid(Resource *resource); @@ -183,7 +183,7 @@ void OutputDeviceV2Interface::setCurrentMode(OutputDeviceModeV2Interface *mode) const auto clientResources = d->resourceMap(); for (auto it = clientResources.begin(); it != clientResources.end(); ++it) { auto resource = *it; - d->sendCurrentMode(resource, d->currentMode); + d->sendCurrentMode(resource); d->sendDone(resource); } d->updateGeometry(); @@ -260,22 +260,10 @@ void OutputDeviceV2InterfacePrivate::kde_output_device_v2_bind_resource(Resource sendName(resource); sendSerialNumber(resource); - auto currentModeIt = modes.end(); - for (auto it = modes.begin(); it != modes.end(); ++it) { - auto &mode = *it; - if (mode->flags().testFlag(OutputDeviceModeV2Interface::ModeFlag::Current)) { - // needs to be sent as last mode - currentModeIt = it; - continue; - } + for (OutputDeviceModeV2Interface *mode : std::as_const(modes)) { sendNewMode(resource, mode); } - - if (currentModeIt != modes.end()) { - auto modeResource = sendNewMode(resource, *currentModeIt); - send_current_mode(resource->handle, modeResource); - } - + sendCurrentMode(resource); sendUuid(resource); sendEdid(resource); sendEnabled(resource); @@ -299,9 +287,9 @@ wl_resource *OutputDeviceV2InterfacePrivate::sendNewMode(Resource *resource, Out return modeResource->handle; } -void OutputDeviceV2InterfacePrivate::sendCurrentMode(Resource *outputResource, OutputDeviceModeV2Interface *mode) +void OutputDeviceV2InterfacePrivate::sendCurrentMode(Resource *outputResource) { - const auto modeResource = OutputDeviceModeV2InterfacePrivate::get(mode)->findResource(outputResource); + const auto modeResource = OutputDeviceModeV2InterfacePrivate::get(currentMode)->findResource(outputResource); send_current_mode(outputResource->handle, modeResource->handle); } @@ -509,12 +497,12 @@ void OutputDeviceV2Interface::setModes(const QListmodes << outputDeviceMode; outputDeviceMode->setParent(this); + for (auto resource : clientResources) { + d->sendNewMode(resource, outputDeviceMode); + } + if (outputDeviceMode->flags().testFlag(OutputDeviceModeV2Interface::ModeFlag::Current)) { d->currentMode = outputDeviceMode; - } else { - for (auto resource : clientResources) { - d->sendNewMode(resource, outputDeviceMode); - } } } @@ -523,8 +511,7 @@ void OutputDeviceV2Interface::setModes(const QListsendNewMode(resource, d->currentMode); - d->sendCurrentMode(resource, d->currentMode); + d->sendCurrentMode(resource); } qDeleteAll(oldModes.crbegin(), oldModes.crend());