@@ -23,15 +23,19 @@ import (
2323
2424 "github.com/davecgh/go-spew/spew"
2525 "github.com/godbus/dbus"
26+ "github.com/jouyouyun/hardware/graphic"
2627 sessiondisplay "github.com/linuxdeepin/go-dbus-factory/com.deepin.daemon.display"
2728 sysdisplay "github.com/linuxdeepin/go-dbus-factory/com.deepin.system.display"
2829 inputdevices "github.com/linuxdeepin/go-dbus-factory/com.deepin.system.inputdevices"
30+ systeminfo "github.com/linuxdeepin/go-dbus-factory/com.deepin.system.systeminfo"
31+ configManager "github.com/linuxdeepin/go-dbus-factory/org.desktopspec.ConfigManager"
2932 ofdbus "github.com/linuxdeepin/go-dbus-factory/org.freedesktop.dbus"
3033 login1 "github.com/linuxdeepin/go-dbus-factory/org.freedesktop.login1"
3134 gio "github.com/linuxdeepin/go-gir/gio-2.0"
3235 "github.com/linuxdeepin/go-lib/dbusutil"
3336 "github.com/linuxdeepin/go-lib/gsettings"
3437 "github.com/linuxdeepin/go-lib/log"
38+ "github.com/linuxdeepin/go-lib/strv"
3539 "github.com/linuxdeepin/go-lib/xdg/basedir"
3640 x "github.com/linuxdeepin/go-x11-client"
3741 "github.com/linuxdeepin/go-x11-client/ext/randr"
@@ -99,6 +103,13 @@ const (
99103 priorityOther
100104)
101105
106+ const (
107+ DSettingsAppID = "org.deepin.startdde"
108+ DSettingsDisplayName = "org.deepin.Display"
109+ DSettingsKeyHDMIIsBuiltinConfig = "HDMI-is-builtin"
110+ DSettingsKeyBackLightMaxBrightnessChooseBigConfig = "backLight-max-brightness-choose-big"
111+ )
112+
102113var (
103114 _monitorTypePriority = map [string ]int {
104115 "edp" : priorityEDP ,
@@ -219,6 +230,11 @@ type Manager struct {
219230 unsupportGammaDrmList []string
220231 drmSupportGamma bool
221232 initPrimary bool
233+
234+ dsHDMIIsBuiltinConfig []string
235+ dsBackLightMaxBrightnessChooseBigConfig []string
236+ dmiInfo systeminfo.DMIInfo
237+ pciVendor []string
222238}
223239
224240type monitorSizeInfo struct {
@@ -285,7 +301,7 @@ func newManager(service *dbusutil.Service) *Manager {
285301
286302 m .mm .setHooks (m )
287303
288- m .setPropMaxBacklightBrightness (uint32 (brightness .GetMaxBacklightBrightness ()))
304+ m .setPropMaxBacklightBrightness (uint32 (m .GetMaxBacklightBrightness ()))
289305
290306 sysSigLoop := dbusutil .NewSignalLoop (m .sysBus , 10 )
291307 m .sysSigLoop = sysSigLoop
@@ -1001,7 +1017,8 @@ func (m *Manager) init() {
10011017 // 没有内建屏,不监听内核信号
10021018 logger .Info ("built-in screen does not exist" )
10031019 }
1004-
1020+ m .initDSettings (m .sysBus )
1021+ m .initHardwareInfo (m .sysBus )
10051022 go func () {
10061023 // 每次设置过主屏和其rect区域后,都将此值同步到xsettings
10071024 bus , _ := dbus .SessionBus ()
@@ -2941,3 +2958,97 @@ func (m *Manager) detectDrmSupportGamma() (bool, error) {
29412958 }
29422959 return vgaSupportGamma , nil
29432960}
2961+
2962+ func (m * Manager ) initDSettings (sysBus * dbus.Conn ) {
2963+ ds := configManager .NewConfigManager (sysBus )
2964+
2965+ displayPath , err := ds .AcquireManager (0 , DSettingsAppID , DSettingsDisplayName , "" )
2966+ if err != nil {
2967+ logger .Warning (err )
2968+ return
2969+ }
2970+
2971+ dsDisplay , err := configManager .NewManager (sysBus , displayPath )
2972+ if err != nil {
2973+ logger .Warning (err )
2974+ return
2975+ }
2976+
2977+ getHDMIIsBuiltinConfig := func () {
2978+ v , err := dsDisplay .Value (0 , DSettingsKeyHDMIIsBuiltinConfig )
2979+ if err != nil {
2980+ logger .Warning (err )
2981+ return
2982+ }
2983+ itemList := v .Value ().([]dbus.Variant )
2984+ for _ , i := range itemList {
2985+ m .dsHDMIIsBuiltinConfig = append (m .dsHDMIIsBuiltinConfig , i .Value ().(string ))
2986+ }
2987+ }
2988+ getBackLightMaxBrightnessChooseBigConfig := func () {
2989+ v , err := dsDisplay .Value (0 , DSettingsKeyBackLightMaxBrightnessChooseBigConfig )
2990+ if err != nil {
2991+ logger .Warning (err )
2992+ return
2993+ }
2994+ itemList := v .Value ().([]dbus.Variant )
2995+ for _ , i := range itemList {
2996+ m .dsBackLightMaxBrightnessChooseBigConfig = append (m .dsBackLightMaxBrightnessChooseBigConfig , i .Value ().(string ))
2997+ }
2998+ }
2999+ getHDMIIsBuiltinConfig ()
3000+ getBackLightMaxBrightnessChooseBigConfig ()
3001+
3002+ dsDisplay .InitSignalExt (m .sysSigLoop , true )
3003+ _ , err = dsDisplay .ConnectValueChanged (func (key string ) {
3004+ switch key {
3005+ case DSettingsKeyHDMIIsBuiltinConfig :
3006+ getHDMIIsBuiltinConfig ()
3007+ case DSettingsKeyBackLightMaxBrightnessChooseBigConfig :
3008+ getBackLightMaxBrightnessChooseBigConfig ()
3009+ }
3010+ })
3011+ if err != nil {
3012+ logger .Warning (err )
3013+ }
3014+ }
3015+
3016+ func (m * Manager ) initHardwareInfo (sysBus * dbus.Conn ) {
3017+ info := systeminfo .NewSystemInfo (sysBus )
3018+ dmi , err := info .DMIInfo ().Get (0 )
3019+ if err != nil {
3020+ logger .Warning (err )
3021+ return
3022+ }
3023+ m .dmiInfo = dmi
3024+ graphicList , err := graphic .GetGraphicList ()
3025+ if err != nil {
3026+ logger .Warning (err )
3027+ return
3028+ }
3029+ for _ , graphicInfo := range graphicList {
3030+ m .pciVendor = append (m .pciVendor , graphicInfo .Vendor )
3031+ }
3032+ }
3033+
3034+ func (m * Manager ) GetMaxBacklightBrightness () int {
3035+ controllers := brightness .Controllers
3036+ if len (controllers ) == 0 {
3037+ return 0
3038+ }
3039+ maxBrightness := controllers [0 ].MaxBrightness
3040+ if strv .Strv (m .dsBackLightMaxBrightnessChooseBigConfig ).Contains (m .dmiInfo .ProductName ) {
3041+ for _ , controller := range controllers {
3042+ if maxBrightness < controller .MaxBrightness {
3043+ maxBrightness = controller .MaxBrightness
3044+ }
3045+ }
3046+ } else {
3047+ for _ , controller := range controllers {
3048+ if maxBrightness > controller .MaxBrightness {
3049+ maxBrightness = controller .MaxBrightness
3050+ }
3051+ }
3052+ }
3053+ return maxBrightness
3054+ }
0 commit comments