From 517fb1766fff7e6ac07541c3477c475295f05961 Mon Sep 17 00:00:00 2001 From: Patrick J Volkerding Date: Thu, 10 Feb 2022 01:46:55 +0000 Subject: Thu Feb 10 01:46:55 UTC 2022 Well here we are a week later... welcome back to -current with a bunch of new updates. Had to give marav's script something to kick out. If it were April 1st maybe I would have put a fake 15.1 release announcement here. ;-) I'll probably take some time off eventually but there were too many updates that I skipped during late RC, and I love doing this, so... enjoy! a/aaa_base-15.1-x86_64-1.txz: Upgraded. a/btrfs-progs-5.16.1-x86_64-1.txz: Upgraded. a/dialog-1.3_20220117-x86_64-1.txz: Upgraded. a/ed-1.18-x86_64-1.txz: Upgraded. a/findutils-4.9.0-x86_64-1.txz: Upgraded. a/hwdata-0.356-noarch-1.txz: Upgraded. a/kernel-generic-5.16.8-x86_64-1.txz: Upgraded. a/kernel-huge-5.16.8-x86_64-1.txz: Upgraded. a/kernel-modules-5.16.8-x86_64-1.txz: Upgraded. a/lzip-1.23-x86_64-1.txz: Upgraded. a/tcsh-6.24.00-x86_64-1.txz: Upgraded. ap/alsa-utils-1.2.6-x86_64-1.txz: Upgraded. ap/at-3.2.3-x86_64-1.txz: Upgraded. Switched to at-3.2.3 since version 3.2.4 has a regression that causes queued jobs to not always run on time when atd is run as a standalone daemon. Thanks to Cesare. ap/cups-2.4.1-x86_64-1.txz: Upgraded. ap/man-db-2.10.0-x86_64-1.txz: Upgraded. ap/mariadb-10.6.5-x86_64-1.txz: Upgraded. ap/nano-6.1-x86_64-1.txz: Upgraded. d/kernel-headers-5.16.8-x86-1.txz: Upgraded. d/llvm-13.0.1-x86_64-1.txz: Upgraded. d/mercurial-6.0.2-x86_64-1.txz: Upgraded. d/poke-2.1-x86_64-1.txz: Upgraded. d/re2c-3.0-x86_64-1.txz: Upgraded. k/kernel-source-5.16.8-noarch-1.txz: Upgraded. +FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION y kde/akonadi-21.12.2-x86_64-1.txz: Upgraded. kde/akonadi-calendar-21.12.2-x86_64-1.txz: Upgraded. kde/akonadi-calendar-tools-21.12.2-x86_64-1.txz: Upgraded. kde/akonadi-contacts-21.12.2-x86_64-1.txz: Upgraded. kde/akonadi-import-wizard-21.12.2-x86_64-1.txz: Upgraded. kde/akonadi-mime-21.12.2-x86_64-1.txz: Upgraded. kde/akonadi-notes-21.12.2-x86_64-1.txz: Upgraded. kde/akonadi-search-21.12.2-x86_64-1.txz: Upgraded. kde/akonadiconsole-21.12.2-x86_64-1.txz: Upgraded. kde/akregator-21.12.2-x86_64-1.txz: Upgraded. kde/analitza-21.12.2-x86_64-1.txz: Upgraded. kde/ark-21.12.2-x86_64-1.txz: Upgraded. kde/artikulate-21.12.2-x86_64-1.txz: Upgraded. kde/audiocd-kio-21.12.2-x86_64-1.txz: Upgraded. kde/baloo-widgets-21.12.2-x86_64-1.txz: Upgraded. kde/blinken-21.12.2-x86_64-1.txz: Upgraded. kde/bluedevil-5.24.0-x86_64-1.txz: Upgraded. kde/bomber-21.12.2-x86_64-1.txz: Upgraded. kde/bovo-21.12.2-x86_64-1.txz: Upgraded. kde/breeze-5.24.0-x86_64-1.txz: Upgraded. kde/breeze-grub-5.24.0-x86_64-1.txz: Upgraded. kde/breeze-gtk-5.24.0-x86_64-1.txz: Upgraded. kde/calendarsupport-21.12.2-x86_64-1.txz: Upgraded. kde/cantor-21.12.2-x86_64-1.txz: Upgraded. kde/cervisia-21.12.2-x86_64-1.txz: Upgraded. kde/dolphin-21.12.2.1-x86_64-1.txz: Upgraded. kde/dolphin-plugins-21.12.2-x86_64-1.txz: Upgraded. kde/dragon-21.12.2-x86_64-1.txz: Upgraded. kde/drkonqi-5.24.0-x86_64-1.txz: Upgraded. kde/elisa-21.12.2-x86_64-1.txz: Upgraded. kde/eventviews-21.12.2-x86_64-1.txz: Upgraded. kde/ffmpegthumbs-21.12.2-x86_64-1.txz: Upgraded. kde/filelight-21.12.2-x86_64-1.txz: Upgraded. kde/granatier-21.12.2-x86_64-1.txz: Upgraded. kde/grantlee-editor-21.12.2-x86_64-1.txz: Upgraded. kde/grantleetheme-21.12.2-x86_64-1.txz: Upgraded. kde/gwenview-21.12.2-x86_64-1.txz: Upgraded. kde/incidenceeditor-21.12.2-x86_64-1.txz: Upgraded. kde/itinerary-21.12.2-x86_64-1.txz: Upgraded. kde/juk-21.12.2-x86_64-1.txz: Upgraded. kde/k3b-21.12.2-x86_64-1.txz: Upgraded. kde/kactivitymanagerd-5.24.0-x86_64-1.txz: Upgraded. kde/kaddressbook-21.12.2-x86_64-1.txz: Upgraded. kde/kalarm-21.12.2-x86_64-1.txz: Upgraded. kde/kalarmcal-21.12.2-x86_64-1.txz: Upgraded. kde/kalgebra-21.12.2-x86_64-1.txz: Upgraded. kde/kalzium-21.12.2-x86_64-1.txz: Upgraded. kde/kamera-21.12.2-x86_64-1.txz: Upgraded. kde/kamoso-21.12.2-x86_64-1.txz: Upgraded. kde/kanagram-21.12.2-x86_64-1.txz: Upgraded. kde/kapman-21.12.2-x86_64-1.txz: Upgraded. kde/kapptemplate-21.12.2-x86_64-1.txz: Upgraded. kde/kate-21.12.2-x86_64-1.txz: Upgraded. kde/katomic-21.12.2-x86_64-1.txz: Upgraded. kde/kbackup-21.12.2-x86_64-1.txz: Upgraded. kde/kblackbox-21.12.2-x86_64-1.txz: Upgraded. kde/kblocks-21.12.2-x86_64-1.txz: Upgraded. kde/kbounce-21.12.2-x86_64-1.txz: Upgraded. kde/kbreakout-21.12.2-x86_64-1.txz: Upgraded. kde/kbruch-21.12.2-x86_64-1.txz: Upgraded. kde/kcachegrind-21.12.2-x86_64-1.txz: Upgraded. kde/kcalc-21.12.2-x86_64-1.txz: Upgraded. kde/kcalutils-21.12.2-x86_64-1.txz: Upgraded. kde/kcharselect-21.12.2-x86_64-1.txz: Upgraded. kde/kcolorchooser-21.12.2-x86_64-1.txz: Upgraded. kde/kcron-21.12.2-x86_64-1.txz: Upgraded. kde/kde-cli-tools-5.24.0-x86_64-1.txz: Upgraded. kde/kde-dev-scripts-21.12.2-x86_64-1.txz: Upgraded. kde/kde-dev-utils-21.12.2-x86_64-1.txz: Upgraded. kde/kde-gtk-config-5.24.0-x86_64-1.txz: Upgraded. kde/kdebugsettings-21.12.2-x86_64-1.txz: Upgraded. kde/kdeconnect-kde-21.12.2-x86_64-1.txz: Upgraded. kde/kdecoration-5.24.0-x86_64-1.txz: Upgraded. kde/kdeedu-data-21.12.2-x86_64-1.txz: Upgraded. kde/kdegraphics-mobipocket-21.12.2-x86_64-1.txz: Upgraded. kde/kdegraphics-thumbnailers-21.12.2-x86_64-1.txz: Upgraded. kde/kdenetwork-filesharing-21.12.2-x86_64-1.txz: Upgraded. kde/kdenlive-21.12.2-x86_64-1.txz: Upgraded. kde/kdepim-addons-21.12.2-x86_64-1.txz: Upgraded. kde/kdepim-runtime-21.12.2-x86_64-1.txz: Upgraded. kde/kdeplasma-addons-5.24.0-x86_64-1.txz: Upgraded. kde/kdesdk-kioslaves-21.12.2-x86_64-1.txz: Upgraded. kde/kdesdk-thumbnailers-21.12.2-x86_64-1.txz: Upgraded. kde/kdev-php-21.12.2-x86_64-1.txz: Upgraded. kde/kdev-python-21.12.2-x86_64-1.txz: Upgraded. kde/kdevelop-21.12.2-x86_64-1.txz: Upgraded. kde/kdf-21.12.2-x86_64-1.txz: Upgraded. kde/kdialog-21.12.2-x86_64-1.txz: Upgraded. kde/kdiamond-21.12.2-x86_64-1.txz: Upgraded. kde/keditbookmarks-21.12.2-x86_64-1.txz: Upgraded. kde/kfind-21.12.2-x86_64-1.txz: Upgraded. kde/kfloppy-21.12.2-x86_64-1.txz: Upgraded. kde/kfourinline-21.12.2-x86_64-1.txz: Upgraded. kde/kgamma5-5.24.0-x86_64-1.txz: Upgraded. kde/kgeography-21.12.2-x86_64-1.txz: Upgraded. kde/kget-21.12.2-x86_64-1.txz: Upgraded. kde/kgoldrunner-21.12.2-x86_64-1.txz: Upgraded. kde/kgpg-21.12.2-x86_64-1.txz: Upgraded. kde/khangman-21.12.2-x86_64-1.txz: Upgraded. kde/khelpcenter-21.12.2-x86_64-1.txz: Upgraded. kde/khotkeys-5.24.0-x86_64-1.txz: Upgraded. kde/kidentitymanagement-21.12.2-x86_64-1.txz: Upgraded. kde/kig-21.12.2-x86_64-1.txz: Upgraded. kde/kigo-21.12.2-x86_64-1.txz: Upgraded. kde/killbots-21.12.2-x86_64-1.txz: Upgraded. kde/kimagemapeditor-21.12.2-x86_64-1.txz: Upgraded. kde/kimap-21.12.2-x86_64-1.txz: Upgraded. kde/kinfocenter-5.24.0-x86_64-1.txz: Upgraded. kde/kio-extras-21.12.2-x86_64-1.txz: Upgraded. kde/kio-gdrive-21.12.2-x86_64-1.txz: Upgraded. kde/kipi-plugins-21.12.2-x86_64-1.txz: Upgraded. kde/kirigami-gallery-21.12.2-x86_64-1.txz: Upgraded. kde/kiriki-21.12.2-x86_64-1.txz: Upgraded. kde/kiten-21.12.2-x86_64-1.txz: Upgraded. kde/kitinerary-21.12.2-x86_64-1.txz: Upgraded. kde/kjumpingcube-21.12.2-x86_64-1.txz: Upgraded. kde/kldap-21.12.2-x86_64-1.txz: Upgraded. kde/kleopatra-21.12.2-x86_64-1.txz: Upgraded. kde/klickety-21.12.2-x86_64-1.txz: Upgraded. kde/klines-21.12.2-x86_64-1.txz: Upgraded. kde/kmag-21.12.2-x86_64-1.txz: Upgraded. kde/kmahjongg-21.12.2-x86_64-1.txz: Upgraded. kde/kmail-21.12.2-x86_64-1.txz: Upgraded. kde/kmail-account-wizard-21.12.2-x86_64-1.txz: Upgraded. kde/kmailtransport-21.12.2-x86_64-1.txz: Upgraded. kde/kmbox-21.12.2-x86_64-1.txz: Upgraded. kde/kmenuedit-5.24.0-x86_64-1.txz: Upgraded. kde/kmime-21.12.2-x86_64-1.txz: Upgraded. kde/kmines-21.12.2-x86_64-1.txz: Upgraded. kde/kmix-21.12.2-x86_64-1.txz: Upgraded. kde/kmousetool-21.12.2-x86_64-1.txz: Upgraded. kde/kmouth-21.12.2-x86_64-1.txz: Upgraded. kde/kmplot-21.12.2-x86_64-1.txz: Upgraded. kde/knavalbattle-21.12.2-x86_64-1.txz: Upgraded. kde/knetwalk-21.12.2-x86_64-1.txz: Upgraded. kde/knights-21.12.2-x86_64-1.txz: Upgraded. kde/knotes-21.12.2-x86_64-1.txz: Upgraded. kde/kolf-21.12.2-x86_64-1.txz: Upgraded. kde/kollision-21.12.2-x86_64-1.txz: Upgraded. kde/kolourpaint-21.12.2-x86_64-1.txz: Upgraded. kde/kompare-21.12.2-x86_64-1.txz: Upgraded. kde/konqueror-21.12.2-x86_64-1.txz: Upgraded. kde/konquest-21.12.2-x86_64-1.txz: Upgraded. kde/konsole-21.12.2-x86_64-1.txz: Upgraded. kde/kontact-21.12.2-x86_64-1.txz: Upgraded. kde/kontactinterface-21.12.2-x86_64-1.txz: Upgraded. kde/kontrast-21.12.2-x86_64-1.txz: Upgraded. kde/konversation-21.12.2-x86_64-1.txz: Upgraded. kde/kopeninghours-21.12.2-x86_64-1.txz: Upgraded. kde/kopete-21.12.2-x86_64-1.txz: Upgraded. kde/korganizer-21.12.2-x86_64-1.txz: Upgraded. kde/kosmindoormap-21.12.2-x86_64-1.txz: Upgraded. kde/kpat-21.12.2-x86_64-1.txz: Upgraded. kde/kpimtextedit-21.12.2-x86_64-1.txz: Upgraded. kde/kpkpass-21.12.2-x86_64-1.txz: Upgraded. kde/kpmcore-21.12.2-x86_64-1.txz: Upgraded. kde/kpublictransport-21.12.2-x86_64-1.txz: Upgraded. kde/kqtquickcharts-21.12.2-x86_64-1.txz: Upgraded. kde/krdc-21.12.2-x86_64-1.txz: Upgraded. kde/kreversi-21.12.2-x86_64-1.txz: Upgraded. kde/krfb-21.12.2-x86_64-1.txz: Upgraded. kde/kross-interpreters-21.12.2-x86_64-1.txz: Upgraded. kde/kruler-21.12.2-x86_64-1.txz: Upgraded. kde/kscreen-5.24.0-x86_64-1.txz: Upgraded. kde/kscreenlocker-5.24.0-x86_64-1.txz: Upgraded. kde/kshisen-21.12.2-x86_64-1.txz: Upgraded. kde/ksirk-21.12.2-x86_64-1.txz: Upgraded. kde/ksmtp-21.12.2-x86_64-1.txz: Upgraded. kde/ksnakeduel-21.12.2-x86_64-1.txz: Upgraded. kde/kspaceduel-21.12.2-x86_64-1.txz: Upgraded. kde/ksquares-21.12.2-x86_64-1.txz: Upgraded. kde/ksshaskpass-5.24.0-x86_64-1.txz: Upgraded. kde/ksudoku-21.12.2-x86_64-1.txz: Upgraded. kde/ksystemlog-21.12.2-x86_64-1.txz: Upgraded. kde/ksystemstats-5.24.0-x86_64-1.txz: Upgraded. kde/kteatime-21.12.2-x86_64-1.txz: Upgraded. kde/ktimer-21.12.2-x86_64-1.txz: Upgraded. kde/ktnef-21.12.2-x86_64-1.txz: Upgraded. kde/ktorrent-21.12.2-x86_64-1.txz: Upgraded. kde/ktouch-21.12.2-x86_64-1.txz: Upgraded. kde/kturtle-21.12.2-x86_64-1.txz: Upgraded. kde/kubrick-21.12.2-x86_64-1.txz: Upgraded. kde/kwallet-pam-5.24.0-x86_64-1.txz: Upgraded. kde/kwalletmanager-21.12.2-x86_64-1.txz: Upgraded. kde/kwave-21.12.2-x86_64-1.txz: Upgraded. kde/kwayland-integration-5.24.0-x86_64-1.txz: Upgraded. kde/kwayland-server-5.24.0-x86_64-1.txz: Upgraded. kde/kwin-5.24.0-x86_64-1.txz: Upgraded. kde/kwordquiz-21.12.2-x86_64-1.txz: Upgraded. kde/kwrited-5.24.0-x86_64-1.txz: Upgraded. kde/layer-shell-qt-5.24.0-x86_64-1.txz: Upgraded. kde/libgravatar-21.12.2-x86_64-1.txz: Upgraded. kde/libkcddb-21.12.2-x86_64-1.txz: Upgraded. kde/libkcompactdisc-21.12.2-x86_64-1.txz: Upgraded. kde/libkdcraw-21.12.2-x86_64-1.txz: Upgraded. kde/libkdegames-21.12.2-x86_64-1.txz: Upgraded. kde/libkdepim-21.12.2-x86_64-1.txz: Upgraded. kde/libkeduvocdocument-21.12.2-x86_64-1.txz: Upgraded. kde/libkexiv2-21.12.2-x86_64-1.txz: Upgraded. kde/libkgapi-21.12.2-x86_64-1.txz: Upgraded. kde/libkipi-21.12.2-x86_64-1.txz: Upgraded. kde/libkleo-21.12.2-x86_64-1.txz: Upgraded. kde/libkmahjongg-21.12.2-x86_64-1.txz: Upgraded. kde/libkomparediff2-21.12.2-x86_64-1.txz: Upgraded. kde/libksane-21.12.2-x86_64-1.txz: Upgraded. kde/libkscreen-5.24.0-x86_64-1.txz: Upgraded. kde/libksieve-21.12.2-x86_64-1.txz: Upgraded. kde/libksysguard-5.24.0-x86_64-1.txz: Upgraded. kde/libktorrent-21.12.2-x86_64-1.txz: Upgraded. kde/lokalize-21.12.2-x86_64-1.txz: Upgraded. kde/lskat-21.12.2-x86_64-1.txz: Upgraded. kde/mailcommon-21.12.2-x86_64-1.txz: Upgraded. kde/mailimporter-21.12.2-x86_64-1.txz: Upgraded. kde/marble-21.12.2-x86_64-1.txz: Upgraded. kde/markdownpart-21.12.2-x86_64-1.txz: Upgraded. kde/mbox-importer-21.12.2-x86_64-1.txz: Upgraded. kde/messagelib-21.12.2-x86_64-1.txz: Upgraded. kde/milou-5.24.0-x86_64-1.txz: Upgraded. kde/minuet-21.12.2-x86_64-1.txz: Upgraded. kde/okular-21.12.2-x86_64-1.txz: Upgraded. kde/oxygen-5.24.0-x86_64-1.txz: Upgraded. kde/palapeli-21.12.2-x86_64-1.txz: Upgraded. kde/parley-21.12.2-x86_64-1.txz: Upgraded. kde/partitionmanager-21.12.2-x86_64-1.txz: Upgraded. kde/picmi-21.12.2-x86_64-1.txz: Upgraded. kde/pim-data-exporter-21.12.2-x86_64-1.txz: Upgraded. kde/pim-sieve-editor-21.12.2-x86_64-1.txz: Upgraded. kde/pimcommon-21.12.2-x86_64-1.txz: Upgraded. kde/plasma-browser-integration-5.24.0-x86_64-1.txz: Upgraded. kde/plasma-desktop-5.24.0-x86_64-1.txz: Upgraded. kde/plasma-disks-5.24.0-x86_64-1.txz: Upgraded. kde/plasma-firewall-5.24.0-x86_64-1.txz: Upgraded. kde/plasma-integration-5.24.0-x86_64-1.txz: Upgraded. kde/plasma-nm-5.24.0-x86_64-1.txz: Upgraded. kde/plasma-pa-5.24.0-x86_64-1.txz: Upgraded. kde/plasma-sdk-5.24.0-x86_64-1.txz: Upgraded. kde/plasma-systemmonitor-5.24.0-x86_64-1.txz: Upgraded. kde/plasma-vault-5.24.0-x86_64-1.txz: Upgraded. kde/plasma-workspace-5.24.0-x86_64-1.txz: Upgraded. kde/plasma-workspace-wallpapers-5.24.0-x86_64-1.txz: Upgraded. kde/polkit-kde-agent-1-5.24.0-x86_64-1.txz: Upgraded. kde/powerdevil-5.24.0-x86_64-1.txz: Upgraded. kde/poxml-21.12.2-x86_64-1.txz: Upgraded. kde/print-manager-21.12.2-x86_64-1.txz: Upgraded. kde/qqc2-breeze-style-5.24.0-x86_64-1.txz: Upgraded. kde/rocs-21.12.2-x86_64-1.txz: Upgraded. kde/sddm-kcm-5.24.0-x86_64-1.txz: Upgraded. kde/skanlite-21.12.2-x86_64-1.txz: Upgraded. kde/spectacle-21.12.2-x86_64-1.txz: Upgraded. kde/step-21.12.2-x86_64-1.txz: Upgraded. kde/svgpart-21.12.2-x86_64-1.txz: Upgraded. kde/sweeper-21.12.2-x86_64-1.txz: Upgraded. kde/systemsettings-5.24.0-x86_64-1.txz: Upgraded. kde/umbrello-21.12.2-x86_64-1.txz: Upgraded. kde/xdg-desktop-portal-kde-5.24.0-x86_64-1.txz: Upgraded. kde/yakuake-21.12.2-x86_64-1.txz: Upgraded. kde/zanshin-21.12.2-x86_64-1.txz: Upgraded. kde/zeroconf-ioslave-21.12.2-x86_64-1.txz: Upgraded. l/alsa-lib-1.2.6.1-x86_64-1.txz: Upgraded. l/alsa-plugins-1.2.6-x86_64-1.txz: Upgraded. l/gdbm-1.23-x86_64-1.txz: Upgraded. l/gjs-1.70.1-x86_64-1.txz: Upgraded. l/gst-plugins-bad-free-1.20.0-x86_64-1.txz: Upgraded. l/gst-plugins-base-1.20.0-x86_64-1.txz: Upgraded. l/gst-plugins-good-1.20.0-x86_64-1.txz: Upgraded. l/gst-plugins-libav-1.20.0-x86_64-1.txz: Upgraded. l/gstreamer-1.20.0-x86_64-1.txz: Upgraded. l/harfbuzz-3.3.2-x86_64-1.txz: Upgraded. l/imagemagick-7.1.0_23-x86_64-1.txz: Upgraded. l/lcms2-2.13.1-x86_64-1.txz: Upgraded. l/libical-3.0.14-x86_64-1.txz: Upgraded. l/mozilla-nss-3.75-x86_64-1.txz: Upgraded. l/pipewire-0.3.45-x86_64-1.txz: Upgraded. l/quazip-1.2-x86_64-1.txz: Upgraded. n/bind-9.18.0-x86_64-1.txz: Upgraded. n/dovecot-2.3.18-x86_64-1.txz: Upgraded. n/gnupg2-2.2.34-x86_64-1.txz: Upgraded. n/gnutls-3.7.3-x86_64-1.txz: Upgraded. n/libgcrypt-1.10.0-x86_64-1.txz: Upgraded. n/postfix-3.7.0-x86_64-1.txz: Upgraded. x/freeglut-3.2.2-x86_64-1.txz: Upgraded. xap/mozilla-firefox-97.0-x86_64-1.txz: Upgraded. This release contains security fixes and improvements. For more information, see: https://www.mozilla.org/en-US/firefox/97.0/releasenotes/ https://www.mozilla.org/security/advisories/mfsa2022-04/ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-22753 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-22754 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-22755 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-22756 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-22757 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-22758 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-22759 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-22760 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-22761 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-22762 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-22764 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-0511 (* Security fix *) xap/mozilla-thunderbird-91.6.0-x86_64-1.txz: Upgraded. This release contains security fixes and improvements. For more information, see: https://www.mozilla.org/en-US/thunderbird/91.6.0/releasenotes/ https://www.mozilla.org/en-US/security/known-vulnerabilities/thunderbird/#thunderbird91.6 (* Security fix *) extra/rust-for-mozilla/rust-1.57.0-x86_64-1.txz: Upgraded. isolinux/initrd.img: Rebuilt. kernels/*: Upgraded. usb-and-pxe-installers/usbboot.img: Rebuilt. --- source/kde/FTBFSlog | 6 +- source/kde/kde/build/kate | 2 +- source/kde/kde/build/kig | 2 +- source/kde/kde/build/kopeninghours | 2 +- source/kde/kde/build/kwayland-server | 2 +- source/kde/kde/build/kwin | 2 +- source/kde/kde/build/plasma-workspace | 2 +- source/kde/kde/patch/kate.patch | 7 - .../361dd43e42994829dbdb35e78fb7698d27cbb0e2.patch | 87 -- .../6fc3bf6e5bd540e842e32c4a959c2158c8573be5.patch | 71 -- .../7e08a58fb50d28ba96aedd5f5cd79a9479b4a0ad.patch | 918 --------------------- .../92a9c65e30b4b63b8b116eb5c8dcb1e1a2d867bc.patch | 39 - .../c5d66f3b70ae4778d6162564309aee95f643e7c9.patch | 124 --- source/kde/kde/patch/kinfocenter.patch | 2 - .../kde/patch/kinfocenter/kinfocenter_libpci.patch | 17 - source/kde/kde/patch/kscreen.patch | 1 - source/kde/kde/patch/kscreen/57.patch | 189 ----- source/kde/kde/patch/kwayland-server.patch | 1 - .../5f5bea1648590f24f11ce232eb78112953a4d20e.patch | 29 - source/kde/kde/patch/libkscreen.patch | 2 - .../7eb0390bf70fc7fb5a39bd501ffcc327a07c328a.patch | 240 ------ .../cf0921f3fbde31cb94b9ccddcaba36da3a488483.patch | 219 ----- source/kde/kde/patch/plasma-nm.patch | 1 - .../80c47e577b80364c995aa0530a48e17c1a7e460f.patch | 82 -- source/kde/kde/patch/plasma-workspace.patch | 4 - ...-setupX11-from-startplasma-waylandsession.patch | 30 - ...-X11-root-properties-for-KDE-full-session.patch | 86 -- .../kde/kde/patch/plasma-workspace/70d23b89.patch | 52 -- .../926f864756e5586f38574c166abdb5befa3dc771.patch | 38 - 29 files changed, 8 insertions(+), 2249 deletions(-) delete mode 100644 source/kde/kde/patch/kate/361dd43e42994829dbdb35e78fb7698d27cbb0e2.patch delete mode 100644 source/kde/kde/patch/kate/6fc3bf6e5bd540e842e32c4a959c2158c8573be5.patch delete mode 100644 source/kde/kde/patch/kate/7e08a58fb50d28ba96aedd5f5cd79a9479b4a0ad.patch delete mode 100644 source/kde/kde/patch/kate/92a9c65e30b4b63b8b116eb5c8dcb1e1a2d867bc.patch delete mode 100644 source/kde/kde/patch/kate/c5d66f3b70ae4778d6162564309aee95f643e7c9.patch delete mode 100644 source/kde/kde/patch/kinfocenter.patch delete mode 100644 source/kde/kde/patch/kinfocenter/kinfocenter_libpci.patch delete mode 100644 source/kde/kde/patch/kscreen.patch delete mode 100644 source/kde/kde/patch/kscreen/57.patch delete mode 100644 source/kde/kde/patch/kwayland-server.patch delete mode 100644 source/kde/kde/patch/kwayland-server/5f5bea1648590f24f11ce232eb78112953a4d20e.patch delete mode 100644 source/kde/kde/patch/libkscreen.patch delete mode 100644 source/kde/kde/patch/libkscreen/7eb0390bf70fc7fb5a39bd501ffcc327a07c328a.patch delete mode 100644 source/kde/kde/patch/libkscreen/cf0921f3fbde31cb94b9ccddcaba36da3a488483.patch delete mode 100644 source/kde/kde/patch/plasma-nm.patch delete mode 100644 source/kde/kde/patch/plasma-nm/80c47e577b80364c995aa0530a48e17c1a7e460f.patch delete mode 100644 source/kde/kde/patch/plasma-workspace/0001-Revert-Drop-setupX11-from-startplasma-waylandsession.patch delete mode 100644 source/kde/kde/patch/plasma-workspace/0002-Revert-Drop-X11-root-properties-for-KDE-full-session.patch delete mode 100644 source/kde/kde/patch/plasma-workspace/70d23b89.patch delete mode 100644 source/kde/kde/patch/plasma-workspace/926f864756e5586f38574c166abdb5befa3dc771.patch (limited to 'source/kde') diff --git a/source/kde/FTBFSlog b/source/kde/FTBFSlog index dc6556f2d..859555ed5 100644 --- a/source/kde/FTBFSlog +++ b/source/kde/FTBFSlog @@ -1,5 +1,3 @@ -Sun Dec 12 19:21:35 UTC 2021 - kmymoney: Fix build with recent akonadi. Thanks to Daedra and nobodino. -+--------------------------+ -Sat Dec 5 23:01:14 UTC 2020 +Mon Feb 7 20:57:55 UTC 2022 All packages tested and found to compile properly. ++--------------------------+ diff --git a/source/kde/kde/build/kate b/source/kde/kde/build/kate index 0cfbf0888..d00491fd7 100644 --- a/source/kde/kde/build/kate +++ b/source/kde/kde/build/kate @@ -1 +1 @@ -2 +1 diff --git a/source/kde/kde/build/kig b/source/kde/kde/build/kig index 0cfbf0888..d00491fd7 100644 --- a/source/kde/kde/build/kig +++ b/source/kde/kde/build/kig @@ -1 +1 @@ -2 +1 diff --git a/source/kde/kde/build/kopeninghours b/source/kde/kde/build/kopeninghours index 0cfbf0888..d00491fd7 100644 --- a/source/kde/kde/build/kopeninghours +++ b/source/kde/kde/build/kopeninghours @@ -1 +1 @@ -2 +1 diff --git a/source/kde/kde/build/kwayland-server b/source/kde/kde/build/kwayland-server index 0cfbf0888..d00491fd7 100644 --- a/source/kde/kde/build/kwayland-server +++ b/source/kde/kde/build/kwayland-server @@ -1 +1 @@ -2 +1 diff --git a/source/kde/kde/build/kwin b/source/kde/kde/build/kwin index 0cfbf0888..d00491fd7 100644 --- a/source/kde/kde/build/kwin +++ b/source/kde/kde/build/kwin @@ -1 +1 @@ -2 +1 diff --git a/source/kde/kde/build/plasma-workspace b/source/kde/kde/build/plasma-workspace index 00750edc0..d00491fd7 100644 --- a/source/kde/kde/build/plasma-workspace +++ b/source/kde/kde/build/plasma-workspace @@ -1 +1 @@ -3 +1 diff --git a/source/kde/kde/patch/kate.patch b/source/kde/kde/patch/kate.patch index df3032eda..59df062a0 100644 --- a/source/kde/kde/patch/kate.patch +++ b/source/kde/kde/patch/kate.patch @@ -1,10 +1,3 @@ # Allow Kate to be started by the root user; disallowing this is not # a decision that a developer should make for the user, it is patronizing: cat $CWD/patch/kate/kate_runasroot.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; } - -# Fix KTextEditor/Kate: Missing validation of binaries executed via QProcess (CVE-2022-23853) -cat $CWD/patch/kate/361dd43e42994829dbdb35e78fb7698d27cbb0e2.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; } -cat $CWD/patch/kate/6fc3bf6e5bd540e842e32c4a959c2158c8573be5.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; } -cat $CWD/patch/kate/92a9c65e30b4b63b8b116eb5c8dcb1e1a2d867bc.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; } -cat $CWD/patch/kate/c5d66f3b70ae4778d6162564309aee95f643e7c9.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; } -cat $CWD/patch/kate/7e08a58fb50d28ba96aedd5f5cd79a9479b4a0ad.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; } diff --git a/source/kde/kde/patch/kate/361dd43e42994829dbdb35e78fb7698d27cbb0e2.patch b/source/kde/kde/patch/kate/361dd43e42994829dbdb35e78fb7698d27cbb0e2.patch deleted file mode 100644 index 4f7237aaa..000000000 --- a/source/kde/kde/patch/kate/361dd43e42994829dbdb35e78fb7698d27cbb0e2.patch +++ /dev/null @@ -1,87 +0,0 @@ -From 361dd43e42994829dbdb35e78fb7698d27cbb0e2 Mon Sep 17 00:00:00 2001 -From: Mark Nauwelaerts -Date: Mon, 13 Dec 2021 20:52:57 +0100 -Subject: [PATCH] lspclient: consider some additional server capabilities - ---- - addons/lspclient/lspclientprotocol.h | 14 +++++++++++++- - addons/lspclient/lspclientserver.cpp | 9 ++++++++- - addons/lspclient/lspclientservermanager.cpp | 2 +- - 3 files changed, 22 insertions(+), 3 deletions(-) - -diff --git a/addons/lspclient/lspclientprotocol.h b/addons/lspclient/lspclientprotocol.h -index 0fb7f4485..9de0ec511 100644 ---- a/addons/lspclient/lspclientprotocol.h -+++ b/addons/lspclient/lspclientprotocol.h -@@ -21,6 +21,8 @@ - #include - #include - -+#include -+ - // Following types roughly follow the types/interfaces as defined in LSP protocol spec - // although some deviation may arise where it has been deemed useful - // Moreover, to avoid introducing a custom 'optional' type, absence of an optional -@@ -51,6 +53,16 @@ struct LSPResponseError { - - enum class LSPDocumentSyncKind { None = 0, Full = 1, Incremental = 2 }; - -+struct LSPSaveOptions { -+ bool includeText = false; -+}; -+ -+// only used parts for now -+struct LSPTextDocumentSyncOptions { -+ LSPDocumentSyncKind change = LSPDocumentSyncKind::None; -+ std::optional save; -+}; -+ - struct LSPCompletionOptions { - bool provider = false; - bool resolveProvider = false; -@@ -81,7 +93,7 @@ struct LSPWorkspaceFoldersServerCapabilities { - }; - - struct LSPServerCapabilities { -- LSPDocumentSyncKind textDocumentSync = LSPDocumentSyncKind::None; -+ LSPTextDocumentSyncOptions textDocumentSync; - bool hoverProvider = false; - LSPCompletionOptions completionProvider; - LSPSignatureHelpOptions signatureHelpProvider; -diff --git a/addons/lspclient/lspclientserver.cpp b/addons/lspclient/lspclientserver.cpp -index 8739d46c9..a7094fde2 100644 ---- a/addons/lspclient/lspclientserver.cpp -+++ b/addons/lspclient/lspclientserver.cpp -@@ -344,8 +344,15 @@ static void from_json(LSPServerCapabilities &caps, const QJsonObject &json) - }; - - auto sync = json.value(QStringLiteral("textDocumentSync")); -- caps.textDocumentSync = static_cast( -+ caps.textDocumentSync.change = static_cast( - (sync.isObject() ? sync.toObject().value(QStringLiteral("change")) : sync).toInt(static_cast(LSPDocumentSyncKind::None))); -+ if (sync.isObject()) { -+ auto syncObject = sync.toObject(); -+ auto save = syncObject.value(QStringLiteral("save")); -+ if (save.isObject() || save.toBool()) { -+ caps.textDocumentSync.save = {save.toObject().value(QStringLiteral("includeText")).toBool()}; -+ } -+ } - caps.hoverProvider = toBoolOrObject(json.value(QStringLiteral("hoverProvider"))); - from_json(caps.completionProvider, json.value(QStringLiteral("completionProvider"))); - from_json(caps.signatureHelpProvider, json.value(QStringLiteral("signatureHelpProvider"))); -diff --git a/addons/lspclient/lspclientservermanager.cpp b/addons/lspclient/lspclientservermanager.cpp -index 1fbcf928f..1e03801ea 100644 ---- a/addons/lspclient/lspclientservermanager.cpp -+++ b/addons/lspclient/lspclientservermanager.cpp -@@ -931,7 +931,7 @@ private: - auto it = m_docs.find(doc); - if (it != m_docs.end() && it->server) { - const auto &caps = it->server->capabilities(); -- if (caps.textDocumentSync == LSPDocumentSyncKind::Incremental) { -+ if (caps.textDocumentSync.change == LSPDocumentSyncKind::Incremental) { - return &(*it); - } - } --- -GitLab - diff --git a/source/kde/kde/patch/kate/6fc3bf6e5bd540e842e32c4a959c2158c8573be5.patch b/source/kde/kde/patch/kate/6fc3bf6e5bd540e842e32c4a959c2158c8573be5.patch deleted file mode 100644 index cdbde70ff..000000000 --- a/source/kde/kde/patch/kate/6fc3bf6e5bd540e842e32c4a959c2158c8573be5.patch +++ /dev/null @@ -1,71 +0,0 @@ -From 6fc3bf6e5bd540e842e32c4a959c2158c8573be5 Mon Sep 17 00:00:00 2001 -From: Mark Nauwelaerts -Date: Mon, 13 Dec 2021 21:36:50 +0100 -Subject: [PATCH] lspclient: send didSave notification if so requested - ---- - addons/lspclient/lspclientserver.cpp | 7 +++++-- - addons/lspclient/lspclientservermanager.cpp | 15 +++++++++++++++ - 2 files changed, 20 insertions(+), 2 deletions(-) - -diff --git a/addons/lspclient/lspclientserver.cpp b/addons/lspclient/lspclientserver.cpp -index a7094fde2..9fb5844cd 100644 ---- a/addons/lspclient/lspclientserver.cpp -+++ b/addons/lspclient/lspclientserver.cpp -@@ -1255,7 +1255,8 @@ private: - {QStringLiteral("documentSymbol"), QJsonObject{{QStringLiteral("hierarchicalDocumentSymbolSupport"), true}} }, - {QStringLiteral("publishDiagnostics"), QJsonObject{{QStringLiteral("relatedInformation"), true}}}, - {QStringLiteral("codeAction"), codeAction}, -- {QStringLiteral("semanticTokens"), semanticTokens} -+ {QStringLiteral("semanticTokens"), semanticTokens}, -+ {QStringLiteral("synchronization"), QJsonObject{{QStringLiteral("didSave"), true}}}, - }, - }, - {QStringLiteral("window"), -@@ -1475,7 +1476,9 @@ public: - void didSave(const QUrl &document, const QString &text) - { - auto params = textDocumentParams(document); -- params[QStringLiteral("text")] = text; -+ if (!text.isNull()) { -+ params[QStringLiteral("text")] = text; -+ } - send(init_request(QStringLiteral("textDocument/didSave"), params)); - } - -diff --git a/addons/lspclient/lspclientservermanager.cpp b/addons/lspclient/lspclientservermanager.cpp -index 1e03801ea..551926e23 100644 ---- a/addons/lspclient/lspclientservermanager.cpp -+++ b/addons/lspclient/lspclientservermanager.cpp -@@ -833,6 +833,7 @@ private: - connect(doc, &KTextEditor::Document::aboutToClose, this, &self_type::untrack, Qt::UniqueConnection); - connect(doc, &KTextEditor::Document::destroyed, this, &self_type::untrack, Qt::UniqueConnection); - connect(doc, &KTextEditor::Document::textChanged, this, &self_type::onTextChanged, Qt::UniqueConnection); -+ connect(doc, &KTextEditor::Document::documentSavedOrUploaded, this, &self_type::onDocumentSaved, Qt::UniqueConnection); - // in case of incremental change - connect(doc, &KTextEditor::Document::textInserted, this, &self_type::onTextInserted, Qt::UniqueConnection); - connect(doc, &KTextEditor::Document::textRemoved, this, &self_type::onTextRemoved, Qt::UniqueConnection); -@@ -976,6 +977,20 @@ private: - } - } - -+ void onDocumentSaved(KTextEditor::Document *doc, bool saveAs) -+ { -+ if (!saveAs) { -+ auto it = m_docs.find(doc); -+ if (it != m_docs.end() && it->server) { -+ auto server = it->server; -+ const auto &saveOptions = server->capabilities().textDocumentSync.save; -+ if (saveOptions) { -+ server->didSave(doc->url(), saveOptions->includeText ? doc->text() : QString()); -+ } -+ } -+ } -+ } -+ - void onMessage(bool isLog, const LSPLogMessageParams ¶ms) - { - // determine server description --- -GitLab - diff --git a/source/kde/kde/patch/kate/7e08a58fb50d28ba96aedd5f5cd79a9479b4a0ad.patch b/source/kde/kde/patch/kate/7e08a58fb50d28ba96aedd5f5cd79a9479b4a0ad.patch deleted file mode 100644 index 456f33618..000000000 --- a/source/kde/kde/patch/kate/7e08a58fb50d28ba96aedd5f5cd79a9479b4a0ad.patch +++ /dev/null @@ -1,918 +0,0 @@ -From 7e08a58fb50d28ba96aedd5f5cd79a9479b4a0ad Mon Sep 17 00:00:00 2001 -From: Christoph Cullmann -Date: Mon, 24 Jan 2022 19:07:37 +0000 -Subject: [PATCH] improve QProcess handling - -ensure we take executables from PATH for execution instead possibly from current working directory -or the working directory set for the QProcess ---- - addons/compiler-explorer/compiledbreader.cpp | 4 +- - addons/externaltools/katetoolrunner.cpp | 9 +++- - addons/gdbplugin/debugview.cpp | 17 +++++++- - addons/git-blame/commitfilesview.cpp | 17 +++++--- - addons/git-blame/kategitblameplugin.cpp | 8 +++- - addons/kate-ctags/gotosymbolmodel.cpp | 15 +++++-- - addons/project/comparebranchesview.cpp | 4 +- - addons/project/filehistorywidget.cpp | 14 +++++-- - addons/project/git/gitutils.cpp | 41 +++++++++++++++---- - addons/project/gitwidget.cpp | 19 +++++++-- - addons/project/kateprojectindex.cpp | 9 +++- - .../kateprojectinfoviewcodeanalysis.cpp | 9 +++- - addons/project/kateprojectworker.cpp | 32 +++++++++++---- - addons/project/stashdialog.cpp | 20 ++++----- - addons/project/stashdialog.h | 2 +- - addons/replicode/replicodeview.cpp | 9 ++++ - addons/xmlcheck/plugin_katexmlcheck.cpp | 8 ++++ - kate/katefileactions.cpp | 17 ++++---- - kate/katefileactions.h | 4 +- - kate/katemwmodonhddialog.cpp | 6 ++- - kate/katemwmodonhddialog.h | 1 + - kate/kateviewspace.cpp | 7 +++- - shared/gitprocess.h | 16 +++++++- - 23 files changed, 217 insertions(+), 71 deletions(-) - -diff --git a/addons/compiler-explorer/compiledbreader.cpp b/addons/compiler-explorer/compiledbreader.cpp -index 74e83638e..ab9ebc483 100644 ---- a/addons/compiler-explorer/compiledbreader.cpp -+++ b/addons/compiler-explorer/compiledbreader.cpp -@@ -21,7 +21,9 @@ std::optional getDotGitPath(const QString &repo) - { - /* This call is intentionally blocking because we need git path for everything else */ - QProcess git; -- setupGitProcess(git, repo, {QStringLiteral("rev-parse"), QStringLiteral("--absolute-git-dir")}); -+ if (!setupGitProcess(git, repo, {QStringLiteral("rev-parse"), QStringLiteral("--absolute-git-dir")})) { -+ return std::nullopt; -+ } - git.start(QProcess::ReadOnly); - if (git.waitForStarted() && git.waitForFinished(-1)) { - if (git.exitStatus() != QProcess::NormalExit || git.exitCode() != 0) { -diff --git a/addons/externaltools/katetoolrunner.cpp b/addons/externaltools/katetoolrunner.cpp -index 10a5d7226..e14940ad7 100644 ---- a/addons/externaltools/katetoolrunner.cpp -+++ b/addons/externaltools/katetoolrunner.cpp -@@ -14,6 +14,7 @@ - #include - #include - #include -+#include - - KateToolRunner::KateToolRunner(std::unique_ptr tool, KTextEditor::View *view, QObject *parent) - : QObject(parent) -@@ -40,6 +41,12 @@ KateExternalTool *KateToolRunner::tool() const - - void KateToolRunner::run() - { -+ // always only execute the tool from PATH -+ const auto fullExecutable = QStandardPaths::findExecutable(m_tool->executable); -+ if (fullExecutable.isEmpty()) { -+ return; -+ } -+ - if (!m_tool->workingDir.isEmpty()) { - m_process->setWorkingDirectory(m_tool->workingDir); - } else if (m_view) { -@@ -72,7 +79,7 @@ void KateToolRunner::run() - }); - - const QStringList args = KShell::splitArgs(m_tool->arguments); -- m_process->start(m_tool->executable, args); -+ m_process->start(fullExecutable, args); - } - - void KateToolRunner::waitForFinished() -diff --git a/addons/gdbplugin/debugview.cpp b/addons/gdbplugin/debugview.cpp -index 9505daa25..d8c868d7a 100644 ---- a/addons/gdbplugin/debugview.cpp -+++ b/addons/gdbplugin/debugview.cpp -@@ -12,7 +12,9 @@ - #include "debugview.h" - - #include -+#include - #include -+#include - #include - - #include -@@ -48,7 +50,20 @@ void DebugView::runDebugger(const GDBTargetConf &conf, const QStringList &ioFifo - if (conf.executable.isEmpty()) { - return; - } -+ - m_targetConf = conf; -+ -+ // no chance if no debugger configured -+ if (m_targetConf.gdbCmd.isEmpty()) { -+ return; -+ } -+ -+ // only run debugger from PATH or the absolute executable path we specified -+ const auto fullExecutable = QFileInfo(m_targetConf.gdbCmd).isAbsolute() ? m_targetConf.gdbCmd : QStandardPaths::findExecutable(m_targetConf.gdbCmd); -+ if (fullExecutable.isEmpty()) { -+ return; -+ } -+ - if (ioFifos.size() == 3) { - m_ioPipeString = QStringLiteral("< %1 1> %2 2> %3").arg(ioFifos[0], ioFifos[1], ioFifos[2]); - } -@@ -69,7 +84,7 @@ void DebugView::runDebugger(const GDBTargetConf &conf, const QStringList &ioFifo - - connect(&m_debugProcess, static_cast(&QProcess::finished), this, &DebugView::slotDebugFinished); - -- m_debugProcess.start(m_targetConf.gdbCmd, QStringList()); -+ m_debugProcess.start(fullExecutable, QStringList()); - - m_nextCommands << QStringLiteral("set pagination off"); - m_state = ready; -diff --git a/addons/git-blame/commitfilesview.cpp b/addons/git-blame/commitfilesview.cpp -index 26e484a4a..667b423b2 100644 ---- a/addons/git-blame/commitfilesview.cpp -+++ b/addons/git-blame/commitfilesview.cpp -@@ -263,7 +263,9 @@ static void createFileTree(QStandardItem *parent, const QString &basePath, const - static std::optional getGitCmdOutput(const QString &workDir, const QStringList &args) - { - QProcess git; -- setupGitProcess(git, workDir, args); -+ if (!setupGitProcess(git, workDir, args)) { -+ return {}; -+ } - git.start(QProcess::ReadOnly); - if (git.waitForStarted() && git.waitForFinished(-1)) { - if (git.exitStatus() != QProcess::NormalExit || git.exitCode() != 0) { -@@ -365,9 +367,12 @@ void CommitDiffTreeView::openCommit(const QString &hash, const QString &filePath - m_commitHash = hash; - - QProcess *git = new QProcess(this); -- setupGitProcess(*git, -- QFileInfo(filePath).absolutePath(), -- {QStringLiteral("show"), hash, QStringLiteral("--numstat"), QStringLiteral("--pretty=oneline"), QStringLiteral("-z")}); -+ if (!setupGitProcess(*git, -+ QFileInfo(filePath).absolutePath(), -+ {QStringLiteral("show"), hash, QStringLiteral("--numstat"), QStringLiteral("--pretty=oneline"), QStringLiteral("-z")})) { -+ delete git; -+ return; -+ } - connect(git, &QProcess::finished, this, [this, git, filePath](int e, QProcess::ExitStatus s) { - git->deleteLater(); - if (e != 0 || s != QProcess::NormalExit) { -@@ -440,7 +445,9 @@ void CommitDiffTreeView::showDiff(const QModelIndex &idx) - { - const QString file = idx.data(FileItem::Path).toString(); - QProcess git; -- setupGitProcess(git, m_gitDir, {QStringLiteral("show"), m_commitHash, QStringLiteral("--"), file}); -+ if (!setupGitProcess(git, m_gitDir, {QStringLiteral("show"), m_commitHash, QStringLiteral("--"), file})) { -+ return; -+ } - git.start(QProcess::ReadOnly); - - if (git.waitForStarted() && git.waitForFinished(-1)) { -diff --git a/addons/git-blame/kategitblameplugin.cpp b/addons/git-blame/kategitblameplugin.cpp -index d0354cc75..ae0f8c106 100644 ---- a/addons/git-blame/kategitblameplugin.cpp -+++ b/addons/git-blame/kategitblameplugin.cpp -@@ -255,7 +255,9 @@ void KateGitBlamePluginView::startBlameProcess(const QUrl &url) - QDir dir{url.toLocalFile()}; - dir.cdUp(); - -- setupGitProcess(m_blameInfoProc, dir.absolutePath(), {QStringLiteral("blame"), QStringLiteral("-p"), QStringLiteral("./%1").arg(fileName)}); -+ if (!setupGitProcess(m_blameInfoProc, dir.absolutePath(), {QStringLiteral("blame"), QStringLiteral("-p"), QStringLiteral("./%1").arg(fileName)})) { -+ return; -+ } - m_blameInfoProc.start(QIODevice::ReadOnly); - m_blameUrl = url; - } -@@ -270,7 +272,9 @@ void KateGitBlamePluginView::startShowProcess(const QUrl &url, const QString &ha - QDir dir{url.toLocalFile()}; - dir.cdUp(); - -- setupGitProcess(m_showProc, dir.absolutePath(), {QStringLiteral("show"), hash, QStringLiteral("--numstat")}); -+ if (!setupGitProcess(m_showProc, dir.absolutePath(), {QStringLiteral("show"), hash, QStringLiteral("--numstat")})) { -+ return; -+ } - m_showProc.start(QIODevice::ReadOnly); - } - -diff --git a/addons/kate-ctags/gotosymbolmodel.cpp b/addons/kate-ctags/gotosymbolmodel.cpp -index 6c547e379..0c116090f 100644 ---- a/addons/kate-ctags/gotosymbolmodel.cpp -+++ b/addons/kate-ctags/gotosymbolmodel.cpp -@@ -8,6 +8,7 @@ - #include - #include - #include -+#include - - GotoSymbolModel::GotoSymbolModel(QObject *parent) - : QAbstractTableModel(parent) -@@ -58,16 +59,24 @@ void GotoSymbolModel::refresh(const QString &filePath) - m_rows.clear(); - endResetModel(); - -+ // only use ctags from PATH -+ static const auto fullExecutablePath = QStandardPaths::findExecutable(QStringLiteral("ctags")); -+ if (fullExecutablePath.isEmpty()) { -+ beginResetModel(); -+ m_rows.append(SymbolItem{i18n("CTags executable not found."), -1, QIcon()}); -+ endResetModel(); -+ return; -+ } -+ - QProcess p; -- p.start(QStringLiteral("ctags"), {QStringLiteral("-x"), QStringLiteral("--_xformat=%{name}%{signature}\t%{kind}\t%{line}"), filePath}); -+ p.start(fullExecutablePath, {QStringLiteral("-x"), QStringLiteral("--_xformat=%{name}%{signature}\t%{kind}\t%{line}"), filePath}); - - QByteArray out; - if (p.waitForFinished()) { - out = p.readAllStandardOutput(); - } else { -- qWarning() << "Ctags failed"; - beginResetModel(); -- m_rows.append(SymbolItem{i18n("CTags executable not found."), -1, QIcon()}); -+ m_rows.append(SymbolItem{i18n("CTags executable failed to execute."), -1, QIcon()}); - endResetModel(); - return; - } -diff --git a/addons/project/comparebranchesview.cpp b/addons/project/comparebranchesview.cpp -index 48d1d2633..7cf585f66 100644 ---- a/addons/project/comparebranchesview.cpp -+++ b/addons/project/comparebranchesview.cpp -@@ -158,7 +158,9 @@ void CompareBranchesView::showDiff(const QModelIndex &idx) - { - auto file = idx.data(Qt::UserRole).toString().remove(m_gitDir + QLatin1Char('/')); - QProcess git; -- setupGitProcess(git, m_gitDir, {QStringLiteral("diff"), QStringLiteral("%1...%2").arg(m_fromBr).arg(m_toBr), QStringLiteral("--"), file}); -+ if (!setupGitProcess(git, m_gitDir, {QStringLiteral("diff"), QStringLiteral("%1...%2").arg(m_fromBr).arg(m_toBr), QStringLiteral("--"), file})) { -+ return; -+ } - git.start(QProcess::ReadOnly); - - if (git.waitForStarted() && git.waitForFinished(-1)) { -diff --git a/addons/project/filehistorywidget.cpp b/addons/project/filehistorywidget.cpp -index 626016a6b..14857e178 100644 ---- a/addons/project/filehistorywidget.cpp -+++ b/addons/project/filehistorywidget.cpp -@@ -231,9 +231,12 @@ FileHistoryWidget::~FileHistoryWidget() - // git log --format=%H%n%aN%n%aE%n%at%n%ct%n%P%n%B --author-date-order - void FileHistoryWidget::getFileHistory(const QString &file) - { -- setupGitProcess(m_git, -- QFileInfo(file).absolutePath(), -- {QStringLiteral("log"), QStringLiteral("--format=%H%n%aN%n%aE%n%at%n%ct%n%P%n%B"), QStringLiteral("-z"), file}); -+ if (!setupGitProcess(m_git, -+ QFileInfo(file).absolutePath(), -+ {QStringLiteral("log"), QStringLiteral("--format=%H%n%aN%n%aE%n%at%n%ct%n%P%n%B"), QStringLiteral("-z"), file})) { -+ Q_EMIT errorMessage(i18n("Failed to get file history: git executable not found in PATH"), true); -+ return; -+ } - - connect(&m_git, &QProcess::readyReadStandardOutput, this, [this] { - auto commits = parseCommits(m_git.readAllStandardOutput().split(0x00)); -@@ -258,7 +261,10 @@ void FileHistoryWidget::itemClicked(const QModelIndex &idx) - - const auto commit = idx.data(CommitListModel::CommitRole).value(); - -- setupGitProcess(git, fi.absolutePath(), {QStringLiteral("show"), QString::fromUtf8(commit.hash), QStringLiteral("--"), m_file}); -+ if (!setupGitProcess(git, fi.absolutePath(), {QStringLiteral("show"), QString::fromUtf8(commit.hash), QStringLiteral("--"), m_file})) { -+ return; -+ } -+ - git.start(QProcess::ReadOnly); - if (git.waitForStarted() && git.waitForFinished(-1)) { - if (git.exitStatus() != QProcess::NormalExit || git.exitCode() != 0) { -diff --git a/addons/project/git/gitutils.cpp b/addons/project/git/gitutils.cpp -index ea8dd8823..8b494c16f 100644 ---- a/addons/project/git/gitutils.cpp -+++ b/addons/project/git/gitutils.cpp -@@ -15,7 +15,10 @@ - bool GitUtils::isGitRepo(const QString &repo) - { - QProcess git; -- setupGitProcess(git, repo, {QStringLiteral("rev-parse"), QStringLiteral("--is-inside-work-tree")}); -+ if (!setupGitProcess(git, repo, {QStringLiteral("rev-parse"), QStringLiteral("--is-inside-work-tree")})) { -+ return false; -+ } -+ - git.start(QProcess::ReadOnly); - if (git.waitForStarted() && git.waitForFinished(-1)) { - return git.readAll().trimmed() == "true"; -@@ -27,7 +30,10 @@ std::optional GitUtils::getDotGitPath(const QString &repo) - { - /* This call is intentionally blocking because we need git path for everything else */ - QProcess git; -- setupGitProcess(git, repo, {QStringLiteral("rev-parse"), QStringLiteral("--absolute-git-dir")}); -+ if (!setupGitProcess(git, repo, {QStringLiteral("rev-parse"), QStringLiteral("--absolute-git-dir")})) { -+ return std::nullopt; -+ } -+ - git.start(QProcess::ReadOnly); - if (git.waitForStarted() && git.waitForFinished(-1)) { - if (git.exitStatus() != QProcess::NormalExit || git.exitCode() != 0) { -@@ -57,7 +63,10 @@ QString GitUtils::getCurrentBranchName(const QString &repo) - - for (int i = 0; i < 3; ++i) { - QProcess git; -- setupGitProcess(git, repo, argsList[i]); -+ if (!setupGitProcess(git, repo, argsList[i])) { -+ return QString(); -+ } -+ - git.start(QProcess::ReadOnly); - if (git.waitForStarted() && git.waitForFinished(-1)) { - if (git.exitStatus() == QProcess::NormalExit && git.exitCode() == 0) { -@@ -73,7 +82,10 @@ QString GitUtils::getCurrentBranchName(const QString &repo) - GitUtils::CheckoutResult GitUtils::checkoutBranch(const QString &repo, const QString &branch) - { - QProcess git; -- setupGitProcess(git, repo, {QStringLiteral("checkout"), branch}); -+ if (!setupGitProcess(git, repo, {QStringLiteral("checkout"), branch})) { -+ return CheckoutResult{}; -+ } -+ - git.start(QProcess::ReadOnly); - CheckoutResult res; - res.branch = branch; -@@ -91,7 +103,11 @@ GitUtils::CheckoutResult GitUtils::checkoutNewBranch(const QString &repo, const - if (!fromBranch.isEmpty()) { - args.append(fromBranch); - } -- setupGitProcess(git, repo, args); -+ -+ if (!setupGitProcess(git, repo, args)) { -+ return CheckoutResult{}; -+ } -+ - git.start(QProcess::ReadOnly); - CheckoutResult res; - res.branch = newBranch; -@@ -132,7 +148,10 @@ QVector GitUtils::getAllBranchesAndTags(const QString &repo, R - args.append(QStringLiteral("--sort=-taggerdate")); - } - -- setupGitProcess(git, repo, args); -+ if (!setupGitProcess(git, repo, args)) { -+ return {}; -+ } -+ - git.start(QProcess::ReadOnly); - QVector branches; - if (git.waitForStarted() && git.waitForFinished(-1)) { -@@ -166,7 +185,10 @@ std::pair GitUtils::getLastCommitMessage(const QString &repo) - { - // git log -1 --pretty=%B - QProcess git; -- setupGitProcess(git, repo, {QStringLiteral("log"), QStringLiteral("-1"), QStringLiteral("--pretty=%B")}); -+ if (!setupGitProcess(git, repo, {QStringLiteral("log"), QStringLiteral("-1"), QStringLiteral("--pretty=%B")})) { -+ return {}; -+ } -+ - git.start(QProcess::ReadOnly); - if (git.waitForStarted() && git.waitForFinished(-1)) { - if (git.exitCode() != 0 || git.exitStatus() != QProcess::NormalExit) { -@@ -197,7 +219,10 @@ GitUtils::Result GitUtils::deleteBranches(const QStringList &branches, const QSt - args << branches; - - QProcess git; -- setupGitProcess(git, repo, args); -+ if (!setupGitProcess(git, repo, args)) { -+ return {}; -+ } -+ - git.start(QProcess::ReadOnly); - if (git.waitForStarted() && git.waitForFinished(-1)) { - QString out = QString::fromLatin1(git.readAllStandardError()) + QString::fromLatin1(git.readAllStandardOutput()); -diff --git a/addons/project/gitwidget.cpp b/addons/project/gitwidget.cpp -index 2b19781c0..77499dad8 100644 ---- a/addons/project/gitwidget.cpp -+++ b/addons/project/gitwidget.cpp -@@ -514,8 +514,9 @@ void GitWidget::launchExternalDiffTool(const QString &file, bool staged) - args.append(file); - - QProcess git; -- setupGitProcess(git, m_gitPath, args); -- git.startDetached(); -+ if (setupGitProcess(git, m_gitPath, args)) { -+ git.startDetached(); -+ } - } - - void GitWidget::commitChanges(const QString &msg, const QString &desc, bool signOff, bool amend) -@@ -745,7 +746,12 @@ void GitWidget::branchCompareFiles(const QString &from, const QString &to) - auto args = QStringList{QStringLiteral("diff"), QStringLiteral("%1...%2").arg(from).arg(to), QStringLiteral("--name-status")}; - - QProcess git; -- setupGitProcess(git, m_gitPath, args); -+ -+ // early out if we can't find git -+ if (!setupGitProcess(git, m_gitPath, args)) { -+ return; -+ } -+ - git.start(QProcess::ReadOnly); - if (git.waitForStarted() && git.waitForFinished(-1)) { - if (git.exitStatus() != QProcess::NormalExit || git.exitCode() != 0) { -@@ -767,7 +773,12 @@ void GitWidget::branchCompareFiles(const QString &from, const QString &to) - - // get --num-stat - args = QStringList{QStringLiteral("diff"), QStringLiteral("%1...%2").arg(from).arg(to), QStringLiteral("--numstat"), QStringLiteral("-z")}; -- setupGitProcess(git, m_gitPath, args); -+ -+ // early out if we can't find git -+ if (!setupGitProcess(git, m_gitPath, args)) { -+ return; -+ } -+ - git.start(QProcess::ReadOnly); - if (git.waitForStarted() && git.waitForFinished(-1)) { - if (git.exitStatus() != QProcess::NormalExit || git.exitCode() != 0) { -diff --git a/addons/project/kateprojectindex.cpp b/addons/project/kateprojectindex.cpp -index a7d9ec9c1..9fc5b64cb 100644 ---- a/addons/project/kateprojectindex.cpp -+++ b/addons/project/kateprojectindex.cpp -@@ -9,6 +9,7 @@ - - #include - #include -+#include - - /** - * include ctags reading -@@ -73,6 +74,12 @@ void KateProjectIndex::loadCtags(const QStringList &files, const QVariantMap &ct - */ - m_ctagsIndexFile->close(); - -+ // only use ctags from PATH -+ static const auto fullExecutablePath = QStandardPaths::findExecutable(QStringLiteral("ctags")); -+ if (fullExecutablePath.isEmpty()) { -+ return; -+ } -+ - /** - * try to run ctags for all files in this project - * output to our ctags index file -@@ -85,7 +92,7 @@ void KateProjectIndex::loadCtags(const QStringList &files, const QVariantMap &ct - for (const QVariant &optVariant : opts) { - args << optVariant.toString(); - } -- ctags.start(QStringLiteral("ctags"), args); -+ ctags.start(fullExecutablePath, args); - if (!ctags.waitForStarted()) { - return; - } -diff --git a/addons/project/kateprojectinfoviewcodeanalysis.cpp b/addons/project/kateprojectinfoviewcodeanalysis.cpp -index 21cd26a84..23b82c45e 100644 ---- a/addons/project/kateprojectinfoviewcodeanalysis.cpp -+++ b/addons/project/kateprojectinfoviewcodeanalysis.cpp -@@ -13,6 +13,7 @@ - - #include - #include -+#include - #include - #include - -@@ -134,14 +135,18 @@ void KateProjectInfoViewCodeAnalysis::slotStartStopClicked() - connect(m_analyzer, &QProcess::readyRead, this, &KateProjectInfoViewCodeAnalysis::slotReadyRead); - connect(m_analyzer, static_cast(&QProcess::finished), this, &KateProjectInfoViewCodeAnalysis::finished); - -- m_analyzer->start(m_analysisTool->path(), m_analysisTool->arguments()); -+ // ensure we only run the code analyzer from PATH -+ const QString fullExecutable = QStandardPaths::findExecutable(m_analysisTool->path()); -+ if (!fullExecutable.isEmpty()) { -+ m_analyzer->start(fullExecutable, m_analysisTool->arguments()); -+ } - - if (m_messageWidget) { - delete m_messageWidget; - m_messageWidget = nullptr; - } - -- if (!m_analyzer->waitForStarted()) { -+ if (fullExecutable.isEmpty() || !m_analyzer->waitForStarted()) { - m_messageWidget = new KMessageWidget(this); - m_messageWidget->setCloseButtonVisible(true); - m_messageWidget->setMessageType(KMessageWidget::Warning); -diff --git a/addons/project/kateprojectworker.cpp b/addons/project/kateprojectworker.cpp -index d1979d1ec..831dae89b 100644 ---- a/addons/project/kateprojectworker.cpp -+++ b/addons/project/kateprojectworker.cpp -@@ -18,6 +18,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -442,10 +443,12 @@ QVector KateProjectWorker::filesFromGit(const QDir &dir, bool recursive - - QVector KateProjectWorker::gitFiles(const QDir &dir, bool recursive, const QStringList &args) - { -+ QVector files; - QProcess git; -- setupGitProcess(git, dir.absolutePath(), args); -+ if (!setupGitProcess(git, dir.absolutePath(), args)) { -+ return files; -+ } - git.start(QProcess::ReadOnly); -- QVector files; - if (!git.waitForStarted() || !git.waitForFinished(-1)) { - return files; - } -@@ -466,13 +469,18 @@ QVector KateProjectWorker::gitFiles(const QDir &dir, bool recursive, co - - QVector KateProjectWorker::filesFromMercurial(const QDir &dir, bool recursive) - { -+ // only use version control from PATH - QVector files; -+ static const auto fullExecutablePath = QStandardPaths::findExecutable(QStringLiteral("hg")); -+ if (fullExecutablePath.isEmpty()) { -+ return files; -+ } - - QProcess hg; - hg.setWorkingDirectory(dir.absolutePath()); - QStringList args; - args << QStringLiteral("manifest") << QStringLiteral("."); -- hg.start(QStringLiteral("hg"), args, QProcess::ReadOnly); -+ hg.start(fullExecutablePath, args, QProcess::ReadOnly); - if (!hg.waitForStarted() || !hg.waitForFinished(-1)) { - return files; - } -@@ -493,7 +501,12 @@ QVector KateProjectWorker::filesFromMercurial(const QDir &dir, bool rec - - QVector KateProjectWorker::filesFromSubversion(const QDir &dir, bool recursive) - { -+ // only use version control from PATH - QVector files; -+ static const auto fullExecutablePath = QStandardPaths::findExecutable(QStringLiteral("svn")); -+ if (fullExecutablePath.isEmpty()) { -+ return files; -+ } - - QProcess svn; - svn.setWorkingDirectory(dir.absolutePath()); -@@ -504,7 +517,7 @@ QVector KateProjectWorker::filesFromSubversion(const QDir &dir, bool re - } else { - args << QStringLiteral("--depth=files"); - } -- svn.start(QStringLiteral("svn"), args, QProcess::ReadOnly); -+ svn.start(fullExecutablePath, args, QProcess::ReadOnly); - if (!svn.waitForStarted() || !svn.waitForFinished(-1)) { - return files; - } -@@ -555,18 +568,21 @@ QVector KateProjectWorker::filesFromSubversion(const QDir &dir, bool re - - QVector KateProjectWorker::filesFromDarcs(const QDir &dir, bool recursive) - { -+ // only use version control from PATH - QVector files; -+ static const auto fullExecutablePath = QStandardPaths::findExecutable(QStringLiteral("darcs")); -+ if (fullExecutablePath.isEmpty()) { -+ return files; -+ } - -- const QString cmd = QStringLiteral("darcs"); - QString root; -- - { - QProcess darcs; - darcs.setWorkingDirectory(dir.absolutePath()); - QStringList args; - args << QStringLiteral("list") << QStringLiteral("repo"); - -- darcs.start(cmd, args, QProcess::ReadOnly); -+ darcs.start(fullExecutablePath, args, QProcess::ReadOnly); - - if (!darcs.waitForStarted() || !darcs.waitForFinished(-1)) { - return files; -@@ -590,7 +606,7 @@ QVector KateProjectWorker::filesFromDarcs(const QDir &dir, bool recursi - darcs.setWorkingDirectory(dir.absolutePath()); - args << QStringLiteral("list") << QStringLiteral("files") << QStringLiteral("--no-directories") << QStringLiteral("--pending"); - -- darcs.start(cmd, args, QProcess::ReadOnly); -+ darcs.start(fullExecutablePath, args, QProcess::ReadOnly); - - if (!darcs.waitForStarted() || !darcs.waitForFinished(-1)) { - return files; -diff --git a/addons/project/stashdialog.cpp b/addons/project/stashdialog.cpp -index c623182a8..bddedf709 100644 ---- a/addons/project/stashdialog.cpp -+++ b/addons/project/stashdialog.cpp -@@ -32,6 +32,8 @@ - - #include - -+#include -+ - constexpr int StashIndexRole = Qt::UserRole + 2; - - class StashFilterModel final : public QSortFilterProxyModel -@@ -218,11 +220,10 @@ void StashDialog::slotReturnPressed() - hide(); - } - --QProcess *StashDialog::gitp() -+QProcess *StashDialog::gitp(const QStringList &arguments) - { - auto git = new QProcess(this); -- git->setProgram(QStringLiteral("git")); -- git->setWorkingDirectory(m_gitPath); -+ setupGitProcess(*git, m_gitPath, arguments); - return git; - } - -@@ -242,7 +243,7 @@ void StashDialog::stash(bool keepIndex, bool includeUntracked) - args.append(m_lineEdit.text()); - } - -- auto git = gitp(); -+ auto git = gitp(args); - connect(git, &QProcess::finished, this, [this, git](int exitCode, QProcess::ExitStatus es) { - if (es != QProcess::NormalExit || exitCode != 0) { - qWarning() << git->errorString(); -@@ -253,14 +254,12 @@ void StashDialog::stash(bool keepIndex, bool includeUntracked) - Q_EMIT done(); - git->deleteLater(); - }); -- git->setArguments(args); - git->start(QProcess::ReadOnly); - } - - void StashDialog::getStashList() - { -- auto git = gitp(); -- git->setArguments({QStringLiteral("stash"), QStringLiteral("list")}); -+ auto git = gitp({QStringLiteral("stash"), QStringLiteral("list")}); - git->start(QProcess::ReadOnly); - - QList stashList; -@@ -293,11 +292,11 @@ void StashDialog::getStashList() - - void StashDialog::popStash(const QByteArray &index, const QString &command) - { -- auto git = gitp(); - QStringList args{QStringLiteral("stash"), command}; - if (!index.isEmpty()) { - args.append(QString::fromUtf8(index)); - } -+ auto git = gitp(args); - - connect(git, &QProcess::finished, this, [this, command, git](int exitCode, QProcess::ExitStatus es) { - if (es != QProcess::NormalExit || exitCode != 0) { -@@ -320,7 +319,6 @@ void StashDialog::popStash(const QByteArray &index, const QString &command) - Q_EMIT done(); - git->deleteLater(); - }); -- git->setArguments(args); - git->start(QProcess::ReadOnly); - } - -@@ -339,9 +337,8 @@ void StashDialog::showStash(const QByteArray &index) - if (index.isEmpty()) { - return; - } -- auto git = gitp(); - -- QStringList args{QStringLiteral("stash"), QStringLiteral("show"), QStringLiteral("-p"), QString::fromUtf8(index)}; -+ auto git = gitp({QStringLiteral("stash"), QStringLiteral("show"), QStringLiteral("-p"), QString::fromUtf8(index)}); - - connect(git, &QProcess::finished, this, [this, git](int exitCode, QProcess::ExitStatus es) { - if (es != QProcess::NormalExit || exitCode != 0) { -@@ -353,6 +350,5 @@ void StashDialog::showStash(const QByteArray &index) - git->deleteLater(); - }); - -- git->setArguments(args); - git->start(QProcess::ReadOnly); - } -diff --git a/addons/project/stashdialog.h b/addons/project/stashdialog.h -index a18d42ab9..417690757 100644 ---- a/addons/project/stashdialog.h -+++ b/addons/project/stashdialog.h -@@ -56,7 +56,7 @@ protected Q_SLOTS: - void slotReturnPressed() override; - - private: -- QProcess *gitp(); -+ QProcess *gitp(const QStringList &arguments); - void stash(bool keepIndex, bool includeUntracked); - void getStashList(); - void popStash(const QByteArray &index, const QString &command = QStringLiteral("pop")); -diff --git a/addons/replicode/replicodeview.cpp b/addons/replicode/replicodeview.cpp -index 0199f46ce..7f70ee1ea 100644 ---- a/addons/replicode/replicodeview.cpp -+++ b/addons/replicode/replicodeview.cpp -@@ -8,7 +8,9 @@ - - #include "replicodeconfig.h" - #include "replicodesettings.h" -+ - #include -+#include - #include - #include - -@@ -116,7 +118,14 @@ void ReplicodeView::runReplicode() - } - - KConfigGroup config(KSharedConfig::openConfig(), QStringLiteral("Replicode")); -+ - QString executorPath = config.readEntry("replicodePath", QString()); -+ -+ // ensure we only call replicode from PATH if not given as absolute path already -+ if (!executorPath.isEmpty() && !QFileInfo(executorPath).isAbsolute()) { -+ executorPath = QStandardPaths::findExecutable(executorPath); -+ } -+ - if (executorPath.isEmpty()) { - QMessageBox::warning(m_mainWindow->window(), - i18nc("@title:window", "Replicode Executable Not Found"), -diff --git a/addons/xmlcheck/plugin_katexmlcheck.cpp b/addons/xmlcheck/plugin_katexmlcheck.cpp -index f1d52f3a7..3971550cd 100644 ---- a/addons/xmlcheck/plugin_katexmlcheck.cpp -+++ b/addons/xmlcheck/plugin_katexmlcheck.cpp -@@ -304,10 +304,18 @@ bool PluginKateXMLCheckView::slotValidate() - s << kv->document()->text(); - s.flush(); - -+ // ensure we only execute xmllint from PATH or application package - QString exe = QStandardPaths::findExecutable(QStringLiteral("xmllint")); - if (exe.isEmpty()) { - exe = QStandardPaths::locate(QStandardPaths::ApplicationsLocation, QStringLiteral("xmllint")); - } -+ if (exe.isEmpty()) { -+ KMessageBox::error(nullptr, -+ i18n("Error: Failed to find xmllint. Please make " -+ "sure that xmllint is installed. It is part of libxml2.")); -+ return false; -+ } -+ - // qDebug() << "exe=" < - #include - #include -+#include - #include - - void KateFileActions::copyFilePathToClipboard(KTextEditor::Document *doc) -@@ -137,17 +138,13 @@ void KateFileActions::deleteDocumentFile(QWidget *parent, KTextEditor::Document - } - } - --QStringList KateFileActions::supportedDiffTools() -+QVector> KateFileActions::supportedDiffTools() - { -- // LATER: check for program existence and set some boolean value accordingly -- // Can this be even done in an easy way when we don't use the absolute path to the executable? -- // See https://stackoverflow.com/questions/42444055/how-to-check-if-a-program-exists-in-path-using-qt -- -- QStringList resultList; -- resultList.push_back(QStringLiteral("kdiff3")); -- resultList.push_back(QStringLiteral("kompare")); -- resultList.push_back(QStringLiteral("meld")); -- -+ // query once if the tools are there in the path and store that -+ // we will disable the actions for the tools not found -+ static QVector> resultList{{QStringLiteral("kdiff3"), QStandardPaths::findExecutable(QStringLiteral("kdiff3"))}, -+ {QStringLiteral("kompare"), QStandardPaths::findExecutable(QStringLiteral("kompare"))}, -+ {QStringLiteral("meld"), QStandardPaths::findExecutable(QStringLiteral("meld"))}}; - return resultList; - } - -diff --git a/kate/katefileactions.h b/kate/katefileactions.h -index 524d81097..77cc5b0bf 100644 ---- a/kate/katefileactions.h -+++ b/kate/katefileactions.h -@@ -51,9 +51,9 @@ void openFilePropertiesDialog(KTextEditor::Document *document); - void deleteDocumentFile(QWidget *parent, KTextEditor::Document *document); - - /** -- * @returns a list of supported diff tools (names of the executables) -+ * @returns a list of supported diff tools (names of the executables + paths to them, empty if not found in PATH) - */ --QStringList supportedDiffTools(); -+QVector> supportedDiffTools(); - - /** - * Runs an external program to compare the underlying files of two given documents. -diff --git a/kate/katemwmodonhddialog.cpp b/kate/katemwmodonhddialog.cpp -index e0041d858..d7c79e4d4 100644 ---- a/kate/katemwmodonhddialog.cpp -+++ b/kate/katemwmodonhddialog.cpp -@@ -22,6 +22,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -52,6 +53,7 @@ public: - - KateMwModOnHdDialog::KateMwModOnHdDialog(DocVector docs, QWidget *parent, const char *name) - : QDialog(parent) -+ , m_fullDiffPath(QStandardPaths::findExecutable(QStringLiteral("diff"))) - , m_proc(nullptr) - , m_diffFile(nullptr) - , m_blockAddDocument(false) -@@ -108,6 +110,7 @@ KateMwModOnHdDialog::KateMwModOnHdDialog(DocVector docs, QWidget *parent, const - "file for the selected document, and shows the difference with the " - "default application. Requires diff(1).")); - hb->addWidget(btnDiff); -+ btnDiff->setEnabled(!m_fullDiffPath.isEmpty()); - connect(btnDiff, &QPushButton::clicked, this, &KateMwModOnHdDialog::slotDiff); - - // Dialog buttons -@@ -288,9 +291,10 @@ void KateMwModOnHdDialog::slotDiff() - m_diffFile->open(); - - // Start a KProcess that creates a diff -+ // We use the full path to don't launch some random "diff" in current working directory - m_proc = new KProcess(this); - m_proc->setOutputChannelMode(KProcess::MergedChannels); -- *m_proc << QStringLiteral("diff") << QStringLiteral("-ub") << QStringLiteral("-") << doc->url().toLocalFile(); -+ *m_proc << m_fullDiffPath << QStringLiteral("-ub") << QStringLiteral("-") << doc->url().toLocalFile(); - connect(m_proc, &KProcess::readyRead, this, &KateMwModOnHdDialog::slotDataAvailable); - connect(m_proc, static_cast(&KProcess::finished), this, &KateMwModOnHdDialog::slotPDone); - -diff --git a/kate/katemwmodonhddialog.h b/kate/katemwmodonhddialog.h -index 11c09eab7..6fa245726 100644 ---- a/kate/katemwmodonhddialog.h -+++ b/kate/katemwmodonhddialog.h -@@ -51,6 +51,7 @@ private: - class QTreeWidget *twDocuments; - class QDialogButtonBox *dlgButtons; - class QPushButton *btnDiff; -+ QString m_fullDiffPath; - KProcess *m_proc; - QTemporaryFile *m_diffFile; - QStringList m_stateTexts; -diff --git a/kate/kateviewspace.cpp b/kate/kateviewspace.cpp -index dba2fb973..af3bb8d34 100644 ---- a/kate/kateviewspace.cpp -+++ b/kate/kateviewspace.cpp -@@ -678,8 +678,11 @@ void KateViewSpace::showContextMenu(int idx, const QPoint &globalPos) - - if (mCompareWithActive->isEnabled()) { - for (auto &&diffTool : KateFileActions::supportedDiffTools()) { -- QAction *compareAction = mCompareWithActive->addAction(diffTool); -- compareAction->setData(diffTool); -+ QAction *compareAction = mCompareWithActive->addAction(diffTool.first); -+ -+ // we use the full path to safely execute the tool, disable action if no full path => tool not found -+ compareAction->setData(diffTool.second); -+ compareAction->setEnabled(!diffTool.second.isEmpty()); - } - } - -diff --git a/shared/gitprocess.h b/shared/gitprocess.h -index 47b98b696..b0d79fac6 100644 ---- a/shared/gitprocess.h -+++ b/shared/gitprocess.h -@@ -7,6 +7,7 @@ - #pragma once - - #include -+#include - - /** - * small helper function to setup a QProcess based "git" command. -@@ -17,10 +18,20 @@ - * @param process process to setup for git - * @param workingDirectory working directory to use for process - * @param arguments arguments to pass to git -+ * @return could set setup the process or did that fail, e.g. because the git executable is not available? - */ --inline void setupGitProcess(QProcess &process, const QString &workingDirectory, const QStringList &arguments) -+inline bool setupGitProcess(QProcess &process, const QString &workingDirectory, const QStringList &arguments) - { -- process.setProgram(QStringLiteral("git")); -+ // only use git from PATH -+ static const auto gitExecutable = QStandardPaths::findExecutable(QStringLiteral("git")); -+ if (gitExecutable.isEmpty()) { -+ // ensure we have no valid QProcess setup -+ process.setProgram(QString()); -+ return false; -+ } -+ -+ // setup program and arguments, ensure we do run git in the right working directory -+ process.setProgram(gitExecutable); - process.setWorkingDirectory(workingDirectory); - process.setArguments(arguments); - -@@ -37,4 +48,5 @@ inline void setupGitProcess(QProcess &process, const QString &workingDirectory, - QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); - env.insert(QStringLiteral("GIT_OPTIONAL_LOCKS"), QStringLiteral("0")); - process.setProcessEnvironment(env); -+ return true; - } --- -GitLab - diff --git a/source/kde/kde/patch/kate/92a9c65e30b4b63b8b116eb5c8dcb1e1a2d867bc.patch b/source/kde/kde/patch/kate/92a9c65e30b4b63b8b116eb5c8dcb1e1a2d867bc.patch deleted file mode 100644 index 6900a46c0..000000000 --- a/source/kde/kde/patch/kate/92a9c65e30b4b63b8b116eb5c8dcb1e1a2d867bc.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 92a9c65e30b4b63b8b116eb5c8dcb1e1a2d867bc Mon Sep 17 00:00:00 2001 -From: Waqar Ahmed -Date: Sun, 16 Jan 2022 18:39:50 +0500 -Subject: [PATCH] step down warning level when LSP not found - -Currently it gives an error which results in the widget popping up -everytime you open a file for which you don't have LSP. However, one may -have intentionally not installed the LSP for a language. - -BUG: 448549 ---- - addons/lspclient/lspclientservermanager.cpp | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/addons/lspclient/lspclientservermanager.cpp b/addons/lspclient/lspclientservermanager.cpp -index 551926e23..24e3f275b 100644 ---- a/addons/lspclient/lspclientservermanager.cpp -+++ b/addons/lspclient/lspclientservermanager.cpp -@@ -737,13 +737,13 @@ private: - server.reset(new LSPClientServer(cmdline, root, realLangId, serverConfig.value(QStringLiteral("initializationOptions")), folders)); - connect(server.data(), &LSPClientServer::stateChanged, this, &self_type::onStateChanged, Qt::UniqueConnection); - if (!server->start()) { -- QString errorMessage = i18n("Failed to start server: %1", cmdline.join(QLatin1Char(' '))); -+ QString message = i18n("Failed to start server: %1", cmdline.join(QLatin1Char(' '))); - const auto url = serverConfig.value(QStringLiteral("url")).toString(); - if (!url.isEmpty()) { -- errorMessage += QStringLiteral("\n") + i18n("Please check your PATH for the binary"); -- errorMessage += QStringLiteral("\n") + i18n("See also %1 for installation or details", url); -+ message += QStringLiteral("\n") + i18n("Please check your PATH for the binary"); -+ message += QStringLiteral("\n") + i18n("See also %1 for installation or details", url); - } -- showMessage(errorMessage, KTextEditor::Message::Error); -+ showMessage(message, KTextEditor::Message::Warning); - } else { - showMessage(i18n("Started server %2: %1", cmdline.join(QLatin1Char(' ')), serverDescription(server.data())), - KTextEditor::Message::Positive); --- -GitLab - diff --git a/source/kde/kde/patch/kate/c5d66f3b70ae4778d6162564309aee95f643e7c9.patch b/source/kde/kde/patch/kate/c5d66f3b70ae4778d6162564309aee95f643e7c9.patch deleted file mode 100644 index cc3f058d7..000000000 --- a/source/kde/kde/patch/kate/c5d66f3b70ae4778d6162564309aee95f643e7c9.patch +++ /dev/null @@ -1,124 +0,0 @@ -From c5d66f3b70ae4778d6162564309aee95f643e7c9 Mon Sep 17 00:00:00 2001 -From: Christoph Cullmann -Date: Thu, 20 Jan 2022 21:00:09 +0100 -Subject: [PATCH] avoid that we execute LSP binaries from cwd - -QProcess will just use current working directory as -fallback - -that allows to execute un-wanted binaries by accident ---- - addons/lspclient/lspclientservermanager.cpp | 87 ++++++++++++--------- - 1 file changed, 51 insertions(+), 36 deletions(-) - -diff --git a/addons/lspclient/lspclientservermanager.cpp b/addons/lspclient/lspclientservermanager.cpp -index 24e3f275b..e78b4aa2d 100644 ---- a/addons/lspclient/lspclientservermanager.cpp -+++ b/addons/lspclient/lspclientservermanager.cpp -@@ -707,52 +707,67 @@ private: - } - - if (cmdline.length() > 0) { -+ // ensure we always only take the server executable from the PATH or user defined paths -+ // QProcess will take the executable even just from current working directory without this => BAD -+ auto cmd = QStandardPaths::findExecutable(cmdline[0]); -+ - // optionally search in supplied path(s) -- auto vpath = serverConfig.value(QStringLiteral("path")).toArray(); -- if (vpath.size() > 0) { -- auto cmd = QStandardPaths::findExecutable(cmdline[0]); -- if (cmd.isEmpty()) { -- // collect and expand in case home dir or other (environment) variable reference is used -- QStringList path; -- for (const auto &e : vpath) { -- auto p = e.toString(); -- editor->expandText(p, view, p); -- path.push_back(p); -- } -- cmd = QStandardPaths::findExecutable(cmdline[0], path); -- if (!cmd.isEmpty()) { -- cmdline[0] = cmd; -- } -+ const auto vpath = serverConfig.value(QStringLiteral("path")).toArray(); -+ if (cmd.isEmpty() && !vpath.isEmpty()) { -+ // collect and expand in case home dir or other (environment) variable reference is used -+ QStringList path; -+ for (const auto &e : vpath) { -+ auto p = e.toString(); -+ editor->expandText(p, view, p); -+ path.push_back(p); - } -+ cmd = QStandardPaths::findExecutable(cmdline[0], path); - } -- // an empty list is always passed here (or null) -- // the initial list is provided/updated using notification after start -- // since that is what a server is more aware of -- // and should support if it declares workspace folder capable -- // (as opposed to the new initialization property) -- LSPClientServer::FoldersType folders; -- if (useWorkspace) { -- folders = QList(); -- } -- server.reset(new LSPClientServer(cmdline, root, realLangId, serverConfig.value(QStringLiteral("initializationOptions")), folders)); -- connect(server.data(), &LSPClientServer::stateChanged, this, &self_type::onStateChanged, Qt::UniqueConnection); -- if (!server->start()) { -- QString message = i18n("Failed to start server: %1", cmdline.join(QLatin1Char(' '))); -+ -+ // we can only start the stuff if we did find the binary in the paths -+ if (!cmd.isEmpty()) { -+ // use full path to avoid security issues -+ cmdline[0] = cmd; -+ -+ // an empty list is always passed here (or null) -+ // the initial list is provided/updated using notification after start -+ // since that is what a server is more aware of -+ // and should support if it declares workspace folder capable -+ // (as opposed to the new initialization property) -+ LSPClientServer::FoldersType folders; -+ if (useWorkspace) { -+ folders = QList(); -+ } -+ server.reset(new LSPClientServer(cmdline, root, realLangId, serverConfig.value(QStringLiteral("initializationOptions")), folders)); -+ connect(server.data(), &LSPClientServer::stateChanged, this, &self_type::onStateChanged, Qt::UniqueConnection); -+ if (!server->start()) { -+ QString message = i18n("Failed to start server: %1", cmdline.join(QLatin1Char(' '))); -+ const auto url = serverConfig.value(QStringLiteral("url")).toString(); -+ if (!url.isEmpty()) { -+ message += QStringLiteral("\n") + i18n("Please check your PATH for the binary"); -+ message += QStringLiteral("\n") + i18n("See also %1 for installation or details", url); -+ } -+ showMessage(message, KTextEditor::Message::Warning); -+ } else { -+ showMessage(i18n("Started server %2: %1", cmdline.join(QLatin1Char(' ')), serverDescription(server.data())), -+ KTextEditor::Message::Positive); -+ using namespace std::placeholders; -+ server->connect(server.data(), &LSPClientServer::logMessage, this, std::bind(&self_type::onMessage, this, true, _1)); -+ server->connect(server.data(), &LSPClientServer::showMessage, this, std::bind(&self_type::onMessage, this, false, _1)); -+ server->connect(server.data(), &LSPClientServer::workDoneProgress, this, &self_type::onWorkDoneProgress); -+ server->connect(server.data(), &LSPClientServer::workspaceFolders, this, &self_type::onWorkspaceFolders, Qt::UniqueConnection); -+ } -+ } else { -+ // we didn't find the server binary at all! -+ QString message = i18n("Failed to find server binary: %1", cmdline[0]); - const auto url = serverConfig.value(QStringLiteral("url")).toString(); - if (!url.isEmpty()) { - message += QStringLiteral("\n") + i18n("Please check your PATH for the binary"); - message += QStringLiteral("\n") + i18n("See also %1 for installation or details", url); - } - showMessage(message, KTextEditor::Message::Warning); -- } else { -- showMessage(i18n("Started server %2: %1", cmdline.join(QLatin1Char(' ')), serverDescription(server.data())), -- KTextEditor::Message::Positive); -- using namespace std::placeholders; -- server->connect(server.data(), &LSPClientServer::logMessage, this, std::bind(&self_type::onMessage, this, true, _1)); -- server->connect(server.data(), &LSPClientServer::showMessage, this, std::bind(&self_type::onMessage, this, false, _1)); -- server->connect(server.data(), &LSPClientServer::workDoneProgress, this, &self_type::onWorkDoneProgress); -- server->connect(server.data(), &LSPClientServer::workspaceFolders, this, &self_type::onWorkspaceFolders, Qt::UniqueConnection); - } -+ - serverinfo.settings = serverConfig.value(QStringLiteral("settings")); - serverinfo.started = QTime::currentTime(); - serverinfo.url = serverConfig.value(QStringLiteral("url")).toString(); --- -GitLab - diff --git a/source/kde/kde/patch/kinfocenter.patch b/source/kde/kde/patch/kinfocenter.patch deleted file mode 100644 index b57d434fc..000000000 --- a/source/kde/kde/patch/kinfocenter.patch +++ /dev/null @@ -1,2 +0,0 @@ -# Fix linking error : -cat $CWD/patch/kinfocenter/kinfocenter_libpci.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; } diff --git a/source/kde/kde/patch/kinfocenter/kinfocenter_libpci.patch b/source/kde/kde/patch/kinfocenter/kinfocenter_libpci.patch deleted file mode 100644 index a2bc00796..000000000 --- a/source/kde/kde/patch/kinfocenter/kinfocenter_libpci.patch +++ /dev/null @@ -1,17 +0,0 @@ ---- kinfocenter-5.5.5/cmake/FindPCIUTILS.cmake.orig 2016-03-01 14:32:01.000000000 +0100 -+++ kinfocenter-5.5.5/cmake/FindPCIUTILS.cmake 2016-03-11 13:00:12.412315320 +0100 -@@ -19,6 +19,14 @@ - else(RESOLV_LIBRARY) - set(PCIUTILS_LIBRARIES ${PCIUTILS_LIBRARY}) - endif(RESOLV_LIBRARY) -+ FIND_LIBRARY(UDEV_LIBRARY NAMES udev) -+ if(UDEV_LIBRARY) -+ set(PCIUTILS_LIBRARIES ${PCIUTILS_LIBRARIES} ${UDEV_LIBRARY}) -+ endif(UDEV_LIBRARY) -+ FIND_LIBRARY(ZLIB_LIBRARY NAMES z) -+ if(ZLIB_LIBRARY) -+ set(ZLIB_LIBRARIES ${ZLIB_LIBRARY}) -+ endif(ZLIB_LIBRARY) - endif(PCIUTILS_LIBRARY) - - diff --git a/source/kde/kde/patch/kscreen.patch b/source/kde/kde/patch/kscreen.patch deleted file mode 100644 index 7b0a24332..000000000 --- a/source/kde/kde/patch/kscreen.patch +++ /dev/null @@ -1 +0,0 @@ -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 deleted file mode 100644 index bb8befc91..000000000 --- a/source/kde/kde/patch/kscreen/57.patch +++ /dev/null @@ -1,189 +0,0 @@ -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/kwayland-server.patch b/source/kde/kde/patch/kwayland-server.patch deleted file mode 100644 index f1b4e7273..000000000 --- a/source/kde/kde/patch/kwayland-server.patch +++ /dev/null @@ -1 +0,0 @@ -cat $CWD/patch/kwayland-server/5f5bea1648590f24f11ce232eb78112953a4d20e.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; } diff --git a/source/kde/kde/patch/kwayland-server/5f5bea1648590f24f11ce232eb78112953a4d20e.patch b/source/kde/kde/patch/kwayland-server/5f5bea1648590f24f11ce232eb78112953a4d20e.patch deleted file mode 100644 index 50d1314cf..000000000 --- a/source/kde/kde/patch/kwayland-server/5f5bea1648590f24f11ce232eb78112953a4d20e.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 5f5bea1648590f24f11ce232eb78112953a4d20e Mon Sep 17 00:00:00 2001 -From: Vlad Zahorodnii -Date: Mon, 10 Jan 2022 13:17:32 +0200 -Subject: [PATCH] Store surface object in tablet cursor using QPointer - -The SurfaceInterface can get destroyed and TabletCursorV2 may return a -dangling pointer. - -BUG: 446255 ---- - src/server/tablet_v2_interface.cpp | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/server/tablet_v2_interface.cpp b/src/server/tablet_v2_interface.cpp -index 59a4b2fb..8af80603 100644 ---- a/src/server/tablet_v2_interface.cpp -+++ b/src/server/tablet_v2_interface.cpp -@@ -91,7 +91,7 @@ public: - TabletCursorV2 *const q; - - quint32 m_serial = 0; -- SurfaceInterface *m_surface = nullptr; -+ QPointer m_surface; - QPoint m_hotspot; - }; - --- -GitLab - diff --git a/source/kde/kde/patch/libkscreen.patch b/source/kde/kde/patch/libkscreen.patch deleted file mode 100644 index 13980ceb2..000000000 --- a/source/kde/kde/patch/libkscreen.patch +++ /dev/null @@ -1,2 +0,0 @@ -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 deleted file mode 100644 index b0e5e7136..000000000 --- a/source/kde/kde/patch/libkscreen/7eb0390bf70fc7fb5a39bd501ffcc327a07c328a.patch +++ /dev/null @@ -1,240 +0,0 @@ -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 deleted file mode 100644 index 38e932be9..000000000 --- a/source/kde/kde/patch/libkscreen/cf0921f3fbde31cb94b9ccddcaba36da3a488483.patch +++ /dev/null @@ -1,219 +0,0 @@ -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/kde/kde/patch/plasma-nm.patch b/source/kde/kde/patch/plasma-nm.patch deleted file mode 100644 index 283ff8ebe..000000000 --- a/source/kde/kde/patch/plasma-nm.patch +++ /dev/null @@ -1 +0,0 @@ -cat $CWD/patch/plasma-nm/80c47e577b80364c995aa0530a48e17c1a7e460f.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; } diff --git a/source/kde/kde/patch/plasma-nm/80c47e577b80364c995aa0530a48e17c1a7e460f.patch b/source/kde/kde/patch/plasma-nm/80c47e577b80364c995aa0530a48e17c1a7e460f.patch deleted file mode 100644 index 99dbad0f6..000000000 --- a/source/kde/kde/patch/plasma-nm/80c47e577b80364c995aa0530a48e17c1a7e460f.patch +++ /dev/null @@ -1,82 +0,0 @@ -From 80c47e577b80364c995aa0530a48e17c1a7e460f Mon Sep 17 00:00:00 2001 -From: PJ Beers -Date: Wed, 1 Dec 2021 20:36:55 +0100 -Subject: [PATCH] OpenVPN: Import tls-crypt keys - -Enable importing tls-crypt keys from an openvpn config file. Previously, -inline tls-crypt keys from *.ovpn files were ignored, causing the -associated connection to fail after import. ---- - vpn/openvpn/openvpn.cpp | 34 ++++++++++++++++++++++++++++++++++ - 1 file changed, 34 insertions(+) - -diff --git a/vpn/openvpn/openvpn.cpp b/vpn/openvpn/openvpn.cpp -index 9d1bf8ea..b69f7ec0 100644 ---- a/vpn/openvpn/openvpn.cpp -+++ b/vpn/openvpn/openvpn.cpp -@@ -55,6 +55,7 @@ K_PLUGIN_CLASS_WITH_JSON(OpenVpnUiPlugin, "plasmanetworkmanagement_openvpnui.jso - #define RPORT_TAG "rport" - #define SECRET_TAG "secret" - #define TLS_AUTH_TAG "tls-auth" -+#define TLS_CRYPT_TAG "tls-crypt" - #define TLS_CLIENT_TAG "tls-client" - #define TLS_REMOTE_TAG "tls-remote" - #define TUNMTU_TAG "tun-mtu" -@@ -70,6 +71,8 @@ K_PLUGIN_CLASS_WITH_JSON(OpenVpnUiPlugin, "plasmanetworkmanagement_openvpnui.jso - #define END_KEY_SECRET_TAG "" - #define BEGIN_TLS_AUTH_TAG "" - #define END_TLS_AUTH_TAG "" -+#define BEGIN_TLS_CRYPT_TAG "" -+#define END_TLS_CRYPT_TAG "" - - #define PROC_TYPE_TAG "Proc-Type: 4,ENCRYPTED" - #define PKCS8_TAG "-----BEGIN ENCRYPTED PRIVATE KEY-----" -@@ -497,6 +500,27 @@ NMVariantMapMap OpenVpnUiPlugin::importConnectionSettings(const QString &fileNam - } - continue; - } -+ if (key_value[0] == TLS_CRYPT_TAG && key_value.count() > 1) { -+ key_value[1] = line.right(line.length() - line.indexOf(QRegExp("\\s"))); // Get whole string after key -+ -+ // We will copy inline certificate later when we reach tag. -+ if (key_value[1].trimmed() != QLatin1String("[inline]")) { -+ if (copyCertificates) { -+ const QString absoluteFilePath = tryToCopyToCertificatesDirectory(connectionName, unQuote(key_value[1], fileName)); -+ dataMap.insert(QLatin1String(NM_OPENVPN_KEY_TLS_CRYPT), absoluteFilePath); -+ } else { -+ dataMap.insert(QLatin1String(NM_OPENVPN_KEY_TLS_CRYPT), unQuote(key_value[1], fileName)); -+ } -+ } -+ -+ if (key_value.count() > 2) { -+ key_value[2] = key_value[1]; -+ if (!key_value[2].isEmpty() && (key_value[2].toLong() == 0 || key_value[2].toLong() == 1)) { -+ dataMap.insert(QLatin1String(NM_OPENVPN_KEY_TA_DIR), key_value[2]); -+ } -+ } -+ continue; -+ } - if (key_value[0] == CIPHER_TAG) { - if (key_value.count() == 2) { - dataMap.insert(QLatin1String(NM_OPENVPN_KEY_CIPHER), key_value[1]); -@@ -596,6 +620,16 @@ NMVariantMapMap OpenVpnUiPlugin::importConnectionSettings(const QString &fileNam - } - } - continue; -+ } else if (key_value[0] == BEGIN_TLS_CRYPT_TAG) { -+ const QString tlsAuthAbsolutePath = saveFile(in, QLatin1String(END_TLS_CRYPT_TAG), connectionName, "tls_crypt.key"); -+ if (!tlsAuthAbsolutePath.isEmpty()) { -+ dataMap.insert(QLatin1String(NM_OPENVPN_KEY_TLS_CRYPT), tlsAuthAbsolutePath); -+ -+ if (key_direction > -1) { -+ dataMap.insert(QLatin1String(NM_OPENVPN_KEY_TA_DIR), QString().setNum(key_direction)); -+ } -+ } -+ continue; - } - - // Import X-NM-Routes if present --- -GitLab - - diff --git a/source/kde/kde/patch/plasma-workspace.patch b/source/kde/kde/patch/plasma-workspace.patch index 7d2b9d398..77645b0cb 100644 --- a/source/kde/kde/patch/plasma-workspace.patch +++ b/source/kde/kde/patch/plasma-workspace.patch @@ -1,5 +1 @@ cat $CWD/patch/plasma-workspace/0001-Revert-No-icons-on-the-desktop-by-default.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; } -cat $CWD/patch/plasma-workspace/70d23b89.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; } -cat $CWD/patch/plasma-workspace/926f864756e5586f38574c166abdb5befa3dc771.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; } -cat $CWD/patch/plasma-workspace/0001-Revert-Drop-setupX11-from-startplasma-waylandsession.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; } -cat $CWD/patch/plasma-workspace/0002-Revert-Drop-X11-root-properties-for-KDE-full-session.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; } diff --git a/source/kde/kde/patch/plasma-workspace/0001-Revert-Drop-setupX11-from-startplasma-waylandsession.patch b/source/kde/kde/patch/plasma-workspace/0001-Revert-Drop-setupX11-from-startplasma-waylandsession.patch deleted file mode 100644 index 4ed7dc6fa..000000000 --- a/source/kde/kde/patch/plasma-workspace/0001-Revert-Drop-setupX11-from-startplasma-waylandsession.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 5db85cf17cd11236f8ee44ba95dd56b81087c6aa Mon Sep 17 00:00:00 2001 -From: Fabian Vogt -Date: Thu, 21 Oct 2021 08:20:33 +0200 -Subject: [PATCH 1/2] Revert "Drop setupX11 from startplasma-waylandsession" - -This reverts commit 8bf0e43620de3416e783c307ba10111c6964757b. ---- - startkde/startplasma-waylandsession.cpp | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/startkde/startplasma-waylandsession.cpp b/startkde/startplasma-waylandsession.cpp -index 3a054a04f..ed496cc24 100644 ---- a/startkde/startplasma-waylandsession.cpp -+++ b/startkde/startplasma-waylandsession.cpp -@@ -19,6 +19,12 @@ int main(int argc, char **argv) - - out << "startplasma-waylandsession: Starting up..."; - -+ if (qEnvironmentVariableIsSet("DISPLAY")) { -+ setupX11(); -+ } else { -+ qWarning() << "running kwin without Xwayland support"; -+ } -+ - if (!syncDBusEnvironment()) { - out << "Could not sync environment to dbus.\n"; - return 2; --- -2.33.0 - diff --git a/source/kde/kde/patch/plasma-workspace/0002-Revert-Drop-X11-root-properties-for-KDE-full-session.patch b/source/kde/kde/patch/plasma-workspace/0002-Revert-Drop-X11-root-properties-for-KDE-full-session.patch deleted file mode 100644 index 3f6d71970..000000000 --- a/source/kde/kde/patch/plasma-workspace/0002-Revert-Drop-X11-root-properties-for-KDE-full-session.patch +++ /dev/null @@ -1,86 +0,0 @@ -From 075b2f27722d2f28a5c3d4e201c7e7e787cb68de Mon Sep 17 00:00:00 2001 -From: Fabian Vogt -Date: Thu, 21 Oct 2021 08:20:38 +0200 -Subject: [PATCH 2/2] Revert "Drop X11 root properties for KDE full session / - session version" - -This reverts commit 9a4e3d39c2a9ca48f39a60ae2ea88e9921723cec. ---- - startkde/startplasma-waylandsession.cpp | 1 + - startkde/startplasma-x11.cpp | 1 + - startkde/startplasma.cpp | 22 ++++++++++++++++++++++ - startkde/startplasma.h | 1 + - 4 files changed, 25 insertions(+) - -diff --git a/startkde/startplasma-waylandsession.cpp b/startkde/startplasma-waylandsession.cpp -index ed496cc24..d0c83bf5a 100644 ---- a/startkde/startplasma-waylandsession.cpp -+++ b/startkde/startplasma-waylandsession.cpp -@@ -41,6 +41,7 @@ int main(int argc, char **argv) - // Keep for KF5; remove in KF6 (KInit will be gone then) - runSync(QStringLiteral("kdeinit5_shutdown"), {}); - -+ cleanupX11(); - out << "startplasma-waylandsession: Done.\n"; - - return 0; -diff --git a/startkde/startplasma-x11.cpp b/startkde/startplasma-x11.cpp -index d6b2c5439..7ddf7b3ea 100644 ---- a/startkde/startplasma-x11.cpp -+++ b/startkde/startplasma-x11.cpp -@@ -93,6 +93,7 @@ int main(int argc, char **argv) - runSync(QStringLiteral("kdeinit5_shutdown"), {}); - - cleanupPlasmaEnvironment(oldSystemdEnvironment); -+ cleanupX11(); - - out << "startkde: Done.\n"; - -diff --git a/startkde/startplasma.cpp b/startkde/startplasma.cpp -index 8d0b0ba89..5f78e7016 100644 ---- a/startkde/startplasma.cpp -+++ b/startkde/startplasma.cpp -@@ -336,6 +336,28 @@ void setupX11() - // so don't move this up. - - runSync(QStringLiteral("xsetroot"), {QStringLiteral("-cursor_name"), QStringLiteral("left_ptr")}); -+ runSync(QStringLiteral("xprop"), -+ {QStringLiteral("-root"), -+ QStringLiteral("-f"), -+ QStringLiteral("KDE_FULL_SESSION"), -+ QStringLiteral("8t"), -+ QStringLiteral("-set"), -+ QStringLiteral("KDE_FULL_SESSION"), -+ QStringLiteral("true")}); -+ runSync(QStringLiteral("xprop"), -+ {QStringLiteral("-root"), -+ QStringLiteral("-f"), -+ QStringLiteral("KDE_SESSION_VERSION"), -+ QStringLiteral("32c"), -+ QStringLiteral("-set"), -+ QStringLiteral("KDE_SESSION_VERSION"), -+ QStringLiteral("5")}); -+} -+ -+void cleanupX11() -+{ -+ runSync(QStringLiteral("xprop"), {QStringLiteral("-root"), QStringLiteral("-remove"), QStringLiteral("KDE_FULL_SESSION")}); -+ runSync(QStringLiteral("xprop"), {QStringLiteral("-root"), QStringLiteral("-remove"), QStringLiteral("KDE_SESSION_VERSION")}); - } - - void cleanupPlasmaEnvironment(const std::optional &oldSystemdEnvironment) -diff --git a/startkde/startplasma.h b/startkde/startplasma.h -index e8684be74..00c5c1570 100644 ---- a/startkde/startplasma.h -+++ b/startkde/startplasma.h -@@ -26,6 +26,7 @@ void importSystemdEnvrionment(); - void runEnvironmentScripts(); - void setupPlasmaEnvironment(); - void cleanupPlasmaEnvironment(const std::optional &oldSystemdEnvironment); -+void cleanupX11(); - bool syncDBusEnvironment(); - void setupFontDpi(); - QProcess *setupKSplash(); --- -2.33.0 - diff --git a/source/kde/kde/patch/plasma-workspace/70d23b89.patch b/source/kde/kde/patch/plasma-workspace/70d23b89.patch deleted file mode 100644 index 2d9c2a0f8..000000000 --- a/source/kde/kde/patch/plasma-workspace/70d23b89.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 70d23b891e95bc6911389773f320a4406a12bd87 Mon Sep 17 00:00:00 2001 -From: Lufan Zhong -Date: Sun, 26 Dec 2021 19:33:09 +0000 -Subject: [PATCH] runners/shell: Port from KToolInvocation::invokeTerminal to - KTerminalLauncherJob - -kinit is being deprecated; this change will allow it to open a terminal and execute -commands normally without kinit being present. - -BUG: 437131 -FIXED-IN: 5.24 ---- - runners/shell/shellrunner.cpp | 15 +++++++++++++-- - 1 file changed, 13 insertions(+), 2 deletions(-) - -diff --git a/runners/shell/shellrunner.cpp b/runners/shell/shellrunner.cpp -index 03b54e1f1..be4058acf 100644 ---- a/runners/shell/shellrunner.cpp -+++ b/runners/shell/shellrunner.cpp -@@ -12,8 +12,9 @@ - #include - #include - #include --#include -+#include - #include -+#include - #include - #include - -@@ -62,7 +63,17 @@ void ShellRunner::run(const Plasma::RunnerContext &context, const Plasma::QueryM - { - if (match.selectedAction()) { - const QVariantList data = match.data().toList(); -- KToolInvocation::invokeTerminal(data.at(0).toString(), data.at(1).toStringList()); -+ const QStringList list = data.at(1).toStringList(); -+ QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); -+ for (const auto& str : list) -+ { -+ const int pos = str.indexOf('='); -+ env.insert(str.left(pos), str.mid(pos+1)); -+ } -+ auto job = new KTerminalLauncherJob(data.at(0).toString()); -+ job->setProcessEnvironment(env); -+ job->setUiDelegate(new KNotificationJobUiDelegate(KJobUiDelegate::AutoHandlingEnabled)); -+ job->start(); - return; - } - --- -GitLab - diff --git a/source/kde/kde/patch/plasma-workspace/926f864756e5586f38574c166abdb5befa3dc771.patch b/source/kde/kde/patch/plasma-workspace/926f864756e5586f38574c166abdb5befa3dc771.patch deleted file mode 100644 index 4c30b8dec..000000000 --- a/source/kde/kde/patch/plasma-workspace/926f864756e5586f38574c166abdb5befa3dc771.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 926f864756e5586f38574c166abdb5befa3dc771 Mon Sep 17 00:00:00 2001 -From: David Edmundson -Date: Wed, 8 Dec 2021 13:08:43 +0000 -Subject: [PATCH] [libtaskmanager] Increase buffer for pipewire format - negotiation - -Libtaskmanager's buffer for spa_builder is too small on certain -configurations. Because podBuilder->state.offset is never reset, the -buffer space can run out when EGL returns a long list of dma_buf -modifiers, causing PipeWire negotiation to fail. - -An example is when EGL returns 20 modifiers. There are 6 formats defined -in pipewiresourcestream.cpp, for each format it will construct 2 frames, -one with 21*8=168 bytes long of modifiers. The modifier lists for all -frames will be 6*168=1008 bytes (only 16 bytes left of 1024 bytes), let -alone other frames. - -BUG: 446061 ---- - libtaskmanager/declarative/pipewiresourcestream.cpp | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/libtaskmanager/declarative/pipewiresourcestream.cpp b/libtaskmanager/declarative/pipewiresourcestream.cpp -index a6713ae76..f1d3032a5 100644 ---- a/libtaskmanager/declarative/pipewiresourcestream.cpp -+++ b/libtaskmanager/declarative/pipewiresourcestream.cpp -@@ -260,7 +260,7 @@ bool PipeWireSourceStream::createStream(uint nodeid) - pwNodeId = nodeid; - pw_stream_add_listener(pwStream, &streamListener, &pwStreamEvents, this); - -- uint8_t buffer[1024]; -+ uint8_t buffer[4096]; - spa_pod_builder podBuilder = SPA_POD_BUILDER_INIT(buffer, sizeof(buffer)); - - const QVector formats = --- -GitLab - -- cgit v1.2.3-65-gdbad