Sisyphus repositório
Última atualização: 1 outubro 2023 | SRPMs: 18631 | Visitas: 37791583
en ru br
ALT Linux repositórios
S:5.27.8-alt1

Group :: Desktop gráfico/KDE
RPM: plasma5-kscreen

 Main   Changelog   Spec   Patches   Sources   Download   Gear   Bugs e FR  Repocop 

Patch: alt-enable-per-screen-scaling.patch
Download


--- a/kcm/src/scalingconfig.cpp
+++ b/kcm/src/scalingconfig.cpp
@@ -30,9 +30,9 @@
 //slider can only handle ints so goes 10-30
 #define SLIDER_RATIO 10.0
 
-ScalingConfig::ScalingConfig(const KScreen::OutputList &outputList, QWidget* parent):
+ScalingConfig::ScalingConfig(const KScreen::OutputPtr &output, QWidget* parent):
     QDialog(parent),
-    m_outputList(outputList)
+    m_output(output)
 {
 
     ui.setupUi(this);
@@ -50,6 +50,8 @@ ScalingConfig::ScalingConfig(const KScre
 
     ui.previewWidget->setScale(1);
     ui.scaleLabel->setText(QString::number(1));
+
+    this->setWindowTitle(this->windowTitle() + QLatin1String(" : ") + m_output->name());
     
     load();
 }
@@ -61,35 +63,58 @@ ScalingConfig::~ScalingConfig()
 void ScalingConfig::load()
 {
     //we load UI from a config, as rdb value might not be updated yet
+    qreal screenDpi = 1.0;
+    QString screenFactor = QString::number(screenDpi);
     auto config = KSharedConfig::openConfig(QStringLiteral("kdeglobals"));
-    const qreal dpi = config->group("KScreen").readEntry("ScaleFactor", 1.0);
-    
-    m_initialScalingFactor = dpi;
-    ui.scaleSlider->setValue(dpi * SLIDER_RATIO);
+    QString readScreenFactors = config->group("KScreen").readEntry(
+                "ScreenScaleFactors", "");
+    QString searchName = m_output->name() + QLatin1Char('=');
+    if (readScreenFactors.contains(searchName)) {
+        foreach (const QString &str, readScreenFactors.split(QLatin1Char(';'), QString::SkipEmptyParts)) {
+            if (str.startsWith(searchName)) {
+                screenFactor = str.mid(str.indexOf(QLatin1Char('=')) + 1);
+                break;
+            }
+        }
+        bool convertionResult = false;
+        screenDpi = screenFactor.toDouble(&convertionResult);
+        if (!convertionResult) {
+            screenDpi = 1.0;
+        }
+    }
+    ui.scaleSlider->setValue(screenDpi * SLIDER_RATIO);
 }
 
 void ScalingConfig::accept()
 {
-    if (qFuzzyCompare(scaleFactor(), m_initialScalingFactor)) {
-        QDialog::accept();
-        return;
-    }
     const qreal scalingFactor = scaleFactor();
 
     //save to config
-    auto config = KSharedConfig::openConfig(QStringLiteral("kdeglobals"));
-    config->group("KScreen").writeEntry("ScaleFactor", scalingFactor);
 
     //write env var to be used by startkde.sh to populate the QT_SCREEN_SCALE_FACTORS env var
     //we use QT_SCREEN_SCALE_FACTORS as opposed to QT_SCALE_FACTOR as we need to use one that will *NOT* scale fonts according to the scale
     //scaling the fonts makes sense if you don't also set a font DPI, but we *need* to set a font DPI for both PlasmaShell which does it's own thing, and for KDE4/GTK2 applications
-
+    auto config = KSharedConfig::openConfig(QStringLiteral("kdeglobals"));
+    QString readScreenFactors = config->group("KScreen").readEntry("ScreenScaleFactors", "");
     QString screenFactors;
-    foreach (const KScreen::OutputPtr &output, m_outputList) {
-        screenFactors.append(output->name() + QLatin1Char('=') + QString::number(scalingFactor) + QLatin1Char(';'));
+    QString searchName = m_output->name() + QLatin1Char('=');
+    if (readScreenFactors.contains(searchName)) {
+        foreach (const QString &str, readScreenFactors.split(QLatin1Char(';'), QString::SkipEmptyParts)) {
+            if (!str.startsWith(searchName)) {
+                screenFactors += str + QLatin1Char(';');
+            }
+        }
+        screenFactors += searchName + QString::number(scalingFactor) + QLatin1Char(';');
+    } else {
+        screenFactors = readScreenFactors + searchName + QString::number(scalingFactor) + QLatin1Char(';');
     }
     config->group("KScreen").writeEntry("ScreenScaleFactors", screenFactors);
 
+    if (!m_output->isPrimary()) {
+        QDialog::accept();
+        return;
+    }
+    config->group("KScreen").writeEntry("ScaleFactor", scalingFactor);
 
     KConfig fontConfig(QStringLiteral("kcmfonts"));
     auto fontConfigGroup = fontConfig.group("General");
--- a/kcm/src/scalingconfig.h
+++ b/kcm/src/scalingconfig.h
@@ -30,7 +30,7 @@ class ScalingConfig : public QDialog
 {
     Q_OBJECT
 public:
-    explicit ScalingConfig(const KScreen::OutputList &outputList, QWidget* parent = nullptr);
+    explicit ScalingConfig(const KScreen::OutputPtr &output, QWidget* parent = nullptr);
     ~ScalingConfig() override;
     
 protected:
@@ -41,7 +41,7 @@ private:
     int scaleDPI() const;
     Ui::Scaling ui;
     qreal m_initialScalingFactor = 1.0;
-    KScreen::OutputList m_outputList;
+    KScreen::OutputPtr m_output;
 };
 
 #endif // SCALINGCONFIG_H
--- a/kcm/src/widget.cpp
+++ b/kcm/src/widget.cpp
@@ -73,9 +73,11 @@ Widget::Widget(QWidget *parent)
 
     connect(ui->scaleAllOutputsButton, &QPushButton::released,
             [this] {
-                QPointer<ScalingConfig> dialog = new ScalingConfig(mConfig->outputs(), this);
-                dialog->exec();
-                delete dialog;
+                if (mSelectedOutput) {
+                    QPointer<ScalingConfig> dialog = new ScalingConfig(mSelectedOutput, this);
+                    dialog->exec();
+                    delete dialog;
+                }
             });
 
     mOutputTimer = new QTimer(this);
@@ -216,6 +218,7 @@ void Widget::addOutputToPrimaryCombo(con
 void Widget::slotFocusedOutputChanged(QMLOutput *output)
 {
     mControlPanel->activateOutput(output->outputPtr());
+    mSelectedOutput = output->outputPtr();
 }
 
 void Widget::slotOutputEnabledChanged()
@@ -302,6 +305,7 @@ void Widget::slotUnifyOutputs()
 
         ui->primaryCombo->setEnabled(false);
         mControlPanel->setUnifiedOutput(base->outputPtr());
+        mSelectedOutput = base->outputPtr();
         ui->unifyButton->setText(i18n("Break Unified Outputs"));
     }
 
--- a/kcm/src/widget.h
+++ b/kcm/src/widget.h
@@ -93,6 +93,7 @@ class Widget : public QWidget
     QMLScreen *mScreen = nullptr;
     KScreen::ConfigPtr mConfig = nullptr;
     KScreen::ConfigPtr mPrevConfig = nullptr;
+    KScreen::OutputPtr mSelectedOutput = nullptr;
 
     ControlPanel *mControlPanel = nullptr;
 
 
projeto & código: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
mantenedor atual: Michael Shigorin
mantenedor da tradução: Fernando Martini aka fmartini © 2009