Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions display1/exported_methods_auto.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

39 changes: 33 additions & 6 deletions display1/manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,6 @@ type Manager struct {
HasChanged bool
DisplayMode byte
ConcatScreenEnabled bool
ConcatScreenName string
// dbusutil-gen: equal=nil
Brightness map[string]float64
CanSetBrightnessMap map[string]bool
Expand Down Expand Up @@ -2369,7 +2368,7 @@ func (m *Manager) applyConcatScreen() error {
}

m.PropsMu.Lock()
m.setConcatScreenEnabled(true, concatScreenName)
m.setConcatScreenEnabled(true)
m.PropsMu.Unlock()
return nil
}
Expand All @@ -2385,17 +2384,15 @@ func (m *Manager) removeConcatScreen() error {
}

m.PropsMu.Lock()
m.setConcatScreenEnabled(false, "")
m.setConcatScreenEnabled(false)
m.PropsMu.Unlock()
return nil
}

func (m *Manager) setConcatScreenEnabled(enabled bool, name string) (changed bool) {
func (m *Manager) setConcatScreenEnabled(enabled bool) (changed bool) {
if m.ConcatScreenEnabled != enabled {
m.ConcatScreenEnabled = enabled
m.ConcatScreenName = name
_ = m.service.EmitPropertyChanged(m, "ConcatScreenEnabled", enabled)
_ = m.service.EmitPropertyChanged(m, "ConcatScreenName", name)
return true
}
return false
Expand Down Expand Up @@ -2567,6 +2564,36 @@ func (m *Manager) getConnectedMonitors() Monitors {
return getConnectedMonitors(m.monitorMap)
}

func (m *Manager) getEffectiveOutputNames() ([]string, error) {
if _useWayland {
return nil, errors.New("not supported on wayland")
}

if m.xConn == nil {
return nil, errors.New("x connection not available")
}

rootWindow := m.xConn.GetDefaultScreen().Root
cookie := randr.GetMonitors(m.xConn, rootWindow, true)
reply, err := cookie.Reply(m.xConn)
if err != nil {
return nil, fmt.Errorf("GetMonitors failed: %w", err)
}
var names []string
for i := range reply.Monitors {
atom := reply.Monitors[i].Name
if atom == 0 {
continue
}
name, err := m.xConn.GetAtomName(atom)
if err != nil || name == "" {
continue
}
names = append(names, name)
}
return names, nil
}

func (m *Manager) cloneMonitorMap() map[uint32]*Monitor {
m.monitorMapMu.Lock()
defer m.monitorMapMu.Unlock()
Expand Down
16 changes: 16 additions & 0 deletions display1/manager_ifc.go
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,22 @@ func (m *Manager) ListOutputNames() ([]string, *dbus.Error) {
return names, nil
}

// ListEffectiveOutputNames 返回当前所有有效显示器名
// X11 下使用 randr.GetMonitors 返回物理 + 虚拟屏
// Wayland 下复用 ListOutputNames 返回物理屏,
func (m *Manager) ListEffectiveOutputNames() ([]string, *dbus.Error) {
logger.Debug("dbus call ListEffectiveOutputNames")
if _useWayland {
return m.ListOutputNames()
}

names, err := m.getEffectiveOutputNames()
if err != nil {
return nil, dbusutil.ToError(err)
}
return names, nil
}

func (m *Manager) ListOutputsCommonModes() ([]ModeInfo, *dbus.Error) {
logger.Debug("dbus call ListOutputsCommonModes")
monitors := m.getConnectedMonitors()
Expand Down
Loading