func (p *PropertiesWatcher) FetchOnSignal(props ...string) *PropertiesWatcher {
	return p.addProperties(updateTypeFetchOnSignal, props)
}
FetchOnSignal specifies additional properties to fetch when the object emits
PropertiesChanged. This can be useful for tracking computed properties if
their value only changes when other properties also change.
These properties will be included in emitted PropertiesChange values.
package dbus
import (
	"errors"
	"sync"
	"github.com/godbus/dbus/v5"
)
type PropertiesChange map[string][2]interface{}
type Signal = dbus.Signal
type Fetcher func(string) (interface{}, error)
type PropertiesWatcher struct {
	Updates  <-chan PropertiesChange
	onChange chan<- PropertiesChange
	conn   dbusConn
	obj    dbus.BusObject
	dbusCh chan *Signal
	service string
	object  dbus.ObjectPath
	iface   string
	props   map[string]propertyUpdateType
	mu sync.RWMutex
	owner   string
	signals map[dbusName]func(*Signal, Fetcher) map[string]interface{}
	lastProps map[string]interface{}  
}
func (p *PropertiesWatcher) Get() map[string]interface{} {
	p.mu.RLock()
	defer p.mu.RUnlock()
	r := map[string]interface{}{}
	for k, v := range p.lastProps {
		r[k] = v
	}
	if p.owner == "" {
		return r
	}
	for prop, u := range p.props {
		if u&updateTypeManual == 0 {
			continue
		}
		if val, err := p.fetch(prop); err == nil {
			r[prop] = val
		}
	}
	return r
}
func (p *PropertiesWatcher) Add(props ...string) *PropertiesWatcher {
	return p.addProperties(updateTypeSignal, props)
}