|
|
|
@ -176,18 +176,18 @@ int OutputDeviceV2Interface::refreshRate() const
|
|
|
|
|
return d->currentMode->refreshRate();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QList<OutputDeviceModeV2Interface *> OutputDeviceV2Interface::modes() const
|
|
|
|
|
{
|
|
|
|
|
return d->modes;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void OutputDeviceV2Interface::setCurrentMode(OutputDeviceModeV2Interface *mode)
|
|
|
|
|
{
|
|
|
|
|
Q_ASSERT(d->modes.contains(mode));
|
|
|
|
|
if (mode == d->currentMode) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (d->currentMode) {
|
|
|
|
|
// another mode has the current flag - remove
|
|
|
|
|
d->currentMode->setFlags(d->currentMode->flags() & ~uint(OutputDeviceModeV2Interface::ModeFlag::Current));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mode->setFlags(mode->flags() | OutputDeviceModeV2Interface::ModeFlag::Current);
|
|
|
|
|
d->currentMode = mode;
|
|
|
|
|
|
|
|
|
|
const auto clientResources = d->resourceMap();
|
|
|
|
@ -199,18 +199,6 @@ void OutputDeviceV2Interface::setCurrentMode(OutputDeviceModeV2Interface *mode)
|
|
|
|
|
d->updateGeometry();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool OutputDeviceV2Interface::setCurrentMode(const QSize &size, int refreshRate)
|
|
|
|
|
{
|
|
|
|
|
auto mode = std::find_if(d->modes.begin(), d->modes.end(), [size, refreshRate](OutputDeviceModeV2Interface *mode) {
|
|
|
|
|
return mode->size() == size && mode->refreshRate() == refreshRate;
|
|
|
|
|
});
|
|
|
|
|
if (mode == d->modes.end()) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
setCurrentMode(*mode);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int32_t OutputDeviceV2InterfacePrivate::toTransform() const
|
|
|
|
|
{
|
|
|
|
|
switch (transform) {
|
|
|
|
@ -488,7 +476,7 @@ OutputDeviceV2Interface::Transform OutputDeviceV2Interface::transform() const
|
|
|
|
|
return d->transform;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void OutputDeviceV2Interface::setModes(const QList<OutputDeviceModeV2Interface *> &modes)
|
|
|
|
|
void OutputDeviceV2Interface::setModes(const QList<OutputDeviceModeV2Interface *> &modes, OutputDeviceModeV2Interface *currentMode)
|
|
|
|
|
{
|
|
|
|
|
if (modes.isEmpty()) {
|
|
|
|
|
qCWarning(KWIN_CORE) << "Tried to set no modes for output";
|
|
|
|
@ -499,25 +487,16 @@ void OutputDeviceV2Interface::setModes(const QList<OutputDeviceModeV2Interface *
|
|
|
|
|
|
|
|
|
|
const auto oldModes = d->modes;
|
|
|
|
|
d->modes.clear();
|
|
|
|
|
d->currentMode = nullptr;
|
|
|
|
|
|
|
|
|
|
for (OutputDeviceModeV2Interface *outputDeviceMode : modes) {
|
|
|
|
|
d->modes << outputDeviceMode;
|
|
|
|
|
outputDeviceMode->setParent(this);
|
|
|
|
|
|
|
|
|
|
for (auto resource : clientResources) {
|
|
|
|
|
d->sendNewMode(resource, outputDeviceMode);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (outputDeviceMode->flags().testFlag(OutputDeviceModeV2Interface::ModeFlag::Current)) {
|
|
|
|
|
d->currentMode = outputDeviceMode;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!d->currentMode) {
|
|
|
|
|
d->currentMode = d->modes.at(0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
d->currentMode = currentMode;
|
|
|
|
|
for (auto resource : clientResources) {
|
|
|
|
|
d->sendCurrentMode(resource);
|
|
|
|
|
}
|
|
|
|
@ -764,11 +743,6 @@ OutputDeviceModeV2Interface::ModeFlags OutputDeviceModeV2Interface::flags() cons
|
|
|
|
|
return d->m_flags;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void OutputDeviceModeV2Interface::setFlags(OutputDeviceModeV2Interface::ModeFlags flags)
|
|
|
|
|
{
|
|
|
|
|
d->m_flags = flags;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void OutputDeviceModeV2InterfacePrivate::bindResource(wl_resource *resource)
|
|
|
|
|
{
|
|
|
|
|
send_size(resource, m_size.width(), m_size.height());
|
|
|
|
|