mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-04 17:33:05 +00:00
xsettings: add XSProxy
- add all sessionmanager xsettings methods Change-Id: I7c1885dec8cce9c307dc44b665a1a8abad195df2
This commit is contained in:
parent
f2121452b9
commit
7d04637f5c
@ -79,7 +79,6 @@ func NewCursorTheme(handler func([]string)) *CursorTheme {
|
||||
cursor.watcher.SetEventHandler(cursor.handleEvent)
|
||||
go cursor.watcher.StartWatch()
|
||||
}
|
||||
xsettings.InitXSettings()
|
||||
// handle cursor changed by gtk+
|
||||
C.handle_cursor_changed()
|
||||
|
||||
@ -143,7 +142,6 @@ func (cursor *CursorTheme) Destroy() {
|
||||
|
||||
cursor.watcher.EndWatch()
|
||||
cursor.watcher = nil
|
||||
xsettings.Unref()
|
||||
|
||||
}
|
||||
|
||||
@ -182,7 +180,12 @@ func (cursor *CursorTheme) GetThumbnail(theme string) string {
|
||||
}
|
||||
|
||||
func setThemeViaXSettings(theme string) error {
|
||||
return xsettings.SetString(xsettings.GtkStringCursorTheme, theme)
|
||||
proxy, err := xsettings.NewXSProxy()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer proxy.Free()
|
||||
return proxy.SetString(xsettings.GtkCursorTheme, theme)
|
||||
}
|
||||
|
||||
func fixedQtCursor(theme string) error {
|
||||
|
@ -71,7 +71,6 @@ func NewGtkTheme(handler func([]string)) *GtkTheme {
|
||||
gtk.watcher.SetEventHandler(gtk.handleEvent)
|
||||
go gtk.watcher.StartWatch()
|
||||
}
|
||||
xsettings.InitXSettings()
|
||||
|
||||
return gtk
|
||||
}
|
||||
@ -123,7 +122,6 @@ func (gtk *GtkTheme) Destroy() {
|
||||
|
||||
gtk.watcher.EndWatch()
|
||||
gtk.watcher = nil
|
||||
xsettings.Unref()
|
||||
}
|
||||
|
||||
func (gtk *GtkTheme) GetNameStrList() []string {
|
||||
@ -196,7 +194,12 @@ func getThemeList(sysDirs, userDirs []PathInfo) []PathInfo {
|
||||
}
|
||||
|
||||
func setThemeViaXSettings(theme string) error {
|
||||
return xsettings.SetString(xsettings.NetStringThemeName, theme)
|
||||
proxy, err := xsettings.NewXSProxy()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer proxy.Free()
|
||||
return proxy.SetString(xsettings.NetThemeName, theme)
|
||||
}
|
||||
|
||||
func setQt4Theme(config string) error {
|
||||
|
@ -67,7 +67,6 @@ func NewIconTheme(handler func([]string)) *IconTheme {
|
||||
icon.watcher.SetEventHandler(icon.handleEvent)
|
||||
go icon.watcher.StartWatch()
|
||||
}
|
||||
xsettings.InitXSettings()
|
||||
|
||||
return icon
|
||||
}
|
||||
@ -116,7 +115,6 @@ func (icon *IconTheme) Destroy() {
|
||||
|
||||
icon.watcher.EndWatch()
|
||||
icon.watcher = nil
|
||||
xsettings.Unref()
|
||||
}
|
||||
|
||||
func (icon *IconTheme) GetNameStrList() []string {
|
||||
@ -199,7 +197,12 @@ func getThemeList(sysDirs, userDirs []PathInfo) []PathInfo {
|
||||
}
|
||||
|
||||
func setThemeViaXSettings(theme string) error {
|
||||
return xsettings.SetString(xsettings.NetStringIconTheme, theme)
|
||||
proxy, err := xsettings.NewXSProxy()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer proxy.Free()
|
||||
return proxy.SetString(xsettings.NetIconTheme, theme)
|
||||
}
|
||||
|
||||
func getDirList() []string {
|
||||
|
@ -28,13 +28,15 @@ import (
|
||||
type FontManager struct {
|
||||
standardList []StyleInfo
|
||||
monospaceList []StyleInfo
|
||||
|
||||
xsProxy *xsettings.XSProxy
|
||||
}
|
||||
|
||||
func NewFontManager() *FontManager {
|
||||
font := &FontManager{}
|
||||
|
||||
font.xsProxy, _ = xsettings.NewXSProxy()
|
||||
font.standardList, font.monospaceList = getStyleInfoList()
|
||||
xsettings.InitXSettings()
|
||||
|
||||
return font
|
||||
}
|
||||
|
@ -74,7 +74,11 @@ func (font *FontManager) Set(fontType, name string, size int32) {
|
||||
return
|
||||
}
|
||||
|
||||
xsettings.SetString(xsettings.GtkStringFontName, value)
|
||||
if font.xsProxy == nil {
|
||||
return
|
||||
}
|
||||
font.xsProxy.SetString(xsettings.GtkFontName, value)
|
||||
|
||||
settings := CheckAndNewGSettings(wmGSettingsSchema)
|
||||
if settings != nil {
|
||||
settings.SetString("titlebar-font", value)
|
||||
@ -99,10 +103,13 @@ func (font *FontManager) Set(fontType, name string, size int32) {
|
||||
* lcdfilter default "lcddefault"
|
||||
*/
|
||||
func (font *FontManager) SetXft(anti, hinting uint32, hintstyle, rgba string) {
|
||||
xsettings.SetInteger(xsettings.XftBoolAntialias, anti)
|
||||
xsettings.SetInteger(xsettings.XftBoolHinting, hinting)
|
||||
xsettings.SetString(xsettings.XftStringHintStyle, hintstyle)
|
||||
xsettings.SetString(xsettings.XftStringRgba, rgba)
|
||||
if font.xsProxy == nil {
|
||||
return
|
||||
}
|
||||
font.xsProxy.SetInteger(xsettings.XftAntialias, anti)
|
||||
font.xsProxy.SetInteger(xsettings.XftHinting, hinting)
|
||||
font.xsProxy.SetString(xsettings.XftHintStyle, hintstyle)
|
||||
font.xsProxy.SetString(xsettings.XftRgba, rgba)
|
||||
}
|
||||
|
||||
func (font *FontManager) GetStyleListByName(name string) []string {
|
||||
@ -126,7 +133,10 @@ func (font *FontManager) GetNameList(fontType string) []string {
|
||||
}
|
||||
|
||||
func (font *FontManager) Destroy() {
|
||||
xsettings.Unref()
|
||||
if font.xsProxy != nil {
|
||||
font.xsProxy.Free()
|
||||
font.xsProxy = nil
|
||||
}
|
||||
}
|
||||
|
||||
func setQt4Font(config, name string, size int32) {
|
||||
|
@ -23,122 +23,134 @@ package xsettings
|
||||
|
||||
import (
|
||||
"dbus/com/deepin/sessionmanager"
|
||||
"fmt"
|
||||
"sync"
|
||||
)
|
||||
|
||||
const (
|
||||
NetStringThemeName = "Net/ThemeName"
|
||||
NetStringIconTheme = "Net/IconThemeName"
|
||||
NetStringFallbackIconTheme = "Net/FallbackIconTheme"
|
||||
NetBoolCursorBlink = "Net/CursorBlink"
|
||||
NetIntCursorBlinkTime = "Net/CursorBlinkTime"
|
||||
NetIntCursorBlinkTimeout = "Net/CursorBlinkTimeout"
|
||||
NetIntDoubleClick = "Net/DoubleClickTime"
|
||||
NetIntDragThreshold = "Net/DndDragThreshold"
|
||||
NetStringSoundTheme = "Net/SoundThemeName"
|
||||
NetBoolEnableEventSounds = "Net/EnableEventSounds"
|
||||
NetBoolEnableInputFeedbackSounds = "Net/EnableInputFeedbackSounds"
|
||||
//string
|
||||
NetThemeName = "Net/ThemeName"
|
||||
NetIconTheme = "Net/IconThemeName"
|
||||
NetFallbackIconTheme = "Net/FallbackIconTheme"
|
||||
NetSoundTheme = "Net/SoundThemeName"
|
||||
|
||||
GtkStringThemeName = "Gtk/GtkThemeName"
|
||||
GtkStringCursorTheme = "Gtk/CursorThemeName"
|
||||
GtkIntCursorThemeSize = "Gtk/CursorThemeSize"
|
||||
GtkStringFontName = "Gtk/FontName"
|
||||
GtkStringKeyTheme = "Gtk/KeyThemeName"
|
||||
GtkStringToolbarStyle = "Gtk/ToolbarStyle"
|
||||
GtkStringToolbarIconSize = "Gtk/ToolbarIconSize"
|
||||
GtkBoolCanChangeAccels = "Gtk/CanChangeAccels"
|
||||
GtkStringColorPalette = "Gtk/ColorPalette"
|
||||
GtkIntTimeoutInitial = "Gtk/TimeoutInitial"
|
||||
GtkIntTimeoutRepeat = "Gtk/TimeoutRepeat"
|
||||
GtkStringColorScheme = "Gtk/ColorScheme"
|
||||
GtkStringIMPreeditStyle = "Gtk/IMPreeditStyle"
|
||||
GtkStringIMStatusStyle = "Gtk/IMStatusStyle"
|
||||
GtkStringIMModule = "Gtk/IMModule"
|
||||
GtkBoolMenuImages = "Gtk/MenuImages"
|
||||
GtkBoolButtonImages = "Gtk/ButtonImages"
|
||||
GtkStringMenuBarAccel = "Gtk/MenuBarAccel"
|
||||
GtkBoolEnableAnimations = "Gtk/EnableAnimations"
|
||||
GtkBoolShowInputMethodMenu = "Gtk/ShowInputMethodMenu"
|
||||
GtkBoolShowUnicodeMenu = "Gtk/ShowUnicodeMenu"
|
||||
GtkBoolAutoMnemonics = "Gtk/AutoMnemonics"
|
||||
GtkIntRecentFilesMaxAge = "Gtk/RecentFilesMaxAge"
|
||||
GtkBoolEnableRecentFiles = "Gtk/RecentFilesEnabled"
|
||||
GtkThemeName = "Gtk/GtkThemeName"
|
||||
GtkCursorTheme = "Gtk/CursorThemeName"
|
||||
GtkFontName = "Gtk/FontName"
|
||||
GtkKeyTheme = "Gtk/KeyThemeName"
|
||||
GtkColorPalette = "Gtk/ColorPalette"
|
||||
GtkToolbarStyle = "Gtk/ToolbarStyle"
|
||||
GtkToolbarIconSize = "Gtk/ToolbarIconSize"
|
||||
GtkColorScheme = "Gtk/ColorScheme"
|
||||
GtkIMPreeditStyle = "Gtk/IMPreeditStyle"
|
||||
GtkIMStatusStyle = "Gtk/IMStatusStyle"
|
||||
GtkIMModule = "Gtk/IMModule"
|
||||
GtkMenuBarAccel = "Gtk/MenuBarAccel"
|
||||
|
||||
XftBoolAntialias = "xft/Antialias"
|
||||
XftBoolHinting = "xft/HintStyle"
|
||||
XftStringHintStyle = "xft/HintStyle"
|
||||
XftStringRgba = "xft/RGBA"
|
||||
XftHintStyle = "xft/HintStyle"
|
||||
XftRgba = "xft/RGBA"
|
||||
|
||||
//integer
|
||||
NetCursorBlinkTime = "Net/CursorBlinkTime"
|
||||
NetCursorBlinkTimeout = "Net/CursorBlinkTimeout"
|
||||
NetDoubleClick = "Net/DoubleClickTime"
|
||||
NetDragThreshold = "Net/DndDragThreshold"
|
||||
|
||||
GtkCursorThemeSize = "Gtk/CursorThemeSize"
|
||||
GtkTimeoutInitial = "Gtk/TimeoutInitial"
|
||||
GtkTimeoutRepeat = "Gtk/TimeoutRepeat"
|
||||
GtkRecentFilesMaxAge = "Gtk/RecentFilesMaxAge"
|
||||
|
||||
//bool
|
||||
NetCursorBlink = "Net/CursorBlink"
|
||||
NetEnableEventSounds = "Net/EnableEventSounds"
|
||||
NetEnableInputFeedbackSounds = "Net/EnableInputFeedbackSounds"
|
||||
|
||||
GtkCanChangeAccels = "Gtk/CanChangeAccels"
|
||||
GtkMenuImages = "Gtk/MenuImages"
|
||||
GtkButtonImages = "Gtk/ButtonImages"
|
||||
GtkEnableAnimations = "Gtk/EnableAnimations"
|
||||
GtkShowInputMethodMenu = "Gtk/ShowInputMethodMenu"
|
||||
GtkShowUnicodeMenu = "Gtk/ShowUnicodeMenu"
|
||||
GtkAutoMnemonics = "Gtk/AutoMnemonics"
|
||||
GtkEnableRecentFiles = "Gtk/RecentFilesEnabled"
|
||||
|
||||
XftAntialias = "xft/Antialias"
|
||||
XftHinting = "xft/HintStyle"
|
||||
)
|
||||
|
||||
var (
|
||||
errUninitialized = fmt.Errorf("XSettings uninitialized")
|
||||
)
|
||||
type XSProxy struct {
|
||||
xs *sessionmanager.XSettings
|
||||
cnt uint32
|
||||
locker sync.Mutex
|
||||
}
|
||||
|
||||
var _xsettings *sessionmanager.XSettings
|
||||
var _proxy *XSProxy
|
||||
|
||||
var refXSettings, unrefXSetting = func() (func(), func()) {
|
||||
var cnt int = 0
|
||||
var locker sync.Mutex
|
||||
|
||||
return func() {
|
||||
locker.Lock()
|
||||
cnt++
|
||||
locker.Unlock()
|
||||
}, func() {
|
||||
locker.Lock()
|
||||
cnt--
|
||||
if cnt == 0 {
|
||||
sessionmanager.DestroyXSettings(_xsettings)
|
||||
_xsettings = nil
|
||||
}
|
||||
locker.Unlock()
|
||||
}
|
||||
}()
|
||||
|
||||
// Must be called before using other methods
|
||||
func InitXSettings() error {
|
||||
if _xsettings != nil {
|
||||
return nil
|
||||
func NewXSProxy() (*XSProxy, error) {
|
||||
if _proxy != nil {
|
||||
_proxy.refer()
|
||||
return _proxy, nil
|
||||
}
|
||||
|
||||
xsettings, err := sessionmanager.NewXSettings(
|
||||
xs, err := sessionmanager.NewXSettings(
|
||||
"com.deepin.SessionManager",
|
||||
"/com/deepin/XSettings",
|
||||
)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_xsettings = xsettings
|
||||
refXSettings()
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func Unref() {
|
||||
unrefXSetting()
|
||||
}
|
||||
|
||||
func SetString(name string, value string) error {
|
||||
if _xsettings == nil {
|
||||
return errUninitialized
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return _xsettings.SetString(name, value)
|
||||
_proxy = &XSProxy{xs: xs}
|
||||
_proxy.refer()
|
||||
|
||||
return _proxy, nil
|
||||
}
|
||||
|
||||
func SetInteger(name string, value uint32) error {
|
||||
if _xsettings == nil {
|
||||
return errUninitialized
|
||||
func (proxy *XSProxy) Free() {
|
||||
proxy.unref()
|
||||
}
|
||||
|
||||
func (proxy *XSProxy) SetString(name, value string) error {
|
||||
return proxy.xs.SetString(name, value)
|
||||
}
|
||||
|
||||
func (proxy *XSProxy) SetInteger(name string, value uint32) error {
|
||||
return proxy.xs.SetInteger(name, value)
|
||||
}
|
||||
|
||||
func (proxy *XSProxy) SetColor(name string, value []byte) error {
|
||||
return proxy.xs.SetColor(name, value)
|
||||
}
|
||||
|
||||
func (proxy *XSProxy) GetString(name string) (string, error) {
|
||||
v, _, err := proxy.xs.GetString(name)
|
||||
return v, err
|
||||
}
|
||||
|
||||
func (proxy *XSProxy) GetInteger(name string) (uint32, error) {
|
||||
v, _, err := proxy.xs.GetInteger(name)
|
||||
return v, err
|
||||
}
|
||||
|
||||
func (proxy *XSProxy) GetColor(name string) ([]byte, error) {
|
||||
v, _, err := proxy.xs.GetColor(name)
|
||||
return v, err
|
||||
}
|
||||
|
||||
func (proxy *XSProxy) refer() {
|
||||
proxy.locker.Lock()
|
||||
defer proxy.locker.Unlock()
|
||||
|
||||
proxy.cnt++
|
||||
}
|
||||
|
||||
func (proxy *XSProxy) unref() {
|
||||
proxy.locker.Lock()
|
||||
defer proxy.locker.Unlock()
|
||||
|
||||
proxy.cnt--
|
||||
if proxy.cnt == 0 {
|
||||
sessionmanager.DestroyXSettings(proxy.xs)
|
||||
proxy = nil
|
||||
}
|
||||
|
||||
return _xsettings.SetInteger(name, value)
|
||||
}
|
||||
|
||||
func SetColor(name string, value []byte) error {
|
||||
if _xsettings == nil {
|
||||
return errUninitialized
|
||||
}
|
||||
|
||||
return _xsettings.SetColor(name, value)
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user