@@ -18,6 +18,7 @@ import (
1818 "github.com/godbus/dbus/v5"
1919 "github.com/linuxdeepin/dde-api/dxinput"
2020 ddbus "github.com/linuxdeepin/dde-daemon/dbus"
21+ configManager "github.com/linuxdeepin/go-dbus-factory/org.desktopspec.ConfigManager"
2122 accounts "github.com/linuxdeepin/go-dbus-factory/system/org.deepin.dde.accounts1"
2223 "github.com/linuxdeepin/go-gir/gio-2.0"
2324 "github.com/linuxdeepin/go-lib/dbusutil"
@@ -52,6 +53,8 @@ const (
5253 qtDefaultConfig = ".config/Trolltech.conf"
5354
5455 cmdSetKbd = "/usr/bin/setxkbmap"
56+
57+ dsettingsKeyboardEnabledKey = "keyboardEnabled"
5558)
5659
5760type Keyboard struct {
@@ -82,7 +85,9 @@ type Keyboard struct {
8285 user accounts.User
8386 layoutMap layoutMap
8487
85- devNumber int
88+ devNumber int
89+ devInfos Keyboards
90+ dsgInputConfig configManager.Manager
8691}
8792
8893func newKeyboard (service * dbusutil.Service ) * Keyboard {
@@ -158,6 +163,8 @@ func newKeyboard(service *dbusutil.Service) *Keyboard {
158163 kbd .listenSettingsChanged ()
159164 kbd .listenRootWindowXEvent ()
160165 kbd .startXEventLoop ()
166+ kbd .initDsgConfig ()
167+ kbd .updateDXKeyboards ()
161168 return kbd
162169}
163170
@@ -275,6 +282,8 @@ func (kbd *Keyboard) handleDeviceChanged() {
275282 kbd .applySettings ()
276283 }
277284 kbd .devNumber = num
285+
286+ kbd .updateDXKeyboards ()
278287}
279288
280289func (kbd * Keyboard ) applyLayout () {
@@ -742,3 +751,59 @@ func (kbd *Keyboard) toggleNextLayout() {
742751 }
743752 }
744753}
754+
755+ func (kbd * Keyboard ) updateDXKeyboards () {
756+ logger .Debug ("updateDXKeyboards" )
757+ kbd .devInfos = Keyboards {}
758+ for _ , info := range getKeyboardInfos (false ) {
759+ tmp := kbd .devInfos .get (info .Id )
760+ if tmp != nil {
761+ continue
762+ }
763+ kbd .devInfos = append (kbd .devInfos , info )
764+ }
765+
766+ value , err := kbd .dsgInputConfig .Value (0 , dsettingsKeyboardEnabledKey )
767+ if err != nil {
768+ logger .Warningf ("getDsgData key : %s. err : %s" , dsettingsKeyboardEnabledKey , err )
769+ return
770+ }
771+
772+ if enableKeyboard , ok := value .Value ().(bool ); ok {
773+ for _ , dev := range kbd .devInfos {
774+ dev .Enable (enableKeyboard )
775+ }
776+ }
777+ }
778+
779+ func (kbd * Keyboard ) initDsgConfig () error {
780+ logger .Debug ("initDsgConfig" )
781+ systemBus , err := dbus .SystemBus ()
782+ if err != nil {
783+ logger .Warning (err )
784+ return nil
785+ }
786+ // 加载dsg配置
787+ dsg := configManager .NewConfigManager (systemBus )
788+
789+ inputDevicesPath , err := dsg .AcquireManager (0 , dsettingsAppID , dsettingsInputdevices , "" )
790+ if err != nil {
791+ logger .Warning (err )
792+ return err
793+ }
794+
795+ kbd .dsgInputConfig , err = configManager .NewManager (systemBus , inputDevicesPath )
796+ if err != nil {
797+ logger .Warning (err )
798+ return err
799+ }
800+
801+ kbd .dsgInputConfig .InitSignalExt (kbd .sysSigLoop , true )
802+ kbd .dsgInputConfig .ConnectValueChanged (func (key string ) {
803+ logger .Infof ("key: %v" , key )
804+ if key == dsettingsKeyboardEnabledKey {
805+ kbd .updateDXKeyboards ()
806+ }
807+ })
808+ return nil
809+ }
0 commit comments