From fe9678388d4f34683e079873923664b6fac11e6e Mon Sep 17 00:00:00 2001 From: Toast Date: Wed, 18 Dec 2024 15:47:03 +0100 Subject: [PATCH 1/5] Flake: update lock file and remove unneeded nixpkgs patches --- flake.lock | 98 ++++++++--------- flake.nix | 4 +- nixpkgs-patches/pr361364.patch | 187 --------------------------------- 3 files changed, 50 insertions(+), 239 deletions(-) delete mode 100644 nixpkgs-patches/pr361364.patch diff --git a/flake.lock b/flake.lock index 15dfcba..d6945dd 100644 --- a/flake.lock +++ b/flake.lock @@ -25,11 +25,11 @@ }, "catppuccin": { "locked": { - "lastModified": 1733001911, - "narHash": "sha256-uX/9m0TbdhEzuWA0muM5mI/AaWcLiDLjCCyu5Qr9MRk=", + "lastModified": 1734397929, + "narHash": "sha256-VCTVpU/RlrI9StxzDnqc1R3ZTQloLVALSkiN/Fgiad4=", "owner": "catppuccin", "repo": "nix", - "rev": "a817009ebfd2cca7f70a77884e5098d0a8c83f8e", + "rev": "21310cde33d3ee8023679dec01a9724a346c63ff", "type": "github" }, "original": { @@ -219,11 +219,11 @@ ] }, "locked": { - "lastModified": 1733754861, - "narHash": "sha256-3JKzIou54yjiMVmvgdJwopekEvZxX3JDT8DpKZs4oXY=", + "lastModified": 1734344598, + "narHash": "sha256-wNX3hsScqDdqKWOO87wETUEi7a/QlPVgpC/Lh5rFOuA=", "owner": "nix-community", "repo": "home-manager", - "rev": "9ebaa80a227eaca9c87c53ed515ade013bc2bca9", + "rev": "83ecd50915a09dca928971139d3a102377a8d242", "type": "github" }, "original": { @@ -239,11 +239,11 @@ ] }, "locked": { - "lastModified": 1733572789, - "narHash": "sha256-zjO6m5BqxXIyjrnUziAzk4+T4VleqjstNudSqWcpsHI=", + "lastModified": 1734366194, + "narHash": "sha256-vykpJ1xsdkv0j8WOVXrRFHUAdp9NXHpxdnn1F4pYgSw=", "owner": "nix-community", "repo": "home-manager", - "rev": "c7ffc9727d115e433fd884a62dc164b587ff651d", + "rev": "80b0fdf483c5d1cb75aaad909bd390d48673857f", "type": "github" }, "original": { @@ -261,11 +261,11 @@ ] }, "locked": { - "lastModified": 1733762021, - "narHash": "sha256-QAc+GvjJXLyp7oy2Vt1LEjYnq6UXPAmncwpL5aZUsUM=", + "lastModified": 1734162608, + "narHash": "sha256-m2AX+3eiVqIK6uO7GbGY7SFnkkYOlR5fQiNI0eRvWOQ=", "owner": "Jovian-Experiments", "repo": "Jovian-NixOS", - "rev": "f2180c6fcfca4eaecd79eadba0b5874e9a1c70c1", + "rev": "31bdf4c7c91204d65afbde01146deee0259a8fb7", "type": "github" }, "original": { @@ -277,11 +277,11 @@ "lix": { "flake": false, "locked": { - "lastModified": 1733740102, - "narHash": "sha256-zIm58tETZ5Z6Scsjrn9rPISLzH4kWb2MIoC/jdii5ts=", - "rev": "369e3f82f066866b4d75abc5fc66e5b8e2149b4c", + "lastModified": 1733932114, + "narHash": "sha256-LN4pgLjGWztTlJ4oDcKWvDuTFeUUVgbmXoZ2EXG20Gw=", + "rev": "92ed9fee7d169febf53ea85961174fc0a22c2115", "type": "tarball", - "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/369e3f82f066866b4d75abc5fc66e5b8e2149b4c.tar.gz?rev=369e3f82f066866b4d75abc5fc66e5b8e2149b4c" + "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/92ed9fee7d169febf53ea85961174fc0a22c2115.tar.gz?rev=92ed9fee7d169febf53ea85961174fc0a22c2115" }, "original": { "type": "tarball", @@ -336,11 +336,11 @@ }, "nix-flatpak": { "locked": { - "lastModified": 1733345341, - "narHash": "sha256-8S58zrdpzGhax6tmn1i+R3AA0N9DJMu5FQI8JkA0NNU=", + "lastModified": 1734128415, + "narHash": "sha256-HLwdVNxpuTsLlM3tCkpbQU6yCehdgf3kOS1G2SDlkzY=", "owner": "gmodena", "repo": "nix-flatpak", - "rev": "ebb0be49fc381112ff37726c6dd6df4df2ef5a1b", + "rev": "8bdc2540da516006d07b04019eb57ae0781a04b3", "type": "github" }, "original": { @@ -374,11 +374,11 @@ }, "nix-impermanence": { "locked": { - "lastModified": 1731242966, - "narHash": "sha256-B3C3JLbGw0FtLSWCjBxU961gLNv+BOOBC6WvstKLYMw=", + "lastModified": 1734200366, + "narHash": "sha256-0NursoP4BUdnc+wy+Mq3icHkXu/RgP1Sjo0MJxV2+Dw=", "owner": "nix-community", "repo": "impermanence", - "rev": "3ed3f0eaae9fcc0a8331e77e9319c8a4abd8a71a", + "rev": "c6323585fa0035d780e3d8906eb1b24b65d19a48", "type": "github" }, "original": { @@ -394,11 +394,11 @@ ] }, "locked": { - "lastModified": 1733629314, - "narHash": "sha256-U0vivjQFAwjNDYt49Krevs1murX9hKBFe2Ye0cHpgbU=", + "lastModified": 1734234111, + "narHash": "sha256-icEMqBt4HtGH52PU5FHidgBrNJvOfXH6VQKNtnD1aw8=", "owner": "Mic92", "repo": "nix-index-database", - "rev": "f1e477a7dd11e27e7f98b646349cd66bbabf2fb8", + "rev": "311d6cf3ad3f56cb051ffab1f480b2909b3f754d", "type": "github" }, "original": { @@ -414,11 +414,11 @@ ] }, "locked": { - "lastModified": 1733629314, - "narHash": "sha256-U0vivjQFAwjNDYt49Krevs1murX9hKBFe2Ye0cHpgbU=", + "lastModified": 1734234111, + "narHash": "sha256-icEMqBt4HtGH52PU5FHidgBrNJvOfXH6VQKNtnD1aw8=", "owner": "Mic92", "repo": "nix-index-database", - "rev": "f1e477a7dd11e27e7f98b646349cd66bbabf2fb8", + "rev": "311d6cf3ad3f56cb051ffab1f480b2909b3f754d", "type": "github" }, "original": { @@ -436,11 +436,11 @@ ] }, "locked": { - "lastModified": 1733709556, - "narHash": "sha256-u0ll0DDrKlO7tiLGGtmphv3wFy5ReDuf0USo/OlfROU=", + "lastModified": 1734314370, + "narHash": "sha256-9PhjDAAuXP4tuJg+kM1AozKwBFyHHJ8ZqhQD+peqGtg=", "owner": "Infinidoge", "repo": "nix-minecraft", - "rev": "8d11f147df83fe137d3d94f6f3646e3a52bec855", + "rev": "616634de04e87b621bc3d495af114c4e9c6ccd36", "type": "github" }, "original": { @@ -451,11 +451,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1733481457, - "narHash": "sha256-IS3bxa4N1VMSh3/P6vhEAHQZecQ3oAlKCDvzCQSO5Is=", + "lastModified": 1734352517, + "narHash": "sha256-mfv+J/vO4nqmIOlq8Y1rRW8hVsGH3M+I2ESMjhuebDs=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "e563803af3526852b6b1d77107a81908c66a9fcf", + "rev": "b12e314726a4226298fe82776b4baeaa7bcf3dcd", "type": "github" }, "original": { @@ -467,11 +467,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1733581040, - "narHash": "sha256-Qn3nPMSopRQJgmvHzVqPcE3I03zJyl8cSbgnnltfFDY=", + "lastModified": 1734424634, + "narHash": "sha256-cHar1vqHOOyC7f1+tVycPoWTfKIaqkoe1Q6TnKzuti4=", "owner": "nixos", "repo": "nixpkgs", - "rev": "22c3f2cf41a0e70184334a958e6b124fb0ce3e01", + "rev": "d3c42f187194c26d9f0309a8ecc469d6c878ce33", "type": "github" }, "original": { @@ -483,11 +483,11 @@ }, "nixpkgs-raw": { "locked": { - "lastModified": 1733550349, - "narHash": "sha256-NcGumB4Lr6KSDq+nIqXtNA8QwAQKDSZT7N9OTGWbTrs=", + "lastModified": 1734323986, + "narHash": "sha256-m/lh6hYMIWDYHCAsn81CDAiXoT3gmxXI9J987W5tZrE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "e2605d0744c2417b09f8bf850dfca42fcf537d34", + "rev": "394571358ce82dff7411395829aa6a3aad45b907", "type": "github" }, "original": { @@ -498,11 +498,11 @@ }, "nixpkgs-unstable-raw": { "locked": { - "lastModified": 1733581040, - "narHash": "sha256-Qn3nPMSopRQJgmvHzVqPcE3I03zJyl8cSbgnnltfFDY=", + "lastModified": 1734424634, + "narHash": "sha256-cHar1vqHOOyC7f1+tVycPoWTfKIaqkoe1Q6TnKzuti4=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "22c3f2cf41a0e70184334a958e6b124fb0ce3e01", + "rev": "d3c42f187194c26d9f0309a8ecc469d6c878ce33", "type": "github" }, "original": { @@ -518,11 +518,11 @@ "treefmt-nix": "treefmt-nix" }, "locked": { - "lastModified": 1733824207, - "narHash": "sha256-qGXcFigGMSFba29CtCnTgf/c9h+Dzh6yHcXTK16jXJ8=", + "lastModified": 1734529681, + "narHash": "sha256-pe/fHd6nuz8nxwyVsLDDilgy+0rXJ1iYhCFojFlV8QE=", "owner": "nix-community", "repo": "NUR", - "rev": "f1ea8bb704f71d74dcc885d6bd149b5b661bb858", + "rev": "29cbfd0aad3f30ed30312668b3d8dca522175349", "type": "github" }, "original": { @@ -541,11 +541,11 @@ ] }, "locked": { - "lastModified": 1733578387, - "narHash": "sha256-XkMZGeqg0GCRoSXvMcaHP7bdvWPRZxCK1sw1ASsc16E=", + "lastModified": 1733858086, + "narHash": "sha256-h2BDIDKiqgMpA6E+mu0RgMGy3FeM6k+EuJ9xgOQ1+zw=", "owner": "nix-community", "repo": "plasma-manager", - "rev": "2a64e173f1effdcc86e25cba0601e8feedf89115", + "rev": "7e2010249529931a3848054d5ff0dbf24675ab68", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index f567c75..586e9f5 100644 --- a/flake.nix +++ b/flake.nix @@ -103,9 +103,7 @@ nixpkgs-unstable-patched = nixpkgs-raw.legacyPackages.x86_64-linux.applyPatches { name = "patched-nixpkgs-unstable"; src = nixpkgs-unstable-raw; - patches = [ - ./nixpkgs-patches/pr361364.patch - ]; + patches = []; }; nixpkgs-patched = nixpkgs-raw.legacyPackages.x86_64-linux.applyPatches { name = "patched-nixpkgs"; diff --git a/nixpkgs-patches/pr361364.patch b/nixpkgs-patches/pr361364.patch deleted file mode 100644 index 74a7942..0000000 --- a/nixpkgs-patches/pr361364.patch +++ /dev/null @@ -1,187 +0,0 @@ -From c94ae7a159eb8cd86f46ca1ea81dbdca651510f4 Mon Sep 17 00:00:00 2001 -From: Gaetan Lepage -Date: Tue, 3 Dec 2024 08:47:26 +0100 -Subject: [PATCH 1/2] handheld-daemon: 3.6.1 -> 3.6.2 - -Diff: https://github.com/hhd-dev/hhd/compare/refs/tags/v3.6.1...v3.6.2 - -Changelog: https://github.com/hhd-dev/hhd/releases/tag/v3.6.2 ---- - pkgs/by-name/ha/handheld-daemon/package.nix | 87 ++++++++++++++------- - 1 file changed, 57 insertions(+), 30 deletions(-) - -diff --git a/pkgs/by-name/ha/handheld-daemon/package.nix b/pkgs/by-name/ha/handheld-daemon/package.nix -index b99cd1c581476..6b5965e06e645 100644 ---- a/pkgs/by-name/ha/handheld-daemon/package.nix -+++ b/pkgs/by-name/ha/handheld-daemon/package.nix -@@ -1,63 +1,90 @@ - { -+ lib, -+ python3Packages, - fetchFromGitHub, -+ -+ # dependencies -+ systemd, - hidapi, -+ coreutils, - kmod, -- lib, -- python3, -- toybox, -- lsof -+ dbus, -+ lsof, - }: --python3.pkgs.buildPythonApplication rec { -+python3Packages.buildPythonApplication rec { - pname = "handheld-daemon"; -- version = "3.6.1"; -+ version = "3.6.2"; - pyproject = true; - - src = fetchFromGitHub { - owner = "hhd-dev"; - repo = "hhd"; -- rev = "refs/tags/v${version}"; -- hash = "sha256-IdpSRb66G+WzTv/BC29r2OjO1b4VdWbV6OSzOoiFAO0="; -+ tag = "v${version}"; -+ hash = "sha256-W1Ap6yTryBDozKe3aO413Fu0RBul9kEA9ACUTdYyOKM="; - }; - -- propagatedBuildInputs = with python3.pkgs; [ -+ # This package relies on several programs expected to be on the user's PATH. -+ # We take a more reproducible approach by patching the absolute path to each of these required -+ # binaries. -+ postPatch = '' -+ substituteInPlace src/hhd/controller/lib/hid.py \ -+ --replace-fail "libhidapi" "${lib.getLib hidapi}/lib/libhidapi" -+ -+ substituteInPlace src/hhd/controller/lib/hide.py \ -+ --replace-fail "/bin/chmod" "${lib.getExe' coreutils "chmod"}" \ -+ --replace-fail "udevadm" "${lib.getExe' systemd "udevadm"}" -+ -+ substituteInPlace src/hhd/controller/physical/evdev.py \ -+ --replace-fail "udevadm" "${lib.getExe' systemd "udevadm"}" -+ -+ substituteInPlace src/hhd/controller/physical/imu.py \ -+ --replace-fail '"modprobe' '"${lib.getExe' kmod "modprobe"}' -+ -+ substituteInPlace src/hhd/device/oxp/serial.py \ -+ --replace-fail "udevadm" "${lib.getExe' systemd "udevadm"}" -+ -+ substituteInPlace src/hhd/plugins/overlay/systemd.py \ -+ --replace-fail "dbus-monitor" "${lib.getExe' dbus "dbus-monitor"}" \ -+ --replace-fail "systemd-inhibit" "${lib.getExe' systemd "systemd-inhibit"}" -+ -+ substituteInPlace src/hhd/plugins/overlay/x11.py \ -+ --replace-fail "lsof" "${lib.getExe lsof}" -+ -+ substituteInPlace src/hhd/plugins/plugin.py \ -+ --replace-fail '"id"' '"${lib.getExe' coreutils "id"}"' -+ ''; -+ -+ build-system = with python3Packages; [ -+ setuptools -+ ]; -+ -+ dependencies = with python3Packages; [ - evdev -- hidapi -- kmod -+ pyserial - pyyaml - rich - setuptools -- toybox - xlib -- pyserial -- lsof - ]; - - # This package doesn't have upstream tests. - doCheck = false; - -- postPatch = '' -- # handheld-daemon contains a fork of the python module `hid`, so this hook -- # is borrowed from the `hid` derivation. -- hidapi=${hidapi}/lib/ -- test -d $hidapi || { echo "ERROR: $hidapi doesn't exist, please update/fix this build expression."; exit 1; } -- sed -i -e "s|libhidapi|$hidapi/libhidapi|" src/hhd/controller/lib/hid.py -- -- # The generated udev rules point to /bin/chmod, which does not exist in NixOS -- chmod=${toybox}/bin/chmod -- sed -i -e "s|/bin/chmod|$chmod|" src/hhd/controller/lib/hide.py -- ''; -- - postInstall = '' - install -Dm644 $src/usr/lib/udev/rules.d/83-hhd.rules -t $out/lib/udev/rules.d/ - install -Dm644 $src/usr/lib/udev/hwdb.d/83-hhd.hwdb -t $out/lib/udev/hwdb.d/ - ''; - -- meta = with lib; { -+ meta = { - homepage = "https://github.com/hhd-dev/hhd/"; - description = "Linux support for handheld gaming devices like the Legion Go, ROG Ally, and GPD Win"; -- platforms = platforms.linux; -- license = licenses.mit; -- maintainers = with maintainers; [ appsforartists toast ]; -+ platforms = lib.platforms.linux; -+ changelog = "https://github.com/hhd-dev/hhd/releases/tag/v${version}"; -+ license = lib.licenses.gpl3Only; -+ maintainers = with lib.maintainers; [ -+ appsforartists -+ toast -+ ]; - mainProgram = "hhd"; - }; - } - -From 2cf68f2bf37655d730202f2e551b40172181801c Mon Sep 17 00:00:00 2001 -From: Gaetan Lepage -Date: Mon, 9 Dec 2024 10:26:53 +0100 -Subject: [PATCH 2/2] handheld-daemon: 3.6.2 -> 3.7.0 - -Diff: https://github.com/hhd-dev/hhd/compare/None...v3.7.0 - -Changelog: https://github.com/hhd-dev/hhd/releases/tag/v3.7.0 ---- - pkgs/by-name/ha/handheld-daemon/package.nix | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) - -diff --git a/pkgs/by-name/ha/handheld-daemon/package.nix b/pkgs/by-name/ha/handheld-daemon/package.nix -index 6b5965e06e645..2fe0c45eca77f 100644 ---- a/pkgs/by-name/ha/handheld-daemon/package.nix -+++ b/pkgs/by-name/ha/handheld-daemon/package.nix -@@ -8,19 +8,20 @@ - hidapi, - coreutils, - kmod, -+ efibootmgr, - dbus, - lsof, - }: - python3Packages.buildPythonApplication rec { - pname = "handheld-daemon"; -- version = "3.6.2"; -+ version = "3.7.0"; - pyproject = true; - - src = fetchFromGitHub { - owner = "hhd-dev"; - repo = "hhd"; - tag = "v${version}"; -- hash = "sha256-W1Ap6yTryBDozKe3aO413Fu0RBul9kEA9ACUTdYyOKM="; -+ hash = "sha256-DkVdYnSEeaNZj76lhdU+9Pl0yzam2A2QGa3aHCmSHEA="; - }; - - # This package relies on several programs expected to be on the user's PATH. -@@ -40,6 +41,9 @@ python3Packages.buildPythonApplication rec { - substituteInPlace src/hhd/controller/physical/imu.py \ - --replace-fail '"modprobe' '"${lib.getExe' kmod "modprobe"}' - -+ substituteInPlace src/hhd/plugins/overlay/power.py \ -+ --replace-fail '"efibootmgr"' '"${lib.getExe' efibootmgr "id"}"' -+ - substituteInPlace src/hhd/device/oxp/serial.py \ - --replace-fail "udevadm" "${lib.getExe' systemd "udevadm"}" - From 577aa1cc33357edbafe465f1de55a0f04e413bab Mon Sep 17 00:00:00 2001 From: Toast Date: Wed, 18 Dec 2024 15:49:04 +0100 Subject: [PATCH 2/5] Kde/konsole: remove now-upstreamed patch --- roles/kde/patches/konsole-pr767.patch | 96 --------------------------- roles/kde/programs/konsole.nix | 4 +- 2 files changed, 1 insertion(+), 99 deletions(-) delete mode 100644 roles/kde/patches/konsole-pr767.patch diff --git a/roles/kde/patches/konsole-pr767.patch b/roles/kde/patches/konsole-pr767.patch deleted file mode 100644 index 8c757af..0000000 --- a/roles/kde/patches/konsole-pr767.patch +++ /dev/null @@ -1,96 +0,0 @@ -From fa8f6054c992f8f28781933a23bccb91b3341d6e Mon Sep 17 00:00:00 2001 -From: Christian Muehlhaeuser -Date: Tue, 8 Nov 2022 08:55:14 +0100 -Subject: [PATCH] Add support for OSC-52 write-only clipboard access - -Implements OSC-52 write-only clipboard access. Already supported by -a wide range of other terminals, including alacritty, foot, kitty, -urxvt, wezterm, xterm, and others. - -I've intentionally omitted read access to the clipboard as that -comes with several security concerns, which should be discussed -first. ---- - src/Vt102Emulation.cpp | 36 ++++++++++++++++++++++++++++++++++++ - src/Vt102Emulation.h | 2 +- - 2 files changed, 37 insertions(+), 1 deletion(-) - -diff --git a/src/Vt102Emulation.cpp b/src/Vt102Emulation.cpp -index 49b23c77d4..3b1e389106 100644 ---- a/src/Vt102Emulation.cpp -+++ b/src/Vt102Emulation.cpp -@@ -12,8 +12,10 @@ - #include - - // Qt -+#include - #include - #include -+#include - #include - #include - #include -@@ -1153,6 +1155,40 @@ void Vt102Emulation::processSessionAttributeRequest(const int tokenSize, const u - connect(action, &KNotificationAction::activated, this, [this, notification]() { - _currentScreen->currentTerminalDisplay()->notificationClicked(notification->xdgActivationToken()); - }); -+ } -+ if (attribute == Clipboard) { -+ // Clipboard -+ QStringList params = value.split(QLatin1Char(';')); -+ if (params.length() == 0) { -+ return; -+ } -+ -+ bool clipboard = false; -+ bool selection = false; -+ if (params[0].isEmpty() || params[0].contains(QLatin1Char('c')) || params[0].contains(QLatin1Char('s'))) { -+ clipboard = true; -+ } -+ if (params[0].contains(QLatin1Char('p'))) { -+ selection = true; -+ } -+ -+ if (params.length() == 2) { -+ // Copy to clipboard -+ if (clipboard) { -+ QApplication::clipboard()->setText(QString::fromUtf8(QByteArray::fromBase64(params[1].toUtf8())), QClipboard::Clipboard); -+ } -+ if (selection) { -+ QApplication::clipboard()->setText(QString::fromUtf8(QByteArray::fromBase64(params[1].toUtf8())), QClipboard::Selection); -+ } -+ } else { -+ // Clear clipboard -+ if (clipboard) { -+ QApplication::clipboard()->clear(QClipboard::Clipboard); -+ } -+ if (selection) { -+ QApplication::clipboard()->clear(QClipboard::Selection); -+ } -+ } - - return; - } -diff --git a/src/Vt102Emulation.h b/src/Vt102Emulation.h -index 665e9f026d..3456e068d3 100644 ---- a/src/Vt102Emulation.h -+++ b/src/Vt102Emulation.h -@@ -126,7 +126,6 @@ private: - void resetModes(); - - void resetTokenizer(); --#define MAX_TOKEN_LENGTH 256 // Max length of tokens (e.g. window title) - void addToCurrentToken(uint cc); - int tokenBufferPos; - -@@ -183,6 +182,7 @@ private: - enum osc { - // https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-Operating-System-Commands - ReportColors = 4, -+ Clipboard = 52, - ResetColors = 104, - // https://gitlab.freedesktop.org/Per_Bothner/specifications/blob/master/proposals/semantic-prompts.md - SemanticPrompts = 133, --- -GitLab - diff --git a/roles/kde/programs/konsole.nix b/roles/kde/programs/konsole.nix index ecf812f..25040e8 100644 --- a/roles/kde/programs/konsole.nix +++ b/roles/kde/programs/konsole.nix @@ -22,9 +22,7 @@ in { kdePackages = prev.kdePackages.overrideScope ( kFinal: kPrev: { konsole = kPrev.konsole.overrideAttrs { - patches = [ - ../patches/konsole-pr767.patch - ]; + patches = []; }; } ); From 0c754f1930ef3ee45aa8d89988791f5b74d02cb1 Mon Sep 17 00:00:00 2001 From: Toast Date: Wed, 18 Dec 2024 16:19:39 +0100 Subject: [PATCH 3/5] Kde/kwin: app pr 6878 --- roles/kde/patches/kwin-pr6878.patch | 753 ++++++++++++++++++++++++++++ roles/kde/programs/kwin.nix | 1 + 2 files changed, 754 insertions(+) create mode 100644 roles/kde/patches/kwin-pr6878.patch diff --git a/roles/kde/patches/kwin-pr6878.patch b/roles/kde/patches/kwin-pr6878.patch new file mode 100644 index 0000000..41fffc9 --- /dev/null +++ b/roles/kde/patches/kwin-pr6878.patch @@ -0,0 +1,753 @@ +diff --git a/src/plugins/zoom/CMakeLists.txt b/src/plugins/zoom/CMakeLists.txt +index c27bdbbb2d..b5fb343e17 100644 +--- a/src/plugins/zoom/CMakeLists.txt ++++ b/src/plugins/zoom/CMakeLists.txt +@@ -4,6 +4,7 @@ + set(zoom_SOURCES + main.cpp + zoom.cpp ++ zoom.qrc + ) + + if (HAVE_ACCESSIBILITY) +diff --git a/src/plugins/zoom/shaders/pixelgrid.frag b/src/plugins/zoom/shaders/pixelgrid.frag +new file mode 100644 +index 0000000000..1e9ee9431f +--- /dev/null ++++ b/src/plugins/zoom/shaders/pixelgrid.frag +@@ -0,0 +1,25 @@ ++#include "colormanagement.glsl" ++ ++uniform sampler2D sampler; ++uniform int textureWidth; ++uniform int textureHeight; ++ ++varying vec2 texcoord0; ++ ++void main() ++{ ++ vec2 texSize = vec2(textureWidth, textureHeight); ++ vec2 samplePosition = texcoord0 * texSize; ++ vec2 pixelCenter = floor(samplePosition) + vec2(0.5); ++ vec2 pixelCenterDistance = abs(samplePosition - pixelCenter); ++ ++ vec4 tex; ++ if (pixelCenterDistance.x > 0.4 || pixelCenterDistance.y > 0.4) { ++ tex = vec4(0, 0, 0, 1); ++ } else { ++ tex = texture2D(sampler, pixelCenter / texSize); ++ } ++ ++ tex = sourceEncodingToNitsInDestinationColorspace(tex); ++ gl_FragColor = nitsToDestinationEncoding(tex); ++} +diff --git a/src/plugins/zoom/shaders/pixelgrid_core.frag b/src/plugins/zoom/shaders/pixelgrid_core.frag +new file mode 100644 +index 0000000000..a1cc7f27f2 +--- /dev/null ++++ b/src/plugins/zoom/shaders/pixelgrid_core.frag +@@ -0,0 +1,24 @@ ++#version 140 ++ ++#include "colormanagement.glsl" ++ ++uniform sampler2D sampler; ++uniform int textureWidth; ++uniform int textureHeight; ++ ++in vec2 texcoord0; ++ ++out vec4 fragColor; ++ ++void main() ++{ ++ vec2 texSize = vec2(textureWidth, textureHeight); ++ vec2 samplePosition = texcoord0 * texSize; ++ vec2 pixelCenter = floor(samplePosition) + vec2(0.5); ++ vec2 pixelCenterDistance = abs(samplePosition - pixelCenter); ++ ++ float t = smoothstep(0.4, 0.5, max(pixelCenterDistance.x, pixelCenterDistance.y)); ++ vec4 tex = mix(texture(sampler, pixelCenter / texSize), vec4(0, 0, 0, 1), t); ++ tex = sourceEncodingToNitsInDestinationColorspace(tex); ++ fragColor = nitsToDestinationEncoding(tex); ++} +diff --git a/src/plugins/zoom/ui_zoom_config.h b/src/plugins/zoom/ui_zoom_config.h +new file mode 100644 +index 0000000000..7e5944a902 +--- /dev/null ++++ b/src/plugins/zoom/ui_zoom_config.h +@@ -0,0 +1,195 @@ ++/******************************************************************************** ++** Form generated from reading UI file 'zoom_config.ui' ++** ++** Created by: Qt User Interface Compiler version 6.8.1 ++** ++** WARNING! All changes made in this file will be lost when recompiling UI file! ++********************************************************************************/ ++ ++#ifndef UI_ZOOM_CONFIG_H ++#define UI_ZOOM_CONFIG_H ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "kshortcutseditor.h" ++ ++namespace KWin { ++ ++class Ui_ZoomEffectConfigForm ++{ ++public: ++ QVBoxLayout *verticalLayout_2; ++ QGroupBox *groupSize; ++ QHBoxLayout *horizontalLayout; ++ QGridLayout *gridLayout; ++ QLabel *label; ++ QDoubleSpinBox *kcfg_ZoomFactor; ++ QCheckBox *kcfg_EnableFocusTracking; ++ QCheckBox *kcfg_EnableTextCaretTracking; ++ QLabel *label_2; ++ QComboBox *kcfg_MousePointer; ++ QComboBox *kcfg_MouseTracking; ++ QLabel *label_3; ++ KShortcutsEditor *editor; ++ ++ void setupUi(QWidget *KWin__ZoomEffectConfigForm) ++ { ++ if (KWin__ZoomEffectConfigForm->objectName().isEmpty()) ++ KWin__ZoomEffectConfigForm->setObjectName("KWin__ZoomEffectConfigForm"); ++ KWin__ZoomEffectConfigForm->resize(304, 288); ++ verticalLayout_2 = new QVBoxLayout(KWin__ZoomEffectConfigForm); ++ verticalLayout_2->setObjectName("verticalLayout_2"); ++ groupSize = new QGroupBox(KWin__ZoomEffectConfigForm); ++ groupSize->setObjectName("groupSize"); ++ horizontalLayout = new QHBoxLayout(groupSize); ++ horizontalLayout->setObjectName("horizontalLayout"); ++ gridLayout = new QGridLayout(); ++ gridLayout->setObjectName("gridLayout"); ++ label = new QLabel(groupSize); ++ label->setObjectName("label"); ++ label->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); ++ ++ gridLayout->addWidget(label, 0, 0, 1, 1); ++ ++ kcfg_ZoomFactor = new QDoubleSpinBox(groupSize); ++ kcfg_ZoomFactor->setObjectName("kcfg_ZoomFactor"); ++ kcfg_ZoomFactor->setDecimals(2); ++ kcfg_ZoomFactor->setMaximum(9999.000000000000000); ++ kcfg_ZoomFactor->setSingleStep(0.050000000000000); ++ kcfg_ZoomFactor->setValue(1.250000000000000); ++ ++ gridLayout->addWidget(kcfg_ZoomFactor, 0, 1, 1, 1); ++ ++ kcfg_EnableFocusTracking = new QCheckBox(groupSize); ++ kcfg_EnableFocusTracking->setObjectName("kcfg_EnableFocusTracking"); ++ ++ gridLayout->addWidget(kcfg_EnableFocusTracking, 4, 0, 1, 2); ++ ++ kcfg_EnableTextCaretTracking = new QCheckBox(groupSize); ++ kcfg_EnableTextCaretTracking->setObjectName("kcfg_EnableTextCaretTracking"); ++ ++ gridLayout->addWidget(kcfg_EnableTextCaretTracking, 5, 0, 1, 2); ++ ++ label_2 = new QLabel(groupSize); ++ label_2->setObjectName("label_2"); ++ label_2->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); ++ ++ gridLayout->addWidget(label_2, 2, 0, 1, 1); ++ ++ kcfg_MousePointer = new QComboBox(groupSize); ++ kcfg_MousePointer->addItem(QString()); ++ kcfg_MousePointer->addItem(QString()); ++ kcfg_MousePointer->addItem(QString()); ++ kcfg_MousePointer->setObjectName("kcfg_MousePointer"); ++ ++ gridLayout->addWidget(kcfg_MousePointer, 2, 1, 1, 1); ++ ++ kcfg_MouseTracking = new QComboBox(groupSize); ++ kcfg_MouseTracking->addItem(QString()); ++ kcfg_MouseTracking->addItem(QString()); ++ kcfg_MouseTracking->addItem(QString()); ++ kcfg_MouseTracking->addItem(QString()); ++ kcfg_MouseTracking->setObjectName("kcfg_MouseTracking"); ++ ++ gridLayout->addWidget(kcfg_MouseTracking, 3, 1, 1, 1); ++ ++ label_3 = new QLabel(groupSize); ++ label_3->setObjectName("label_3"); ++ label_3->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); ++ ++ gridLayout->addWidget(label_3, 3, 0, 1, 1); ++ ++ ++ horizontalLayout->addLayout(gridLayout); ++ ++ ++ verticalLayout_2->addWidget(groupSize); ++ ++ editor = new KShortcutsEditor(KWin__ZoomEffectConfigForm); ++ editor->setObjectName("editor"); ++ QSizePolicy sizePolicy(QSizePolicy::Policy::Preferred, QSizePolicy::Policy::Expanding); ++ sizePolicy.setHorizontalStretch(0); ++ sizePolicy.setVerticalStretch(0); ++ sizePolicy.setHeightForWidth(editor->sizePolicy().hasHeightForWidth()); ++ editor->setSizePolicy(sizePolicy); ++ editor->setActionTypes(KShortcutsEditor::GlobalAction); ++ ++ verticalLayout_2->addWidget(editor); ++ ++#if QT_CONFIG(shortcut) ++ label->setBuddy(kcfg_ZoomFactor); ++ label_2->setBuddy(kcfg_MousePointer); ++ label_3->setBuddy(kcfg_MouseTracking); ++#endif // QT_CONFIG(shortcut) ++ QWidget::setTabOrder(kcfg_ZoomFactor, kcfg_MousePointer); ++ QWidget::setTabOrder(kcfg_MousePointer, kcfg_MouseTracking); ++ QWidget::setTabOrder(kcfg_MouseTracking, kcfg_EnableFocusTracking); ++ QWidget::setTabOrder(kcfg_EnableFocusTracking, kcfg_EnableTextCaretTracking); ++ ++ retranslateUi(KWin__ZoomEffectConfigForm); ++ ++ QMetaObject::connectSlotsByName(KWin__ZoomEffectConfigForm); ++ } // setupUi ++ ++ void retranslateUi(QWidget *KWin__ZoomEffectConfigForm) ++ { ++ groupSize->setTitle(QString()); ++#if QT_CONFIG(whatsthis) ++ label->setWhatsThis(QCoreApplication::translate("KWin::ZoomEffectConfigForm", "On zoom-in and zoom-out change the zoom by the defined zoom-factor.", nullptr)); ++#endif // QT_CONFIG(whatsthis) ++ label->setText(QCoreApplication::translate("KWin::ZoomEffectConfigForm", "Zoom Factor:", nullptr)); ++#if QT_CONFIG(whatsthis) ++ kcfg_ZoomFactor->setWhatsThis(QCoreApplication::translate("KWin::ZoomEffectConfigForm", "On zoom-in and zoom-out change the zoom by the defined zoom-factor.", nullptr)); ++#endif // QT_CONFIG(whatsthis) ++ kcfg_ZoomFactor->setSuffix(QString()); ++#if QT_CONFIG(tooltip) ++ kcfg_EnableFocusTracking->setToolTip(QString()); ++#endif // QT_CONFIG(tooltip) ++#if QT_CONFIG(whatsthis) ++ kcfg_EnableFocusTracking->setWhatsThis(QCoreApplication::translate("KWin::ZoomEffectConfigForm", "Enable tracking of the focused location. This needs QAccessible to be enabled per application (\"export QT_LINUX_ACCESSIBILITY_ALWAYS_ON=1\").", nullptr)); ++#endif // QT_CONFIG(whatsthis) ++ kcfg_EnableFocusTracking->setText(QCoreApplication::translate("KWin::ZoomEffectConfigForm", "Enable Focus Tracking", nullptr)); ++#if QT_CONFIG(whatsthis) ++ kcfg_EnableTextCaretTracking->setWhatsThis(QCoreApplication::translate("KWin::ZoomEffectConfigForm", "Enable tracking of the text cursor. This needs QAccessible to be enabled per application (\"export QT_LINUX_ACCESSIBILITY_ALWAYS_ON=1\").", nullptr)); ++#endif // QT_CONFIG(whatsthis) ++ kcfg_EnableTextCaretTracking->setText(QCoreApplication::translate("KWin::ZoomEffectConfigForm", "Enable Text Cursor Tracking", nullptr)); ++ label_2->setText(QCoreApplication::translate("KWin::ZoomEffectConfigForm", "Mouse Pointer:", nullptr)); ++ kcfg_MousePointer->setItemText(0, QCoreApplication::translate("KWin::ZoomEffectConfigForm", "Scale", nullptr)); ++ kcfg_MousePointer->setItemText(1, QCoreApplication::translate("KWin::ZoomEffectConfigForm", "Keep", nullptr)); ++ kcfg_MousePointer->setItemText(2, QCoreApplication::translate("KWin::ZoomEffectConfigForm", "Hide", nullptr)); ++ ++#if QT_CONFIG(whatsthis) ++ kcfg_MousePointer->setWhatsThis(QCoreApplication::translate("KWin::ZoomEffectConfigForm", "Visibility of the mouse-pointer.", nullptr)); ++#endif // QT_CONFIG(whatsthis) ++ kcfg_MouseTracking->setItemText(0, QCoreApplication::translate("KWin::ZoomEffectConfigForm", "Proportional", nullptr)); ++ kcfg_MouseTracking->setItemText(1, QCoreApplication::translate("KWin::ZoomEffectConfigForm", "Centered", nullptr)); ++ kcfg_MouseTracking->setItemText(2, QCoreApplication::translate("KWin::ZoomEffectConfigForm", "Push", nullptr)); ++ kcfg_MouseTracking->setItemText(3, QCoreApplication::translate("KWin::ZoomEffectConfigForm", "Disabled", nullptr)); ++ ++#if QT_CONFIG(whatsthis) ++ kcfg_MouseTracking->setWhatsThis(QCoreApplication::translate("KWin::ZoomEffectConfigForm", "Track moving of the mouse.", nullptr)); ++#endif // QT_CONFIG(whatsthis) ++ label_3->setText(QCoreApplication::translate("KWin::ZoomEffectConfigForm", "Mouse Tracking:", nullptr)); ++ (void)KWin__ZoomEffectConfigForm; ++ } // retranslateUi ++ ++}; ++ ++} // namespace KWin ++ ++namespace KWin { ++namespace Ui { ++ class ZoomEffectConfigForm: public Ui_ZoomEffectConfigForm {}; ++} // namespace Ui ++} // namespace KWin ++ ++#endif // UI_ZOOM_CONFIG_H +diff --git a/src/plugins/zoom/zoom.cpp b/src/plugins/zoom/zoom.cpp +index a6eb528767..950583c15b 100644 +--- a/src/plugins/zoom/zoom.cpp ++++ b/src/plugins/zoom/zoom.cpp +@@ -31,6 +31,12 @@ + + using namespace std::chrono_literals; + ++static void ensureResources() ++{ ++ // Must initialize resources manually because the effect is a static lib. ++ Q_INIT_RESOURCE(zoom); ++} ++ + namespace KWin + { + +@@ -48,6 +54,8 @@ ZoomEffect::ZoomEffect() + , moveFactor(20.0) + , lastPresentTime(std::chrono::milliseconds::zero()) + { ++ ensureResources(); ++ + ZoomConfig::instance(effects->config()); + QAction *a = nullptr; + a = KStandardAction::zoomIn(this, SLOT(zoomIn()), this); +@@ -214,6 +222,7 @@ void ZoomEffect::reconfigure(ReconfigureFlags) + ZoomConfig::self()->read(); + // On zoom-in and zoom-out change the zoom by the defined zoom-factor. + zoomFactor = std::max(0.1, ZoomConfig::zoomFactor()); ++ m_pixelGridZoom = ZoomConfig::pixelGridZoom(); + // Visibility of the mouse-pointer. + mousePointer = MousePointerType(ZoomConfig::mousePointer()); + // Track moving of the mouse. +@@ -271,12 +280,10 @@ void ZoomEffect::prePaintScreen(ScreenPrePaintData &data, std::chrono::milliseco + + ZoomEffect::OffscreenData *ZoomEffect::ensureOffscreenData(const RenderTarget &renderTarget, const RenderViewport &viewport, Output *screen) + { +- const QRect rect = viewport.renderRect().toRect(); +- const qreal devicePixelRatio = viewport.scale(); +- const QSize nativeSize = (viewport.renderRect().size() * devicePixelRatio).toSize(); ++ const QSize nativeSize = renderTarget.size(); + + OffscreenData &data = m_offscreenData[effects->waylandDisplay() ? screen : nullptr]; +- data.viewport = rect; ++ data.viewport = viewport.renderRect(); + data.color = renderTarget.colorDescription(); + + const GLenum textureFormat = renderTarget.colorDescription() == ColorDescription::sRGB ? GL_RGBA8 : GL_RGBA16F; +@@ -290,9 +297,22 @@ ZoomEffect::OffscreenData *ZoomEffect::ensureOffscreenData(const RenderTarget &r + data.framebuffer = std::make_unique(data.texture.get()); + } + ++ data.texture->setContentTransform(renderTarget.transform()); + return &data; + } + ++GLShader *ZoomEffect::shaderForZoom(double zoom) ++{ ++ if (zoom < m_pixelGridZoom) { ++ return ShaderManager::instance()->shader(ShaderTrait::MapTexture | ShaderTrait::TransformColorspace); ++ } else { ++ if (!m_pixelGridShader) { ++ m_pixelGridShader = ShaderManager::instance()->generateShaderFromFile(ShaderTrait::MapTexture, QString(), QStringLiteral(":/effects/zoom/shaders/pixelgrid.frag")); ++ } ++ return m_pixelGridShader.get(); ++ } ++} ++ + void ZoomEffect::paintScreen(const RenderTarget &renderTarget, const RenderViewport &viewport, int mask, const QRegion ®ion, Output *screen) + { + OffscreenData *offscreenData = ensureOffscreenData(renderTarget, viewport, screen); +@@ -391,7 +411,8 @@ void ZoomEffect::paintScreen(const RenderTarget &renderTarget, const RenderViewp + glClearColor(0.0, 0.0, 0.0, 0.0); + glClear(GL_COLOR_BUFFER_BIT); + +- auto shader = ShaderManager::instance()->pushShader(ShaderTrait::MapTexture | ShaderTrait::TransformColorspace); ++ GLShader *shader = shaderForZoom(zoom); ++ ShaderManager::instance()->pushShader(shader); + for (auto &[screen, offscreen] : m_offscreenData) { + QMatrix4x4 matrix; + matrix.translate(xTranslation * scale, yTranslation * scale); +@@ -399,6 +420,8 @@ void ZoomEffect::paintScreen(const RenderTarget &renderTarget, const RenderViewp + matrix.translate(offscreen.viewport.x() * scale, offscreen.viewport.y() * scale); + + shader->setUniform(GLShader::Mat4Uniform::ModelViewProjectionMatrix, viewport.projectionMatrix() * matrix); ++ shader->setUniform(GLShader::IntUniform::TextureWidth, offscreen.texture->width()); ++ shader->setUniform(GLShader::IntUniform::TextureHeight, offscreen.texture->height()); + shader->setColorspaceUniforms(offscreen.color, renderTarget.colorDescription(), RenderingIntent::Perceptual); + + offscreen.texture->render(offscreen.viewport.size() * scale); +diff --git a/src/plugins/zoom/zoom.h b/src/plugins/zoom/zoom.h +index 2a44395d74..1c9abb4b4e 100644 +--- a/src/plugins/zoom/zoom.h ++++ b/src/plugins/zoom/zoom.h +@@ -26,6 +26,7 @@ class ZoomAccessibilityIntegration; + class GLFramebuffer; + class GLTexture; + class GLVertexBuffer; ++class GLShader; + + class ZoomEffect + : public Effect +@@ -94,7 +95,7 @@ private: + { + std::unique_ptr texture; + std::unique_ptr framebuffer; +- QRect viewport; ++ QRectF viewport; + ColorDescription color = ColorDescription::sRGB; + }; + +@@ -102,6 +103,8 @@ private: + OffscreenData *ensureOffscreenData(const RenderTarget &renderTarget, const RenderViewport &viewport, Output *screen); + void markCursorTextureDirty(); + ++ GLShader *shaderForZoom(double zoom); ++ + #if HAVE_ACCESSIBILITY + ZoomAccessibilityIntegration *m_accessibilityIntegration = nullptr; + #endif +@@ -136,6 +139,8 @@ private: + double moveFactor; + std::chrono::milliseconds lastPresentTime; + std::map m_offscreenData; ++ std::unique_ptr m_pixelGridShader; ++ double m_pixelGridZoom; + }; + + } // namespace +diff --git a/src/plugins/zoom/zoom.kcfg b/src/plugins/zoom/zoom.kcfg +index 63887e32aa..ed43e225c8 100644 +--- a/src/plugins/zoom/zoom.kcfg ++++ b/src/plugins/zoom/zoom.kcfg +@@ -29,5 +29,8 @@ + + 1.0 + ++ ++ 15.0 ++ + + +diff --git a/src/plugins/zoom/zoom.qrc b/src/plugins/zoom/zoom.qrc +new file mode 100644 +index 0000000000..56e7369003 +--- /dev/null ++++ b/src/plugins/zoom/zoom.qrc +@@ -0,0 +1,6 @@ ++ ++ ++ shaders/pixelgrid.frag ++ shaders/pixelgrid_core.frag ++ ++ +diff --git a/src/plugins/zoom/zoom_config.ui b/src/plugins/zoom/zoom_config.ui +index 454f9f9161..4b8a5c000e 100644 +--- a/src/plugins/zoom/zoom_config.ui ++++ b/src/plugins/zoom/zoom_config.ui +@@ -6,159 +6,157 @@ + + 0 + 0 +- 304 +- 288 ++ 595 ++ 551 + + + + +- +- +- ++ ++ ++ Qt::AlignHCenter|Qt::AlignTop + +- +- +- +- +- +- +- On zoom-in and zoom-out change the zoom by the defined zoom-factor. +- +- +- Zoom Factor: +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- kcfg_ZoomFactor +- +- +- +- +- +- +- On zoom-in and zoom-out change the zoom by the defined zoom-factor. +- +- +- +- +- +- 2 +- +- +- 9999.000000000000000 +- +- +- 0.050000000000000 +- +- +- 1.250000000000000 +- +- +- +- +- +- +- +- +- +- Enable tracking of the focused location. This needs QAccessible to be enabled per application ("export QT_LINUX_ACCESSIBILITY_ALWAYS_ON=1"). +- +- +- Enable Focus Tracking +- +- +- +- +- +- +- Enable tracking of the text cursor. This needs QAccessible to be enabled per application ("export QT_LINUX_ACCESSIBILITY_ALWAYS_ON=1"). +- +- +- Enable Text Cursor Tracking +- +- +- +- +- +- +- Mouse Pointer: +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- kcfg_MousePointer +- +- +- +- +- +- +- Visibility of the mouse-pointer. +- +- +- +- Scale +- +- +- +- +- Keep +- +- +- +- +- Hide +- +- +- +- +- +- +- +- Track moving of the mouse. +- +- +- +- Proportional +- +- +- +- +- Centered +- +- +- +- +- Push +- +- +- +- +- Disabled +- +- +- +- +- +- +- +- Mouse Tracking: +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- kcfg_MouseTracking +- +- +- +- +- +- +- ++ ++ ++ ++ On zoom-in and zoom-out change the zoom by the defined zoom-factor. ++ ++ ++ Zoom factor: ++ ++ ++ kcfg_ZoomFactor ++ ++ ++ ++ ++ ++ ++ On zoom-in and zoom-out change the zoom by the defined zoom-factor. ++ ++ ++ ++ ++ ++ 2 ++ ++ ++ 9999.000000000000000 ++ ++ ++ 0.050000000000000 ++ ++ ++ 1.250000000000000 ++ ++ ++ ++ ++ ++ ++ Show pixel grid at zoom level: ++ ++ ++ kcfg_PixelGridZoom ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Mouse pointer: ++ ++ ++ kcfg_MousePointer ++ ++ ++ ++ ++ ++ ++ Visibility of the mouse-pointer. ++ ++ ++ ++ Scale ++ ++ ++ ++ ++ Keep ++ ++ ++ ++ ++ Hide ++ ++ ++ ++ ++ ++ ++ ++ Mouse tracking: ++ ++ ++ kcfg_MouseTracking ++ ++ ++ ++ ++ ++ ++ Track moving of the mouse. ++ ++ ++ ++ Proportional ++ ++ ++ ++ ++ Centered ++ ++ ++ ++ ++ Push ++ ++ ++ ++ ++ Disabled ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Enable tracking of the focused location. This needs QAccessible to be enabled per application ("export QT_LINUX_ACCESSIBILITY_ALWAYS_ON=1"). ++ ++ ++ Enable focus tracking ++ ++ ++ ++ ++ ++ ++ Enable tracking of the text cursor. This needs QAccessible to be enabled per application ("export QT_LINUX_ACCESSIBILITY_ALWAYS_ON=1"). ++ ++ ++ Enable text cursor tracking ++ ++ ++ ++ + + + +@@ -183,13 +181,6 @@ + 1 + + +- +- kcfg_ZoomFactor +- kcfg_MousePointer +- kcfg_MouseTracking +- kcfg_EnableFocusTracking +- kcfg_EnableTextCaretTracking +- + + + diff --git a/roles/kde/programs/kwin.nix b/roles/kde/programs/kwin.nix index 2d6a747..9b1a64c 100644 --- a/roles/kde/programs/kwin.nix +++ b/roles/kde/programs/kwin.nix @@ -9,6 +9,7 @@ kPrev.kwin.patches ++ [ ../patches/kwin-pr6406.patch + ../patches/kwin-pr6878.patch ]; }; } From ba2d6eb02af1af922dfa120299c15906286c255b Mon Sep 17 00:00:00 2001 From: Toast Date: Thu, 19 Dec 2024 00:47:20 +0100 Subject: [PATCH 4/5] Kde/kwin: add kwin pr 6844 --- roles/kde/patches/kwin-pr6844.patch | 41 +++++++++++++++++++++++++++++ roles/kde/programs/kwin.nix | 1 + 2 files changed, 42 insertions(+) create mode 100644 roles/kde/patches/kwin-pr6844.patch diff --git a/roles/kde/patches/kwin-pr6844.patch b/roles/kde/patches/kwin-pr6844.patch new file mode 100644 index 0000000..f6e5e63 --- /dev/null +++ b/roles/kde/patches/kwin-pr6844.patch @@ -0,0 +1,41 @@ +diff --git a/src/plugins/private/expolayout.cpp b/src/plugins/private/expolayout.cpp +index 52e8bd6616..d4f2a41acc 100644 +--- a/src/plugins/private/expolayout.cpp ++++ b/src/plugins/private/expolayout.cpp +@@ -7,6 +7,7 @@ + + #include "expolayout.h" + ++#include + #include + #include + #include +@@ -41,6 +42,12 @@ ExpoCell::~ExpoCell() + void ExpoCell::componentComplete() + { + QQuickItem::componentComplete(); ++ ++ QQmlProperty xProperty(this, "Kirigami.ScenePosition.x", qmlContext(this)); ++ xProperty.connectNotifySignal(this, SLOT(updateContentItemGeometry())); ++ QQmlProperty yProperty(this, "Kirigami.ScenePosition.y", qmlContext(this)); ++ yProperty.connectNotifySignal(this, SLOT(updateContentItemGeometry())); ++ + updateContentItemGeometry(); + } + +diff --git a/src/plugins/private/expolayout.h b/src/plugins/private/expolayout.h +index 0d4f9d5cde..d980c2aabb 100644 +--- a/src/plugins/private/expolayout.h ++++ b/src/plugins/private/expolayout.h +@@ -264,8 +264,10 @@ Q_SIGNALS: + void persistentKeyChanged(); + void bottomMarginChanged(); + +-private: ++private Q_SLOTS: + void updateContentItemGeometry(); ++ ++private: + void updateLayout(); + + QString m_persistentKey; diff --git a/roles/kde/programs/kwin.nix b/roles/kde/programs/kwin.nix index 9b1a64c..e7dd2b7 100644 --- a/roles/kde/programs/kwin.nix +++ b/roles/kde/programs/kwin.nix @@ -10,6 +10,7 @@ ++ [ ../patches/kwin-pr6406.patch ../patches/kwin-pr6878.patch + ../patches/kwin-pr6844.patch ]; }; } From 2d4374899c54c0a080bba4e7ce4a6e54f0fb9053 Mon Sep 17 00:00:00 2001 From: Toast Date: Thu, 19 Dec 2024 00:47:48 +0100 Subject: [PATCH 5/5] Kde/plasma: add plasma_desktop pr 2661 --- roles/kde/patches/plasma_desktop-pr2661.patch | 39 +++++++++++++++++++ roles/kde/plasma.nix | 7 ++++ 2 files changed, 46 insertions(+) create mode 100644 roles/kde/patches/plasma_desktop-pr2661.patch diff --git a/roles/kde/patches/plasma_desktop-pr2661.patch b/roles/kde/patches/plasma_desktop-pr2661.patch new file mode 100644 index 0000000..b2ce58d --- /dev/null +++ b/roles/kde/patches/plasma_desktop-pr2661.patch @@ -0,0 +1,39 @@ +From 5301b211fc87f1b2253e87da61ff82618be9e899 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Niccol=C3=B2=20Venerandi?= +Date: Thu, 5 Dec 2024 16:12:58 +0100 +Subject: [PATCH] Only return valid task item size if task manager has been + resized to fit panel + +Previously the task manager would briefly have null width and height, before +being resized to fit the panel. However, the "preferredMaxWidth" for tasks +would still be positive, as it adds margins to it, and tasks would then +assume a positive width. When the proper values are set, this casuses +an extra resize animation. + +CCBUG:447476 +--- + .../taskmanager/package/contents/ui/code/layoutmetrics.js | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/applets/taskmanager/package/contents/ui/code/layoutmetrics.js b/applets/taskmanager/package/contents/ui/code/layoutmetrics.js +index c7f11c99a6..895cc725d2 100644 +--- a/applets/taskmanager/package/contents/ui/code/layoutmetrics.js ++++ b/applets/taskmanager/package/contents/ui/code/layoutmetrics.js +@@ -63,8 +63,14 @@ function preferredMinWidth() { + function preferredMaxWidth() { + if (tasks.iconsOnly) { + if (tasks.vertical) { ++ if (tasks.width === 0) { ++ return 0 ++ } + return tasks.width + verticalMargins(); + } else { ++ if (tasks.height === 0) { ++ return 0 ++ } + return tasks.height + horizontalMargins(); + } + } +-- +GitLab + diff --git a/roles/kde/plasma.nix b/roles/kde/plasma.nix index 9c8943c..8339715 100644 --- a/roles/kde/plasma.nix +++ b/roles/kde/plasma.nix @@ -56,6 +56,13 @@ in { ./patches/plasma_workspace-pr4883.patch ]; }; + plasma-desktop = kPrev.plasma-desktop.overrideAttrs { + patches = + kPrev.plasma-desktop.patches + ++ [ + ./patches/plasma_desktop-pr2661.patch + ]; + }; } ); }