Changeset View
Changeset View
Standalone View
Standalone View
common/control.cpp
Show First 20 Lines • Show All 362 Lines • ▼ Show 20 Line(s) | 354 | if (retention == OutputRetention::Individual) { | |||
---|---|---|---|---|---|
363 | } | 363 | } | ||
364 | } | 364 | } | ||
365 | // Retention is global or info for output not in config control file. | 365 | // Retention is global or info for output not in config control file. | ||
366 | if (auto *outputControl = getOutputControl(outputId, outputName)) { | 366 | if (auto *outputControl = getOutputControl(outputId, outputName)) { | ||
367 | return outputControl->getAutoRotate(); | 367 | return outputControl->getAutoRotate(); | ||
368 | } | 368 | } | ||
369 | 369 | | |||
370 | // Info for output not found. | 370 | // Info for output not found. | ||
371 | // TODO: make this return value depend on the device having a tablet state? | | |||
372 | return true; | 371 | return true; | ||
373 | } | 372 | } | ||
374 | 373 | | |||
375 | void ControlConfig::setAutoRotate(const KScreen::OutputPtr &output, bool value) | 374 | void ControlConfig::setAutoRotate(const KScreen::OutputPtr &output, bool value) | ||
376 | { | 375 | { | ||
377 | setAutoRotate(output->hashMd5(), output->name(), value); | 376 | setAutoRotate(output->hashMd5(), output->name(), value); | ||
378 | } | 377 | } | ||
379 | 378 | | |||
Show All 25 Lines | 381 | { | |||
405 | auto outputInfo = createOutputInfo(outputId, outputName); | 404 | auto outputInfo = createOutputInfo(outputId, outputName); | ||
406 | outputInfo[QStringLiteral("autorotate")] = value; | 405 | outputInfo[QStringLiteral("autorotate")] = value; | ||
407 | 406 | | |||
408 | outputsInfo << outputInfo; | 407 | outputsInfo << outputInfo; | ||
409 | setOutputs(outputsInfo); | 408 | setOutputs(outputsInfo); | ||
410 | setOutputAutoRotate(); | 409 | setOutputAutoRotate(); | ||
411 | } | 410 | } | ||
412 | 411 | | |||
412 | bool ControlConfig::getAutoRotateOnlyInTabletMode(const KScreen::OutputPtr &output) const | ||||
413 | { | ||||
414 | return getAutoRotateOnlyInTabletMode(output->hashMd5(), output->name()); | ||||
415 | } | ||||
416 | | ||||
417 | bool ControlConfig::getAutoRotateOnlyInTabletMode(const QString &outputId, | ||||
418 | const QString &outputName) const | ||||
419 | { | ||||
420 | const auto retention = getOutputRetention(outputId, outputName); | ||||
421 | if (retention == OutputRetention::Individual) { | ||||
422 | const QVariantList outputsInfo = getOutputs(); | ||||
423 | for (const auto variantInfo : outputsInfo) { | ||||
424 | const QVariantMap info = variantInfo.toMap(); | ||||
425 | if (!infoIsOutput(info, outputId, outputName)) { | ||||
426 | continue; | ||||
427 | } | ||||
428 | const auto val = info[QStringLiteral("autorotate-tablet-only")]; | ||||
429 | return !val.canConvert<bool>() || val.toBool(); | ||||
430 | } | ||||
431 | } | ||||
432 | // Retention is global or info for output not in config control file. | ||||
433 | if (auto *outputControl = getOutputControl(outputId, outputName)) { | ||||
434 | return outputControl->getAutoRotateOnlyInTabletMode(); | ||||
435 | } | ||||
436 | | ||||
437 | // Info for output not found. | ||||
438 | return true; | ||||
439 | } | ||||
440 | | ||||
441 | void ControlConfig::setAutoRotateOnlyInTabletMode(const KScreen::OutputPtr &output, bool value) | ||||
442 | { | ||||
443 | setAutoRotateOnlyInTabletMode(output->hashMd5(), output->name(), value); | ||||
444 | } | ||||
445 | | ||||
446 | // TODO: combine methods (templated functions) | ||||
447 | void ControlConfig::setAutoRotateOnlyInTabletMode(const QString &outputId, | ||||
448 | const QString &outputName, bool value) | ||||
449 | { | ||||
450 | QList<QVariant>::iterator it; | ||||
451 | QVariantList outputsInfo = getOutputs(); | ||||
452 | | ||||
453 | auto setOutputAutoRotateOnlyInTabletMode = [&outputId, &outputName, value, this]() { | ||||
454 | if (auto *control = getOutputControl(outputId, outputName)) { | ||||
455 | control->setAutoRotateOnlyInTabletMode(value); | ||||
456 | } | ||||
457 | }; | ||||
458 | | ||||
459 | for (it = outputsInfo.begin(); it != outputsInfo.end(); ++it) { | ||||
460 | QVariantMap outputInfo = (*it).toMap(); | ||||
461 | if (!infoIsOutput(outputInfo, outputId, outputName)) { | ||||
462 | continue; | ||||
463 | } | ||||
464 | outputInfo[QStringLiteral("autorotate-tablet-only")] = value; | ||||
465 | *it = outputInfo; | ||||
466 | setOutputs(outputsInfo); | ||||
467 | setOutputAutoRotateOnlyInTabletMode(); | ||||
468 | return; | ||||
469 | } | ||||
470 | // no entry yet, create one | ||||
471 | auto outputInfo = createOutputInfo(outputId, outputName); | ||||
472 | outputInfo[QStringLiteral("autorotate-tablet-only")] = value; | ||||
473 | | ||||
474 | outputsInfo << outputInfo; | ||||
475 | setOutputs(outputsInfo); | ||||
476 | setOutputAutoRotateOnlyInTabletMode(); | ||||
477 | } | ||||
478 | | ||||
479 | | ||||
413 | KScreen::OutputPtr ControlConfig::getReplicationSource(const KScreen::OutputPtr &output) const | 480 | KScreen::OutputPtr ControlConfig::getReplicationSource(const KScreen::OutputPtr &output) const | ||
414 | { | 481 | { | ||
415 | return getReplicationSource(output->hashMd5(), output->name()); | 482 | return getReplicationSource(output->hashMd5(), output->name()); | ||
416 | } | 483 | } | ||
417 | 484 | | |||
418 | KScreen::OutputPtr ControlConfig::getReplicationSource(const QString &outputId, | 485 | KScreen::OutputPtr ControlConfig::getReplicationSource(const QString &outputId, | ||
419 | const QString &outputName) const | 486 | const QString &outputName) const | ||
420 | { | 487 | { | ||
▲ Show 20 Lines • Show All 134 Lines • ▼ Show 20 Line(s) | |||||
555 | void ControlOutput::setAutoRotate(bool value) | 622 | void ControlOutput::setAutoRotate(bool value) | ||
556 | { | 623 | { | ||
557 | auto &infoMap = info(); | 624 | auto &infoMap = info(); | ||
558 | if (infoMap.isEmpty()) { | 625 | if (infoMap.isEmpty()) { | ||
559 | infoMap = createOutputInfo(m_output->hashMd5(), m_output->name()); | 626 | infoMap = createOutputInfo(m_output->hashMd5(), m_output->name()); | ||
560 | } | 627 | } | ||
561 | infoMap[QStringLiteral("autorotate")] = value; | 628 | infoMap[QStringLiteral("autorotate")] = value; | ||
562 | } | 629 | } | ||
630 | | ||||
631 | bool ControlOutput::getAutoRotateOnlyInTabletMode() const | ||||
632 | { | ||||
633 | const auto val = constInfo()[QStringLiteral("autorotate-tablet-only")]; | ||||
634 | return !val.canConvert<bool>() || val.toBool(); | ||||
635 | } | ||||
636 | | ||||
637 | void ControlOutput::setAutoRotateOnlyInTabletMode(bool value) | ||||
638 | { | ||||
639 | auto &infoMap = info(); | ||||
640 | if (infoMap.isEmpty()) { | ||||
641 | infoMap = createOutputInfo(m_output->hashMd5(), m_output->name()); | ||||
642 | } | ||||
643 | infoMap[QStringLiteral("autorotate-tablet-only")] = value; | ||||
644 | } |