mirror of
https://github.com/noctalia-dev/noctalia-shell.git
synced 2026-05-11 17:08:27 +08:00
Revert "fix(bar): defer update to next cycle"
This reverts commit 2fcd219c34.
This commit is contained in:
@@ -11,59 +11,46 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
:root {
|
:root {
|
||||||
/* --- Core Palette Overrides --- */
|
/* Core Color Palette Overrides */
|
||||||
--zen-colors-primary: var(--base) !important;
|
--zen-colors-primary: var(--base) !important;
|
||||||
--zen-primary-color: var(--base) !important;
|
--zen-primary-color: var(--base) !important;
|
||||||
--zen-colors-secondary: var(--surface) !important;
|
--zen-colors-secondary: var(--surface) !important;
|
||||||
--zen-colors-tertiary: var(--overlay) !important;
|
--zen-colors-tertiary: var(--overlay) !important;
|
||||||
--zen-colors-border: var(--primary) !important;
|
--zen-colors-border: var(--primary) !important;
|
||||||
|
|
||||||
/* --- Internal Zen Color Variables --- */
|
/* Backgrounds */
|
||||||
--zen-primary-color: var(--primary) !important;
|
|
||||||
--zen-colors-primary: var(--base) !important;
|
|
||||||
--zen-colors-secondary: var(--surface) !important;
|
|
||||||
--zen-colors-tertiary: var(--base) !important;
|
|
||||||
|
|
||||||
/* --- Backgrounds --- */
|
|
||||||
--toolbar-bgcolor: var(--base) !important;
|
--toolbar-bgcolor: var(--base) !important;
|
||||||
--newtab-background-color: var(--overlay) !important;
|
--newtab-background-color: var(--overlay) !important;
|
||||||
--zen-themed-toolbar-bg: var(--base) !important;
|
--zen-themed-toolbar-bg: var(--base) !important;
|
||||||
--zen-main-browser-background: var(--base) !important;
|
--zen-main-browser-background: var(--base) !important;
|
||||||
--toolbox-bgcolor-inactive: var(--base) !important;
|
--toolbox-bgcolor-inactive: var(--base) !important;
|
||||||
--zen-urlbar-background: var(--surface) !important;
|
|
||||||
--zen-colors-input-bg: var(--surface) !important;
|
|
||||||
--zen-themed-toolbar-bg-transparent: transparent !important;
|
|
||||||
|
|
||||||
/* --- Text & Icons --- */
|
/* Text & Icons */
|
||||||
--lwt-text-color: var(--text) !important;
|
--lwt-text-color: var(--text) !important;
|
||||||
--toolbarbutton-icon-fill: var(--primary) !important;
|
--toolbarbutton-icon-fill: var(--primary) !important;
|
||||||
--toolbar-field-color: var(--text) !important;
|
--toolbar-field-color: var(--text) !important;
|
||||||
--toolbar-field-focus-color: var(--text) !important;
|
--toolbar-field-focus-color: var(--text) !important;
|
||||||
--toolbar-color: var(--text) !important;
|
--toolbar-color: var(--text) !important;
|
||||||
--toolbox-textcolor: var(--text) !important;
|
|
||||||
--toolbox-textcolor-inactive: var(--text) !important;
|
|
||||||
--tab-selected-textcolor: var(--primary) !important;
|
--tab-selected-textcolor: var(--primary) !important;
|
||||||
--newtab-text-primary-color: var(--text) !important;
|
--newtab-text-primary-color: var(--text) !important;
|
||||||
|
|
||||||
/* --- Popups, Menus & Sidebars --- */
|
/* Popups & Menus */
|
||||||
--arrowpanel-color: var(--text) !important;
|
--arrowpanel-color: var(--text) !important;
|
||||||
--arrowpanel-background: var(--overlay) !important;
|
--arrowpanel-background: var(--overlay) !important;
|
||||||
|
|
||||||
|
/* Sidebar Stuff */
|
||||||
--sidebar-text-color: var(--text) !important;
|
--sidebar-text-color: var(--text) !important;
|
||||||
--lwt-sidebar-text-color: var(--text) !important;
|
--lwt-sidebar-text-color: var(--text) !important;
|
||||||
--lwt-sidebar-background-color: var(--base) !important;
|
--lwt-sidebar-background-color: var(--base) !important;
|
||||||
|
|
||||||
|
/* --- Tab Selection --- */
|
||||||
|
--tab-selected-textcolor: var(--primary) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --- Sidebar & Layout --- */
|
/* Element Specific Overrides */
|
||||||
|
|
||||||
#navigator-toolbox,
|
#permissions-granted-icon {
|
||||||
#zen-tabbox-wrapper,
|
color: var(--base) !important;
|
||||||
.sidebar-panel {
|
|
||||||
background-color: var(--base) !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
#zen-sidebar-splitter {
|
|
||||||
background-color: var(--base) !important;
|
|
||||||
opacity: 1 !important;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.sidebar-placesTree {
|
.sidebar-placesTree {
|
||||||
@@ -74,27 +61,29 @@
|
|||||||
background-color: var(--surface) !important;
|
background-color: var(--surface) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
#zen-appcontent-navbar-container {
|
#urlbar-background {
|
||||||
background-color: var(--base) !important;
|
background-color: var(--surface) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --- Navigation Controls --- */
|
.tab-background[selected=""] {
|
||||||
|
background: var(--overlay) !important;
|
||||||
|
}
|
||||||
|
|
||||||
#back-button .toolbarbutton-icon,
|
.content-shortcuts {
|
||||||
#forward-button .toolbarbutton-icon,
|
background-color: var(--surface) !important;
|
||||||
#reload-button .toolbarbutton-icon,
|
border-color: var(--secondary) !important;
|
||||||
#stop-button .toolbarbutton-icon,
|
}
|
||||||
#PanelUI-menu-button .toolbarbutton-icon,
|
|
||||||
#unified-extensions-button .toolbarbutton-icon,
|
.urlbarView-url {
|
||||||
#nav-bar-overflow-button .toolbarbutton-icon,
|
|
||||||
#zen-toggle-compact-mode .toolbarbutton-icon {
|
|
||||||
fill: var(--primary) !important;
|
|
||||||
color: var(--primary) !important;
|
color: var(--primary) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
#back-button[disabled] .toolbarbutton-icon,
|
#zenEditBookmarkPanelFaviconContainer {
|
||||||
#forward-button[disabled] .toolbarbutton-icon {
|
background: var(--base) !important;
|
||||||
opacity: 0.3 !important;
|
}
|
||||||
|
|
||||||
|
#zen-toast-container {
|
||||||
|
color: var(--primary) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
toolbar .toolbarbutton-1 {
|
toolbar .toolbarbutton-1 {
|
||||||
@@ -109,65 +98,6 @@ toolbar .toolbarbutton-1 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --- URL Bar --- */
|
|
||||||
|
|
||||||
#urlbar-input {
|
|
||||||
color: var(--text) !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
#urlbar-input::selection {
|
|
||||||
background-color: var(--primary) !important;
|
|
||||||
color: var(--on_primary) !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.urlbar-background {
|
|
||||||
background-color: var(--base) !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
#urlbar-input-container {
|
|
||||||
background-color: var(--base) !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.urlbarView-url {
|
|
||||||
color: var(--primary) !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.urlbarView-favicon {
|
|
||||||
background-color: var(--base) !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
#urlbar-results {
|
|
||||||
background-color: var(--overlay) !important;
|
|
||||||
color: var(--text) !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* --- UI Components --- */
|
|
||||||
|
|
||||||
#zen-toast-container {
|
|
||||||
color: var(--primary) !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
#PanelUI-menu-button[open] .toolbarbutton-icon {
|
|
||||||
fill: var(--primary) !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
#permissions-granted-icon {
|
|
||||||
color: var(--base) !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tab-background[selected=""] {
|
|
||||||
background: var(--overlay) !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content-shortcuts {
|
|
||||||
background-color: var(--surface) !important;
|
|
||||||
border-color: var(--secondary) !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
#zenEditBookmarkPanelFaviconContainer {
|
|
||||||
background: var(--base) !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
#TabsToolbar {
|
#TabsToolbar {
|
||||||
background-color: var(--base) !important;
|
background-color: var(--base) !important;
|
||||||
}
|
}
|
||||||
@@ -175,3 +105,17 @@ toolbar .toolbarbutton-1 {
|
|||||||
hbox#titlebar {
|
hbox#titlebar {
|
||||||
background-color: var(--base) !important;
|
background-color: var(--base) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#zen-appcontent-navbar-container {
|
||||||
|
background-color: var(--base) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Zen toast/indicator contrast visibility issue fix */
|
||||||
|
#zen-toast-container {
|
||||||
|
color: var(--primary) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Pane UI button visibility issue fix */
|
||||||
|
#PanelUI-menu-button[open] .toolbarbutton-icon {
|
||||||
|
fill: var(--primary) !important;
|
||||||
|
}
|
||||||
|
|||||||
+3
-8
@@ -142,18 +142,13 @@ Item {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize models — deferred via Timer (Qt.callLater can fire in same event cycle)
|
// Initialize models — deferred to next event-loop tick via Qt.callLater to avoid
|
||||||
// to avoid re-entrant incubation: Component.onCompleted fires during finalization,
|
// re-entrant incubation: Component.onCompleted fires during QQmlObjectCreator::finalize,
|
||||||
// and ListModel.append synchronously creates Repeater delegates whose own finalization
|
// and ListModel.append synchronously creates Repeater delegates whose own finalization
|
||||||
// can corrupt the V4 heap (SIGSEGV in QV4::Object::insertMember).
|
// can corrupt the V4 heap (SIGSEGV in QV4::Object::insertMember).
|
||||||
Timer {
|
|
||||||
id: initModelsTimer
|
|
||||||
interval: 0
|
|
||||||
onTriggered: root._initModels()
|
|
||||||
}
|
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
Logger.d("Bar", "Bar Component.onCompleted for screen:", screen?.name);
|
Logger.d("Bar", "Bar Component.onCompleted for screen:", screen?.name);
|
||||||
initModelsTimer.restart();
|
Qt.callLater(root._initModels);
|
||||||
}
|
}
|
||||||
|
|
||||||
function _initModels() {
|
function _initModels() {
|
||||||
|
|||||||
@@ -72,33 +72,8 @@ Item {
|
|||||||
Loader {
|
Loader {
|
||||||
id: loader
|
id: loader
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
asynchronous: false
|
asynchronous: true
|
||||||
|
active: root.checkWidgetExists() && (root.reloadCounter >= 0)
|
||||||
// Deferred activation to prevent re-entrant incubation crash:
|
|
||||||
// When ListModel.append() creates this delegate, the Repeater is mid-incubation.
|
|
||||||
// If this Loader activates synchronously (asynchronous: false) during delegate
|
|
||||||
// finalization, it triggers nested QQmlIncubatorPrivate::incubate which corrupts
|
|
||||||
// the V4 heap (SIGSEGV in QV4::Object::insertMember).
|
|
||||||
// Deferring to the next event loop iteration breaks the nesting.
|
|
||||||
property bool _ready: false
|
|
||||||
active: _ready && root.checkWidgetExists() && (root.reloadCounter >= 0)
|
|
||||||
|
|
||||||
Timer {
|
|
||||||
id: activateTimer
|
|
||||||
interval: 0
|
|
||||||
onTriggered: loader._ready = true
|
|
||||||
}
|
|
||||||
|
|
||||||
Component.onCompleted: activateTimer.start()
|
|
||||||
|
|
||||||
// Reset _ready when reloadCounter changes to force a deferred re-activation
|
|
||||||
Connections {
|
|
||||||
target: root
|
|
||||||
function onReloadCounterChanged() {
|
|
||||||
loader._ready = false;
|
|
||||||
activateTimer.restart();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sourceComponent: {
|
sourceComponent: {
|
||||||
// Depend on reloadCounter to force re-fetch of component
|
// Depend on reloadCounter to force re-fetch of component
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ NIconButton {
|
|||||||
// If using distro logo, don't use theme icon.
|
// If using distro logo, don't use theme icon.
|
||||||
icon: (customIconPath === "" && !useDistroLogo) ? customIcon : ""
|
icon: (customIconPath === "" && !useDistroLogo) ? customIcon : ""
|
||||||
tooltipText: {
|
tooltipText: {
|
||||||
if (PanelService.getPanel("controlCenterPanel", screen)?.isPanelOpen) {
|
if (!screen || PanelService.getPanel("controlCenterPanel", screen)?.isPanelOpen) {
|
||||||
return "";
|
return "";
|
||||||
} else {
|
} else {
|
||||||
return I18n.tr("tooltips.open-control-center");
|
return I18n.tr("tooltips.open-control-center");
|
||||||
|
|||||||
@@ -408,7 +408,7 @@ Item {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onEntered: {
|
onEntered: {
|
||||||
if ((isVertical || scrollingMode === "never") && !PanelService.getPanel("mediaPlayerPanel", screen)?.isPanelOpen) {
|
if (screen && (isVertical || scrollingMode === "never") && !PanelService.getPanel("mediaPlayerPanel", screen)?.isPanelOpen) {
|
||||||
TooltipService.show(root, title, BarService.getTooltipDirection(root.screen?.name));
|
TooltipService.show(root, title, BarService.getTooltipDirection(root.screen?.name));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -167,30 +167,15 @@ PanelWindow {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// When hidden changes, handle load/unload
|
// When hidden changes, handle load/unload
|
||||||
// Defer content load when showing to avoid re-entrant incubation crash:
|
|
||||||
// barAutoHideStateChanged fires during workspace switch or window open. Setting
|
|
||||||
// contentLoaded=true synchronously triggers barLoader to create Bar+widgets.
|
|
||||||
// That nests QQmlIncubatorPrivate::incubate inside the signal handler, which
|
|
||||||
// can corrupt the V4 heap (SIGSEGV in QV4::Object::insertMember). Use Timer
|
|
||||||
// (not Qt.callLater - it can fire in same event cycle) to break the nesting.
|
|
||||||
onIsHiddenChanged: {
|
onIsHiddenChanged: {
|
||||||
if (isHidden) {
|
if (isHidden) {
|
||||||
// Start fade out, then unload after animation
|
// Start fade out, then unload after animation
|
||||||
unloadTimer.restart();
|
unloadTimer.restart();
|
||||||
} else {
|
} else {
|
||||||
|
// Load immediately when showing
|
||||||
unloadTimer.stop();
|
unloadTimer.stop();
|
||||||
deferredUnloadTimer.stop();
|
deferredUnloadTimer.stop();
|
||||||
showContentTimer.restart();
|
contentLoaded = true;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Timer {
|
|
||||||
id: showContentTimer
|
|
||||||
interval: 0
|
|
||||||
onTriggered: {
|
|
||||||
if (!barWindow.isHidden) {
|
|
||||||
contentLoaded = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -216,10 +201,10 @@ PanelWindow {
|
|||||||
// Bar hidden — start debounced unload
|
// Bar hidden — start debounced unload
|
||||||
deferredUnloadTimer.restart();
|
deferredUnloadTimer.restart();
|
||||||
} else {
|
} else {
|
||||||
// Bar shown — cancel pending unload, defer content load (same nesting concern)
|
// Bar shown — cancel pending unload, ensure content is loaded
|
||||||
deferredUnloadTimer.stop();
|
deferredUnloadTimer.stop();
|
||||||
if (!barWindow.isHidden) {
|
if (!barWindow.isHidden) {
|
||||||
showContentTimer.restart();
|
barWindow.contentLoaded = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -447,6 +447,10 @@ SmartPanel {
|
|||||||
delegate: NBox {
|
delegate: NBox {
|
||||||
id: ethItem
|
id: ethItem
|
||||||
|
|
||||||
|
HoverHandler {
|
||||||
|
id: itemHover
|
||||||
|
}
|
||||||
|
|
||||||
function getContentColors(defaultColors = [Color.mSurface, Color.mOnSurface]) {
|
function getContentColors(defaultColors = [Color.mSurface, Color.mOnSurface]) {
|
||||||
if (modelData.connected) {
|
if (modelData.connected) {
|
||||||
return [Color.mPrimary, Color.mOnPrimary];
|
return [Color.mPrimary, Color.mOnPrimary];
|
||||||
@@ -569,6 +573,7 @@ SmartPanel {
|
|||||||
|
|
||||||
// Info button on the right
|
// Info button on the right
|
||||||
NIconButton {
|
NIconButton {
|
||||||
|
visible: itemHover.hovered
|
||||||
icon: "info"
|
icon: "info"
|
||||||
tooltipText: I18n.tr("common.info")
|
tooltipText: I18n.tr("common.info")
|
||||||
baseSize: Style.baseWidgetSize * 0.75
|
baseSize: Style.baseWidgetSize * 0.75
|
||||||
@@ -615,9 +620,9 @@ SmartPanel {
|
|||||||
visible: ethernetInfoExpanded && NetworkService.activeEthernetIf === modelData.ifname
|
visible: ethernetInfoExpanded && NetworkService.activeEthernetIf === modelData.ifname
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
color: Color.mSurfaceVariant
|
color: Color.mSurfaceVariant
|
||||||
radius: Style.radiusXS
|
radius: Style.radiusS
|
||||||
border.width: Style.borderS
|
border.width: Style.borderS
|
||||||
border.color: Style.boxBorderColor
|
border.color: Color.mOutline
|
||||||
implicitHeight: ethInfoGrid.implicitHeight + Style.margin2S
|
implicitHeight: ethInfoGrid.implicitHeight + Style.margin2S
|
||||||
clip: true
|
clip: true
|
||||||
Layout.topMargin: Style.marginXS
|
Layout.topMargin: Style.marginXS
|
||||||
@@ -629,7 +634,7 @@ SmartPanel {
|
|||||||
anchors.margins: Style.marginS
|
anchors.margins: Style.marginS
|
||||||
icon: ethernetDetailsGrid ? "layout-list" : "layout-grid"
|
icon: ethernetDetailsGrid ? "layout-list" : "layout-grid"
|
||||||
tooltipText: ethernetDetailsGrid ? I18n.tr("tooltips.list-view") : I18n.tr("tooltips.grid-view")
|
tooltipText: ethernetDetailsGrid ? I18n.tr("tooltips.list-view") : I18n.tr("tooltips.grid-view")
|
||||||
baseSize: Style.baseWidgetSize * 0.65
|
baseSize: Style.baseWidgetSize * 0.8
|
||||||
onClicked: {
|
onClicked: {
|
||||||
ethernetDetailsGrid = !ethernetDetailsGrid;
|
ethernetDetailsGrid = !ethernetDetailsGrid;
|
||||||
Settings.data.network.wifiDetailsViewMode = ethernetDetailsGrid ? "grid" : "list";
|
Settings.data.network.wifiDetailsViewMode = ethernetDetailsGrid ? "grid" : "list";
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ Popup {
|
|||||||
height: Math.min(content.implicitHeight + padding * 2, maxHeight)
|
height: Math.min(content.implicitHeight + padding * 2, maxHeight)
|
||||||
padding: Style.marginXL
|
padding: Style.marginXL
|
||||||
modal: true
|
modal: true
|
||||||
closePolicy: Popup.NoAutoClose
|
|
||||||
dim: false
|
dim: false
|
||||||
anchors.centerIn: parent
|
anchors.centerIn: parent
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ Popup {
|
|||||||
height: Math.min(content.implicitHeight + dialogPadding * 2, maxHeight)
|
height: Math.min(content.implicitHeight + dialogPadding * 2, maxHeight)
|
||||||
padding: 0
|
padding: 0
|
||||||
modal: true
|
modal: true
|
||||||
closePolicy: Popup.NoAutoClose
|
|
||||||
anchors.centerIn: parent
|
anchors.centerIn: parent
|
||||||
|
|
||||||
onOpened: {
|
onOpened: {
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ Popup {
|
|||||||
height: Math.min(content.implicitHeight + padding * 2, maxHeight)
|
height: Math.min(content.implicitHeight + padding * 2, maxHeight)
|
||||||
padding: Style.marginXL
|
padding: Style.marginXL
|
||||||
modal: true
|
modal: true
|
||||||
closePolicy: Popup.NoAutoClose
|
|
||||||
dim: false
|
dim: false
|
||||||
|
|
||||||
// Center in parent
|
// Center in parent
|
||||||
|
|||||||
@@ -37,8 +37,8 @@ Popup {
|
|||||||
height: Math.min(800, contentColumn.implicitHeight + Style.margin2XL)
|
height: Math.min(800, contentColumn.implicitHeight + Style.margin2XL)
|
||||||
padding: Style.marginXL
|
padding: Style.marginXL
|
||||||
modal: true
|
modal: true
|
||||||
closePolicy: Popup.NoAutoClose
|
|
||||||
dim: false
|
dim: false
|
||||||
|
closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutside
|
||||||
anchors.centerIn: parent
|
anchors.centerIn: parent
|
||||||
|
|
||||||
// Helper function to get color from cached scheme data
|
// Helper function to get color from cached scheme data
|
||||||
|
|||||||
@@ -370,6 +370,10 @@ Item {
|
|||||||
NBox {
|
NBox {
|
||||||
id: device
|
id: device
|
||||||
|
|
||||||
|
HoverHandler {
|
||||||
|
id: itemHover
|
||||||
|
}
|
||||||
|
|
||||||
readonly property bool canConnect: BluetoothService.canConnect(modelData)
|
readonly property bool canConnect: BluetoothService.canConnect(modelData)
|
||||||
readonly property bool canDisconnect: BluetoothService.canDisconnect(modelData)
|
readonly property bool canDisconnect: BluetoothService.canDisconnect(modelData)
|
||||||
readonly property bool canPair: BluetoothService.canPair(modelData)
|
readonly property bool canPair: BluetoothService.canPair(modelData)
|
||||||
@@ -484,7 +488,7 @@ Item {
|
|||||||
}
|
}
|
||||||
|
|
||||||
NIconButton {
|
NIconButton {
|
||||||
visible: modelData.connected && modelData.state !== BluetoothDeviceState.Disconnecting
|
visible: itemHover.hovered && modelData.connected && modelData.state !== BluetoothDeviceState.Disconnecting
|
||||||
icon: "info"
|
icon: "info"
|
||||||
tooltipText: I18n.tr("common.info")
|
tooltipText: I18n.tr("common.info")
|
||||||
baseSize: Style.baseWidgetSize * 0.75
|
baseSize: Style.baseWidgetSize * 0.75
|
||||||
@@ -499,7 +503,7 @@ Item {
|
|||||||
}
|
}
|
||||||
|
|
||||||
NIconButton {
|
NIconButton {
|
||||||
visible: !root.showOnlyLists && (modelData.paired || modelData.trusted) && !modelData.connected && !isBusy && !modelData.blocked
|
visible: itemHover.hovered && !root.showOnlyLists && (modelData.paired || modelData.trusted) && !modelData.connected && !isBusy && !modelData.blocked
|
||||||
icon: "trash"
|
icon: "trash"
|
||||||
tooltipText: I18n.tr("common.unpair")
|
tooltipText: I18n.tr("common.unpair")
|
||||||
baseSize: Style.baseWidgetSize * 0.75
|
baseSize: Style.baseWidgetSize * 0.75
|
||||||
@@ -548,7 +552,7 @@ Item {
|
|||||||
visible: device.isExpanded
|
visible: device.isExpanded
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
implicitHeight: infoColumn.implicitHeight + Style.margin2S
|
implicitHeight: infoColumn.implicitHeight + Style.margin2S
|
||||||
radius: Style.radiusXS
|
radius: Style.radiusS
|
||||||
color: Color.mSurfaceVariant
|
color: Color.mSurfaceVariant
|
||||||
border.width: Style.borderS
|
border.width: Style.borderS
|
||||||
border.color: Style.boxBorderColor
|
border.color: Style.boxBorderColor
|
||||||
|
|||||||
@@ -648,6 +648,10 @@ Item {
|
|||||||
NBox {
|
NBox {
|
||||||
id: networkItem
|
id: networkItem
|
||||||
|
|
||||||
|
HoverHandler {
|
||||||
|
id: itemHover
|
||||||
|
}
|
||||||
|
|
||||||
readonly property bool isBusy: NetworkService.connectingTo === modelData.ssid || NetworkService.disconnectingFrom === modelData.ssid || NetworkService.forgettingNetwork === modelData.ssid
|
readonly property bool isBusy: NetworkService.connectingTo === modelData.ssid || NetworkService.disconnectingFrom === modelData.ssid || NetworkService.forgettingNetwork === modelData.ssid
|
||||||
readonly property bool isExpanded: root.infoSsid === modelData.ssid
|
readonly property bool isExpanded: root.infoSsid === modelData.ssid
|
||||||
readonly property bool isEnterprise: NetworkService.isEnterprise(modelData.security)
|
readonly property bool isEnterprise: NetworkService.isEnterprise(modelData.security)
|
||||||
@@ -815,7 +819,7 @@ Item {
|
|||||||
}
|
}
|
||||||
|
|
||||||
NIconButton {
|
NIconButton {
|
||||||
visible: modelData.connected && NetworkService.disconnectingFrom !== modelData.ssid
|
visible: itemHover.hovered && modelData.connected && NetworkService.disconnectingFrom !== modelData.ssid
|
||||||
icon: "info"
|
icon: "info"
|
||||||
tooltipText: I18n.tr("common.info")
|
tooltipText: I18n.tr("common.info")
|
||||||
baseSize: Style.baseWidgetSize * 0.75
|
baseSize: Style.baseWidgetSize * 0.75
|
||||||
@@ -834,7 +838,7 @@ Item {
|
|||||||
}
|
}
|
||||||
|
|
||||||
NIconButton {
|
NIconButton {
|
||||||
visible: !root.showOnlyLists && (modelData.existing || modelData.cached) && !modelData.connected && !networkItem.isBusy
|
visible: itemHover.hovered && !root.showOnlyLists && (modelData.existing || modelData.cached) && !modelData.connected && !networkItem.isBusy
|
||||||
icon: "trash"
|
icon: "trash"
|
||||||
tooltipText: I18n.tr("tooltips.forget-network")
|
tooltipText: I18n.tr("tooltips.forget-network")
|
||||||
baseSize: Style.baseWidgetSize * 0.75
|
baseSize: Style.baseWidgetSize * 0.75
|
||||||
@@ -879,7 +883,7 @@ Item {
|
|||||||
visible: networkItem.isExpanded
|
visible: networkItem.isExpanded
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
implicitHeight: infoColumn.implicitHeight + Style.margin2S
|
implicitHeight: infoColumn.implicitHeight + Style.margin2S
|
||||||
radius: Style.radiusXS
|
radius: Style.radiusS
|
||||||
color: Color.mSurfaceVariant
|
color: Color.mSurfaceVariant
|
||||||
border.width: Style.borderS
|
border.width: Style.borderS
|
||||||
border.color: Style.boxBorderColor
|
border.color: Style.boxBorderColor
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import qs.Widgets
|
|||||||
Popup {
|
Popup {
|
||||||
id: root
|
id: root
|
||||||
modal: true
|
modal: true
|
||||||
closePolicy: Popup.NoAutoClose
|
|
||||||
dim: true
|
dim: true
|
||||||
anchors.centerIn: parent
|
anchors.centerIn: parent
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import qs.Widgets
|
|||||||
Popup {
|
Popup {
|
||||||
id: root
|
id: root
|
||||||
modal: true
|
modal: true
|
||||||
closePolicy: Popup.NoAutoClose
|
|
||||||
dim: true
|
dim: true
|
||||||
anchors.centerIn: parent
|
anchors.centerIn: parent
|
||||||
|
|
||||||
|
|||||||
@@ -34,7 +34,6 @@ Popup {
|
|||||||
height: content.implicitHeight + padding * 2
|
height: content.implicitHeight + padding * 2
|
||||||
padding: Style.marginXL
|
padding: Style.marginXL
|
||||||
modal: true
|
modal: true
|
||||||
closePolicy: Popup.NoAutoClose
|
|
||||||
dim: false
|
dim: false
|
||||||
anchors.centerIn: parent
|
anchors.centerIn: parent
|
||||||
|
|
||||||
|
|||||||
@@ -257,11 +257,10 @@ PopupWindow {
|
|||||||
contentHeight = tooltipText.implicitHeight;
|
contentHeight = tooltipText.implicitHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
const extraPad = isGridMode ? gridPaddingVertical : 0;
|
const tipWidth = Math.ceil(Math.min(contentWidth + (padding * 2), maxWidth));
|
||||||
const tipWidth = Math.ceil(Math.min(contentWidth + ((padding + extraPad) * 2), maxWidth));
|
|
||||||
root.implicitWidth = tipWidth;
|
root.implicitWidth = tipWidth;
|
||||||
|
|
||||||
const tipHeight = Math.ceil(contentHeight + ((padding + extraPad) * 2));
|
const tipHeight = Math.ceil(contentHeight + (padding * 2));
|
||||||
root.implicitHeight = tipHeight;
|
root.implicitHeight = tipHeight;
|
||||||
|
|
||||||
// Get target's global position and convert to screen-relative
|
// Get target's global position and convert to screen-relative
|
||||||
@@ -499,11 +498,10 @@ PopupWindow {
|
|||||||
contentHeight = tooltipText.implicitHeight;
|
contentHeight = tooltipText.implicitHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
const extraPad = isGridMode ? gridPaddingVertical : 0;
|
const tipWidth = Math.ceil(Math.min(contentWidth + (padding * 2), maxWidth));
|
||||||
const tipWidth = Math.ceil(Math.min(contentWidth + ((padding + extraPad) * 2), maxWidth));
|
|
||||||
root.implicitWidth = tipWidth;
|
root.implicitWidth = tipWidth;
|
||||||
|
|
||||||
const tipHeight = Math.ceil(contentHeight + ((padding + extraPad) * 2));
|
const tipHeight = Math.ceil(contentHeight + (padding * 2));
|
||||||
root.implicitHeight = tipHeight;
|
root.implicitHeight = tipHeight;
|
||||||
|
|
||||||
// Reposition based on current direction (screen-relative)
|
// Reposition based on current direction (screen-relative)
|
||||||
@@ -645,7 +643,7 @@ PopupWindow {
|
|||||||
color: Color.mSurface
|
color: Color.mSurface
|
||||||
border.color: Color.mOutline
|
border.color: Color.mOutline
|
||||||
border.width: Style.borderS
|
border.width: Style.borderS
|
||||||
radius: Math.min(Style.radiusS, Math.min(width, height) / 3)
|
radius: Style.radiusS
|
||||||
|
|
||||||
// Only show content when we have content
|
// Only show content when we have content
|
||||||
visible: root.text !== "" || root.isGridMode
|
visible: root.text !== "" || root.isGridMode
|
||||||
|
|||||||
@@ -249,11 +249,15 @@ Singleton {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function syncWindows() {
|
function syncWindows() {
|
||||||
|
const ws = backend && backend.windows ? backend.windows : [];
|
||||||
|
Logger.d("CompositorService", "syncWindows() from backend length:", ws.length);
|
||||||
|
|
||||||
windows.clear();
|
windows.clear();
|
||||||
const ws = backend.windows;
|
|
||||||
for (var i = 0; i < ws.length; i++) {
|
for (var i = 0; i < ws.length; i++) {
|
||||||
windows.append(ws[i]);
|
windows.append(ws[i]);
|
||||||
}
|
}
|
||||||
|
Logger.d("CompositorService", "syncWindows() model count:", windows.count);
|
||||||
|
|
||||||
// Emit signal to notify listeners that window list has been updated
|
// Emit signal to notify listeners that window list has been updated
|
||||||
windowListChanged();
|
windowListChanged();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -236,6 +236,7 @@ Item {
|
|||||||
// Safe window update
|
// Safe window update
|
||||||
function safeUpdateWindows() {
|
function safeUpdateWindows() {
|
||||||
try {
|
try {
|
||||||
|
Logger.d("HyprlandService", "safeUpdateWindows() start");
|
||||||
const windowsList = [];
|
const windowsList = [];
|
||||||
windowCache = {};
|
windowCache = {};
|
||||||
|
|
||||||
@@ -246,6 +247,7 @@ Item {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const hlToplevels = Hyprland.toplevels.values;
|
const hlToplevels = Hyprland.toplevels.values;
|
||||||
|
Logger.d("HyprlandService", "safeUpdateWindows() toplevels:", hlToplevels.length);
|
||||||
let newFocusedIndex = -1;
|
let newFocusedIndex = -1;
|
||||||
|
|
||||||
// Get active workspaces to filter focus
|
// Get active workspaces to filter focus
|
||||||
@@ -294,6 +296,7 @@ Item {
|
|||||||
}
|
}
|
||||||
|
|
||||||
windows = toSortedWindowList(windowsList);
|
windows = toSortedWindowList(windowsList);
|
||||||
|
Logger.d("HyprlandService", "safeUpdateWindows() windows after sort:", windows.length);
|
||||||
|
|
||||||
if (newFocusedIndex !== focusedWindowIndex) {
|
if (newFocusedIndex !== focusedWindowIndex) {
|
||||||
focusedWindowIndex = newFocusedIndex;
|
focusedWindowIndex = newFocusedIndex;
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ Singleton {
|
|||||||
readonly property bool hasInput: !!source
|
readonly property bool hasInput: !!source
|
||||||
readonly property list<PwNode> sinks: deviceNodes.sinks
|
readonly property list<PwNode> sinks: deviceNodes.sinks
|
||||||
readonly property list<PwNode> sources: deviceNodes.sources
|
readonly property list<PwNode> sources: deviceNodes.sources
|
||||||
readonly property real maxVolume: Settings.data.audio.volumeOverdrive ? 1.5 : 1.0
|
|
||||||
readonly property real epsilon: 0.005
|
readonly property real epsilon: 0.005
|
||||||
|
|
||||||
// Fallback state sourced from wpctl when PipeWire node values go stale.
|
// Fallback state sourced from wpctl when PipeWire node values go stale.
|
||||||
@@ -30,10 +30,11 @@ Singleton {
|
|||||||
property bool wpctlOutputMuted: true
|
property bool wpctlOutputMuted: true
|
||||||
|
|
||||||
function clampOutputVolume(vol: real): real {
|
function clampOutputVolume(vol: real): real {
|
||||||
|
const maxVolume = Settings.data.audio.volumeOverdrive ? 1.5 : 1.0;
|
||||||
if (vol === undefined || isNaN(vol)) {
|
if (vol === undefined || isNaN(vol)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return Math.max(0, Math.min(root.maxVolume, vol));
|
return Math.max(0, Math.min(maxVolume, vol));
|
||||||
}
|
}
|
||||||
|
|
||||||
function refreshWpctlOutputState(): void {
|
function refreshWpctlOutputState(): void {
|
||||||
@@ -68,9 +69,9 @@ Singleton {
|
|||||||
return clampOutputVolume(wpctlOutputVolume);
|
return clampOutputVolume(wpctlOutputVolume);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!sink?.audio) {
|
if (!sink?.audio)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
|
||||||
return clampOutputVolume(sink.audio.volume);
|
return clampOutputVolume(sink.audio.volume);
|
||||||
}
|
}
|
||||||
readonly property bool muted: {
|
readonly property bool muted: {
|
||||||
@@ -82,14 +83,13 @@ Singleton {
|
|||||||
|
|
||||||
// Input Volume - read directly from device
|
// Input Volume - read directly from device
|
||||||
readonly property real inputVolume: {
|
readonly property real inputVolume: {
|
||||||
if (!source?.audio) {
|
if (!source?.audio)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
|
||||||
const vol = source.audio.volume;
|
const vol = source.audio.volume;
|
||||||
if (vol === undefined || isNaN(vol)) {
|
if (vol === undefined || isNaN(vol))
|
||||||
return 0;
|
return 0;
|
||||||
}
|
const maxVolume = Settings.data.audio.volumeOverdrive ? 1.5 : 1.0;
|
||||||
return Math.max(0, Math.min(root.maxVolume, vol));
|
return Math.max(0, Math.min(maxVolume, vol));
|
||||||
}
|
}
|
||||||
readonly property bool inputMuted: source?.audio?.muted ?? true
|
readonly property bool inputMuted: source?.audio?.muted ?? true
|
||||||
|
|
||||||
@@ -299,9 +299,8 @@ Singleton {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getAppKey(node): string {
|
function getAppKey(node): string {
|
||||||
if (!node || !node.properties) {
|
if (!node || !node.properties)
|
||||||
return "";
|
return "";
|
||||||
}
|
|
||||||
var props = node.properties;
|
var props = node.properties;
|
||||||
var binary = props["application.process.binary"] || "";
|
var binary = props["application.process.binary"] || "";
|
||||||
if (binary) {
|
if (binary) {
|
||||||
@@ -309,38 +308,30 @@ Singleton {
|
|||||||
return parts[parts.length - 1].toLowerCase();
|
return parts[parts.length - 1].toLowerCase();
|
||||||
}
|
}
|
||||||
var appName = props["application.name"] || "";
|
var appName = props["application.name"] || "";
|
||||||
if (appName) {
|
if (appName)
|
||||||
return appName.toLowerCase();
|
return appName.toLowerCase();
|
||||||
}
|
|
||||||
var appId = props["application.id"] || "";
|
var appId = props["application.id"] || "";
|
||||||
if (appId) {
|
if (appId)
|
||||||
return appId.toLowerCase();
|
return appId.toLowerCase();
|
||||||
}
|
|
||||||
|
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
function setAppStreamVolume(appKey: string, volume: real): void {
|
function setAppStreamVolume(appKey: string, volume: real): void {
|
||||||
if (!appKey) {
|
if (!appKey)
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
var o = appVolumeOverrides;
|
var o = appVolumeOverrides;
|
||||||
if (!o[appKey]) {
|
if (!o[appKey])
|
||||||
o[appKey] = {};
|
o[appKey] = {};
|
||||||
}
|
|
||||||
|
|
||||||
o[appKey].volume = volume;
|
o[appKey].volume = volume;
|
||||||
appVolumeOverrides = o;
|
appVolumeOverrides = o;
|
||||||
}
|
}
|
||||||
|
|
||||||
function setAppStreamMuted(appKey: string, muted: bool): void {
|
function setAppStreamMuted(appKey: string, muted: bool): void {
|
||||||
if (!appKey) {
|
if (!appKey)
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
var o = appVolumeOverrides;
|
var o = appVolumeOverrides;
|
||||||
if (!o[appKey]) {
|
if (!o[appKey])
|
||||||
o[appKey] = {};
|
o[appKey] = {};
|
||||||
}
|
|
||||||
o[appKey].muted = muted;
|
o[appKey].muted = muted;
|
||||||
appVolumeOverrides = o;
|
appVolumeOverrides = o;
|
||||||
}
|
}
|
||||||
@@ -351,24 +342,19 @@ Singleton {
|
|||||||
|
|
||||||
function _applyAppOverrides(): void {
|
function _applyAppOverrides(): void {
|
||||||
var streams = root.appStreams;
|
var streams = root.appStreams;
|
||||||
if (!streams) {
|
if (!streams)
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
var currentIds = {};
|
var currentIds = {};
|
||||||
_isApplyingAppOverride = true;
|
_isApplyingAppOverride = true;
|
||||||
for (var i = 0; i < streams.length; i++) {
|
for (var i = 0; i < streams.length; i++) {
|
||||||
var s = streams[i];
|
var s = streams[i];
|
||||||
if (!s) {
|
if (!s)
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
|
|
||||||
currentIds[s.id] = true;
|
currentIds[s.id] = true;
|
||||||
var key = getAppKey(s);
|
var key = getAppKey(s);
|
||||||
var ov = key ? appVolumeOverrides[key] : null;
|
var ov = key ? appVolumeOverrides[key] : null;
|
||||||
if (!ov || !s.audio) {
|
if (!ov || !s.audio)
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if (ov.volume !== undefined && Math.abs(s.audio.volume - ov.volume) > root.epsilon) {
|
if (ov.volume !== undefined && Math.abs(s.audio.volume - ov.volume) > root.epsilon) {
|
||||||
s.audio.volume = ov.volume;
|
s.audio.volume = ov.volume;
|
||||||
}
|
}
|
||||||
@@ -435,6 +421,9 @@ Singleton {
|
|||||||
root.refreshWpctlOutputState();
|
root.refreshWpctlOutputState();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
stdout: StdioCollector {}
|
||||||
|
stderr: StdioCollector {}
|
||||||
}
|
}
|
||||||
|
|
||||||
Process {
|
Process {
|
||||||
@@ -448,6 +437,7 @@ Singleton {
|
|||||||
}
|
}
|
||||||
|
|
||||||
stdout: StdioCollector {}
|
stdout: StdioCollector {}
|
||||||
|
stderr: StdioCollector {}
|
||||||
}
|
}
|
||||||
|
|
||||||
Process {
|
Process {
|
||||||
@@ -465,6 +455,9 @@ Singleton {
|
|||||||
}
|
}
|
||||||
root.refreshWpctlOutputState();
|
root.refreshWpctlOutputState();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
stdout: StdioCollector {}
|
||||||
|
stderr: StdioCollector {}
|
||||||
}
|
}
|
||||||
|
|
||||||
Process {
|
Process {
|
||||||
@@ -474,6 +467,9 @@ Singleton {
|
|||||||
onExited: function (_code) {
|
onExited: function (_code) {
|
||||||
root.refreshWpctlOutputState();
|
root.refreshWpctlOutputState();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
stdout: StdioCollector {}
|
||||||
|
stderr: StdioCollector {}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Watch output device changes for clamping
|
// Watch output device changes for clamping
|
||||||
@@ -499,12 +495,14 @@ Singleton {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const maxVolume = Settings.data.audio.volumeOverdrive ? 1.5 : 1.0;
|
||||||
|
|
||||||
// If volume exceeds max, clamp it (but only if we didn't just set it)
|
// If volume exceeds max, clamp it (but only if we didn't just set it)
|
||||||
if (vol > root.maxVolume) {
|
if (vol > maxVolume) {
|
||||||
root.isSettingOutputVolume = true;
|
root.isSettingOutputVolume = true;
|
||||||
Qt.callLater(() => {
|
Qt.callLater(() => {
|
||||||
if (root.sink?.audio && root.sink.audio.volume > root.maxVolume) {
|
if (root.sink?.audio && root.sink.audio.volume > maxVolume) {
|
||||||
root.sink.audio.volume = root.maxVolume;
|
root.sink.audio.volume = maxVolume;
|
||||||
}
|
}
|
||||||
root.isSettingOutputVolume = false;
|
root.isSettingOutputVolume = false;
|
||||||
});
|
});
|
||||||
@@ -537,12 +535,14 @@ Singleton {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const maxVolume = Settings.data.audio.volumeOverdrive ? 1.5 : 1.0;
|
||||||
|
|
||||||
// If volume exceeds max, clamp it (but only if we didn't just set it)
|
// If volume exceeds max, clamp it (but only if we didn't just set it)
|
||||||
if (vol > root.maxVolume) {
|
if (vol > maxVolume) {
|
||||||
root.isSettingInputVolume = true;
|
root.isSettingInputVolume = true;
|
||||||
Qt.callLater(() => {
|
Qt.callLater(() => {
|
||||||
if (root.source?.audio && root.source.audio.volume > root.maxVolume) {
|
if (root.source?.audio && root.source.audio.volume > maxVolume) {
|
||||||
root.source.audio.volume = root.maxVolume;
|
root.source.audio.volume = maxVolume;
|
||||||
}
|
}
|
||||||
root.isSettingInputVolume = false;
|
root.isSettingInputVolume = false;
|
||||||
});
|
});
|
||||||
@@ -555,10 +555,11 @@ Singleton {
|
|||||||
if (!Pipewire.ready || (!sink?.audio && !wpctlAvailable)) {
|
if (!Pipewire.ready || (!sink?.audio && !wpctlAvailable)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (volume >= root.maxVolume) {
|
const maxVolume = Settings.data.audio.volumeOverdrive ? 1.5 : 1.0;
|
||||||
|
if (volume >= maxVolume) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setVolume(Math.min(root.maxVolume, volume + stepVolume));
|
setVolume(Math.min(maxVolume, volume + stepVolume));
|
||||||
}
|
}
|
||||||
|
|
||||||
function decreaseVolume() {
|
function decreaseVolume() {
|
||||||
@@ -641,11 +642,11 @@ Singleton {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getOutputIcon() {
|
function getOutputIcon() {
|
||||||
if (muted) {
|
if (muted)
|
||||||
return "volume-mute";
|
return "volume-mute";
|
||||||
}
|
|
||||||
|
|
||||||
const clampedVolume = Math.max(0, Math.min(volume, root.maxVolume));
|
const maxVolume = Settings.data.audio.volumeOverdrive ? 1.5 : 1.0;
|
||||||
|
const clampedVolume = Math.max(0, Math.min(volume, maxVolume));
|
||||||
|
|
||||||
// Show volume-x icon when volume is effectively 0% (within rounding threshold)
|
// Show volume-x icon when volume is effectively 0% (within rounding threshold)
|
||||||
if (clampedVolume < root.epsilon) {
|
if (clampedVolume < root.epsilon) {
|
||||||
@@ -662,10 +663,11 @@ Singleton {
|
|||||||
if (!Pipewire.ready || !source?.audio) {
|
if (!Pipewire.ready || !source?.audio) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (inputVolume >= root.maxVolume) {
|
const maxVolume = Settings.data.audio.volumeOverdrive ? 1.5 : 1.0;
|
||||||
|
if (inputVolume >= maxVolume) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setInputVolume(Math.min(root.maxVolume, inputVolume + stepVolume));
|
setInputVolume(Math.min(maxVolume, inputVolume + stepVolume));
|
||||||
}
|
}
|
||||||
|
|
||||||
function decreaseInputVolume() {
|
function decreaseInputVolume() {
|
||||||
@@ -681,7 +683,8 @@ Singleton {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const clampedVolume = Math.max(0, Math.min(root.maxVolume, newVolume));
|
const maxVolume = Settings.data.audio.volumeOverdrive ? 1.5 : 1.0;
|
||||||
|
const clampedVolume = Math.max(0, Math.min(maxVolume, newVolume));
|
||||||
const delta = Math.abs(clampedVolume - source.audio.volume);
|
const delta = Math.abs(clampedVolume - source.audio.volume);
|
||||||
if (delta < root.epsilon) {
|
if (delta < root.epsilon) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
+11
-27
@@ -196,42 +196,20 @@ Singleton {
|
|||||||
// Track last workspace ID to detect actual workspace changes
|
// Track last workspace ID to detect actual workspace changes
|
||||||
property var lastWorkspaceId: null
|
property var lastWorkspaceId: null
|
||||||
|
|
||||||
// Workspace switch handler - show bar on the focused workspace screen
|
// Workspace switch handler - directly show bar on the focused workspace screen
|
||||||
// Deferred via Timer to avoid re-entrant incubation: setScreenHidden emits
|
|
||||||
// barAutoHideStateChanged which triggers BarContentWindow to load bar content.
|
|
||||||
// Loading Bar+widgets synchronously during workspaceChanged nests QQmlIncubatorPrivate
|
|
||||||
// inside the signal handler, corrupting the V4 heap (SIGSEGV in QV4::Object::insertMember).
|
|
||||||
Timer {
|
|
||||||
id: workspaceShowBarTimer
|
|
||||||
interval: 0
|
|
||||||
property string pendingScreenName: ""
|
|
||||||
onTriggered: {
|
|
||||||
if (pendingScreenName === "")
|
|
||||||
return;
|
|
||||||
var screenName = pendingScreenName;
|
|
||||||
pendingScreenName = "";
|
|
||||||
setScreenHidden(screenName, false);
|
|
||||||
if (!root.isBarHovered(screenName)) {
|
|
||||||
barHoverStateChanged(screenName, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Connections {
|
Connections {
|
||||||
target: CompositorService
|
target: CompositorService
|
||||||
function onWorkspaceChanged() {
|
function onWorkspaceChanged() {
|
||||||
if (!Settings.data.bar.showOnWorkspaceSwitch)
|
if (!Settings.data.bar.showOnWorkspaceSwitch)
|
||||||
return;
|
return;
|
||||||
|
if (Settings.data.bar.displayMode !== "auto_hide")
|
||||||
|
return;
|
||||||
|
|
||||||
var ws = CompositorService.getCurrentWorkspace();
|
var ws = CompositorService.getCurrentWorkspace();
|
||||||
if (!ws || !ws.output) {
|
if (!ws || !ws.output) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var screenName = ws.output || "";
|
|
||||||
if (Settings.getBarDisplayModeForScreen(screenName) !== "auto_hide")
|
|
||||||
return;
|
|
||||||
|
|
||||||
// Only trigger if workspace actually changed
|
// Only trigger if workspace actually changed
|
||||||
var currentWsId = ws.id;
|
var currentWsId = ws.id;
|
||||||
if (currentWsId === root.lastWorkspaceId) {
|
if (currentWsId === root.lastWorkspaceId) {
|
||||||
@@ -239,10 +217,16 @@ Singleton {
|
|||||||
}
|
}
|
||||||
root.lastWorkspaceId = currentWsId;
|
root.lastWorkspaceId = currentWsId;
|
||||||
|
|
||||||
|
var screenName = ws.output || "";
|
||||||
Logger.d("BarService", "Workspace switched to:", currentWsId, "on screen:", screenName);
|
Logger.d("BarService", "Workspace switched to:", currentWsId, "on screen:", screenName);
|
||||||
|
|
||||||
workspaceShowBarTimer.pendingScreenName = screenName;
|
// Show bar immediately
|
||||||
workspaceShowBarTimer.restart();
|
setScreenHidden(screenName, false);
|
||||||
|
|
||||||
|
// Only trigger hideTimer if not already hovered (e.g., mouse on trigger zone)
|
||||||
|
if (!root.isBarHovered(screenName)) {
|
||||||
|
barHoverStateChanged(screenName, false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -167,7 +167,7 @@ ColumnLayout {
|
|||||||
font.pointSize: root.fontSize * Style.uiScaleRatio
|
font.pointSize: root.fontSize * Style.uiScaleRatio
|
||||||
font.weight: root.fontWeight
|
font.weight: root.fontWeight
|
||||||
|
|
||||||
onTextEdited: root.editingFinished()
|
onEditingFinished: root.editingFinished()
|
||||||
onAccepted: root.accepted()
|
onAccepted: root.accepted()
|
||||||
|
|
||||||
// Override mouse handling to prevent propagation
|
// Override mouse handling to prevent propagation
|
||||||
|
|||||||
-1866
File diff suppressed because it is too large
Load Diff
@@ -1,329 +0,0 @@
|
|||||||
PID: 3846 (quickshell)
|
|
||||||
UID: 1000 (shelomoh)
|
|
||||||
GID: 1000 (shelomoh)
|
|
||||||
Signal: 11 (SEGV)
|
|
||||||
Timestamp: Tue 2026-03-17 09:34:27 EET (5min ago)
|
|
||||||
Command Line: build/src/quickshell -p ../noctalia-shell
|
|
||||||
Executable: /home/shelomoh/Downloads/noctalia-qs/build/src/quickshell
|
|
||||||
Control Group: /user.slice/user-1000.slice/user@1000.service/app.slice/app-ghostty-surface-transient-3507.scope
|
|
||||||
Unit: user@1000.service
|
|
||||||
User Unit: app-ghostty-surface-transient-3507.scope
|
|
||||||
Slice: user-1000.slice
|
|
||||||
Owner UID: 1000 (shelomoh)
|
|
||||||
Boot ID: d5c40a483efb425188b8fda02e442f92
|
|
||||||
Machine ID: e1f87fbe60e9410db9c53ecbd7ab103a
|
|
||||||
Hostname: shelomoh-laptop
|
|
||||||
Storage: /var/lib/systemd/coredump/core.quickshell.1000.d5c40a483efb425188b8fda02e442f92.3846.1773732867000000.zst (present)
|
|
||||||
Size on Disk: 33.6M
|
|
||||||
Message: Process 3846 (quickshell) of user 1000 dumped core.
|
|
||||||
|
|
||||||
Stack trace of thread 3846:
|
|
||||||
#0 0x00007f89515c1f53 _ZN3QV46Object12insertMemberEPNS_14StringOrSymbolEPKNS_8PropertyENS_18PropertyAttributesE (libQt6Qml.so.6 + 0x1c1f53)
|
|
||||||
#1 0x00007f895153f908 n/a (libQt6Qml.so.6 + 0x13f908)
|
|
||||||
#2 0x00007f89515c4c61 _ZN3QV46Object11internalPutENS_11PropertyKeyERKNS_5ValueEPS2_ (libQt6Qml.so.6 + 0x1c4c61)
|
|
||||||
#3 0x00007f89515c4aa0 _ZN3QV46Object11internalPutENS_11PropertyKeyERKNS_5ValueEPS2_ (libQt6Qml.so.6 + 0x1c4aa0)
|
|
||||||
#4 0x00007f895160b398 n/a (libQt6Qml.so.6 + 0x20b398)
|
|
||||||
#5 0x00007f895160b4a1 _ZN3QV47Runtime12StoreElement4callEPNS_15ExecutionEngineERKNS_5ValueES6_S6_ (libQt6Qml.so.6 + 0x20b4a1)
|
|
||||||
#6 0x00007f8936d2244d n/a (n/a + 0x0)
|
|
||||||
#7 0x00007f895164e266 n/a (libQt6Qml.so.6 + 0x24e266)
|
|
||||||
#8 0x00007f89515a3eb6 n/a (libQt6Qml.so.6 + 0x1a3eb6)
|
|
||||||
#9 0x00007f895160ea1d _ZN3QV47Runtime18CallPropertyLookup4callEPNS_15ExecutionEngineERKNS_5ValueEjPS4_i (libQt6Qml.so.6 + 0x20ea1d)
|
|
||||||
#10 0x00007f8936d23e27 n/a (n/a + 0x0)
|
|
||||||
#11 0x00007f895164e266 n/a (libQt6Qml.so.6 + 0x24e266)
|
|
||||||
#12 0x00007f8951596300 n/a (libQt6Qml.so.6 + 0x196300)
|
|
||||||
#13 0x00007f895159c909 _ZN3QV48Function4callEP7QObjectPPvPK9QMetaTypeiPNS_16ExecutionContextE (libQt6Qml.so.6 + 0x19c909)
|
|
||||||
#14 0x00007f89516f32b0 _ZN24QQmlJavaScriptExpression8evaluateEPPvPK9QMetaTypei (libQt6Qml.so.6 + 0x2f32b0)
|
|
||||||
#15 0x00007f895168a2cb _ZN25QQmlBoundSignalExpression8evaluateEPPv (libQt6Qml.so.6 + 0x28a2cb)
|
|
||||||
#16 0x00007f895168f80d n/a (libQt6Qml.so.6 + 0x28f80d)
|
|
||||||
#17 0x00007f895171cf58 _ZN12QQmlNotifier10emitNotifyEP20QQmlNotifierEndpointPPv (libQt6Qml.so.6 + 0x31cf58)
|
|
||||||
#18 0x00007f8950bd8b82 n/a (libQt6Core.so.6 + 0x1d8b82)
|
|
||||||
#19 0x00007f89516f1c36 _ZN20QQmlIncubatorPrivate8incubateER26QQmlInstantiationInterrupt (libQt6Qml.so.6 + 0x2f1c36)
|
|
||||||
#20 0x00007f89516f1e17 _ZN20QQmlIncubatorPrivate8incubateER26QQmlInstantiationInterrupt (libQt6Qml.so.6 + 0x2f1e17)
|
|
||||||
#21 0x00007f89516f2974 _ZN24QQmlIncubationController11incubateForEi (libQt6Qml.so.6 + 0x2f2974)
|
|
||||||
#22 0x000055faff9d58ff _ZN22QsIncubationController8incubateEv (/home/shelomoh/Downloads/noctalia-qs/build/src/quickshell + 0x76f8ff)
|
|
||||||
#23 0x00007f8950bc6474 _ZN7QObject5eventEP6QEvent (libQt6Core.so.6 + 0x1c6474)
|
|
||||||
#24 0x00007f8950b6bf48 _ZN16QCoreApplication15notifyInternal2EP7QObjectP6QEvent (libQt6Core.so.6 + 0x16bf48)
|
|
||||||
#25 0x00007f8950b6c320 _ZN23QCoreApplicationPrivate16sendPostedEventsEP7QObjectiP11QThreadData (libQt6Core.so.6 + 0x16c320)
|
|
||||||
#26 0x00007f8950e51e78 n/a (libQt6Core.so.6 + 0x451e78)
|
|
||||||
#27 0x00007f895361df4d n/a (libglib-2.0.so.0 + 0x5ef4d)
|
|
||||||
#28 0x00007f895361f617 n/a (libglib-2.0.so.0 + 0x60617)
|
|
||||||
#29 0x00007f895361f825 g_main_context_iteration (libglib-2.0.so.0 + 0x60825)
|
|
||||||
#30 0x00007f8950e4fcb2 _ZN20QEventDispatcherGlib13processEventsE6QFlagsIN10QEventLoop17ProcessEventsFlagEE (libQt6Core.so.6 + 0x44fcb2)
|
|
||||||
#31 0x00007f8950b76cf6 _ZN10QEventLoop4execE6QFlagsINS_17ProcessEventsFlagEE (libQt6Core.so.6 + 0x176cf6)
|
|
||||||
#32 0x00007f8950b709f1 _ZN16QCoreApplication4execEv (libQt6Core.so.6 + 0x1709f1)
|
|
||||||
#33 0x000055faff759246 _ZN2qs6launch6launchERKNS0_10LaunchArgsEPPcP16QCoreApplication (/home/shelomoh/Downloads/noctalia-qs/build/src/quickshell + 0x4f3246)
|
|
||||||
#34 0x000055faff7537b9 launchFromCommand (/home/shelomoh/Downloads/noctalia-qs/build/src/quickshell + 0x4ed7b9)
|
|
||||||
#35 0x000055faff745007 _ZN2qs6launch4mainEiPPc (/home/shelomoh/Downloads/noctalia-qs/build/src/quickshell + 0x4df007)
|
|
||||||
#36 0x00007f89504366c1 n/a (libc.so.6 + 0x276c1)
|
|
||||||
#37 0x00007f89504367f9 __libc_start_main (libc.so.6 + 0x277f9)
|
|
||||||
#38 0x000055faff7472c5 _start (/home/shelomoh/Downloads/noctalia-qs/build/src/quickshell + 0x4e12c5)
|
|
||||||
|
|
||||||
Stack trace of thread 3847:
|
|
||||||
#0 0x00007f89504adf32 n/a (libc.so.6 + 0x9ef32)
|
|
||||||
#1 0x00007f89504a239c n/a (libc.so.6 + 0x9339c)
|
|
||||||
#2 0x00007f89504a23e4 n/a (libc.so.6 + 0x933e4)
|
|
||||||
#3 0x00007f895051c2f6 ppoll (libc.so.6 + 0x10d2f6)
|
|
||||||
#4 0x00007f895361f744 n/a (libglib-2.0.so.0 + 0x60744)
|
|
||||||
#5 0x00007f895361f825 g_main_context_iteration (libglib-2.0.so.0 + 0x60825)
|
|
||||||
#6 0x00007f8950e4fcb2 _ZN20QEventDispatcherGlib13processEventsE6QFlagsIN10QEventLoop17ProcessEventsFlagEE (libQt6Core.so.6 + 0x44fcb2)
|
|
||||||
#7 0x00007f8950b76cf6 _ZN10QEventLoop4execE6QFlagsINS_17ProcessEventsFlagEE (libQt6Core.so.6 + 0x176cf6)
|
|
||||||
#8 0x00007f8950c9277e _ZN7QThread4execEv (libQt6Core.so.6 + 0x29277e)
|
|
||||||
#9 0x00007f8950d31c7a n/a (libQt6Core.so.6 + 0x331c7a)
|
|
||||||
#10 0x00007f89504a597a n/a (libc.so.6 + 0x9697a)
|
|
||||||
#11 0x00007f89505292bc n/a (libc.so.6 + 0x11a2bc)
|
|
||||||
|
|
||||||
Stack trace of thread 3848:
|
|
||||||
#0 0x00007f89504adf32 n/a (libc.so.6 + 0x9ef32)
|
|
||||||
#1 0x00007f89504a239c n/a (libc.so.6 + 0x9339c)
|
|
||||||
#2 0x00007f89504a23e4 n/a (libc.so.6 + 0x933e4)
|
|
||||||
#3 0x00007f895051c2f6 ppoll (libc.so.6 + 0x10d2f6)
|
|
||||||
#4 0x00007f895361f744 n/a (libglib-2.0.so.0 + 0x60744)
|
|
||||||
#5 0x00007f895361f825 g_main_context_iteration (libglib-2.0.so.0 + 0x60825)
|
|
||||||
#6 0x00007f8950e4fcb2 _ZN20QEventDispatcherGlib13processEventsE6QFlagsIN10QEventLoop17ProcessEventsFlagEE (libQt6Core.so.6 + 0x44fcb2)
|
|
||||||
#7 0x00007f8950b76cf6 _ZN10QEventLoop4execE6QFlagsINS_17ProcessEventsFlagEE (libQt6Core.so.6 + 0x176cf6)
|
|
||||||
#8 0x00007f8950c9277e _ZN7QThread4execEv (libQt6Core.so.6 + 0x29277e)
|
|
||||||
#9 0x00007f895257607e n/a (libQt6DBus.so.6 + 0x3707e)
|
|
||||||
#10 0x00007f8950d31c7a n/a (libQt6Core.so.6 + 0x331c7a)
|
|
||||||
#11 0x00007f89504a597a n/a (libc.so.6 + 0x9697a)
|
|
||||||
#12 0x00007f89505292bc n/a (libc.so.6 + 0x11a2bc)
|
|
||||||
|
|
||||||
Stack trace of thread 3849:
|
|
||||||
#0 0x00007f895052706d syscall (libc.so.6 + 0x11806d)
|
|
||||||
#1 0x00007f895364ba2e g_cond_wait (libglib-2.0.so.0 + 0x8ca2e)
|
|
||||||
#2 0x00007f89535e522d n/a (libglib-2.0.so.0 + 0x2622d)
|
|
||||||
#3 0x00007f89535e529d g_async_queue_pop (libglib-2.0.so.0 + 0x2629d)
|
|
||||||
#4 0x00007f894c4af51c n/a (libpangoft2-1.0.so.0 + 0xc51c)
|
|
||||||
#5 0x00007f895365513c n/a (libglib-2.0.so.0 + 0x9613c)
|
|
||||||
#6 0x00007f89504a597a n/a (libc.so.6 + 0x9697a)
|
|
||||||
#7 0x00007f89505292bc n/a (libc.so.6 + 0x11a2bc)
|
|
||||||
|
|
||||||
Stack trace of thread 3850:
|
|
||||||
#0 0x00007f895052706d syscall (libc.so.6 + 0x11806d)
|
|
||||||
#1 0x00007f895364ba2e g_cond_wait (libglib-2.0.so.0 + 0x8ca2e)
|
|
||||||
#2 0x00007f89535e522d n/a (libglib-2.0.so.0 + 0x2622d)
|
|
||||||
#3 0x00007f8953655607 n/a (libglib-2.0.so.0 + 0x96607)
|
|
||||||
#4 0x00007f895365513c n/a (libglib-2.0.so.0 + 0x9613c)
|
|
||||||
#5 0x00007f89504a597a n/a (libc.so.6 + 0x9697a)
|
|
||||||
#6 0x00007f89505292bc n/a (libc.so.6 + 0x11a2bc)
|
|
||||||
|
|
||||||
Stack trace of thread 3851:
|
|
||||||
#0 0x00007f89504adf32 n/a (libc.so.6 + 0x9ef32)
|
|
||||||
#1 0x00007f89504a239c n/a (libc.so.6 + 0x9339c)
|
|
||||||
#2 0x00007f89504a23e4 n/a (libc.so.6 + 0x933e4)
|
|
||||||
#3 0x00007f895051c2f6 ppoll (libc.so.6 + 0x10d2f6)
|
|
||||||
#4 0x00007f895361f744 n/a (libglib-2.0.so.0 + 0x60744)
|
|
||||||
#5 0x00007f895361f825 g_main_context_iteration (libglib-2.0.so.0 + 0x60825)
|
|
||||||
#6 0x00007f895361f872 n/a (libglib-2.0.so.0 + 0x60872)
|
|
||||||
#7 0x00007f895365513c n/a (libglib-2.0.so.0 + 0x9613c)
|
|
||||||
#8 0x00007f89504a597a n/a (libc.so.6 + 0x9697a)
|
|
||||||
#9 0x00007f89505292bc n/a (libc.so.6 + 0x11a2bc)
|
|
||||||
|
|
||||||
Stack trace of thread 3852:
|
|
||||||
#0 0x00007f89504adf32 n/a (libc.so.6 + 0x9ef32)
|
|
||||||
#1 0x00007f89504a239c n/a (libc.so.6 + 0x9339c)
|
|
||||||
#2 0x00007f89504a23e4 n/a (libc.so.6 + 0x933e4)
|
|
||||||
#3 0x00007f895051c2f6 ppoll (libc.so.6 + 0x10d2f6)
|
|
||||||
#4 0x00007f895361f744 n/a (libglib-2.0.so.0 + 0x60744)
|
|
||||||
#5 0x00007f895361f9d7 g_main_loop_run (libglib-2.0.so.0 + 0x609d7)
|
|
||||||
#6 0x00007f895388f0c4 n/a (libgio-2.0.so.0 + 0x1190c4)
|
|
||||||
#7 0x00007f895365513c n/a (libglib-2.0.so.0 + 0x9613c)
|
|
||||||
#8 0x00007f89504a597a n/a (libc.so.6 + 0x9697a)
|
|
||||||
#9 0x00007f89505292bc n/a (libc.so.6 + 0x11a2bc)
|
|
||||||
|
|
||||||
Stack trace of thread 3856:
|
|
||||||
#0 0x00007f89504adf32 n/a (libc.so.6 + 0x9ef32)
|
|
||||||
#1 0x00007f89504a239c n/a (libc.so.6 + 0x9339c)
|
|
||||||
#2 0x00007f89504a268c n/a (libc.so.6 + 0x9368c)
|
|
||||||
#3 0x00007f89504a5068 pthread_cond_timedwait (libc.so.6 + 0x96068)
|
|
||||||
#4 0x00007f8950d362a5 _ZN14QWaitCondition4waitEP6QMutex14QDeadlineTimer (libQt6Core.so.6 + 0x3362a5)
|
|
||||||
#5 0x00007f8950c91189 n/a (libQt6Core.so.6 + 0x291189)
|
|
||||||
#6 0x00007f8950d31c7a n/a (libQt6Core.so.6 + 0x331c7a)
|
|
||||||
#7 0x00007f89504a597a n/a (libc.so.6 + 0x9697a)
|
|
||||||
#8 0x00007f89505292bc n/a (libc.so.6 + 0x11a2bc)
|
|
||||||
|
|
||||||
Stack trace of thread 3867:
|
|
||||||
#0 0x00007f89504adf32 n/a (libc.so.6 + 0x9ef32)
|
|
||||||
#1 0x00007f89504a239c n/a (libc.so.6 + 0x9339c)
|
|
||||||
#2 0x00007f89504a268c n/a (libc.so.6 + 0x9368c)
|
|
||||||
#3 0x00007f89504a5068 pthread_cond_timedwait (libc.so.6 + 0x96068)
|
|
||||||
#4 0x00007f8950d362a5 _ZN14QWaitCondition4waitEP6QMutex14QDeadlineTimer (libQt6Core.so.6 + 0x3362a5)
|
|
||||||
#5 0x00007f8950c91189 n/a (libQt6Core.so.6 + 0x291189)
|
|
||||||
#6 0x00007f8950d31c7a n/a (libQt6Core.so.6 + 0x331c7a)
|
|
||||||
#7 0x00007f89504a597a n/a (libc.so.6 + 0x9697a)
|
|
||||||
#8 0x00007f89505292bc n/a (libc.so.6 + 0x11a2bc)
|
|
||||||
|
|
||||||
Stack trace of thread 3897:
|
|
||||||
#0 0x00007f89504adf32 n/a (libc.so.6 + 0x9ef32)
|
|
||||||
#1 0x00007f89504a239c n/a (libc.so.6 + 0x9339c)
|
|
||||||
#2 0x00007f89504a268c n/a (libc.so.6 + 0x9368c)
|
|
||||||
#3 0x00007f89504a5068 pthread_cond_timedwait (libc.so.6 + 0x96068)
|
|
||||||
#4 0x00007f8950d362a5 _ZN14QWaitCondition4waitEP6QMutex14QDeadlineTimer (libQt6Core.so.6 + 0x3362a5)
|
|
||||||
#5 0x00007f8950c91189 n/a (libQt6Core.so.6 + 0x291189)
|
|
||||||
#6 0x00007f8950d31c7a n/a (libQt6Core.so.6 + 0x331c7a)
|
|
||||||
#7 0x00007f89504a597a n/a (libc.so.6 + 0x9697a)
|
|
||||||
#8 0x00007f89505292bc n/a (libc.so.6 + 0x11a2bc)
|
|
||||||
|
|
||||||
Stack trace of thread 3889:
|
|
||||||
#0 0x00007f89504adf32 n/a (libc.so.6 + 0x9ef32)
|
|
||||||
#1 0x00007f89504a239c n/a (libc.so.6 + 0x9339c)
|
|
||||||
#2 0x00007f89504a23e4 n/a (libc.so.6 + 0x933e4)
|
|
||||||
#3 0x00007f8950529595 epoll_wait (libc.so.6 + 0x11a595)
|
|
||||||
#4 0x00007f8938027d0a n/a (libspa-support.so + 0x1bd0a)
|
|
||||||
#5 0x00007f893801263c n/a (libspa-support.so + 0x663c)
|
|
||||||
#6 0x00007f8953a12401 n/a (libpipewire-0.3.so.0 + 0x8b401)
|
|
||||||
#7 0x00007f89504a597a n/a (libc.so.6 + 0x9697a)
|
|
||||||
#8 0x00007f89505292bc n/a (libc.so.6 + 0x11a2bc)
|
|
||||||
|
|
||||||
Stack trace of thread 3854:
|
|
||||||
#0 0x00007f89504adf32 n/a (libc.so.6 + 0x9ef32)
|
|
||||||
#1 0x00007f89504a239c n/a (libc.so.6 + 0x9339c)
|
|
||||||
#2 0x00007f89504a23e4 n/a (libc.so.6 + 0x933e4)
|
|
||||||
#3 0x00007f895051bdae __poll (libc.so.6 + 0x10cdae)
|
|
||||||
#4 0x00007f8953af3cf5 n/a (libQt6WaylandClient.so.6 + 0x6acf5)
|
|
||||||
#5 0x00007f8950d31c7a n/a (libQt6Core.so.6 + 0x331c7a)
|
|
||||||
#6 0x00007f89504a597a n/a (libc.so.6 + 0x9697a)
|
|
||||||
#7 0x00007f89505292bc n/a (libc.so.6 + 0x11a2bc)
|
|
||||||
|
|
||||||
Stack trace of thread 3898:
|
|
||||||
#0 0x00007f89504adf32 n/a (libc.so.6 + 0x9ef32)
|
|
||||||
#1 0x00007f89504a239c n/a (libc.so.6 + 0x9339c)
|
|
||||||
#2 0x00007f89504a268c n/a (libc.so.6 + 0x9368c)
|
|
||||||
#3 0x00007f89504a5068 pthread_cond_timedwait (libc.so.6 + 0x96068)
|
|
||||||
#4 0x00007f8950d362a5 _ZN14QWaitCondition4waitEP6QMutex14QDeadlineTimer (libQt6Core.so.6 + 0x3362a5)
|
|
||||||
#5 0x00007f8950c91189 n/a (libQt6Core.so.6 + 0x291189)
|
|
||||||
#6 0x00007f8950d31c7a n/a (libQt6Core.so.6 + 0x331c7a)
|
|
||||||
#7 0x00007f89504a597a n/a (libc.so.6 + 0x9697a)
|
|
||||||
#8 0x00007f89505292bc n/a (libc.so.6 + 0x11a2bc)
|
|
||||||
|
|
||||||
Stack trace of thread 3853:
|
|
||||||
#0 0x00007f89504adf32 n/a (libc.so.6 + 0x9ef32)
|
|
||||||
#1 0x00007f89504a239c n/a (libc.so.6 + 0x9339c)
|
|
||||||
#2 0x00007f89504a23e4 n/a (libc.so.6 + 0x933e4)
|
|
||||||
#3 0x00007f895051bdae __poll (libc.so.6 + 0x10cdae)
|
|
||||||
#4 0x00007f8953af3cf5 n/a (libQt6WaylandClient.so.6 + 0x6acf5)
|
|
||||||
#5 0x00007f8950d31c7a n/a (libQt6Core.so.6 + 0x331c7a)
|
|
||||||
#6 0x00007f89504a597a n/a (libc.so.6 + 0x9697a)
|
|
||||||
#7 0x00007f89505292bc n/a (libc.so.6 + 0x11a2bc)
|
|
||||||
|
|
||||||
Stack trace of thread 3900:
|
|
||||||
#0 0x00007f89504adf32 n/a (libc.so.6 + 0x9ef32)
|
|
||||||
#1 0x00007f89504a239c n/a (libc.so.6 + 0x9339c)
|
|
||||||
#2 0x00007f89504a268c n/a (libc.so.6 + 0x9368c)
|
|
||||||
#3 0x00007f89504a5068 pthread_cond_timedwait (libc.so.6 + 0x96068)
|
|
||||||
#4 0x00007f8950d362a5 _ZN14QWaitCondition4waitEP6QMutex14QDeadlineTimer (libQt6Core.so.6 + 0x3362a5)
|
|
||||||
#5 0x00007f8950c91189 n/a (libQt6Core.so.6 + 0x291189)
|
|
||||||
#6 0x00007f8950d31c7a n/a (libQt6Core.so.6 + 0x331c7a)
|
|
||||||
#7 0x00007f89504a597a n/a (libc.so.6 + 0x9697a)
|
|
||||||
#8 0x00007f89505292bc n/a (libc.so.6 + 0x11a2bc)
|
|
||||||
|
|
||||||
Stack trace of thread 3855:
|
|
||||||
#0 0x00007f89504adf32 n/a (libc.so.6 + 0x9ef32)
|
|
||||||
#1 0x00007f89504a239c n/a (libc.so.6 + 0x9339c)
|
|
||||||
#2 0x00007f89504a23e4 n/a (libc.so.6 + 0x933e4)
|
|
||||||
#3 0x00007f895051c2f6 ppoll (libc.so.6 + 0x10d2f6)
|
|
||||||
#4 0x00007f895361f744 n/a (libglib-2.0.so.0 + 0x60744)
|
|
||||||
#5 0x00007f895361f825 g_main_context_iteration (libglib-2.0.so.0 + 0x60825)
|
|
||||||
#6 0x00007f8950e4fcb2 _ZN20QEventDispatcherGlib13processEventsE6QFlagsIN10QEventLoop17ProcessEventsFlagEE (libQt6Core.so.6 + 0x44fcb2)
|
|
||||||
#7 0x00007f8950b76cf6 _ZN10QEventLoop4execE6QFlagsINS_17ProcessEventsFlagEE (libQt6Core.so.6 + 0x176cf6)
|
|
||||||
#8 0x00007f8950c9277e _ZN7QThread4execEv (libQt6Core.so.6 + 0x29277e)
|
|
||||||
#9 0x00007f8950d31c7a n/a (libQt6Core.so.6 + 0x331c7a)
|
|
||||||
#10 0x00007f89504a597a n/a (libc.so.6 + 0x9697a)
|
|
||||||
#11 0x00007f89505292bc n/a (libc.so.6 + 0x11a2bc)
|
|
||||||
|
|
||||||
Stack trace of thread 3899:
|
|
||||||
#0 0x00007f89504adf32 n/a (libc.so.6 + 0x9ef32)
|
|
||||||
#1 0x00007f89504a239c n/a (libc.so.6 + 0x9339c)
|
|
||||||
#2 0x00007f89504a268c n/a (libc.so.6 + 0x9368c)
|
|
||||||
#3 0x00007f89504a5068 pthread_cond_timedwait (libc.so.6 + 0x96068)
|
|
||||||
#4 0x00007f8950d362a5 _ZN14QWaitCondition4waitEP6QMutex14QDeadlineTimer (libQt6Core.so.6 + 0x3362a5)
|
|
||||||
#5 0x00007f8950c91189 n/a (libQt6Core.so.6 + 0x291189)
|
|
||||||
#6 0x00007f8950d31c7a n/a (libQt6Core.so.6 + 0x331c7a)
|
|
||||||
#7 0x00007f89504a597a n/a (libc.so.6 + 0x9697a)
|
|
||||||
#8 0x00007f89505292bc n/a (libc.so.6 + 0x11a2bc)
|
|
||||||
|
|
||||||
Stack trace of thread 3938:
|
|
||||||
#0 0x00007f89504adf32 n/a (libc.so.6 + 0x9ef32)
|
|
||||||
#1 0x00007f89504a239c n/a (libc.so.6 + 0x9339c)
|
|
||||||
#2 0x00007f89504a268c n/a (libc.so.6 + 0x9368c)
|
|
||||||
#3 0x00007f89504a5068 pthread_cond_timedwait (libc.so.6 + 0x96068)
|
|
||||||
#4 0x00007f8950d362a5 _ZN14QWaitCondition4waitEP6QMutex14QDeadlineTimer (libQt6Core.so.6 + 0x3362a5)
|
|
||||||
#5 0x00007f8950c91189 n/a (libQt6Core.so.6 + 0x291189)
|
|
||||||
#6 0x00007f8950d31c7a n/a (libQt6Core.so.6 + 0x331c7a)
|
|
||||||
#7 0x00007f89504a597a n/a (libc.so.6 + 0x9697a)
|
|
||||||
#8 0x00007f89505292bc n/a (libc.so.6 + 0x11a2bc)
|
|
||||||
|
|
||||||
Stack trace of thread 331554:
|
|
||||||
#0 0x00007f89504adf32 n/a (libc.so.6 + 0x9ef32)
|
|
||||||
#1 0x00007f89504a239c n/a (libc.so.6 + 0x9339c)
|
|
||||||
#2 0x00007f89504a268c n/a (libc.so.6 + 0x9368c)
|
|
||||||
#3 0x00007f89504a5068 pthread_cond_timedwait (libc.so.6 + 0x96068)
|
|
||||||
#4 0x00007f8950d362a5 _ZN14QWaitCondition4waitEP6QMutex14QDeadlineTimer (libQt6Core.so.6 + 0x3362a5)
|
|
||||||
#5 0x00007f8950c91189 n/a (libQt6Core.so.6 + 0x291189)
|
|
||||||
#6 0x00007f8950d31c7a n/a (libQt6Core.so.6 + 0x331c7a)
|
|
||||||
#7 0x00007f89504a597a n/a (libc.so.6 + 0x9697a)
|
|
||||||
#8 0x00007f89505292bc n/a (libc.so.6 + 0x11a2bc)
|
|
||||||
|
|
||||||
Stack trace of thread 4065:
|
|
||||||
#0 0x00007f89504adf32 n/a (libc.so.6 + 0x9ef32)
|
|
||||||
#1 0x00007f89504a239c n/a (libc.so.6 + 0x9339c)
|
|
||||||
#2 0x00007f89504a23e4 n/a (libc.so.6 + 0x933e4)
|
|
||||||
#3 0x00007f895051c2f6 ppoll (libc.so.6 + 0x10d2f6)
|
|
||||||
#4 0x00007f895361f744 n/a (libglib-2.0.so.0 + 0x60744)
|
|
||||||
#5 0x00007f895361f825 g_main_context_iteration (libglib-2.0.so.0 + 0x60825)
|
|
||||||
#6 0x00007f8950e4fcb2 _ZN20QEventDispatcherGlib13processEventsE6QFlagsIN10QEventLoop17ProcessEventsFlagEE (libQt6Core.so.6 + 0x44fcb2)
|
|
||||||
#7 0x00007f8950b76cf6 _ZN10QEventLoop4execE6QFlagsINS_17ProcessEventsFlagEE (libQt6Core.so.6 + 0x176cf6)
|
|
||||||
#8 0x00007f8950c9277e _ZN7QThread4execEv (libQt6Core.so.6 + 0x29277e)
|
|
||||||
#9 0x00007f89529a2fc2 n/a (libQt6Quick.so.6 + 0x3a2fc2)
|
|
||||||
#10 0x00007f8950d31c7a n/a (libQt6Core.so.6 + 0x331c7a)
|
|
||||||
#11 0x00007f89504a597a n/a (libc.so.6 + 0x9697a)
|
|
||||||
#12 0x00007f89505292bc n/a (libc.so.6 + 0x11a2bc)
|
|
||||||
|
|
||||||
Stack trace of thread 331555:
|
|
||||||
#0 0x00007f89504adf32 n/a (libc.so.6 + 0x9ef32)
|
|
||||||
#1 0x00007f89504a239c n/a (libc.so.6 + 0x9339c)
|
|
||||||
#2 0x00007f89504a268c n/a (libc.so.6 + 0x9368c)
|
|
||||||
#3 0x00007f89504a5068 pthread_cond_timedwait (libc.so.6 + 0x96068)
|
|
||||||
#4 0x00007f8950d362a5 _ZN14QWaitCondition4waitEP6QMutex14QDeadlineTimer (libQt6Core.so.6 + 0x3362a5)
|
|
||||||
#5 0x00007f8950c91189 n/a (libQt6Core.so.6 + 0x291189)
|
|
||||||
#6 0x00007f8950d31c7a n/a (libQt6Core.so.6 + 0x331c7a)
|
|
||||||
#7 0x00007f89504a597a n/a (libc.so.6 + 0x9697a)
|
|
||||||
#8 0x00007f89505292bc n/a (libc.so.6 + 0x11a2bc)
|
|
||||||
|
|
||||||
Stack trace of thread 331556:
|
|
||||||
#0 0x00007f89504adf32 n/a (libc.so.6 + 0x9ef32)
|
|
||||||
#1 0x00007f89504a239c n/a (libc.so.6 + 0x9339c)
|
|
||||||
#2 0x00007f89504a268c n/a (libc.so.6 + 0x9368c)
|
|
||||||
#3 0x00007f89504a5068 pthread_cond_timedwait (libc.so.6 + 0x96068)
|
|
||||||
#4 0x00007f8950d362a5 _ZN14QWaitCondition4waitEP6QMutex14QDeadlineTimer (libQt6Core.so.6 + 0x3362a5)
|
|
||||||
#5 0x00007f8950c91189 n/a (libQt6Core.so.6 + 0x291189)
|
|
||||||
#6 0x00007f8950d31c7a n/a (libQt6Core.so.6 + 0x331c7a)
|
|
||||||
#7 0x00007f89504a597a n/a (libc.so.6 + 0x9697a)
|
|
||||||
#8 0x00007f89505292bc n/a (libc.so.6 + 0x11a2bc)
|
|
||||||
|
|
||||||
Stack trace of thread 4119:
|
|
||||||
#0 0x00007f89504adf32 n/a (libc.so.6 + 0x9ef32)
|
|
||||||
#1 0x00007f89504a239c n/a (libc.so.6 + 0x9339c)
|
|
||||||
#2 0x00007f89504a23e4 n/a (libc.so.6 + 0x933e4)
|
|
||||||
#3 0x00007f895051c2f6 ppoll (libc.so.6 + 0x10d2f6)
|
|
||||||
#4 0x00007f895361f744 n/a (libglib-2.0.so.0 + 0x60744)
|
|
||||||
#5 0x00007f895361f825 g_main_context_iteration (libglib-2.0.so.0 + 0x60825)
|
|
||||||
#6 0x00007f8950e4fcb2 _ZN20QEventDispatcherGlib13processEventsE6QFlagsIN10QEventLoop17ProcessEventsFlagEE (libQt6Core.so.6 + 0x44fcb2)
|
|
||||||
#7 0x00007f8950b76cf6 _ZN10QEventLoop4execE6QFlagsINS_17ProcessEventsFlagEE (libQt6Core.so.6 + 0x176cf6)
|
|
||||||
#8 0x00007f8950c9277e _ZN7QThread4execEv (libQt6Core.so.6 + 0x29277e)
|
|
||||||
#9 0x00007f8950d31c7a n/a (libQt6Core.so.6 + 0x331c7a)
|
|
||||||
#10 0x00007f89504a597a n/a (libc.so.6 + 0x9697a)
|
|
||||||
#11 0x00007f89505292bc n/a (libc.so.6 + 0x11a2bc)
|
|
||||||
|
|
||||||
Stack trace of thread 4533:
|
|
||||||
#0 0x00007f89504adf32 n/a (libc.so.6 + 0x9ef32)
|
|
||||||
#1 0x00007f89504a239c n/a (libc.so.6 + 0x9339c)
|
|
||||||
#2 0x00007f89504a268c n/a (libc.so.6 + 0x9368c)
|
|
||||||
#3 0x00007f89504a5068 pthread_cond_timedwait (libc.so.6 + 0x96068)
|
|
||||||
#4 0x00007f8950d362a5 _ZN14QWaitCondition4waitEP6QMutex14QDeadlineTimer (libQt6Core.so.6 + 0x3362a5)
|
|
||||||
#5 0x00007f8950c91189 n/a (libQt6Core.so.6 + 0x291189)
|
|
||||||
#6 0x00007f8950d31c7a n/a (libQt6Core.so.6 + 0x331c7a)
|
|
||||||
#7 0x00007f89504a597a n/a (libc.so.6 + 0x9697a)
|
|
||||||
#8 0x00007f89505292bc n/a (libc.so.6 + 0x11a2bc)
|
|
||||||
ELF object binary architecture: AMD x86-64
|
|
||||||
|
|
||||||
Failed to invoke gdb: No such file or directory
|
|
||||||
Reference in New Issue
Block a user