1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-04-03 20:32:07 -04:00

core/screenshot: light cleanups

This commit is contained in:
bbedward
2026-02-20 11:16:53 -05:00
parent 8ad0cf8e5f
commit 61bd156fb0
2 changed files with 37 additions and 43 deletions

View File

@@ -71,32 +71,10 @@ func (m *Manager) initializeScreensaver() error {
handler := &screensaverHandler{manager: m}
// Try to claim org.freedesktop.ScreenSaver (may fail if the compositor
// or another process already owns this name).
if reply, err := m.sessionConn.RequestName(dbusScreensaverName, dbus.NameFlagDoNotQueue); err != nil {
log.Warnf("Failed to request screensaver name %s: %v", dbusScreensaverName, err)
} else if reply != dbus.RequestNameReplyPrimaryOwner {
log.Warnf("Screensaver name %s already owned by another process", dbusScreensaverName)
} else if err := m.exportScreensaverOnPaths(handler, dbusScreensaverInterface,
dbusScreensaverPath, dbusScreensaverPath2); err != nil {
log.Warnf("Failed to export freedesktop screensaver: %v", err)
} else {
m.screensaverFreedesktopClaimed = true
log.Infof("Claimed %s on session bus", dbusScreensaverName)
}
// Try to claim org.gnome.ScreenSaver independently as a fallback.
if reply, err := m.sessionConn.RequestName(dbusGnomeScreensaverName, dbus.NameFlagDoNotQueue); err != nil {
log.Warnf("Failed to request screensaver name %s: %v", dbusGnomeScreensaverName, err)
} else if reply != dbus.RequestNameReplyPrimaryOwner {
log.Warnf("Screensaver name %s already owned by another process", dbusGnomeScreensaverName)
} else if err := m.exportScreensaverOnPaths(handler, dbusGnomeScreensaverInterface,
dbusGnomeScreensaverPath); err != nil {
log.Warnf("Failed to export gnome screensaver: %v", err)
} else {
m.screensaverGnomeClaimed = true
log.Infof("Claimed %s on session bus", dbusGnomeScreensaverName)
}
m.screensaverFreedesktopClaimed = m.claimScreensaverName(handler,
dbusScreensaverName, dbusScreensaverInterface, dbusScreensaverPath, dbusScreensaverPath2)
m.screensaverGnomeClaimed = m.claimScreensaverName(handler,
dbusGnomeScreensaverName, dbusGnomeScreensaverInterface, dbusGnomeScreensaverPath)
if !m.screensaverFreedesktopClaimed && !m.screensaverGnomeClaimed {
log.Warn("No screensaver interface could be claimed")
@@ -119,6 +97,24 @@ func (m *Manager) initializeScreensaver() error {
return nil
}
func (m *Manager) claimScreensaverName(handler *screensaverHandler, name, iface string, paths ...dbus.ObjectPath) bool {
reply, err := m.sessionConn.RequestName(name, dbus.NameFlagDoNotQueue)
if err != nil {
log.Warnf("Failed to request screensaver name %s: %v", name, err)
return false
}
if reply != dbus.RequestNameReplyPrimaryOwner {
log.Warnf("Screensaver name %s already owned by another process", name)
return false
}
if err := m.exportScreensaverOnPaths(handler, iface, paths...); err != nil {
log.Warnf("Failed to export screensaver on %s: %v", name, err)
return false
}
log.Infof("Claimed %s on session bus", name)
return true
}
// exportScreensaverOnPaths exports the handler and introspection on the given
// paths under the specified interface name.
func (m *Manager) exportScreensaverOnPaths(handler *screensaverHandler, ifaceName string, paths ...dbus.ObjectPath) error {
@@ -321,8 +317,6 @@ func (h *screensaverHandler) Lock() *dbus.Error {
return nil
}
// SetScreenLockActive updates the screensaver active (locked) state and emits
// ActiveChanged on all claimed session bus interfaces.
func (m *Manager) SetScreenLockActive(active bool) {
m.stateMutex.Lock()
changed := m.state.Screensaver.Active != active
@@ -334,22 +328,22 @@ func (m *Manager) SetScreenLockActive(active bool) {
}
log.Infof("Screen lock active changed: %v", active)
defer m.NotifyScreensaverSubscribers()
if m.sessionConn != nil {
if m.screensaverFreedesktopClaimed {
if err := m.sessionConn.Emit(dbusScreensaverPath, dbusScreensaverInterface+".ActiveChanged", active); err != nil {
log.Warnf("Failed to emit ActiveChanged on %s: %v", dbusScreensaverPath, err)
}
if err := m.sessionConn.Emit(dbusScreensaverPath2, dbusScreensaverInterface+".ActiveChanged", active); err != nil {
log.Warnf("Failed to emit ActiveChanged on %s: %v", dbusScreensaverPath2, err)
}
if m.sessionConn == nil {
return
}
if m.screensaverFreedesktopClaimed {
if err := m.sessionConn.Emit(dbusScreensaverPath, dbusScreensaverInterface+".ActiveChanged", active); err != nil {
log.Warnf("Failed to emit ActiveChanged on %s: %v", dbusScreensaverPath, err)
}
if m.screensaverGnomeClaimed {
if err := m.sessionConn.Emit(dbusGnomeScreensaverPath, dbusGnomeScreensaverInterface+".ActiveChanged", active); err != nil {
log.Warnf("Failed to emit ActiveChanged on %s: %v", dbusGnomeScreensaverPath, err)
}
if err := m.sessionConn.Emit(dbusScreensaverPath2, dbusScreensaverInterface+".ActiveChanged", active); err != nil {
log.Warnf("Failed to emit ActiveChanged on %s: %v", dbusScreensaverPath2, err)
}
}
if m.screensaverGnomeClaimed {
if err := m.sessionConn.Emit(dbusGnomeScreensaverPath, dbusGnomeScreensaverInterface+".ActiveChanged", active); err != nil {
log.Warnf("Failed to emit ActiveChanged on %s: %v", dbusGnomeScreensaverPath, err)
}
}
m.NotifyScreensaverSubscribers()
}

View File

@@ -162,7 +162,7 @@ func TestCleanupStaleSockets(t *testing.T) {
tempDir := t.TempDir()
t.Setenv("XDG_RUNTIME_DIR", tempDir)
staleSocket := filepath.Join(tempDir, "danklinux-999999.sock")
staleSocket := filepath.Join(tempDir, "danklinux-4194305.sock")
err := os.WriteFile(staleSocket, []byte{}, 0o600)
require.NoError(t, err)