mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-01-31 08:52:49 -05:00
dwl/mango: support keyboard layout
This commit is contained in:
@@ -157,6 +157,16 @@ type ZdwlIpcOutputV2 struct {
|
|||||||
appidHandler ZdwlIpcOutputV2AppidHandlerFunc
|
appidHandler ZdwlIpcOutputV2AppidHandlerFunc
|
||||||
layoutSymbolHandler ZdwlIpcOutputV2LayoutSymbolHandlerFunc
|
layoutSymbolHandler ZdwlIpcOutputV2LayoutSymbolHandlerFunc
|
||||||
frameHandler ZdwlIpcOutputV2FrameHandlerFunc
|
frameHandler ZdwlIpcOutputV2FrameHandlerFunc
|
||||||
|
fullscreenHandler ZdwlIpcOutputV2FullscreenHandlerFunc
|
||||||
|
floatingHandler ZdwlIpcOutputV2FloatingHandlerFunc
|
||||||
|
xHandler ZdwlIpcOutputV2XHandlerFunc
|
||||||
|
yHandler ZdwlIpcOutputV2YHandlerFunc
|
||||||
|
widthHandler ZdwlIpcOutputV2WidthHandlerFunc
|
||||||
|
heightHandler ZdwlIpcOutputV2HeightHandlerFunc
|
||||||
|
lastLayerHandler ZdwlIpcOutputV2LastLayerHandlerFunc
|
||||||
|
kbLayoutHandler ZdwlIpcOutputV2KbLayoutHandlerFunc
|
||||||
|
keymodeHandler ZdwlIpcOutputV2KeymodeHandlerFunc
|
||||||
|
scalefactorHandler ZdwlIpcOutputV2ScalefactorHandlerFunc
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewZdwlIpcOutputV2 : control dwl output
|
// NewZdwlIpcOutputV2 : control dwl output
|
||||||
@@ -251,6 +261,60 @@ func (i *ZdwlIpcOutputV2) SetLayout(index uint32) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Quit : Quit mango
|
||||||
|
// This request allows clients to instruct the compositor to quit mango.
|
||||||
|
func (i *ZdwlIpcOutputV2) Quit() error {
|
||||||
|
const opcode = 4
|
||||||
|
const _reqBufLen = 8
|
||||||
|
var _reqBuf [_reqBufLen]byte
|
||||||
|
l := 0
|
||||||
|
client.PutUint32(_reqBuf[l:4], i.ID())
|
||||||
|
l += 4
|
||||||
|
client.PutUint32(_reqBuf[l:l+4], uint32(_reqBufLen<<16|opcode&0x0000ffff))
|
||||||
|
l += 4
|
||||||
|
err := i.Context().WriteMsg(_reqBuf[:], nil)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// SendDispatch : Set the active tags of this output
|
||||||
|
//
|
||||||
|
// dispatch: dispatch name.
|
||||||
|
// arg1: arg1.
|
||||||
|
// arg2: arg2.
|
||||||
|
// arg3: arg3.
|
||||||
|
// arg4: arg4.
|
||||||
|
// arg5: arg5.
|
||||||
|
func (i *ZdwlIpcOutputV2) SendDispatch(dispatch, arg1, arg2, arg3, arg4, arg5 string) error {
|
||||||
|
const opcode = 5
|
||||||
|
dispatchLen := client.PaddedLen(len(dispatch) + 1)
|
||||||
|
arg1Len := client.PaddedLen(len(arg1) + 1)
|
||||||
|
arg2Len := client.PaddedLen(len(arg2) + 1)
|
||||||
|
arg3Len := client.PaddedLen(len(arg3) + 1)
|
||||||
|
arg4Len := client.PaddedLen(len(arg4) + 1)
|
||||||
|
arg5Len := client.PaddedLen(len(arg5) + 1)
|
||||||
|
_reqBufLen := 8 + (4 + dispatchLen) + (4 + arg1Len) + (4 + arg2Len) + (4 + arg3Len) + (4 + arg4Len) + (4 + arg5Len)
|
||||||
|
_reqBuf := make([]byte, _reqBufLen)
|
||||||
|
l := 0
|
||||||
|
client.PutUint32(_reqBuf[l:4], i.ID())
|
||||||
|
l += 4
|
||||||
|
client.PutUint32(_reqBuf[l:l+4], uint32(_reqBufLen<<16|opcode&0x0000ffff))
|
||||||
|
l += 4
|
||||||
|
client.PutString(_reqBuf[l:l+(4+dispatchLen)], dispatch)
|
||||||
|
l += (4 + dispatchLen)
|
||||||
|
client.PutString(_reqBuf[l:l+(4+arg1Len)], arg1)
|
||||||
|
l += (4 + arg1Len)
|
||||||
|
client.PutString(_reqBuf[l:l+(4+arg2Len)], arg2)
|
||||||
|
l += (4 + arg2Len)
|
||||||
|
client.PutString(_reqBuf[l:l+(4+arg3Len)], arg3)
|
||||||
|
l += (4 + arg3Len)
|
||||||
|
client.PutString(_reqBuf[l:l+(4+arg4Len)], arg4)
|
||||||
|
l += (4 + arg4Len)
|
||||||
|
client.PutString(_reqBuf[l:l+(4+arg5Len)], arg5)
|
||||||
|
l += (4 + arg5Len)
|
||||||
|
err := i.Context().WriteMsg(_reqBuf, nil)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
type ZdwlIpcOutputV2TagState uint32
|
type ZdwlIpcOutputV2TagState uint32
|
||||||
|
|
||||||
// ZdwlIpcOutputV2TagState :
|
// ZdwlIpcOutputV2TagState :
|
||||||
@@ -399,6 +463,136 @@ func (i *ZdwlIpcOutputV2) SetFrameHandler(f ZdwlIpcOutputV2FrameHandlerFunc) {
|
|||||||
i.frameHandler = f
|
i.frameHandler = f
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ZdwlIpcOutputV2FullscreenEvent : Update fullscreen status
|
||||||
|
//
|
||||||
|
// Indicates if the selected client on this output is fullscreen.
|
||||||
|
type ZdwlIpcOutputV2FullscreenEvent struct {
|
||||||
|
IsFullscreen uint32
|
||||||
|
}
|
||||||
|
type ZdwlIpcOutputV2FullscreenHandlerFunc func(ZdwlIpcOutputV2FullscreenEvent)
|
||||||
|
|
||||||
|
// SetFullscreenHandler : sets handler for ZdwlIpcOutputV2FullscreenEvent
|
||||||
|
func (i *ZdwlIpcOutputV2) SetFullscreenHandler(f ZdwlIpcOutputV2FullscreenHandlerFunc) {
|
||||||
|
i.fullscreenHandler = f
|
||||||
|
}
|
||||||
|
|
||||||
|
// ZdwlIpcOutputV2FloatingEvent : Update the floating status
|
||||||
|
//
|
||||||
|
// Indicates if the selected client on this output is floating.
|
||||||
|
type ZdwlIpcOutputV2FloatingEvent struct {
|
||||||
|
IsFloating uint32
|
||||||
|
}
|
||||||
|
type ZdwlIpcOutputV2FloatingHandlerFunc func(ZdwlIpcOutputV2FloatingEvent)
|
||||||
|
|
||||||
|
// SetFloatingHandler : sets handler for ZdwlIpcOutputV2FloatingEvent
|
||||||
|
func (i *ZdwlIpcOutputV2) SetFloatingHandler(f ZdwlIpcOutputV2FloatingHandlerFunc) {
|
||||||
|
i.floatingHandler = f
|
||||||
|
}
|
||||||
|
|
||||||
|
// ZdwlIpcOutputV2XEvent : Update the x coordinates
|
||||||
|
//
|
||||||
|
// Indicates if x coordinates of the selected client.
|
||||||
|
type ZdwlIpcOutputV2XEvent struct {
|
||||||
|
X int32
|
||||||
|
}
|
||||||
|
type ZdwlIpcOutputV2XHandlerFunc func(ZdwlIpcOutputV2XEvent)
|
||||||
|
|
||||||
|
// SetXHandler : sets handler for ZdwlIpcOutputV2XEvent
|
||||||
|
func (i *ZdwlIpcOutputV2) SetXHandler(f ZdwlIpcOutputV2XHandlerFunc) {
|
||||||
|
i.xHandler = f
|
||||||
|
}
|
||||||
|
|
||||||
|
// ZdwlIpcOutputV2YEvent : Update the y coordinates
|
||||||
|
//
|
||||||
|
// Indicates if y coordinates of the selected client.
|
||||||
|
type ZdwlIpcOutputV2YEvent struct {
|
||||||
|
Y int32
|
||||||
|
}
|
||||||
|
type ZdwlIpcOutputV2YHandlerFunc func(ZdwlIpcOutputV2YEvent)
|
||||||
|
|
||||||
|
// SetYHandler : sets handler for ZdwlIpcOutputV2YEvent
|
||||||
|
func (i *ZdwlIpcOutputV2) SetYHandler(f ZdwlIpcOutputV2YHandlerFunc) {
|
||||||
|
i.yHandler = f
|
||||||
|
}
|
||||||
|
|
||||||
|
// ZdwlIpcOutputV2WidthEvent : Update the width
|
||||||
|
//
|
||||||
|
// Indicates if width of the selected client.
|
||||||
|
type ZdwlIpcOutputV2WidthEvent struct {
|
||||||
|
Width int32
|
||||||
|
}
|
||||||
|
type ZdwlIpcOutputV2WidthHandlerFunc func(ZdwlIpcOutputV2WidthEvent)
|
||||||
|
|
||||||
|
// SetWidthHandler : sets handler for ZdwlIpcOutputV2WidthEvent
|
||||||
|
func (i *ZdwlIpcOutputV2) SetWidthHandler(f ZdwlIpcOutputV2WidthHandlerFunc) {
|
||||||
|
i.widthHandler = f
|
||||||
|
}
|
||||||
|
|
||||||
|
// ZdwlIpcOutputV2HeightEvent : Update the height
|
||||||
|
//
|
||||||
|
// Indicates if height of the selected client.
|
||||||
|
type ZdwlIpcOutputV2HeightEvent struct {
|
||||||
|
Height int32
|
||||||
|
}
|
||||||
|
type ZdwlIpcOutputV2HeightHandlerFunc func(ZdwlIpcOutputV2HeightEvent)
|
||||||
|
|
||||||
|
// SetHeightHandler : sets handler for ZdwlIpcOutputV2HeightEvent
|
||||||
|
func (i *ZdwlIpcOutputV2) SetHeightHandler(f ZdwlIpcOutputV2HeightHandlerFunc) {
|
||||||
|
i.heightHandler = f
|
||||||
|
}
|
||||||
|
|
||||||
|
// ZdwlIpcOutputV2LastLayerEvent : last map layer.
|
||||||
|
//
|
||||||
|
// last map layer.
|
||||||
|
type ZdwlIpcOutputV2LastLayerEvent struct {
|
||||||
|
LastLayer string
|
||||||
|
}
|
||||||
|
type ZdwlIpcOutputV2LastLayerHandlerFunc func(ZdwlIpcOutputV2LastLayerEvent)
|
||||||
|
|
||||||
|
// SetLastLayerHandler : sets handler for ZdwlIpcOutputV2LastLayerEvent
|
||||||
|
func (i *ZdwlIpcOutputV2) SetLastLayerHandler(f ZdwlIpcOutputV2LastLayerHandlerFunc) {
|
||||||
|
i.lastLayerHandler = f
|
||||||
|
}
|
||||||
|
|
||||||
|
// ZdwlIpcOutputV2KbLayoutEvent : current keyboard layout.
|
||||||
|
//
|
||||||
|
// current keyboard layout.
|
||||||
|
type ZdwlIpcOutputV2KbLayoutEvent struct {
|
||||||
|
KbLayout string
|
||||||
|
}
|
||||||
|
type ZdwlIpcOutputV2KbLayoutHandlerFunc func(ZdwlIpcOutputV2KbLayoutEvent)
|
||||||
|
|
||||||
|
// SetKbLayoutHandler : sets handler for ZdwlIpcOutputV2KbLayoutEvent
|
||||||
|
func (i *ZdwlIpcOutputV2) SetKbLayoutHandler(f ZdwlIpcOutputV2KbLayoutHandlerFunc) {
|
||||||
|
i.kbLayoutHandler = f
|
||||||
|
}
|
||||||
|
|
||||||
|
// ZdwlIpcOutputV2KeymodeEvent : current keybind mode.
|
||||||
|
//
|
||||||
|
// current keybind mode.
|
||||||
|
type ZdwlIpcOutputV2KeymodeEvent struct {
|
||||||
|
Keymode string
|
||||||
|
}
|
||||||
|
type ZdwlIpcOutputV2KeymodeHandlerFunc func(ZdwlIpcOutputV2KeymodeEvent)
|
||||||
|
|
||||||
|
// SetKeymodeHandler : sets handler for ZdwlIpcOutputV2KeymodeEvent
|
||||||
|
func (i *ZdwlIpcOutputV2) SetKeymodeHandler(f ZdwlIpcOutputV2KeymodeHandlerFunc) {
|
||||||
|
i.keymodeHandler = f
|
||||||
|
}
|
||||||
|
|
||||||
|
// ZdwlIpcOutputV2ScalefactorEvent : scale factor of monitor.
|
||||||
|
//
|
||||||
|
// scale factor of monitor.
|
||||||
|
type ZdwlIpcOutputV2ScalefactorEvent struct {
|
||||||
|
Scalefactor uint32
|
||||||
|
}
|
||||||
|
type ZdwlIpcOutputV2ScalefactorHandlerFunc func(ZdwlIpcOutputV2ScalefactorEvent)
|
||||||
|
|
||||||
|
// SetScalefactorHandler : sets handler for ZdwlIpcOutputV2ScalefactorEvent
|
||||||
|
func (i *ZdwlIpcOutputV2) SetScalefactorHandler(f ZdwlIpcOutputV2ScalefactorHandlerFunc) {
|
||||||
|
i.scalefactorHandler = f
|
||||||
|
}
|
||||||
|
|
||||||
func (i *ZdwlIpcOutputV2) Dispatch(opcode uint32, fd int, data []byte) {
|
func (i *ZdwlIpcOutputV2) Dispatch(opcode uint32, fd int, data []byte) {
|
||||||
switch opcode {
|
switch opcode {
|
||||||
case 0:
|
case 0:
|
||||||
@@ -487,5 +681,111 @@ func (i *ZdwlIpcOutputV2) Dispatch(opcode uint32, fd int, data []byte) {
|
|||||||
var e ZdwlIpcOutputV2FrameEvent
|
var e ZdwlIpcOutputV2FrameEvent
|
||||||
|
|
||||||
i.frameHandler(e)
|
i.frameHandler(e)
|
||||||
|
case 8:
|
||||||
|
if i.fullscreenHandler == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var e ZdwlIpcOutputV2FullscreenEvent
|
||||||
|
l := 0
|
||||||
|
e.IsFullscreen = client.Uint32(data[l : l+4])
|
||||||
|
l += 4
|
||||||
|
|
||||||
|
i.fullscreenHandler(e)
|
||||||
|
case 9:
|
||||||
|
if i.floatingHandler == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var e ZdwlIpcOutputV2FloatingEvent
|
||||||
|
l := 0
|
||||||
|
e.IsFloating = client.Uint32(data[l : l+4])
|
||||||
|
l += 4
|
||||||
|
|
||||||
|
i.floatingHandler(e)
|
||||||
|
case 10:
|
||||||
|
if i.xHandler == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var e ZdwlIpcOutputV2XEvent
|
||||||
|
l := 0
|
||||||
|
e.X = int32(client.Uint32(data[l : l+4]))
|
||||||
|
l += 4
|
||||||
|
|
||||||
|
i.xHandler(e)
|
||||||
|
case 11:
|
||||||
|
if i.yHandler == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var e ZdwlIpcOutputV2YEvent
|
||||||
|
l := 0
|
||||||
|
e.Y = int32(client.Uint32(data[l : l+4]))
|
||||||
|
l += 4
|
||||||
|
|
||||||
|
i.yHandler(e)
|
||||||
|
case 12:
|
||||||
|
if i.widthHandler == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var e ZdwlIpcOutputV2WidthEvent
|
||||||
|
l := 0
|
||||||
|
e.Width = int32(client.Uint32(data[l : l+4]))
|
||||||
|
l += 4
|
||||||
|
|
||||||
|
i.widthHandler(e)
|
||||||
|
case 13:
|
||||||
|
if i.heightHandler == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var e ZdwlIpcOutputV2HeightEvent
|
||||||
|
l := 0
|
||||||
|
e.Height = int32(client.Uint32(data[l : l+4]))
|
||||||
|
l += 4
|
||||||
|
|
||||||
|
i.heightHandler(e)
|
||||||
|
case 14:
|
||||||
|
if i.lastLayerHandler == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var e ZdwlIpcOutputV2LastLayerEvent
|
||||||
|
l := 0
|
||||||
|
lastLayerLen := client.PaddedLen(int(client.Uint32(data[l : l+4])))
|
||||||
|
l += 4
|
||||||
|
e.LastLayer = client.String(data[l : l+lastLayerLen])
|
||||||
|
l += lastLayerLen
|
||||||
|
|
||||||
|
i.lastLayerHandler(e)
|
||||||
|
case 15:
|
||||||
|
if i.kbLayoutHandler == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var e ZdwlIpcOutputV2KbLayoutEvent
|
||||||
|
l := 0
|
||||||
|
kbLayoutLen := client.PaddedLen(int(client.Uint32(data[l : l+4])))
|
||||||
|
l += 4
|
||||||
|
e.KbLayout = client.String(data[l : l+kbLayoutLen])
|
||||||
|
l += kbLayoutLen
|
||||||
|
|
||||||
|
i.kbLayoutHandler(e)
|
||||||
|
case 16:
|
||||||
|
if i.keymodeHandler == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var e ZdwlIpcOutputV2KeymodeEvent
|
||||||
|
l := 0
|
||||||
|
keymodeLen := client.PaddedLen(int(client.Uint32(data[l : l+4])))
|
||||||
|
l += 4
|
||||||
|
e.Keymode = client.String(data[l : l+keymodeLen])
|
||||||
|
l += keymodeLen
|
||||||
|
|
||||||
|
i.keymodeHandler(e)
|
||||||
|
case 17:
|
||||||
|
if i.scalefactorHandler == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var e ZdwlIpcOutputV2ScalefactorEvent
|
||||||
|
l := 0
|
||||||
|
e.Scalefactor = client.Uint32(data[l : l+4])
|
||||||
|
l += 4
|
||||||
|
|
||||||
|
i.scalefactorHandler(e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ I would probably just submit raphi's patchset but I don't think that would be po
|
|||||||
reset.
|
reset.
|
||||||
</description>
|
</description>
|
||||||
|
|
||||||
<interface name="zdwl_ipc_manager_v2" version="1">
|
<interface name="zdwl_ipc_manager_v2" version="2">
|
||||||
<description summary="manage dwl state">
|
<description summary="manage dwl state">
|
||||||
This interface is exposed as a global in wl_registry.
|
This interface is exposed as a global in wl_registry.
|
||||||
|
|
||||||
@@ -60,7 +60,7 @@ I would probably just submit raphi's patchset but I don't think that would be po
|
|||||||
</event>
|
</event>
|
||||||
</interface>
|
</interface>
|
||||||
|
|
||||||
<interface name="zdwl_ipc_output_v2" version="1">
|
<interface name="zdwl_ipc_output_v2" version="2">
|
||||||
<description summary="control dwl output">
|
<description summary="control dwl output">
|
||||||
Observe and control a dwl output.
|
Observe and control a dwl output.
|
||||||
|
|
||||||
@@ -162,5 +162,91 @@ I would probably just submit raphi's patchset but I don't think that would be po
|
|||||||
<description summary="Set the layout of this output"/>
|
<description summary="Set the layout of this output"/>
|
||||||
<arg name="index" type="uint" summary="index of a layout recieved by dwl_ipc_manager.layout"/>
|
<arg name="index" type="uint" summary="index of a layout recieved by dwl_ipc_manager.layout"/>
|
||||||
</request>
|
</request>
|
||||||
|
|
||||||
|
<request name="quit" since="2">
|
||||||
|
<description summary="Quit mango">This request allows clients to instruct the compositor to quit mango.</description>
|
||||||
|
</request>
|
||||||
|
|
||||||
|
<request name="dispatch" since="2">
|
||||||
|
<description summary="Set the active tags of this output"/>
|
||||||
|
<arg name="dispatch" type="string" summary="dispatch name."/>
|
||||||
|
<arg name="arg1" type="string" summary="arg1."/>
|
||||||
|
<arg name="arg2" type="string" summary="arg2."/>
|
||||||
|
<arg name="arg3" type="string" summary="arg3."/>
|
||||||
|
<arg name="arg4" type="string" summary="arg4."/>
|
||||||
|
<arg name="arg5" type="string" summary="arg5."/>
|
||||||
|
</request>
|
||||||
|
|
||||||
|
<!-- Version 2 -->
|
||||||
|
<event name="fullscreen" since="2">
|
||||||
|
<description summary="Update fullscreen status">
|
||||||
|
Indicates if the selected client on this output is fullscreen.
|
||||||
|
</description>
|
||||||
|
<arg name="is_fullscreen" type="uint" summary="If the selected client is fullscreen. Nonzero is valid, zero invalid"/>
|
||||||
|
</event>
|
||||||
|
|
||||||
|
<event name="floating" since="2">
|
||||||
|
<description summary="Update the floating status">
|
||||||
|
Indicates if the selected client on this output is floating.
|
||||||
|
</description>
|
||||||
|
<arg name="is_floating" type="uint" summary="If the selected client is floating. Nonzero is valid, zero invalid"/>
|
||||||
|
</event>
|
||||||
|
|
||||||
|
<event name="x" since="2">
|
||||||
|
<description summary="Update the x coordinates">
|
||||||
|
Indicates if x coordinates of the selected client.
|
||||||
|
</description>
|
||||||
|
<arg name="x" type="int" summary="x coordinate of the selected client"/>
|
||||||
|
</event>
|
||||||
|
|
||||||
|
<event name="y" since="2">
|
||||||
|
<description summary="Update the y coordinates">
|
||||||
|
Indicates if y coordinates of the selected client.
|
||||||
|
</description>
|
||||||
|
<arg name="y" type="int" summary="y coordinate of the selected client"/>
|
||||||
|
</event>
|
||||||
|
|
||||||
|
<event name="width" since="2">
|
||||||
|
<description summary="Update the width">
|
||||||
|
Indicates if width of the selected client.
|
||||||
|
</description>
|
||||||
|
<arg name="width" type="int" summary="width of the selected client"/>
|
||||||
|
</event>
|
||||||
|
|
||||||
|
<event name="height" since="2">
|
||||||
|
<description summary="Update the height">
|
||||||
|
Indicates if height of the selected client.
|
||||||
|
</description>
|
||||||
|
<arg name="height" type="int" summary="height of the selected client"/>
|
||||||
|
</event>
|
||||||
|
|
||||||
|
<event name="last_layer" since="2">
|
||||||
|
<description summary="last map layer.">
|
||||||
|
last map layer.
|
||||||
|
</description>
|
||||||
|
<arg name="last_layer" type="string" summary="last map layer."/>
|
||||||
|
</event>
|
||||||
|
|
||||||
|
<event name="kb_layout" since="2">
|
||||||
|
<description summary="current keyboard layout.">
|
||||||
|
current keyboard layout.
|
||||||
|
</description>
|
||||||
|
<arg name="kb_layout" type="string" summary="current keyboard layout."/>
|
||||||
|
</event>
|
||||||
|
|
||||||
|
<event name="keymode" since="2">
|
||||||
|
<description summary="current keybind mode.">
|
||||||
|
current keybind mode.
|
||||||
|
</description>
|
||||||
|
<arg name="keymode" type="string" summary="current keybind mode."/>
|
||||||
|
</event>
|
||||||
|
|
||||||
|
<event name="scalefactor" since="2">
|
||||||
|
<description summary="scale factor of monitor.">
|
||||||
|
scale factor of monitor.
|
||||||
|
</description>
|
||||||
|
<arg name="scalefactor" type="uint" summary="scale factor of monitor."/>
|
||||||
|
</event>
|
||||||
|
|
||||||
</interface>
|
</interface>
|
||||||
</protocol>
|
</protocol>
|
||||||
|
|||||||
@@ -100,8 +100,8 @@ func (m *Manager) setupRegistry() error {
|
|||||||
log.Infof("DWL: found %s", dwl_ipc.ZdwlIpcManagerV2InterfaceName)
|
log.Infof("DWL: found %s", dwl_ipc.ZdwlIpcManagerV2InterfaceName)
|
||||||
manager := dwl_ipc.NewZdwlIpcManagerV2(m.ctx)
|
manager := dwl_ipc.NewZdwlIpcManagerV2(m.ctx)
|
||||||
version := e.Version
|
version := e.Version
|
||||||
if version > 1 {
|
if version > 2 {
|
||||||
version = 1
|
version = 2
|
||||||
}
|
}
|
||||||
if err := registry.Bind(e.Name, e.Interface, version, manager); err == nil {
|
if err := registry.Bind(e.Name, e.Interface, version, manager); err == nil {
|
||||||
dwlMgr = manager
|
dwlMgr = manager
|
||||||
@@ -282,6 +282,14 @@ func (m *Manager) setupOutput(manager *dwl_ipc.ZdwlIpcManagerV2, output *wlclien
|
|||||||
outState.layoutSymbol = e.Layout
|
outState.layoutSymbol = e.Layout
|
||||||
})
|
})
|
||||||
|
|
||||||
|
ipcOutput.SetKbLayoutHandler(func(e dwl_ipc.ZdwlIpcOutputV2KbLayoutEvent) {
|
||||||
|
outState.kbLayout = e.KbLayout
|
||||||
|
})
|
||||||
|
|
||||||
|
ipcOutput.SetKeymodeHandler(func(e dwl_ipc.ZdwlIpcOutputV2KeymodeEvent) {
|
||||||
|
outState.keymode = e.Keymode
|
||||||
|
})
|
||||||
|
|
||||||
ipcOutput.SetFrameHandler(func(e dwl_ipc.ZdwlIpcOutputV2FrameEvent) {
|
ipcOutput.SetFrameHandler(func(e dwl_ipc.ZdwlIpcOutputV2FrameEvent) {
|
||||||
m.updateState()
|
m.updateState()
|
||||||
})
|
})
|
||||||
@@ -310,6 +318,8 @@ func (m *Manager) updateState() {
|
|||||||
LayoutSymbol: out.layoutSymbol,
|
LayoutSymbol: out.layoutSymbol,
|
||||||
Title: out.title,
|
Title: out.title,
|
||||||
AppID: out.appID,
|
AppID: out.appID,
|
||||||
|
KbLayout: out.kbLayout,
|
||||||
|
Keymode: out.keymode,
|
||||||
}
|
}
|
||||||
|
|
||||||
if out.active != 0 {
|
if out.active != 0 {
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ type OutputState struct {
|
|||||||
LayoutSymbol string `json:"layoutSymbol"`
|
LayoutSymbol string `json:"layoutSymbol"`
|
||||||
Title string `json:"title"`
|
Title string `json:"title"`
|
||||||
AppID string `json:"appId"`
|
AppID string `json:"appId"`
|
||||||
|
KbLayout string `json:"kbLayout"`
|
||||||
|
Keymode string `json:"keymode"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type State struct {
|
type State struct {
|
||||||
@@ -73,6 +75,8 @@ type outputState struct {
|
|||||||
layoutSymbol string
|
layoutSymbol string
|
||||||
title string
|
title string
|
||||||
appID string
|
appID string
|
||||||
|
kbLayout string
|
||||||
|
keymode string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Manager) GetState() State {
|
func (m *Manager) GetState() State {
|
||||||
@@ -147,6 +151,12 @@ func stateChanged(old, new *State) bool {
|
|||||||
if oldOut.AppID != newOut.AppID {
|
if oldOut.AppID != newOut.AppID {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
if oldOut.KbLayout != newOut.KbLayout {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if oldOut.Keymode != newOut.Keymode {
|
||||||
|
return true
|
||||||
|
}
|
||||||
if len(oldOut.Tags) != len(newOut.Tags) {
|
if len(oldOut.Tags) != len(newOut.Tags) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ import (
|
|||||||
"github.com/AvengeMedia/DankMaterialShell/core/pkg/syncmap"
|
"github.com/AvengeMedia/DankMaterialShell/core/pkg/syncmap"
|
||||||
)
|
)
|
||||||
|
|
||||||
const APIVersion = 18
|
const APIVersion = 19
|
||||||
|
|
||||||
type Capabilities struct {
|
type Capabilities struct {
|
||||||
Capabilities []string `json:"capabilities"`
|
Capabilities []string `json:"capabilities"`
|
||||||
@@ -1141,11 +1141,18 @@ func Start(printDocs bool) error {
|
|||||||
log.Info(" cups.cancelJob - Cancel job (params: printerName, jobID)")
|
log.Info(" cups.cancelJob - Cancel job (params: printerName, jobID)")
|
||||||
log.Info(" cups.purgeJobs - Cancel all jobs (params: printerName)")
|
log.Info(" cups.purgeJobs - Cancel all jobs (params: printerName)")
|
||||||
log.Info("DWL:")
|
log.Info("DWL:")
|
||||||
log.Info(" dwl.getState - Get current dwl state (tags, windows, layouts)")
|
log.Info(" dwl.getState - Get current dwl state (tags, windows, layouts, keyboard)")
|
||||||
log.Info(" dwl.setTags - Set active tags (params: output, tagmask, toggleTagset)")
|
log.Info(" dwl.setTags - Set active tags (params: output, tagmask, toggleTagset)")
|
||||||
log.Info(" dwl.setClientTags - Set focused client tags (params: output, andTags, xorTags)")
|
log.Info(" dwl.setClientTags - Set focused client tags (params: output, andTags, xorTags)")
|
||||||
log.Info(" dwl.setLayout - Set layout (params: output, index)")
|
log.Info(" dwl.setLayout - Set layout (params: output, index)")
|
||||||
log.Info(" dwl.subscribe - Subscribe to dwl state changes (streaming)")
|
log.Info(" dwl.subscribe - Subscribe to dwl state changes (streaming)")
|
||||||
|
log.Info(" Output state includes:")
|
||||||
|
log.Info(" - tags : Tag states (active, clients, focused)")
|
||||||
|
log.Info(" - layoutSymbol : Current layout name")
|
||||||
|
log.Info(" - title : Focused window title")
|
||||||
|
log.Info(" - appId : Focused window app ID")
|
||||||
|
log.Info(" - kbLayout : Current keyboard layout")
|
||||||
|
log.Info(" - keymode : Current keybind mode")
|
||||||
log.Info("ExtWorkspace:")
|
log.Info("ExtWorkspace:")
|
||||||
log.Info(" extworkspace.getState - Get current workspace state (groups, workspaces)")
|
log.Info(" extworkspace.getState - Get current workspace state (groups, workspaces)")
|
||||||
log.Info(" extworkspace.activateWorkspace - Activate workspace (params: groupID, workspaceID)")
|
log.Info(" extworkspace.activateWorkspace - Activate workspace (params: groupID, workspaceID)")
|
||||||
|
|||||||
@@ -13,7 +13,14 @@ BasePill {
|
|||||||
id: root
|
id: root
|
||||||
|
|
||||||
property bool compactMode: SettingsData.keyboardLayoutNameCompactMode
|
property bool compactMode: SettingsData.keyboardLayoutNameCompactMode
|
||||||
property string currentLayout: CompositorService.isNiri ? NiriService.getCurrentKeyboardLayoutName() : ""
|
property string currentLayout: {
|
||||||
|
if (CompositorService.isNiri) {
|
||||||
|
return NiriService.getCurrentKeyboardLayoutName()
|
||||||
|
} else if (CompositorService.isDwl) {
|
||||||
|
return DwlService.currentKeyboardLayout
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
property string hyprlandKeyboard: ""
|
property string hyprlandKeyboard: ""
|
||||||
|
|
||||||
content: Component {
|
content: Component {
|
||||||
@@ -79,6 +86,8 @@ BasePill {
|
|||||||
root.hyprlandKeyboard,
|
root.hyprlandKeyboard,
|
||||||
"next"
|
"next"
|
||||||
])
|
])
|
||||||
|
} else if (CompositorService.isDwl) {
|
||||||
|
Quickshell.execDetached(["mmsg", "-d", "switch_keyboard_layout"])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,11 @@ Singleton {
|
|||||||
property var layouts: []
|
property var layouts: []
|
||||||
property string activeOutput: ""
|
property string activeOutput: ""
|
||||||
property var outputScales: ({})
|
property var outputScales: ({})
|
||||||
|
property string currentKeyboardLayout: {
|
||||||
|
if (!outputs || !activeOutput) return ""
|
||||||
|
const output = outputs[activeOutput]
|
||||||
|
return (output && output.kbLayout) || ""
|
||||||
|
}
|
||||||
|
|
||||||
signal stateChanged()
|
signal stateChanged()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user