From 05c9b4b9d66f98f4603c8383ddb2b22f485b8269 Mon Sep 17 00:00:00 2001 From: Patrick J Volkerding Date: Tue, 7 Dec 2021 21:02:41 +0000 Subject: Tue Dec 7 21:02:41 UTC 2021 ap/vim-8.2.3754-x86_64-1.txz: Upgraded. d/Cython-0.29.25-x86_64-1.txz: Upgraded. d/rust-1.57.0-x86_64-1.txz: Upgraded. kde/kscreen-5.23.4-x86_64-2.txz: Rebuilt. Applied upstream patches: [PATCH 1/4] Compute logicalSize taking into account current config. [PATCH 2/4] Update screen size when mode changes. [PATCH 3/4] Ensure to set outputs explicitLogicalSize upon loading config. [PATCH 4/4] Fix output identifier window positioning in wayland with some scale. Thanks to Heinz Wiesinger. kde/libkscreen-5.23.4-x86_64-2.txz: Rebuilt. Applied upstream patches: [PATCH] XrandR: Fix impossibilty to change resolution in VirtualBox. [PATCH] Under X11 ignore per-screen scale to compute logicalSize. Thanks to Heinz Wiesinger. l/glib-networking-2.70.1-x86_64-1.txz: Upgraded. l/imagemagick-7.1.0_17-x86_64-1.txz: Upgraded. l/vte-0.66.2-x86_64-1.txz: Upgraded. n/dovecot-2.3.17.1-x86_64-1.txz: Upgraded. xap/mozilla-firefox-91.4.0esr-x86_64-1.txz: Upgraded. This release contains security fixes and improvements. For more information, see: https://www.mozilla.org/en-US/firefox/91.4.0/releasenotes/ https://www.mozilla.org/security/advisories/mfsa2021-53/ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-43536 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-43537 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-43538 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-43539 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-43541 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-43542 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-43543 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-43545 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-43546 https://bugzilla.mozilla.org/show_bug.cgi?id=1737751 (* Security fix *) xap/vim-gvim-8.2.3754-x86_64-1.txz: Upgraded. --- source/d/Cython/Cython.SlackBuild | 2 +- source/d/rust/rust.SlackBuild | 8 +- source/d/rust/rust.url | 8 +- source/kde/kde/build/kscreen | 2 +- source/kde/kde/build/libkscreen | 2 +- source/kde/kde/patch/kscreen.patch | 1 + source/kde/kde/patch/kscreen/57.patch | 189 ++++++++++++++++ source/kde/kde/patch/libkscreen.patch | 2 + .../7eb0390bf70fc7fb5a39bd501ffcc327a07c328a.patch | 240 +++++++++++++++++++++ .../cf0921f3fbde31cb94b9ccddcaba36da3a488483.patch | 219 +++++++++++++++++++ source/l/vte/vte.url | 1 + .../xap/mozilla-firefox/mozilla-firefox.SlackBuild | 2 +- 12 files changed, 664 insertions(+), 12 deletions(-) create mode 100644 source/kde/kde/patch/kscreen.patch create mode 100644 source/kde/kde/patch/kscreen/57.patch create mode 100644 source/kde/kde/patch/libkscreen.patch create mode 100644 source/kde/kde/patch/libkscreen/7eb0390bf70fc7fb5a39bd501ffcc327a07c328a.patch create mode 100644 source/kde/kde/patch/libkscreen/cf0921f3fbde31cb94b9ccddcaba36da3a488483.patch create mode 100644 source/l/vte/vte.url (limited to 'source') diff --git a/source/d/Cython/Cython.SlackBuild b/source/d/Cython/Cython.SlackBuild index 6130e89f..d2893f07 100755 --- a/source/d/Cython/Cython.SlackBuild +++ b/source/d/Cython/Cython.SlackBuild @@ -26,7 +26,7 @@ cd $(dirname $0) ; CWD=$(pwd) PKGNAM=Cython VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} -BUILD=${BUILD:-3} +BUILD=${BUILD:-1} if [ -z "$ARCH" ]; then case "$( uname -m )" in diff --git a/source/d/rust/rust.SlackBuild b/source/d/rust/rust.SlackBuild index 4306e347..0d73d2f4 100755 --- a/source/d/rust/rust.SlackBuild +++ b/source/d/rust/rust.SlackBuild @@ -26,7 +26,7 @@ cd $(dirname $0) ; CWD=$(pwd) PKGNAM=rust SRCNAM="${PKGNAM}c" -VERSION=${VERSION:-1.56.1} +VERSION=${VERSION:-1.57.0} BUILD=${BUILD:-1} # Set this to YES to build with the system LLVM, or NO to use the bundled LLVM. @@ -34,9 +34,9 @@ BUILD=${BUILD:-1} SYSTEM_LLVM=${SYSTEM_LLVM:-YES} # Bootstrap variables (might not be kept updated for latest Rust): -RSTAGE0_VERSION=${RSTAGE0_VERSION:-1.55.0} -RSTAGE0_DIR=${RSTAGE0_DIR:-2021-09-09} -CSTAGE0_VERSION=${CSTAGE0_VERSION:-1.55.0} +RSTAGE0_VERSION=${RSTAGE0_VERSION:-1.56.1} +RSTAGE0_DIR=${RSTAGE0_DIR:-2021-11-01} +CSTAGE0_VERSION=${CSTAGE0_VERSION:-1.56.1} CSTAGE0_DIR=${CSTAGE0_DIR:-$RSTAGE0_DIR} # Automatically determine the architecture we're building on: diff --git a/source/d/rust/rust.url b/source/d/rust/rust.url index e02ef76d..e4ea90ef 100644 --- a/source/d/rust/rust.url +++ b/source/d/rust/rust.url @@ -1,5 +1,5 @@ # Source code (repacked to .tar.lz): -VERSION=1.56.1 +VERSION=1.57.0 rm -f rustc-${VERSION}-src.tar.* lftpget https://static.rust-lang.org/dist/rustc-${VERSION}-src.tar.gz lftpget https://static.rust-lang.org/dist/rustc-${VERSION}-src.tar.gz.asc @@ -20,9 +20,9 @@ fi # update the settings below, look at src/stage0.txt in the Rust sources. exit 0 -BOOTSTRAP_DATE=2021-09-09 -BOOTSTRAP_CARGO=1.55.0 -BOOTSTRAP_VERSION=1.55.0 +BOOTSTRAP_DATE=2021-11-01 +BOOTSTRAP_CARGO=1.56.1 +BOOTSTRAP_VERSION=1.56.0 # i686 bootstrap: lftpget https://static.rust-lang.org/dist/${BOOTSTRAP_DATE}/cargo-${BOOTSTRAP_CARGO}-i686-unknown-linux-gnu.tar.xz diff --git a/source/kde/kde/build/kscreen b/source/kde/kde/build/kscreen index d00491fd..0cfbf088 100644 --- a/source/kde/kde/build/kscreen +++ b/source/kde/kde/build/kscreen @@ -1 +1 @@ -1 +2 diff --git a/source/kde/kde/build/libkscreen b/source/kde/kde/build/libkscreen index d00491fd..0cfbf088 100644 --- a/source/kde/kde/build/libkscreen +++ b/source/kde/kde/build/libkscreen @@ -1 +1 @@ -1 +2 diff --git a/source/kde/kde/patch/kscreen.patch b/source/kde/kde/patch/kscreen.patch new file mode 100644 index 00000000..7b0a2433 --- /dev/null +++ b/source/kde/kde/patch/kscreen.patch @@ -0,0 +1 @@ +cat $CWD/patch/kscreen/57.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; } diff --git a/source/kde/kde/patch/kscreen/57.patch b/source/kde/kde/patch/kscreen/57.patch new file mode 100644 index 00000000..bb8befc9 --- /dev/null +++ b/source/kde/kde/patch/kscreen/57.patch @@ -0,0 +1,189 @@ +From 4d025b68022405ce889b563ed67646ccbfe4a658 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?M=C3=A9ven=20Car?= +Date: Mon, 29 Nov 2021 17:15:26 +0100 +Subject: [PATCH 1/4] Compute logicalSize taking into account current config + +BUG: 441417 +--- + kcm/output_identifier.cpp | 2 +- + kcm/output_model.cpp | 23 +++++++++++++++-------- + kded/output.cpp | 4 ++-- + 3 files changed, 18 insertions(+), 11 deletions(-) + +diff --git a/kcm/output_identifier.cpp b/kcm/output_identifier.cpp +index a672995..ba51470 100644 +--- a/kcm/output_identifier.cpp ++++ b/kcm/output_identifier.cpp +@@ -56,7 +56,7 @@ OutputIdentifier::OutputIdentifier(KScreen::ConfigPtr config, QObject *parent) + } + if (config->supportedFeatures() & KScreen::Config::Feature::PerOutputScaling) { + // Scale adjustment is not needed on Wayland, we use logical size. +- logicalSize = output->logicalSize().toSize(); ++ logicalSize = output->explicitLogicalSize().toSize(); + } else { + logicalSize = deviceSize / view->effectiveDevicePixelRatio(); + } +diff --git a/kcm/output_model.cpp b/kcm/output_model.cpp +index a497c90..020b96f 100644 +--- a/kcm/output_model.cpp ++++ b/kcm/output_model.cpp +@@ -161,10 +161,13 @@ bool OutputModel::setData(const QModelIndex &index, const QVariant &value, int r + bool ok; + const qreal scale = value.toReal(&ok); + if (ok && !qFuzzyCompare(output.ptr->scale(), scale)) { +- const auto oldSize = output.ptr->logicalSize().toSize(); ++ const auto oldSize = output.ptr->explicitLogicalSize().toSize(); ++ + output.ptr->setScale(scale); + m_config->setScale(output.ptr, scale); +- const auto newSize = output.ptr->logicalSize().toSize(); ++ ++ const auto newSize = m_config->config()->logicalSizeForOutput(*output.ptr).toSize(); ++ output.ptr->setExplicitLogicalSize(newSize); + + maintainSnapping(output, oldSize, newSize); + +@@ -385,9 +388,11 @@ bool OutputModel::setResolution(int outputIndex, int resIndex) + if (output.ptr->currentModeId() == id) { + return false; + } +- const auto oldSize = output.ptr->logicalSize().toSize(); ++ const auto oldSize = output.ptr->explicitLogicalSize().toSize(); + output.ptr->setCurrentModeId(id); +- const auto newSize = output.ptr->logicalSize().toSize(); ++ ++ const auto newSize = m_config->config()->logicalSizeForOutput(*output.ptr).toSize(); ++ output.ptr->setExplicitLogicalSize(newSize); + + maintainSnapping(output, oldSize, newSize); + +@@ -466,9 +471,11 @@ bool OutputModel::setRotation(int outputIndex, KScreen::Output::Rotation rotatio + if (output.ptr->rotation() == rotation) { + return false; + } +- const auto oldSize = output.ptr->logicalSize().toSize(); ++ const auto oldSize = output.ptr->explicitLogicalSize().toSize(); + output.ptr->setRotation(rotation); +- const auto newSize = output.ptr->logicalSize().toSize(); ++ ++ const auto newSize = m_config->config()->logicalSizeForOutput(*output.ptr).toSize(); ++ output.ptr->setExplicitLogicalSize(newSize); + + maintainSnapping(output, oldSize, newSize); + +@@ -653,7 +660,7 @@ bool OutputModel::setReplicationSourceIndex(int outputIndex, int sourceIndex) + return false; + } + m_config->setReplicationSource(output.ptr, nullptr); +- output.ptr->setLogicalSize(QSizeF()); ++ output.ptr->setExplicitLogicalSize(QSizeF()); + resetPosition(output); + } else { + const auto source = m_outputs[sourceIndex].ptr; +@@ -664,7 +671,7 @@ bool OutputModel::setReplicationSourceIndex(int outputIndex, int sourceIndex) + m_config->setReplicationSource(output.ptr, source); + output.posReset = output.ptr->pos(); + output.ptr->setPos(source->pos()); +- output.ptr->setLogicalSize(source->logicalSize()); ++ output.ptr->setExplicitLogicalSize(m_config->config()->logicalSizeForOutput(*source)); + } + + reposition(); +diff --git a/kded/output.cpp b/kded/output.cpp +index 7463b8a..44251e5 100644 +--- a/kded/output.cpp ++++ b/kded/output.cpp +@@ -404,9 +404,9 @@ void Output::readInOutputs(KScreen::ConfigPtr config, const QVariantList &output + auto replicationSource = control.getReplicationSource(output); + if (replicationSource) { + output->setPos(replicationSource->pos()); +- output->setLogicalSize(replicationSource->logicalSize()); ++ output->setExplicitLogicalSize(config->logicalSizeForOutput(*replicationSource)); + } else { +- output->setLogicalSize(QSizeF()); ++ output->setExplicitLogicalSize(QSizeF()); + } + } + +-- +GitLab + + +From 3b90217f21e62285e78fff86ae562c692799e28f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?M=C3=A9ven=20Car?= +Date: Tue, 30 Nov 2021 14:58:40 +0100 +Subject: [PATCH 2/4] Update screen size when mode changes + +--- + kcm/output_model.cpp | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/kcm/output_model.cpp b/kcm/output_model.cpp +index 020b96f..ae01307 100644 +--- a/kcm/output_model.cpp ++++ b/kcm/output_model.cpp +@@ -390,6 +390,7 @@ bool OutputModel::setResolution(int outputIndex, int resIndex) + } + const auto oldSize = output.ptr->explicitLogicalSize().toSize(); + output.ptr->setCurrentModeId(id); ++ output.ptr->setSize(output.ptr->currentMode()->size()); + + const auto newSize = m_config->config()->logicalSizeForOutput(*output.ptr).toSize(); + output.ptr->setExplicitLogicalSize(newSize); +-- +GitLab + + +From ad8d66c2c39c15a9fd668a0a292f4cd970731123 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?M=C3=A9ven=20Car?= +Date: Wed, 1 Dec 2021 13:39:21 +0100 +Subject: [PATCH 3/4] Ensure to set outputs explicitLogicalSize upon loading + config + +--- + kcm/config_handler.cpp | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/kcm/config_handler.cpp b/kcm/config_handler.cpp +index d7e7c7c..dabbcb2 100644 +--- a/kcm/config_handler.cpp ++++ b/kcm/config_handler.cpp +@@ -78,6 +78,8 @@ void ConfigHandler::resetScale(const KScreen::OutputPtr &output) + + void ConfigHandler::initOutput(const KScreen::OutputPtr &output) + { ++ output->setExplicitLogicalSize(config()->logicalSizeForOutput(*output)); ++ + if (output->isConnected()) { + resetScale(output); + m_outputs->add(output); +-- +GitLab + + +From ad7dda0b64c6f76066cdd199b0aa6ed2e2982f88 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?M=C3=A9ven=20Car?= +Date: Wed, 1 Dec 2021 14:40:32 +0100 +Subject: [PATCH 4/4] Fix output identifier window positioning in wayland with + some scale + +--- + kcm/output_identifier.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/kcm/output_identifier.cpp b/kcm/output_identifier.cpp +index ba51470..d21d36f 100644 +--- a/kcm/output_identifier.cpp ++++ b/kcm/output_identifier.cpp +@@ -56,7 +56,7 @@ OutputIdentifier::OutputIdentifier(KScreen::ConfigPtr config, QObject *parent) + } + if (config->supportedFeatures() & KScreen::Config::Feature::PerOutputScaling) { + // Scale adjustment is not needed on Wayland, we use logical size. +- logicalSize = output->explicitLogicalSize().toSize(); ++ logicalSize = config->logicalSizeForOutput(*output.data()).toSize(); + } else { + logicalSize = deviceSize / view->effectiveDevicePixelRatio(); + } +-- +GitLab + diff --git a/source/kde/kde/patch/libkscreen.patch b/source/kde/kde/patch/libkscreen.patch new file mode 100644 index 00000000..13980ceb --- /dev/null +++ b/source/kde/kde/patch/libkscreen.patch @@ -0,0 +1,2 @@ +cat $CWD/patch/libkscreen/7eb0390bf70fc7fb5a39bd501ffcc327a07c328a.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; } +cat $CWD/patch/libkscreen/cf0921f3fbde31cb94b9ccddcaba36da3a488483.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; } diff --git a/source/kde/kde/patch/libkscreen/7eb0390bf70fc7fb5a39bd501ffcc327a07c328a.patch b/source/kde/kde/patch/libkscreen/7eb0390bf70fc7fb5a39bd501ffcc327a07c328a.patch new file mode 100644 index 00000000..b0e5e713 --- /dev/null +++ b/source/kde/kde/patch/libkscreen/7eb0390bf70fc7fb5a39bd501ffcc327a07c328a.patch @@ -0,0 +1,240 @@ +From 7eb0390bf70fc7fb5a39bd501ffcc327a07c328a Mon Sep 17 00:00:00 2001 +From: Ilya Pominov +Date: Thu, 23 Sep 2021 14:24:16 +0300 +Subject: [PATCH] XrandR: Fix impossibilty to change resolution in VirtualBox + +In VirtualBox KDE runs at low resolution, +and when you try to change the resolution through the "Screen Settings" +it returns to the original one again. +How to check: +- run KDE neon on VirtualBox +- change the resolution + +VirtualBox sets the hotplug_mode_update property, but its preferred mode +is always 800x600, and KScreen returns the resolution to 800x600. + +Now XRandRCrtc stores the timestamp of the last resolution change +request from backend, and the timestamp of the last config update from +X11. +If the changes were initiated by XRandR backend (i.e. 'timestamp of the +last config update from X11' less or equal 'last resolution change +request'), then the followPreferedMode flag in KScreenConfig is set to +false. + +BUG: 407058 +--- + backends/xcbeventlistener.cpp | 7 ++++++- + backends/xcbeventlistener.h | 2 +- + backends/xrandr/xrandr.cpp | 4 +++- + backends/xrandr/xrandr.h | 2 +- + backends/xrandr/xrandrconfig.cpp | 9 +++++++-- + backends/xrandr/xrandrcrtc.cpp | 23 +++++++++++++++++++++++ + backends/xrandr/xrandrcrtc.h | 7 +++++++ + backends/xrandr/xrandroutput.cpp | 2 +- + 8 files changed, 49 insertions(+), 7 deletions(-) + +diff --git a/backends/xcbeventlistener.cpp b/backends/xcbeventlistener.cpp +index dba81dc..4c3a527 100644 +--- a/backends/xcbeventlistener.cpp ++++ b/backends/xcbeventlistener.cpp +@@ -139,6 +139,8 @@ void XCBEventListener::handleScreenChange(xcb_generic_event_t *e) + } + + qCDebug(KSCREEN_XCB_HELPER) << "RRScreenChangeNotify"; ++ qCDebug(KSCREEN_XCB_HELPER) << "\tTimestamp: " << e2->timestamp; ++ qCDebug(KSCREEN_XCB_HELPER) << "\tConfig_timestamp: " << e2->config_timestamp; + qCDebug(KSCREEN_XCB_HELPER) << "\tWindow:" << e2->request_window; + qCDebug(KSCREEN_XCB_HELPER) << "\tRoot:" << e2->root; + qCDebug(KSCREEN_XCB_HELPER) << "\tRotation: " << rotationToString((xcb_randr_rotation_t)e2->rotation); +@@ -157,15 +159,17 @@ void XCBEventListener::handleXRandRNotify(xcb_generic_event_t *e) + if (randrEvent->subCode == XCB_RANDR_NOTIFY_CRTC_CHANGE) { + xcb_randr_crtc_change_t crtc = randrEvent->u.cc; + qCDebug(KSCREEN_XCB_HELPER) << "RRNotify_CrtcChange"; ++ qCDebug(KSCREEN_XCB_HELPER) << "\tTimestamp: " << crtc.timestamp; + qCDebug(KSCREEN_XCB_HELPER) << "\tCRTC: " << crtc.crtc; + qCDebug(KSCREEN_XCB_HELPER) << "\tMode: " << crtc.mode; + qCDebug(KSCREEN_XCB_HELPER) << "\tRotation: " << rotationToString((xcb_randr_rotation_t)crtc.rotation); + qCDebug(KSCREEN_XCB_HELPER) << "\tGeometry: " << crtc.x << crtc.y << crtc.width << crtc.height; +- Q_EMIT crtcChanged(crtc.crtc, crtc.mode, (xcb_randr_rotation_t)crtc.rotation, QRect(crtc.x, crtc.y, crtc.width, crtc.height)); ++ Q_EMIT crtcChanged(crtc.crtc, crtc.mode, (xcb_randr_rotation_t)crtc.rotation, QRect(crtc.x, crtc.y, crtc.width, crtc.height), crtc.timestamp); + + } else if (randrEvent->subCode == XCB_RANDR_NOTIFY_OUTPUT_CHANGE) { + xcb_randr_output_change_t output = randrEvent->u.oc; + qCDebug(KSCREEN_XCB_HELPER) << "RRNotify_OutputChange"; ++ qCDebug(KSCREEN_XCB_HELPER) << "\tTimestamp: " << output.timestamp; + qCDebug(KSCREEN_XCB_HELPER) << "\tOutput: " << output.output; + qCDebug(KSCREEN_XCB_HELPER) << "\tCRTC: " << output.crtc; + qCDebug(KSCREEN_XCB_HELPER) << "\tMode: " << output.mode; +@@ -181,6 +185,7 @@ void XCBEventListener::handleXRandRNotify(xcb_generic_event_t *e) + xcb_get_atom_name_reply(QX11Info::connection(), xcb_get_atom_name(QX11Info::connection(), property.atom), nullptr)); + + qCDebug(KSCREEN_XCB_HELPER) << "RRNotify_OutputProperty (ignored)"; ++ qCDebug(KSCREEN_XCB_HELPER) << "\tTimestamp: " << property.timestamp; + qCDebug(KSCREEN_XCB_HELPER) << "\tOutput: " << property.output; + qCDebug(KSCREEN_XCB_HELPER) << "\tProperty: " << xcb_get_atom_name_name(reply.data()); + qCDebug(KSCREEN_XCB_HELPER) << "\tState (newValue, Deleted): " << property.status; +diff --git a/backends/xcbeventlistener.h b/backends/xcbeventlistener.h +index 35577d9..68136d8 100644 +--- a/backends/xcbeventlistener.h ++++ b/backends/xcbeventlistener.h +@@ -30,7 +30,7 @@ Q_SIGNALS: + void outputsChanged(); + + /* Emitted only when XRandR 1.2 or newer is available */ +- void crtcChanged(xcb_randr_crtc_t crtc, xcb_randr_mode_t mode, xcb_randr_rotation_t rotation, const QRect &geom); ++ void crtcChanged(xcb_randr_crtc_t crtc, xcb_randr_mode_t mode, xcb_randr_rotation_t rotation, const QRect &geom, xcb_timestamp_t timestamp); + void outputChanged(xcb_randr_output_t output, xcb_randr_crtc_t crtc, xcb_randr_mode_t mode, xcb_randr_connection_t connection); + void outputPropertyChanged(xcb_randr_output_t output); + +diff --git a/backends/xrandr/xrandr.cpp b/backends/xrandr/xrandr.cpp +index 71cbd77..115f268 100644 +--- a/backends/xrandr/xrandr.cpp ++++ b/backends/xrandr/xrandr.cpp +@@ -45,6 +45,7 @@ XRandR::XRandR() + qRegisterMetaType("xcb_randr_mode_t"); + qRegisterMetaType("xcb_randr_connection_t"); + qRegisterMetaType("xcb_randr_rotation_t"); ++ qRegisterMetaType("xcb_timestamp_t"); + + // Use our own connection to make sure that we won't mess up Qt's connection + // if something goes wrong on our side. +@@ -143,7 +144,7 @@ void XRandR::outputChanged(xcb_randr_output_t output, xcb_randr_crtc_t crtc, xcb + qCDebug(KSCREEN_XRANDR) << "Output" << xOutput->id() << ": connected =" << xOutput->isConnected() << ", enabled =" << xOutput->isEnabled(); + } + +-void XRandR::crtcChanged(xcb_randr_crtc_t crtc, xcb_randr_mode_t mode, xcb_randr_rotation_t rotation, const QRect &geom) ++void XRandR::crtcChanged(xcb_randr_crtc_t crtc, xcb_randr_mode_t mode, xcb_randr_rotation_t rotation, const QRect &geom, xcb_timestamp_t timestamp) + { + XRandRCrtc *xCrtc = s_internalConfig->crtc(crtc); + if (!xCrtc) { +@@ -152,6 +153,7 @@ void XRandR::crtcChanged(xcb_randr_crtc_t crtc, xcb_randr_mode_t mode, xcb_randr + xCrtc->update(mode, rotation, geom); + } + ++ xCrtc->updateConfigTimestamp(timestamp); + m_configChangeCompressor->start(); + } + +diff --git a/backends/xrandr/xrandr.h b/backends/xrandr/xrandr.h +index 91dd7aa..6b998c8 100644 +--- a/backends/xrandr/xrandr.h ++++ b/backends/xrandr/xrandr.h +@@ -44,7 +44,7 @@ public: + + private: + void outputChanged(xcb_randr_output_t output, xcb_randr_crtc_t crtc, xcb_randr_mode_t mode, xcb_randr_connection_t connection); +- void crtcChanged(xcb_randr_crtc_t crtc, xcb_randr_mode_t mode, xcb_randr_rotation_t rotation, const QRect &geom); ++ void crtcChanged(xcb_randr_crtc_t crtc, xcb_randr_mode_t mode, xcb_randr_rotation_t rotation, const QRect &geom, xcb_timestamp_t timestamp); + void screenChanged(xcb_randr_rotation_t rotation, const QSize &sizePx, const QSize &sizeMm); + + static quint8 *getXProperty(xcb_randr_output_t output, xcb_atom_t atom, size_t &len); +diff --git a/backends/xrandr/xrandrconfig.cpp b/backends/xrandr/xrandrconfig.cpp +index fa0929c..5cbf4c7 100644 +--- a/backends/xrandr/xrandrconfig.cpp ++++ b/backends/xrandr/xrandrconfig.cpp +@@ -504,6 +504,8 @@ bool XRandRConfig::disableOutput(const OutputPtr &kscreenOutput) const + XCB_NONE, + xOutput->isConnected() ? XCB_RANDR_CONNECTION_CONNECTED : XCB_RANDR_CONNECTION_DISCONNECTED, + kscreenOutput->isPrimary()); ++ if (xOutput->crtc()) ++ xOutput->crtc()->updateTimestamp(reply->timestamp); + } + return (reply->status == XCB_RANDR_SET_CONFIG_SUCCESS); + } +@@ -573,7 +575,7 @@ bool XRandRConfig::changeOutput(const KScreen::OutputPtr &kscreenOutput) const + << "\n" + << "\tCRTC:" << xOutput->crtc()->crtc() << "\n" + << "\tPos:" << kscreenOutput->pos() << "\n" +- << "\tMode:" << modeId << kscreenOutput->currentMode() << "\n" ++ << "\tMode:" << kscreenOutput->currentMode() << "Preferred:" << kscreenOutput->preferredModeId() << "\n" + << "\tRotation:" << kscreenOutput->rotation(); + + if (!sendConfig(kscreenOutput, xOutput->crtc())) { +@@ -605,6 +607,9 @@ bool XRandRConfig::sendConfig(const KScreen::OutputPtr &kscreenOutput, XRandRCrt + qCDebug(KSCREEN_XRANDR) << "\tResult: unknown (error)"; + return false; + } +- qCDebug(KSCREEN_XRANDR) << "\tResult: " << reply->status; ++ ++ crtc->updateTimestamp(reply->timestamp); ++ ++ qCDebug(KSCREEN_XRANDR) << "\tResult: " << reply->status << " timestamp: " << reply->timestamp; + return (reply->status == XCB_RANDR_SET_CONFIG_SUCCESS); + } +diff --git a/backends/xrandr/xrandrcrtc.cpp b/backends/xrandr/xrandrcrtc.cpp +index c3cd291..9209501 100644 +--- a/backends/xrandr/xrandrcrtc.cpp ++++ b/backends/xrandr/xrandrcrtc.cpp +@@ -16,6 +16,8 @@ XRandRCrtc::XRandRCrtc(xcb_randr_crtc_t crtc, XRandRConfig *config) + , m_crtc(crtc) + , m_mode(0) + , m_rotation(XCB_RANDR_ROTATION_ROTATE_0) ++ , m_timestamp(XCB_CURRENT_TIME) ++ , m_configTimestamp(XCB_CURRENT_TIME) + { + update(); + } +@@ -111,3 +113,24 @@ void XRandRCrtc::update(xcb_randr_mode_t mode, xcb_randr_rotation_t rotation, co + m_geometry = geom; + m_rotation = rotation; + } ++ ++void XRandRCrtc::updateTimestamp(const xcb_timestamp_t tmstamp) ++{ ++ if (tmstamp > m_timestamp) { ++ qCDebug(KSCREEN_XRANDR) << "XRandRCrtc " << m_crtc << " m_timestamp update " << m_timestamp << " => " << tmstamp; ++ m_timestamp = tmstamp; ++ } ++} ++ ++void XRandRCrtc::updateConfigTimestamp(const xcb_timestamp_t tmstamp) ++{ ++ if (tmstamp > m_configTimestamp) { ++ qCDebug(KSCREEN_XRANDR) << "XRandRCrtc " << m_crtc << " m_configTimestamp update" << m_configTimestamp << " => " << tmstamp; ++ m_configTimestamp = tmstamp; ++ } ++} ++ ++bool XRandRCrtc::isChangedFromOutside() const ++{ ++ return m_configTimestamp > m_timestamp; ++} +diff --git a/backends/xrandr/xrandrcrtc.h b/backends/xrandr/xrandrcrtc.h +index 4de4a09..8be23d2 100644 +--- a/backends/xrandr/xrandrcrtc.h ++++ b/backends/xrandr/xrandrcrtc.h +@@ -41,6 +41,10 @@ public: + void update(); + void update(xcb_randr_crtc_t mode, xcb_randr_rotation_t rotation, const QRect &geom); + ++ void updateTimestamp(const xcb_timestamp_t tmstamp); ++ void updateConfigTimestamp(const xcb_timestamp_t tmstamp); ++ bool isChangedFromOutside() const; ++ + private: + xcb_randr_crtc_t m_crtc; + xcb_randr_mode_t m_mode; +@@ -50,4 +54,7 @@ private: + + QVector m_possibleOutputs; + QVector m_outputs; ++ ++ xcb_timestamp_t m_timestamp; ++ xcb_timestamp_t m_configTimestamp; + }; +diff --git a/backends/xrandr/xrandroutput.cpp b/backends/xrandr/xrandroutput.cpp +index 92a39cf..4aa2290 100644 +--- a/backends/xrandr/xrandroutput.cpp ++++ b/backends/xrandr/xrandroutput.cpp +@@ -403,7 +403,7 @@ KScreen::OutputPtr XRandROutput::toKScreenOutput() const + + // See https://bugzilla.redhat.com/show_bug.cgi?id=1290586 + // QXL will be creating a new mode we need to jump to every time the display is resized +- kscreenOutput->setFollowPreferredMode(m_hotplugModeUpdate); ++ kscreenOutput->setFollowPreferredMode(m_hotplugModeUpdate && m_crtc && m_crtc->isChangedFromOutside()); + + kscreenOutput->setConnected(isConnected()); + if (isConnected()) { +-- +GitLab + diff --git a/source/kde/kde/patch/libkscreen/cf0921f3fbde31cb94b9ccddcaba36da3a488483.patch b/source/kde/kde/patch/libkscreen/cf0921f3fbde31cb94b9ccddcaba36da3a488483.patch new file mode 100644 index 00000000..38e932be --- /dev/null +++ b/source/kde/kde/patch/libkscreen/cf0921f3fbde31cb94b9ccddcaba36da3a488483.patch @@ -0,0 +1,219 @@ +From cf0921f3fbde31cb94b9ccddcaba36da3a488483 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?M=C3=A9ven=20Car?= +Date: Thu, 2 Dec 2021 16:04:20 +0000 +Subject: [PATCH] Under X11 ignore per-screen scale to compute logicalSize + +--- + src/config.cpp | 32 ++++++++++++++++++++++++++++++++ + src/config.h | 4 ++++ + src/output.cpp | 39 +++++++++------------------------------ + src/output.h | 18 ++++-------------- + 4 files changed, 49 insertions(+), 44 deletions(-) + mode change 100644 => 100755 src/output.h + +diff --git a/src/config.cpp b/src/config.cpp +index 37e1038..41abf70 100644 +--- a/src/config.cpp ++++ b/src/config.cpp +@@ -325,6 +325,7 @@ void Config::setPrimaryOutput(const OutputPtr &newPrimary) + void Config::addOutput(const OutputPtr &output) + { + d->outputs.insert(output->id(), output); ++ output->setExplicitLogicalSize(logicalSizeForOutput(*output)); + connect(output.data(), &KScreen::Output::isPrimaryChanged, d, &KScreen::Config::Private::onPrimaryOutputChanged); + + Q_EMIT outputAdded(output); +@@ -391,6 +392,37 @@ void Config::apply(const ConfigPtr &other) + setValid(other->isValid()); + } + ++QRect Config::outputGeometryForOutput(const KScreen::Output &output) const ++{ ++ QSize size = logicalSizeForOutput(output).toSize(); ++ if (!size.isValid()) { ++ return QRect(); ++ } ++ ++ return QRect(output.pos(), size); ++} ++ ++QSizeF Config::logicalSizeForOutput(const KScreen::Output &output) const ++{ ++ QSizeF size = output.enforcedModeSize(); ++ if (!size.isValid()) { ++ return QSizeF(); ++ } ++ // ignore scale where scaling is not per-output ++ if (supportedFeatures().testFlag(Feature::PerOutputScaling)) { ++ size = size / output.scale(); ++ } ++ ++ // We can't use output.size(), because it does not reflect the actual rotation() set by caller. ++ // It is only updated when we get update from KScreen, but not when user changes mode or ++ // rotation manually. ++ ++ if (!output.isHorizontal()) { ++ size = size.transposed(); ++ } ++ return size; ++} ++ + QDebug operator<<(QDebug dbg, const KScreen::ConfigPtr &config) + { + if (config) { +diff --git a/src/config.h b/src/config.h +index 551d7d0..4629dab 100644 +--- a/src/config.h ++++ b/src/config.h +@@ -190,6 +190,10 @@ public: + */ + void setTabletModeEngaged(bool engaged); + ++ QRect outputGeometryForOutput(const KScreen::Output &output) const; ++ ++ QSizeF logicalSizeForOutput(const KScreen::Output &output) const; ++ + Q_SIGNALS: + void outputAdded(const KScreen::OutputPtr &output); + void outputRemoved(int outputId); +diff --git a/src/output.cpp b/src/output.cpp +index c7f5949..a0fae28 100644 +--- a/src/output.cpp ++++ b/src/output.cpp +@@ -13,6 +13,7 @@ + #include "mode.h" + + #include ++#include + #include + #include + #include +@@ -28,7 +29,7 @@ public: + , replicationSource(0) + , rotation(None) + , scale(1.0) +- , logicalSize(QSizeF()) ++ , explicitLogicalSize(QSizeF()) + , connected(false) + , enabled(false) + , primary(false) +@@ -87,7 +88,7 @@ public: + QSize size; + Rotation rotation; + qreal scale; +- QSizeF logicalSize; ++ QSizeF explicitLogicalSize; + bool connected; + bool enabled; + bool primary; +@@ -459,40 +460,18 @@ void Output::setScale(qreal factor) + Q_EMIT scaleChanged(); + } + +-QSizeF Output::logicalSize() const +-{ +- if (d->logicalSize.isValid()) { +- return d->logicalSize; +- } +- +- QSizeF size = enforcedModeSize(); +- if (!size.isValid()) { +- return QSizeF(); +- } +- size = size / d->scale; +- +- // We can't use d->size, because d->size does not reflect the actual rotation() set by caller. +- // It is only updated when we get update from KScreen, but not when user changes mode or +- // rotation manually. +- +- if (!isHorizontal()) { +- size = size.transposed(); +- } +- return size; +-} +- + QSizeF Output::explicitLogicalSize() const + { +- return d->logicalSize; ++ return d->explicitLogicalSize; + } + +-void Output::setLogicalSize(const QSizeF &size) ++void Output::setExplicitLogicalSize(const QSizeF &size) + { +- if (qFuzzyCompare(d->logicalSize.width(), size.width()) && qFuzzyCompare(d->logicalSize.height(), size.height())) { ++ if (qFuzzyCompare(d->explicitLogicalSize.width(), size.width()) && qFuzzyCompare(d->explicitLogicalSize.height(), size.height())) { + return; + } +- d->logicalSize = size; +- Q_EMIT logicalSizeChanged(); ++ d->explicitLogicalSize = size; ++ Q_EMIT explicitLogicalSizeChanged(); + } + + bool Output::isConnected() const +@@ -628,7 +607,7 @@ QSize Output::enforcedModeSize() const + + QRect Output::geometry() const + { +- QSize size = logicalSize().toSize(); ++ QSize size = explicitLogicalSize().toSize(); + if (!size.isValid()) { + return QRect(); + } +diff --git a/src/output.h b/src/output.h +old mode 100644 +new mode 100755 +index 2b23ac4..7edb74c +--- a/src/output.h ++++ b/src/output.h +@@ -47,7 +47,7 @@ public: + Q_PROPERTY(QSize sizeMm READ sizeMm CONSTANT) + Q_PROPERTY(qreal scale READ scale WRITE setScale NOTIFY scaleChanged) + Q_PROPERTY(bool followPreferredMode READ followPreferredMode WRITE setFollowPreferredMode NOTIFY followPreferredModeChanged) +- Q_PROPERTY(QSizeF logicalSize READ logicalSize WRITE setLogicalSize NOTIFY logicalSizeChanged) ++ Q_PROPERTY(QSizeF explicitLogicalSize READ explicitLogicalSize WRITE setExplicitLogicalSize NOTIFY explicitLogicalSizeChanged) + Q_PROPERTY(Capabilities capabilities READ capabilities NOTIFY capabilitiesChanged) + Q_PROPERTY(uint32_t overscan READ overscan WRITE setOverscan NOTIFY overscanChanged) + Q_PROPERTY(VrrPolicy vrrPolicy READ vrrPolicy WRITE setVrrPolicy NOTIFY vrrPolicyChanged) +@@ -311,16 +311,6 @@ public: + */ + void setScale(qreal factor); + +- /** +- * The logical size is the output's representation internal to the display server and its +- * overall screen geometry. +- * +- * returns the logical size of this output +- * +- * @since 5.18 +- */ +- QSizeF logicalSize() const; +- + /** + * The logical size is the output's representation internal to the display server and its + * overall screen geometry. +@@ -338,9 +328,9 @@ public: + * + * @param size of this output in logical space + * +- * @since 5.18 ++ * @since 5.24 + */ +- void setLogicalSize(const QSizeF &size); ++ void setExplicitLogicalSize(const QSizeF &size); + + /** + * @returns whether the mode should be changed to the new preferred mode +@@ -421,7 +411,7 @@ Q_SIGNALS: + void clonesChanged(); + void replicationSourceChanged(); + void scaleChanged(); +- void logicalSizeChanged(); ++ void explicitLogicalSizeChanged(); + void followPreferredModeChanged(bool followPreferredMode); + void capabilitiesChanged(); + void overscanChanged(); +-- +GitLab + diff --git a/source/l/vte/vte.url b/source/l/vte/vte.url new file mode 100644 index 00000000..b9a7d0ce --- /dev/null +++ b/source/l/vte/vte.url @@ -0,0 +1 @@ +https://gitlab.gnome.org/GNOME/vte diff --git a/source/xap/mozilla-firefox/mozilla-firefox.SlackBuild b/source/xap/mozilla-firefox/mozilla-firefox.SlackBuild index e448ee7a..6d0682fb 100755 --- a/source/xap/mozilla-firefox/mozilla-firefox.SlackBuild +++ b/source/xap/mozilla-firefox/mozilla-firefox.SlackBuild @@ -28,7 +28,7 @@ cd $(dirname $0) ; CWD=$(pwd) PKGNAM=mozilla-firefox VERSION=$(basename $(ls firefox-*.tar.?z | cut -d - -f 2 | rev | cut -f 3- -d . | rev) .source) RELEASEVER=$(echo $VERSION | cut -f 1 -d r | cut -f 1 -d b | cut -f 1 -d e) -BUILD=${BUILD:-2} +BUILD=${BUILD:-1} # Specify this variable for a localized build. # For example, to build a version of Firefox with Italian support, run -- cgit v1.2.3