mirror of
https://invent.kde.org/marcoa/shift-shell.git
synced 2026-06-11 00:47:22 +00:00
Restore dock hover tracking
Replace the fullscreen convergence pointer tracker with edge-local hover areas so dock buttons keep receiving hover, tooltip, and cursor events.
This commit is contained in:
parent
97abf33597
commit
495f76900f
3 changed files with 59 additions and 64 deletions
|
|
@ -415,6 +415,8 @@ ContainmentItem {
|
||||||
function refreshLeftLauncherVisibility() {
|
function refreshLeftLauncherVisibility() {
|
||||||
if (!leftLauncherEnabled) {
|
if (!leftLauncherEnabled) {
|
||||||
leftLauncherCloseTimer.stop()
|
leftLauncherCloseTimer.stop()
|
||||||
|
leftEdgeHovered = false
|
||||||
|
leftLauncherHovered = false
|
||||||
leftLauncherOpen = false
|
leftLauncherOpen = false
|
||||||
inputRegionTimer.restart()
|
inputRegionTimer.restart()
|
||||||
return
|
return
|
||||||
|
|
@ -448,54 +450,6 @@ ContainmentItem {
|
||||||
inputRegionTimer.restart()
|
inputRegionTimer.restart()
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateLeftLauncherHoverState(pointerX, pointerY, withinWindow) {
|
|
||||||
const insideEdge = withinWindow
|
|
||||||
&& pointerX >= 0
|
|
||||||
&& pointerX <= leftEdgeHotzoneWidth
|
|
||||||
&& pointerY >= topBarHitHeight
|
|
||||||
&& pointerY <= (height - dockHeight)
|
|
||||||
|
|
||||||
const launcherTop = height - dockHeight - leftLauncherHeight
|
|
||||||
const insideLauncher = withinWindow
|
|
||||||
&& leftLauncherOpen
|
|
||||||
&& pointerX >= 0
|
|
||||||
&& pointerX <= leftLauncherWidth
|
|
||||||
&& pointerY >= launcherTop
|
|
||||||
&& pointerY <= (launcherTop + leftLauncherHeight)
|
|
||||||
|
|
||||||
if (leftEdgeHovered !== insideEdge) {
|
|
||||||
leftEdgeHovered = insideEdge
|
|
||||||
}
|
|
||||||
if (leftLauncherHovered !== insideLauncher) {
|
|
||||||
leftLauncherHovered = insideLauncher
|
|
||||||
}
|
|
||||||
refreshLeftLauncherVisibility()
|
|
||||||
}
|
|
||||||
|
|
||||||
function updateLayoutMenuHoverState(pointerX, pointerY, withinWindow) {
|
|
||||||
const insideEdge = layoutMenuEnabled
|
|
||||||
&& withinWindow
|
|
||||||
&& pointerX >= (width - rightEdgeHotzoneWidth)
|
|
||||||
&& pointerX <= width
|
|
||||||
&& pointerY >= topBarHitHeight
|
|
||||||
&& pointerY <= (height - dockHeight)
|
|
||||||
|
|
||||||
const insideMenu = withinWindow
|
|
||||||
&& layoutMenuOpen
|
|
||||||
&& pointerX >= rightLayoutMenu.x
|
|
||||||
&& pointerX <= width
|
|
||||||
&& pointerY >= rightLayoutMenu.y
|
|
||||||
&& pointerY <= (rightLayoutMenu.y + rightLayoutMenu.height)
|
|
||||||
|
|
||||||
if (rightEdgeHovered !== insideEdge) {
|
|
||||||
rightEdgeHovered = insideEdge
|
|
||||||
}
|
|
||||||
if (layoutMenuHovered !== insideMenu) {
|
|
||||||
layoutMenuHovered = insideMenu
|
|
||||||
}
|
|
||||||
refreshLayoutMenuVisibility()
|
|
||||||
}
|
|
||||||
|
|
||||||
onActiveChanged: {
|
onActiveChanged: {
|
||||||
hoverRevealTimer.stop()
|
hoverRevealTimer.stop()
|
||||||
hoverRevealing = false
|
hoverRevealing = false
|
||||||
|
|
@ -801,6 +755,20 @@ ContainmentItem {
|
||||||
anchors.top: topBarSurface.bottom
|
anchors.top: topBarSurface.bottom
|
||||||
anchors.bottom: dockSurface.top
|
anchors.bottom: dockSurface.top
|
||||||
width: convergenceChrome.leftEdgeHotzoneWidth
|
width: convergenceChrome.leftEdgeHotzoneWidth
|
||||||
|
|
||||||
|
MouseArea {
|
||||||
|
id: leftEdgeHoverArea
|
||||||
|
anchors.fill: parent
|
||||||
|
acceptedButtons: Qt.NoButton
|
||||||
|
enabled: convergenceChrome.leftLauncherEnabled
|
||||||
|
hoverEnabled: enabled
|
||||||
|
cursorShape: enabled ? Qt.PointingHandCursor : Qt.ArrowCursor
|
||||||
|
|
||||||
|
onContainsMouseChanged: {
|
||||||
|
convergenceChrome.leftEdgeHovered = containsMouse
|
||||||
|
convergenceChrome.refreshLeftLauncherVisibility()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
|
|
@ -810,23 +778,19 @@ ContainmentItem {
|
||||||
anchors.top: topBarSurface.bottom
|
anchors.top: topBarSurface.bottom
|
||||||
anchors.bottom: dockSurface.top
|
anchors.bottom: dockSurface.top
|
||||||
width: convergenceChrome.layoutMenuEnabled ? convergenceChrome.rightEdgeHotzoneWidth : 0
|
width: convergenceChrome.layoutMenuEnabled ? convergenceChrome.rightEdgeHotzoneWidth : 0
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
MouseArea {
|
||||||
id: leftLauncherPointerTracker
|
id: rightEdgeHoverArea
|
||||||
|
anchors.fill: parent
|
||||||
|
acceptedButtons: Qt.NoButton
|
||||||
|
enabled: convergenceChrome.layoutMenuEnabled
|
||||||
|
hoverEnabled: enabled
|
||||||
|
cursorShape: enabled ? Qt.PointingHandCursor : Qt.ArrowCursor
|
||||||
|
|
||||||
anchors.fill: parent
|
onContainsMouseChanged: {
|
||||||
acceptedButtons: Qt.NoButton
|
convergenceChrome.rightEdgeHovered = containsMouse
|
||||||
hoverEnabled: true
|
convergenceChrome.refreshLayoutMenuVisibility()
|
||||||
z: 10
|
}
|
||||||
|
|
||||||
onPositionChanged: (mouse) => {
|
|
||||||
convergenceChrome.updateLeftLauncherHoverState(mouse.x, mouse.y, true)
|
|
||||||
convergenceChrome.updateLayoutMenuHoverState(mouse.x, mouse.y, true)
|
|
||||||
}
|
|
||||||
onExited: {
|
|
||||||
convergenceChrome.updateLeftLauncherHoverState(-1, -1, false)
|
|
||||||
convergenceChrome.updateLayoutMenuHoverState(-1, -1, false)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -845,6 +809,15 @@ ContainmentItem {
|
||||||
surfaceColor: convergenceChrome.chromeColor
|
surfaceColor: convergenceChrome.chromeColor
|
||||||
animationDuration: root.shortAnimationDuration
|
animationDuration: root.shortAnimationDuration
|
||||||
|
|
||||||
|
HoverHandler {
|
||||||
|
enabled: convergenceChrome.layoutMenuOpen
|
||||||
|
|
||||||
|
onHoveredChanged: {
|
||||||
|
convergenceChrome.layoutMenuHovered = hovered
|
||||||
|
convergenceChrome.refreshLayoutMenuVisibility()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
transform: Translate {
|
transform: Translate {
|
||||||
y: convergenceChrome.layoutMenuOpen ? 0 : Kirigami.Units.gridUnit
|
y: convergenceChrome.layoutMenuOpen ? 0 : Kirigami.Units.gridUnit
|
||||||
x: convergenceChrome.layoutMenuOpen ? 0 : rightLayoutMenu.width - convergenceChrome.rightEdgeHotzoneWidth
|
x: convergenceChrome.layoutMenuOpen ? 0 : rightLayoutMenu.width - convergenceChrome.rightEdgeHotzoneWidth
|
||||||
|
|
@ -887,6 +860,15 @@ ContainmentItem {
|
||||||
|
|
||||||
readonly property real cornerRadius: Math.min(MobileShell.Constants.convergenceWorkspaceFrameRadius, height * 0.24)
|
readonly property real cornerRadius: Math.min(MobileShell.Constants.convergenceWorkspaceFrameRadius, height * 0.24)
|
||||||
|
|
||||||
|
HoverHandler {
|
||||||
|
enabled: convergenceChrome.leftLauncherOpen
|
||||||
|
|
||||||
|
onHoveredChanged: {
|
||||||
|
convergenceChrome.leftLauncherHovered = hovered
|
||||||
|
convergenceChrome.refreshLeftLauncherVisibility()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Shape {
|
Shape {
|
||||||
id: leftLauncherSurface
|
id: leftLauncherSurface
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
|
|
||||||
|
|
@ -119,12 +119,24 @@ require_line "$folio_main" "readonly property real workAreaY: topBarHitHeight"
|
||||||
require_line "$folio_main" "readonly property real workAreaWidth: Math.max(0, width - frameThickness * 2)"
|
require_line "$folio_main" "readonly property real workAreaWidth: Math.max(0, width - frameThickness * 2)"
|
||||||
require_line "$folio_main" "readonly property real workAreaHeight: Math.max(0, height - topBarHeight - dockHeight - frameThickness * 2)"
|
require_line "$folio_main" "readonly property real workAreaHeight: Math.max(0, height - topBarHeight - dockHeight - frameThickness * 2)"
|
||||||
require_line "$folio_main" "fillRule: ShapePath.OddEvenFill"
|
require_line "$folio_main" "fillRule: ShapePath.OddEvenFill"
|
||||||
|
require_line "$folio_main" "id: leftEdgeHoverArea"
|
||||||
|
require_line "$folio_main" "id: rightEdgeHoverArea"
|
||||||
|
require_line "$folio_main" "cursorShape: enabled ? Qt.PointingHandCursor : Qt.ArrowCursor"
|
||||||
|
require_line "$folio_main" "convergenceChrome.leftEdgeHovered = containsMouse"
|
||||||
|
require_line "$folio_main" "convergenceChrome.rightEdgeHovered = containsMouse"
|
||||||
|
require_line "$folio_main" "convergenceChrome.leftLauncherHovered = hovered"
|
||||||
|
require_line "$folio_main" "convergenceChrome.layoutMenuHovered = hovered"
|
||||||
|
|
||||||
if grep -Fq "root.panel.visibilityMode = (!ShellSettings.Settings.convergenceModeEnabled && ShellSettings.Settings.autoHidePanelsEnabled) ? 3 : 0" "$panel"; then
|
if grep -Fq "root.panel.visibilityMode = (!ShellSettings.Settings.convergenceModeEnabled && ShellSettings.Settings.autoHidePanelsEnabled) ? 3 : 0" "$panel"; then
|
||||||
echo "Convergence panel hit area must not reserve extra top space" >&2
|
echo "Convergence panel hit area must not reserve extra top space" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if grep -Fq "id: leftLauncherPointerTracker" "$folio_main"; then
|
||||||
|
echo "Folio convergence chrome must not cover the dock with a fullscreen hover tracker" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
require_line "$folio_main" "PathLine { x: convergenceChrome.width; y: convergenceChrome.height - convergenceChrome.dockHeight }"
|
require_line "$folio_main" "PathLine { x: convergenceChrome.width; y: convergenceChrome.height - convergenceChrome.dockHeight }"
|
||||||
require_line "$folio_main" "PathLine { x: 0; y: convergenceChrome.height - convergenceChrome.dockHeight }"
|
require_line "$folio_main" "PathLine { x: 0; y: convergenceChrome.height - convergenceChrome.dockHeight }"
|
||||||
require_line "$folio_main" "PathArc { x: convergenceChrome.workAreaX + convergenceChrome.workAreaWidth - convergenceChrome.frameRadius; y: convergenceChrome.workAreaY + convergenceChrome.workAreaHeight; radiusX: convergenceChrome.frameRadius; radiusY: convergenceChrome.frameRadius }"
|
require_line "$folio_main" "PathArc { x: convergenceChrome.workAreaX + convergenceChrome.workAreaWidth - convergenceChrome.frameRadius; y: convergenceChrome.workAreaY + convergenceChrome.workAreaHeight; radiusX: convergenceChrome.frameRadius; radiusY: convergenceChrome.frameRadius }"
|
||||||
|
|
|
||||||
|
|
@ -138,7 +138,8 @@ require_line "$folio_main" "regions.push(rightEdgeRegion)"
|
||||||
require_line "$folio_main" "if (layoutMenuEnabled && layoutMenuOpen)"
|
require_line "$folio_main" "if (layoutMenuEnabled && layoutMenuOpen)"
|
||||||
require_line "$folio_main" "rightEdgeHovered = false"
|
require_line "$folio_main" "rightEdgeHovered = false"
|
||||||
require_line "$folio_main" "layoutMenuHovered = false"
|
require_line "$folio_main" "layoutMenuHovered = false"
|
||||||
require_line "$folio_main" "const insideEdge = layoutMenuEnabled"
|
require_line "$folio_main" "id: rightEdgeHoverArea"
|
||||||
|
require_line "$folio_main" "convergenceChrome.rightEdgeHovered = containsMouse"
|
||||||
require_line "$folio_main" "width: convergenceChrome.layoutMenuEnabled ? convergenceChrome.rightEdgeHotzoneWidth : 0"
|
require_line "$folio_main" "width: convergenceChrome.layoutMenuEnabled ? convergenceChrome.rightEdgeHotzoneWidth : 0"
|
||||||
|
|
||||||
running_panel_group_disabled_count="$(grep -F "groupMode: TaskManager.TasksModel.GroupDisabled" "$running_apps_panel" | wc -l)"
|
running_panel_group_disabled_count="$(grep -F "groupMode: TaskManager.TasksModel.GroupDisabled" "$running_apps_panel" | wc -l)"
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue