mirror of
https://github.com/wailsapp/wails.git
synced 2025-05-06 23:14:25 +08:00

* [v3 linux/systray] dbus generation * [v3 linux] systemtray dbus implementation * [v3] add 'id' for MenuSeparator This is needed in order to have a unique value for all menuItem(s) such that the Linux implementation doesn't have to generate new identifiers. Allowing the reuse keeps a 1-1 mapping in place without any extra effort. * [v3 example/systray] add radio group to example * [v3 linux] stub out ExportStatusNotifierItem callbacks Can only seem to get the `SecondaryActivate` to fire when doing a 3-finger click! I was expecting a right-click interaction to trigger it.
484 lines
16 KiB
Go
484 lines
16 KiB
Go
// Code generated by dbus-codegen-go DO NOT EDIT.
|
|
package menu
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
"github.com/godbus/dbus/v5"
|
|
"github.com/godbus/dbus/v5/introspect"
|
|
)
|
|
|
|
var (
|
|
// Introspection for com.canonical.dbusmenu
|
|
IntrospectDataDbusmenu = introspect.Interface{
|
|
Name: "com.canonical.dbusmenu",
|
|
Methods: []introspect.Method{{Name: "GetLayout", Args: []introspect.Arg{
|
|
{Name: "parentId", Type: "i", Direction: "in"},
|
|
{Name: "recursionDepth", Type: "i", Direction: "in"},
|
|
{Name: "propertyNames", Type: "as", Direction: "in"},
|
|
{Name: "revision", Type: "u", Direction: "out"},
|
|
{Name: "layout", Type: "(ia{sv}av)", Direction: "out"},
|
|
}},
|
|
{Name: "GetGroupProperties", Args: []introspect.Arg{
|
|
{Name: "ids", Type: "ai", Direction: "in"},
|
|
{Name: "propertyNames", Type: "as", Direction: "in"},
|
|
{Name: "properties", Type: "a(ia{sv})", Direction: "out"},
|
|
}},
|
|
{Name: "GetProperty", Args: []introspect.Arg{
|
|
{Name: "id", Type: "i", Direction: "in"},
|
|
{Name: "name", Type: "s", Direction: "in"},
|
|
{Name: "value", Type: "v", Direction: "out"},
|
|
}},
|
|
{Name: "Event", Args: []introspect.Arg{
|
|
{Name: "id", Type: "i", Direction: "in"},
|
|
{Name: "eventId", Type: "s", Direction: "in"},
|
|
{Name: "data", Type: "v", Direction: "in"},
|
|
{Name: "timestamp", Type: "u", Direction: "in"},
|
|
}},
|
|
{Name: "EventGroup", Args: []introspect.Arg{
|
|
{Name: "events", Type: "a(isvu)", Direction: "in"},
|
|
{Name: "idErrors", Type: "ai", Direction: "out"},
|
|
}},
|
|
{Name: "AboutToShow", Args: []introspect.Arg{
|
|
{Name: "id", Type: "i", Direction: "in"},
|
|
{Name: "needUpdate", Type: "b", Direction: "out"},
|
|
}},
|
|
{Name: "AboutToShowGroup", Args: []introspect.Arg{
|
|
{Name: "ids", Type: "ai", Direction: "in"},
|
|
{Name: "updatesNeeded", Type: "ai", Direction: "out"},
|
|
{Name: "idErrors", Type: "ai", Direction: "out"},
|
|
}},
|
|
},
|
|
Signals: []introspect.Signal{{Name: "ItemsPropertiesUpdated", Args: []introspect.Arg{
|
|
{Name: "updatedProps", Type: "a(ia{sv})", Direction: "out"},
|
|
{Name: "removedProps", Type: "a(ias)", Direction: "out"},
|
|
}},
|
|
{Name: "LayoutUpdated", Args: []introspect.Arg{
|
|
{Name: "revision", Type: "u", Direction: "out"},
|
|
{Name: "parent", Type: "i", Direction: "out"},
|
|
}},
|
|
{Name: "ItemActivationRequested", Args: []introspect.Arg{
|
|
{Name: "id", Type: "i", Direction: "out"},
|
|
{Name: "timestamp", Type: "u", Direction: "out"},
|
|
}},
|
|
},
|
|
Properties: []introspect.Property{{Name: "Version", Type: "u", Access: "read"},
|
|
{Name: "TextDirection", Type: "s", Access: "read"},
|
|
{Name: "Status", Type: "s", Access: "read"},
|
|
{Name: "IconThemePath", Type: "as", Access: "read"},
|
|
},
|
|
Annotations: []introspect.Annotation{},
|
|
}
|
|
)
|
|
|
|
// Signal is a common interface for all signals.
|
|
type Signal interface {
|
|
Name() string
|
|
Interface() string
|
|
Sender() string
|
|
|
|
path() dbus.ObjectPath
|
|
values() []interface{}
|
|
}
|
|
|
|
// Emit sends the given signal to the bus.
|
|
func Emit(conn *dbus.Conn, s Signal) error {
|
|
return conn.Emit(s.path(), s.Interface()+"."+s.Name(), s.values()...)
|
|
}
|
|
|
|
// ErrUnknownSignal is returned by LookupSignal when a signal cannot be resolved.
|
|
var ErrUnknownSignal = errors.New("unknown signal")
|
|
|
|
// LookupSignal converts the given raw D-Bus signal with variable body
|
|
// into one with typed structured body or returns ErrUnknownSignal error.
|
|
func LookupSignal(signal *dbus.Signal) (Signal, error) {
|
|
switch signal.Name {
|
|
case InterfaceDbusmenu + "." + "ItemsPropertiesUpdated":
|
|
v0, ok := signal.Body[0].([]struct {
|
|
V0 int32
|
|
V1 map[string]dbus.Variant
|
|
})
|
|
if !ok {
|
|
return nil, fmt.Errorf("prop .UpdatedProps is %T, not []struct {V0 int32;V1 map[string]dbus.Variant}", signal.Body[0])
|
|
}
|
|
v1, ok := signal.Body[1].([]struct {
|
|
V0 int32
|
|
V1 []string
|
|
})
|
|
if !ok {
|
|
return nil, fmt.Errorf("prop .RemovedProps is %T, not []struct {V0 int32;V1 []string}", signal.Body[1])
|
|
}
|
|
return &Dbusmenu_ItemsPropertiesUpdatedSignal{
|
|
sender: signal.Sender,
|
|
Path: signal.Path,
|
|
Body: &Dbusmenu_ItemsPropertiesUpdatedSignalBody{
|
|
UpdatedProps: v0,
|
|
RemovedProps: v1,
|
|
},
|
|
}, nil
|
|
case InterfaceDbusmenu + "." + "LayoutUpdated":
|
|
v0, ok := signal.Body[0].(uint32)
|
|
if !ok {
|
|
return nil, fmt.Errorf("prop .Revision is %T, not uint32", signal.Body[0])
|
|
}
|
|
v1, ok := signal.Body[1].(int32)
|
|
if !ok {
|
|
return nil, fmt.Errorf("prop .Parent is %T, not int32", signal.Body[1])
|
|
}
|
|
return &Dbusmenu_LayoutUpdatedSignal{
|
|
sender: signal.Sender,
|
|
Path: signal.Path,
|
|
Body: &Dbusmenu_LayoutUpdatedSignalBody{
|
|
Revision: v0,
|
|
Parent: v1,
|
|
},
|
|
}, nil
|
|
case InterfaceDbusmenu + "." + "ItemActivationRequested":
|
|
v0, ok := signal.Body[0].(int32)
|
|
if !ok {
|
|
return nil, fmt.Errorf("prop .Id is %T, not int32", signal.Body[0])
|
|
}
|
|
v1, ok := signal.Body[1].(uint32)
|
|
if !ok {
|
|
return nil, fmt.Errorf("prop .Timestamp is %T, not uint32", signal.Body[1])
|
|
}
|
|
return &Dbusmenu_ItemActivationRequestedSignal{
|
|
sender: signal.Sender,
|
|
Path: signal.Path,
|
|
Body: &Dbusmenu_ItemActivationRequestedSignalBody{
|
|
Id: v0,
|
|
Timestamp: v1,
|
|
},
|
|
}, nil
|
|
default:
|
|
return nil, ErrUnknownSignal
|
|
}
|
|
}
|
|
|
|
// AddMatchSignal registers a match rule for the given signal,
|
|
// opts are appended to the automatically generated signal's rules.
|
|
func AddMatchSignal(conn *dbus.Conn, s Signal, opts ...dbus.MatchOption) error {
|
|
return conn.AddMatchSignal(append([]dbus.MatchOption{
|
|
dbus.WithMatchInterface(s.Interface()),
|
|
dbus.WithMatchMember(s.Name()),
|
|
}, opts...)...)
|
|
}
|
|
|
|
// RemoveMatchSignal unregisters the previously registered subscription.
|
|
func RemoveMatchSignal(conn *dbus.Conn, s Signal, opts ...dbus.MatchOption) error {
|
|
return conn.RemoveMatchSignal(append([]dbus.MatchOption{
|
|
dbus.WithMatchInterface(s.Interface()),
|
|
dbus.WithMatchMember(s.Name()),
|
|
}, opts...)...)
|
|
}
|
|
|
|
// Interface name constants.
|
|
const (
|
|
InterfaceDbusmenu = "com.canonical.dbusmenu"
|
|
)
|
|
|
|
// Dbusmenuer is com.canonical.dbusmenu interface.
|
|
type Dbusmenuer interface {
|
|
// GetLayout is com.canonical.dbusmenu.GetLayout method.
|
|
GetLayout(parentId int32, recursionDepth int32, propertyNames []string) (revision uint32, layout struct {
|
|
V0 int32
|
|
V1 map[string]dbus.Variant
|
|
V2 []dbus.Variant
|
|
}, err *dbus.Error)
|
|
// GetGroupProperties is com.canonical.dbusmenu.GetGroupProperties method.
|
|
GetGroupProperties(ids []int32, propertyNames []string) (properties []struct {
|
|
V0 int32
|
|
V1 map[string]dbus.Variant
|
|
}, err *dbus.Error)
|
|
// GetProperty is com.canonical.dbusmenu.GetProperty method.
|
|
GetProperty(id int32, name string) (value dbus.Variant, err *dbus.Error)
|
|
// Event is com.canonical.dbusmenu.Event method.
|
|
Event(id int32, eventId string, data dbus.Variant, timestamp uint32) (err *dbus.Error)
|
|
// EventGroup is com.canonical.dbusmenu.EventGroup method.
|
|
EventGroup(events []struct {
|
|
V0 int32
|
|
V1 string
|
|
V2 dbus.Variant
|
|
V3 uint32
|
|
}) (idErrors []int32, err *dbus.Error)
|
|
// AboutToShow is com.canonical.dbusmenu.AboutToShow method.
|
|
AboutToShow(id int32) (needUpdate bool, err *dbus.Error)
|
|
// AboutToShowGroup is com.canonical.dbusmenu.AboutToShowGroup method.
|
|
AboutToShowGroup(ids []int32) (updatesNeeded []int32, idErrors []int32, err *dbus.Error)
|
|
}
|
|
|
|
// ExportDbusmenu exports the given object that implements com.canonical.dbusmenu on the bus.
|
|
func ExportDbusmenu(conn *dbus.Conn, path dbus.ObjectPath, v Dbusmenuer) error {
|
|
return conn.ExportSubtreeMethodTable(map[string]interface{}{
|
|
"GetLayout": v.GetLayout,
|
|
"GetGroupProperties": v.GetGroupProperties,
|
|
"GetProperty": v.GetProperty,
|
|
"Event": v.Event,
|
|
"EventGroup": v.EventGroup,
|
|
"AboutToShow": v.AboutToShow,
|
|
"AboutToShowGroup": v.AboutToShowGroup,
|
|
}, path, InterfaceDbusmenu)
|
|
}
|
|
|
|
// UnexportDbusmenu unexports com.canonical.dbusmenu interface on the named path.
|
|
func UnexportDbusmenu(conn *dbus.Conn, path dbus.ObjectPath) error {
|
|
return conn.Export(nil, path, InterfaceDbusmenu)
|
|
}
|
|
|
|
// UnimplementedDbusmenu can be embedded to have forward compatible server implementations.
|
|
type UnimplementedDbusmenu struct{}
|
|
|
|
func (*UnimplementedDbusmenu) iface() string {
|
|
return InterfaceDbusmenu
|
|
}
|
|
|
|
func (*UnimplementedDbusmenu) GetLayout(parentId int32, recursionDepth int32, propertyNames []string) (revision uint32, layout struct {
|
|
V0 int32
|
|
V1 map[string]dbus.Variant
|
|
V2 []dbus.Variant
|
|
}, err *dbus.Error) {
|
|
err = &dbus.ErrMsgUnknownMethod
|
|
return
|
|
}
|
|
|
|
func (*UnimplementedDbusmenu) GetGroupProperties(ids []int32, propertyNames []string) (properties []struct {
|
|
V0 int32
|
|
V1 map[string]dbus.Variant
|
|
}, err *dbus.Error) {
|
|
err = &dbus.ErrMsgUnknownMethod
|
|
return
|
|
}
|
|
|
|
func (*UnimplementedDbusmenu) GetProperty(id int32, name string) (value dbus.Variant, err *dbus.Error) {
|
|
err = &dbus.ErrMsgUnknownMethod
|
|
return
|
|
}
|
|
|
|
func (*UnimplementedDbusmenu) Event(id int32, eventId string, data dbus.Variant, timestamp uint32) (err *dbus.Error) {
|
|
err = &dbus.ErrMsgUnknownMethod
|
|
return
|
|
}
|
|
|
|
func (*UnimplementedDbusmenu) EventGroup(events []struct {
|
|
V0 int32
|
|
V1 string
|
|
V2 dbus.Variant
|
|
V3 uint32
|
|
}) (idErrors []int32, err *dbus.Error) {
|
|
err = &dbus.ErrMsgUnknownMethod
|
|
return
|
|
}
|
|
|
|
func (*UnimplementedDbusmenu) AboutToShow(id int32) (needUpdate bool, err *dbus.Error) {
|
|
err = &dbus.ErrMsgUnknownMethod
|
|
return
|
|
}
|
|
|
|
func (*UnimplementedDbusmenu) AboutToShowGroup(ids []int32) (updatesNeeded []int32, idErrors []int32, err *dbus.Error) {
|
|
err = &dbus.ErrMsgUnknownMethod
|
|
return
|
|
}
|
|
|
|
// NewDbusmenu creates and allocates com.canonical.dbusmenu.
|
|
func NewDbusmenu(object dbus.BusObject) *Dbusmenu {
|
|
return &Dbusmenu{object}
|
|
}
|
|
|
|
// Dbusmenu implements com.canonical.dbusmenu D-Bus interface.
|
|
type Dbusmenu struct {
|
|
object dbus.BusObject
|
|
}
|
|
|
|
// GetLayout calls com.canonical.dbusmenu.GetLayout method.
|
|
func (o *Dbusmenu) GetLayout(ctx context.Context, parentId int32, recursionDepth int32, propertyNames []string) (revision uint32, layout struct {
|
|
V0 int32
|
|
V1 map[string]dbus.Variant
|
|
V2 []dbus.Variant
|
|
}, err error) {
|
|
err = o.object.CallWithContext(ctx, InterfaceDbusmenu+".GetLayout", 0, parentId, recursionDepth, propertyNames).Store(&revision, &layout)
|
|
return
|
|
}
|
|
|
|
// GetGroupProperties calls com.canonical.dbusmenu.GetGroupProperties method.
|
|
func (o *Dbusmenu) GetGroupProperties(ctx context.Context, ids []int32, propertyNames []string) (properties []struct {
|
|
V0 int32
|
|
V1 map[string]dbus.Variant
|
|
}, err error) {
|
|
err = o.object.CallWithContext(ctx, InterfaceDbusmenu+".GetGroupProperties", 0, ids, propertyNames).Store(&properties)
|
|
return
|
|
}
|
|
|
|
// GetProperty calls com.canonical.dbusmenu.GetProperty method.
|
|
func (o *Dbusmenu) GetProperty(ctx context.Context, id int32, name string) (value dbus.Variant, err error) {
|
|
err = o.object.CallWithContext(ctx, InterfaceDbusmenu+".GetProperty", 0, id, name).Store(&value)
|
|
return
|
|
}
|
|
|
|
// Event calls com.canonical.dbusmenu.Event method.
|
|
func (o *Dbusmenu) Event(ctx context.Context, id int32, eventId string, data dbus.Variant, timestamp uint32) (err error) {
|
|
err = o.object.CallWithContext(ctx, InterfaceDbusmenu+".Event", 0, id, eventId, data, timestamp).Store()
|
|
return
|
|
}
|
|
|
|
// EventGroup calls com.canonical.dbusmenu.EventGroup method.
|
|
func (o *Dbusmenu) EventGroup(ctx context.Context, events []struct {
|
|
V0 int32
|
|
V1 string
|
|
V2 dbus.Variant
|
|
V3 uint32
|
|
}) (idErrors []int32, err error) {
|
|
err = o.object.CallWithContext(ctx, InterfaceDbusmenu+".EventGroup", 0, events).Store(&idErrors)
|
|
return
|
|
}
|
|
|
|
// AboutToShow calls com.canonical.dbusmenu.AboutToShow method.
|
|
func (o *Dbusmenu) AboutToShow(ctx context.Context, id int32) (needUpdate bool, err error) {
|
|
err = o.object.CallWithContext(ctx, InterfaceDbusmenu+".AboutToShow", 0, id).Store(&needUpdate)
|
|
return
|
|
}
|
|
|
|
// AboutToShowGroup calls com.canonical.dbusmenu.AboutToShowGroup method.
|
|
func (o *Dbusmenu) AboutToShowGroup(ctx context.Context, ids []int32) (updatesNeeded []int32, idErrors []int32, err error) {
|
|
err = o.object.CallWithContext(ctx, InterfaceDbusmenu+".AboutToShowGroup", 0, ids).Store(&updatesNeeded, &idErrors)
|
|
return
|
|
}
|
|
|
|
// GetVersion gets com.canonical.dbusmenu.Version property.
|
|
func (o *Dbusmenu) GetVersion(ctx context.Context) (version uint32, err error) {
|
|
err = o.object.CallWithContext(ctx, "org.freedesktop.DBus.Properties.Get", 0, InterfaceDbusmenu, "Version").Store(&version)
|
|
return
|
|
}
|
|
|
|
// GetTextDirection gets com.canonical.dbusmenu.TextDirection property.
|
|
func (o *Dbusmenu) GetTextDirection(ctx context.Context) (textDirection string, err error) {
|
|
err = o.object.CallWithContext(ctx, "org.freedesktop.DBus.Properties.Get", 0, InterfaceDbusmenu, "TextDirection").Store(&textDirection)
|
|
return
|
|
}
|
|
|
|
// GetStatus gets com.canonical.dbusmenu.Status property.
|
|
func (o *Dbusmenu) GetStatus(ctx context.Context) (status string, err error) {
|
|
err = o.object.CallWithContext(ctx, "org.freedesktop.DBus.Properties.Get", 0, InterfaceDbusmenu, "Status").Store(&status)
|
|
return
|
|
}
|
|
|
|
// GetIconThemePath gets com.canonical.dbusmenu.IconThemePath property.
|
|
func (o *Dbusmenu) GetIconThemePath(ctx context.Context) (iconThemePath []string, err error) {
|
|
err = o.object.CallWithContext(ctx, "org.freedesktop.DBus.Properties.Get", 0, InterfaceDbusmenu, "IconThemePath").Store(&iconThemePath)
|
|
return
|
|
}
|
|
|
|
// Dbusmenu_ItemsPropertiesUpdatedSignal represents com.canonical.dbusmenu.ItemsPropertiesUpdated signal.
|
|
type Dbusmenu_ItemsPropertiesUpdatedSignal struct {
|
|
sender string
|
|
Path dbus.ObjectPath
|
|
Body *Dbusmenu_ItemsPropertiesUpdatedSignalBody
|
|
}
|
|
|
|
// Name returns the signal's name.
|
|
func (s *Dbusmenu_ItemsPropertiesUpdatedSignal) Name() string {
|
|
return "ItemsPropertiesUpdated"
|
|
}
|
|
|
|
// Interface returns the signal's interface.
|
|
func (s *Dbusmenu_ItemsPropertiesUpdatedSignal) Interface() string {
|
|
return InterfaceDbusmenu
|
|
}
|
|
|
|
// Sender returns the signal's sender unique name.
|
|
func (s *Dbusmenu_ItemsPropertiesUpdatedSignal) Sender() string {
|
|
return s.sender
|
|
}
|
|
|
|
func (s *Dbusmenu_ItemsPropertiesUpdatedSignal) path() dbus.ObjectPath {
|
|
return s.Path
|
|
}
|
|
|
|
func (s *Dbusmenu_ItemsPropertiesUpdatedSignal) values() []interface{} {
|
|
return []interface{}{s.Body.UpdatedProps, s.Body.RemovedProps}
|
|
}
|
|
|
|
// Dbusmenu_ItemsPropertiesUpdatedSignalBody is body container.
|
|
type Dbusmenu_ItemsPropertiesUpdatedSignalBody struct {
|
|
UpdatedProps []struct {
|
|
V0 int32
|
|
V1 map[string]dbus.Variant
|
|
}
|
|
RemovedProps []struct {
|
|
V0 int32
|
|
V1 []string
|
|
}
|
|
}
|
|
|
|
// Dbusmenu_LayoutUpdatedSignal represents com.canonical.dbusmenu.LayoutUpdated signal.
|
|
type Dbusmenu_LayoutUpdatedSignal struct {
|
|
sender string
|
|
Path dbus.ObjectPath
|
|
Body *Dbusmenu_LayoutUpdatedSignalBody
|
|
}
|
|
|
|
// Name returns the signal's name.
|
|
func (s *Dbusmenu_LayoutUpdatedSignal) Name() string {
|
|
return "LayoutUpdated"
|
|
}
|
|
|
|
// Interface returns the signal's interface.
|
|
func (s *Dbusmenu_LayoutUpdatedSignal) Interface() string {
|
|
return InterfaceDbusmenu
|
|
}
|
|
|
|
// Sender returns the signal's sender unique name.
|
|
func (s *Dbusmenu_LayoutUpdatedSignal) Sender() string {
|
|
return s.sender
|
|
}
|
|
|
|
func (s *Dbusmenu_LayoutUpdatedSignal) path() dbus.ObjectPath {
|
|
return s.Path
|
|
}
|
|
|
|
func (s *Dbusmenu_LayoutUpdatedSignal) values() []interface{} {
|
|
return []interface{}{s.Body.Revision, s.Body.Parent}
|
|
}
|
|
|
|
// Dbusmenu_LayoutUpdatedSignalBody is body container.
|
|
type Dbusmenu_LayoutUpdatedSignalBody struct {
|
|
Revision uint32
|
|
Parent int32
|
|
}
|
|
|
|
// Dbusmenu_ItemActivationRequestedSignal represents com.canonical.dbusmenu.ItemActivationRequested signal.
|
|
type Dbusmenu_ItemActivationRequestedSignal struct {
|
|
sender string
|
|
Path dbus.ObjectPath
|
|
Body *Dbusmenu_ItemActivationRequestedSignalBody
|
|
}
|
|
|
|
// Name returns the signal's name.
|
|
func (s *Dbusmenu_ItemActivationRequestedSignal) Name() string {
|
|
return "ItemActivationRequested"
|
|
}
|
|
|
|
// Interface returns the signal's interface.
|
|
func (s *Dbusmenu_ItemActivationRequestedSignal) Interface() string {
|
|
return InterfaceDbusmenu
|
|
}
|
|
|
|
// Sender returns the signal's sender unique name.
|
|
func (s *Dbusmenu_ItemActivationRequestedSignal) Sender() string {
|
|
return s.sender
|
|
}
|
|
|
|
func (s *Dbusmenu_ItemActivationRequestedSignal) path() dbus.ObjectPath {
|
|
return s.Path
|
|
}
|
|
|
|
func (s *Dbusmenu_ItemActivationRequestedSignal) values() []interface{} {
|
|
return []interface{}{s.Body.Id, s.Body.Timestamp}
|
|
}
|
|
|
|
// Dbusmenu_ItemActivationRequestedSignalBody is body container.
|
|
type Dbusmenu_ItemActivationRequestedSignalBody struct {
|
|
Id int32
|
|
Timestamp uint32
|
|
}
|