xsettings: add XSProxy

- add all sessionmanager xsettings methods

Change-Id: I7c1885dec8cce9c307dc44b665a1a8abad195df2
This commit is contained in:
jouyouyun 2015-03-12 14:36:46 +08:00
parent f2121452b9
commit 7d04637f5c
6 changed files with 146 additions and 113 deletions

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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
}

View File

@ -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) {

View File

@ -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)
}