diff --git a/nix/plugin.nix b/nix/plugin.nix index 331c0e3..374a61a 100644 --- a/nix/plugin.nix +++ b/nix/plugin.nix @@ -1,6 +1,7 @@ { lib, craneLib, + mold, pkg-config, qt6, writeShellScript, @@ -67,6 +68,7 @@ let nativeBuildInputs = [ pkg-config + mold qt6.qtbase qt6.qtdeclarative ]; @@ -79,8 +81,12 @@ let # qt6.qtbase's setup hook overrides QMAKE after derivation attrs are set, # so re-assert it in preBuild which runs after all setup hooks. + # Force mold as the linker (cxx-qt book deprecates ld.gold). Setting via + # CARGO_TARGET_*_LINKER + RUSTFLAGS is the only path that survives nixpkgs' + # cc-wrapper - `-fuse-ld=` from build.rs gets eaten by the wrapper. preBuild = '' export QMAKE=${qmakeWrapper} + export RUSTFLAGS="-C link-arg=-fuse-ld=mold ''${RUSTFLAGS:-}" ''; }; diff --git a/shell/modules/Tooltip.qml b/shell/modules/Tooltip.qml index 01643f3..105a896 100644 --- a/shell/modules/Tooltip.qml +++ b/shell/modules/Tooltip.qml @@ -11,8 +11,13 @@ PanelWindow { visible: _winVisible color: "transparent" + // Mirror of `screen` captured at construction. Reading `root.screen` + // directly in `_shown` couples it to visibility transitions (PanelWindow + // re-evaluates `screen` when mapped/unmapped), which feeds back into + // `_shown` via `_winVisible` and trips a binding loop. + property var assignedScreen: null property bool _winVisible: false - property bool _shown: M.TooltipState.visible && M.TooltipState.screen === root.screen + property bool _shown: M.TooltipState.visible && M.TooltipState.screen === assignedScreen on_ShownChanged: { if (_shown) { diff --git a/shell/shell.qml b/shell/shell.qml index eff500c..12828c5 100644 --- a/shell/shell.qml +++ b/shell/shell.qml @@ -33,6 +33,7 @@ ShellRoot { Tooltip { screen: scope.modelData + assignedScreen: scope.modelData } LazyLoader {