Commit 40364d2e authored by Vlad Zahorodnii's avatar Vlad Zahorodnii
Browse files

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


(cherry picked from commit b40c4e3f)
parent 6dcf73ad
Pipeline #161391 passed with stage
in 5 minutes and 20 seconds
......@@ -31,7 +31,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);
......@@ -180,7 +180,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();
......@@ -257,22 +257,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);
......@@ -296,9 +284,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);
}
......@@ -506,12 +494,12 @@ void OutputDeviceV2Interface::setModes(const QList<OutputDeviceModeV2Interface *
d->modes << 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);
}
}
}
......@@ -520,8 +508,7 @@ void OutputDeviceV2Interface::setModes(const QList<OutputDeviceModeV2Interface *
}
for (auto resource : clientResources) {
d->sendNewMode(resource, d->currentMode);
d->sendCurrentMode(resource, d->currentMode);
d->sendCurrentMode(resource);
}
qDeleteAll(oldModes.crbegin(), oldModes.crend());
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment