mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-04 17:33:05 +00:00
Modify Start/Stop
- Fixed 'G_CRITICAL' Error - Replace 'Fatal' with 'Error' - No longer write gtk2/gtk3 configure file tower: https://tower.im/projects/8f19f0bf0e754f0b82ef2c24bc230973/todos/cc84bedc05d744bd82db317829ebcfab/ Change-Id: I26d861423cac5524ef0061de569e463be4ee660b
This commit is contained in:
parent
d7d7d844dc
commit
ef8674f58f
@ -118,6 +118,9 @@ func (m *Manager) modifyCustomTheme(info *Theme) bool {
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
|
||||
m.wLocker.Lock()
|
||||
defer m.wLocker.Unlock()
|
||||
ok := dutils.WriteStringToKeyFile(filename, contents)
|
||||
if newFile && ok {
|
||||
touchFile()
|
||||
|
@ -26,7 +26,6 @@ import (
|
||||
"os"
|
||||
"path"
|
||||
. "pkg.linuxdeepin.com/dde-daemon/appearance/utils"
|
||||
"pkg.linuxdeepin.com/lib/gio-2.0"
|
||||
"pkg.linuxdeepin.com/lib/glib-2.0"
|
||||
"pkg.linuxdeepin.com/lib/graphic"
|
||||
dutils "pkg.linuxdeepin.com/lib/utils"
|
||||
@ -88,8 +87,9 @@ func (bg *Background) GetInfoByName(name string) (PathInfo, error) {
|
||||
}
|
||||
|
||||
func (bg *Background) Set(uri string) error {
|
||||
settings := gio.NewSettings("com.deepin.dde.personalization")
|
||||
defer settings.Unref()
|
||||
settings := NewGSettings("com.deepin.dde.personalization")
|
||||
defer Unref(settings)
|
||||
|
||||
value := settings.GetString(settingsKeyPictureURI)
|
||||
if isBackgroundSame(uri, value) {
|
||||
return nil
|
||||
|
@ -49,8 +49,3 @@ func (*testWrapper) TestInfoList(c *C.C) {
|
||||
list := getThemeList(nil, userDirs)
|
||||
c.Check(len(list), C.Equals, 1)
|
||||
}
|
||||
|
||||
func (*testWrapper) TestWriteConfig(c *C.C) {
|
||||
c.Check(setGtk2Theme("testdata/gtkrc-2.0", "Deepin"), C.Not(C.NotNil))
|
||||
c.Check(setGtk3Theme("testdata/settings.ini", "Deepin"), C.Not(C.NotNil))
|
||||
}
|
||||
|
@ -32,7 +32,7 @@ import (
|
||||
"os"
|
||||
"path"
|
||||
. "pkg.linuxdeepin.com/dde-daemon/appearance/utils"
|
||||
xsettings "pkg.linuxdeepin.com/dde-daemon/xsettings_wrapper"
|
||||
"pkg.linuxdeepin.com/dde-daemon/xsettings"
|
||||
dutils "pkg.linuxdeepin.com/lib/utils"
|
||||
"unsafe"
|
||||
)
|
||||
@ -105,8 +105,6 @@ func (cursor *CursorTheme) Set(theme string) error {
|
||||
|
||||
// Ignore xsettings error
|
||||
setThemeViaXSettings(theme)
|
||||
setGtk2Theme(GetUserGtk2Config(), theme)
|
||||
setGtk3Theme(GetUserGtk3Config(), theme)
|
||||
fixedQtCursor(theme)
|
||||
|
||||
dir := path.Join(os.Getenv("HOME"), ".icons/default")
|
||||
@ -145,6 +143,8 @@ func (cursor *CursorTheme) Destroy() {
|
||||
|
||||
cursor.watcher.EndWatch()
|
||||
cursor.watcher = nil
|
||||
xsettings.Unref()
|
||||
|
||||
}
|
||||
|
||||
func (cursor *CursorTheme) GetNameStrList() []string {
|
||||
@ -185,14 +185,6 @@ func setThemeViaXSettings(theme string) error {
|
||||
return xsettings.SetString(xsettings.GtkStringCursorTheme, theme)
|
||||
}
|
||||
|
||||
func setGtk2Theme(config, theme string) error {
|
||||
return WriteUserGtk2Config(config, "gtk-cursor-theme-name", theme)
|
||||
}
|
||||
|
||||
func setGtk3Theme(config, theme string) error {
|
||||
return WriteUserGtk3Config(config, "gtk-cursor-theme-name", theme)
|
||||
}
|
||||
|
||||
func fixedQtCursor(theme string) error {
|
||||
ctheme := C.CString(theme)
|
||||
ret := C.apply_qt_cursor(ctheme)
|
||||
|
@ -1,15 +0,0 @@
|
||||
gtk-theme-name="Deepin"
|
||||
gtk-icon-theme-name="Deepin"
|
||||
gtk-font-name="WenQuanYi Micro Hei 9"
|
||||
gtk-cursor-theme-name="Deepin"
|
||||
gtk-cursor-theme-size=0
|
||||
gtk-toolbar-style=GTK_TOOLBAR_ICONS
|
||||
gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR
|
||||
gtk-button-images=1
|
||||
gtk-menu-images=1
|
||||
gtk-enable-event-sounds=0
|
||||
gtk-enable-input-feedback-sounds=0
|
||||
gtk-xft-antialias=1
|
||||
gtk-xft-hinting=1
|
||||
gtk-xft-hintstyle="hintnone"
|
||||
gtk-xft-rgba="none"
|
@ -26,7 +26,6 @@ import (
|
||||
"os"
|
||||
"path"
|
||||
. "pkg.linuxdeepin.com/dde-daemon/appearance/utils"
|
||||
"pkg.linuxdeepin.com/lib/gio-2.0"
|
||||
dutils "pkg.linuxdeepin.com/lib/utils"
|
||||
)
|
||||
|
||||
@ -86,7 +85,9 @@ func (dtheme *DeepinTheme) Set(name string) error {
|
||||
return errInvalidTheme
|
||||
}
|
||||
|
||||
settings := gio.NewSettings("com.deepin.dde.personalization")
|
||||
settings := NewGSettings("com.deepin.dde.personalization")
|
||||
defer Unref(settings)
|
||||
|
||||
value := settings.GetString("current-theme")
|
||||
if value == name {
|
||||
return nil
|
||||
|
@ -52,6 +52,4 @@ func (*testWrapper) TestInfoList(c *C.C) {
|
||||
|
||||
func (*testWrapper) TestWriteConfig(c *C.C) {
|
||||
c.Check(setQt4Theme("testdata/Trolltech.conf"), C.Not(C.NotNil))
|
||||
c.Check(setGtk2Theme("testdata/gtkrc-2.0", "Deepin"), C.Not(C.NotNil))
|
||||
c.Check(setGtk3Theme("testdata/settings.ini", "Deepin"), C.Not(C.NotNil))
|
||||
}
|
||||
|
@ -26,7 +26,7 @@ import (
|
||||
"os"
|
||||
"path"
|
||||
. "pkg.linuxdeepin.com/dde-daemon/appearance/utils"
|
||||
xsettings "pkg.linuxdeepin.com/dde-daemon/xsettings_wrapper"
|
||||
"pkg.linuxdeepin.com/dde-daemon/xsettings"
|
||||
dutils "pkg.linuxdeepin.com/lib/utils"
|
||||
)
|
||||
|
||||
@ -36,6 +36,8 @@ const (
|
||||
|
||||
systemThumbPath = "/usr/share/personalization/thumbnail/WindowThemes"
|
||||
userThumbPath = ".local/share/personalization/thumbnail/WindowThemes"
|
||||
|
||||
wmGSettingsSchema = "org.gnome.desktop.wm.preferences"
|
||||
)
|
||||
|
||||
var (
|
||||
@ -70,7 +72,6 @@ func NewGtkTheme(handler func([]string)) *GtkTheme {
|
||||
go gtk.watcher.StartWatch()
|
||||
}
|
||||
xsettings.InitXSettings()
|
||||
InitWMSettings()
|
||||
|
||||
return gtk
|
||||
}
|
||||
@ -99,8 +100,6 @@ func (gtk *GtkTheme) Set(theme string) error {
|
||||
|
||||
setCompizTheme(theme)
|
||||
setQt4Theme(GetUserQt4Config())
|
||||
setGtk2Theme(GetUserGtk2Config(), theme)
|
||||
setGtk3Theme(GetUserGtk3Config(), theme)
|
||||
|
||||
return nil
|
||||
}
|
||||
@ -124,6 +123,7 @@ func (gtk *GtkTheme) Destroy() {
|
||||
|
||||
gtk.watcher.EndWatch()
|
||||
gtk.watcher = nil
|
||||
xsettings.Unref()
|
||||
}
|
||||
|
||||
func (gtk *GtkTheme) GetNameStrList() []string {
|
||||
@ -214,15 +214,13 @@ func setQt4Theme(config string) error {
|
||||
}
|
||||
|
||||
func setCompizTheme(theme string) {
|
||||
WMSetString(WMThemeName, theme)
|
||||
}
|
||||
settings := CheckAndNewGSettings(wmGSettingsSchema)
|
||||
if settings == nil {
|
||||
return
|
||||
}
|
||||
|
||||
func setGtk2Theme(config, theme string) error {
|
||||
return WriteUserGtk2Config(config, "gtk-theme-name", theme)
|
||||
}
|
||||
|
||||
func setGtk3Theme(config, theme string) error {
|
||||
return WriteUserGtk3Config(config, "gtk-theme-name", theme)
|
||||
settings.SetString("theme", theme)
|
||||
//Unref(settings)
|
||||
}
|
||||
|
||||
func getDirList() []string {
|
||||
|
15
appearance/factory/gtk_theme/testdata/gtkrc-2.0
vendored
15
appearance/factory/gtk_theme/testdata/gtkrc-2.0
vendored
@ -1,15 +0,0 @@
|
||||
gtk-theme-name="Deepin"
|
||||
gtk-icon-theme-name="Faenza"
|
||||
gtk-font-name="WenQuanYi Micro Hei 9"
|
||||
gtk-cursor-theme-name="Deepin-Cursor"
|
||||
gtk-cursor-theme-size=0
|
||||
gtk-toolbar-style=GTK_TOOLBAR_ICONS
|
||||
gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR
|
||||
gtk-button-images=1
|
||||
gtk-menu-images=1
|
||||
gtk-enable-event-sounds=0
|
||||
gtk-enable-input-feedback-sounds=0
|
||||
gtk-xft-antialias=1
|
||||
gtk-xft-hinting=1
|
||||
gtk-xft-hintstyle="hintnone"
|
||||
gtk-xft-rgba="none"
|
@ -1,16 +0,0 @@
|
||||
[Settings]
|
||||
gtk-theme-name=Deepin
|
||||
gtk-icon-theme-name=Deepin
|
||||
gtk-font-name=WenQuanYi Micro Hei 11
|
||||
gtk-cursor-theme-name=Deepin-Cursor
|
||||
gtk-cursor-theme-size=0
|
||||
gtk-toolbar-style=GTK_TOOLBAR_ICONS
|
||||
gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR
|
||||
gtk-button-images=1
|
||||
gtk-menu-images=1
|
||||
gtk-enable-event-sounds=0
|
||||
gtk-enable-input-feedback-sounds=0
|
||||
gtk-xft-antialias=1
|
||||
gtk-xft-hinting=1
|
||||
gtk-xft-hintstyle=hintnone
|
||||
gtk-xft-rgba=none
|
@ -50,11 +50,6 @@ func (*testWrapper) TestInfoList(c *C.C) {
|
||||
c.Check(len(list), C.Equals, 1)
|
||||
}
|
||||
|
||||
func (*testWrapper) TestWriteConfig(c *C.C) {
|
||||
c.Check(setGtk2Theme("testdata/gtkrc-2.0", "Deepin"), C.Not(C.NotNil))
|
||||
c.Check(setGtk3Theme("testdata/settings.ini", "Deepin"), C.Not(C.NotNil))
|
||||
}
|
||||
|
||||
func (*testWrapper) TestIconHidden(c *C.C) {
|
||||
type testEnable struct {
|
||||
filename string
|
||||
|
@ -26,7 +26,7 @@ import (
|
||||
"os"
|
||||
"path"
|
||||
. "pkg.linuxdeepin.com/dde-daemon/appearance/utils"
|
||||
xsettings "pkg.linuxdeepin.com/dde-daemon/xsettings_wrapper"
|
||||
"pkg.linuxdeepin.com/dde-daemon/xsettings"
|
||||
dutils "pkg.linuxdeepin.com/lib/utils"
|
||||
)
|
||||
|
||||
@ -93,8 +93,6 @@ func (icon *IconTheme) Set(theme string) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
setGtk2Theme(GetUserGtk2Config(), theme)
|
||||
setGtk3Theme(GetUserGtk3Config(), theme)
|
||||
|
||||
return nil
|
||||
}
|
||||
@ -118,6 +116,7 @@ func (icon *IconTheme) Destroy() {
|
||||
|
||||
icon.watcher.EndWatch()
|
||||
icon.watcher = nil
|
||||
xsettings.Unref()
|
||||
}
|
||||
|
||||
func (icon *IconTheme) GetNameStrList() []string {
|
||||
@ -203,14 +202,6 @@ func setThemeViaXSettings(theme string) error {
|
||||
return xsettings.SetString(xsettings.NetStringIconTheme, theme)
|
||||
}
|
||||
|
||||
func setGtk2Theme(config, theme string) error {
|
||||
return WriteUserGtk2Config(config, "gtk-icon-theme-name", theme)
|
||||
}
|
||||
|
||||
func setGtk3Theme(config, theme string) error {
|
||||
return WriteUserGtk3Config(config, "gtk-icon-theme-name", theme)
|
||||
}
|
||||
|
||||
func getDirList() []string {
|
||||
var list []string
|
||||
|
||||
|
15
appearance/factory/icon_theme/testdata/gtkrc-2.0
vendored
15
appearance/factory/icon_theme/testdata/gtkrc-2.0
vendored
@ -1,15 +0,0 @@
|
||||
gtk-theme-name="Deepin"
|
||||
gtk-icon-theme-name="Deepin"
|
||||
gtk-font-name="WenQuanYi Micro Hei 9"
|
||||
gtk-cursor-theme-name="Deepin-Cursor"
|
||||
gtk-cursor-theme-size=0
|
||||
gtk-toolbar-style=GTK_TOOLBAR_ICONS
|
||||
gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR
|
||||
gtk-button-images=1
|
||||
gtk-menu-images=1
|
||||
gtk-enable-event-sounds=0
|
||||
gtk-enable-input-feedback-sounds=0
|
||||
gtk-xft-antialias=1
|
||||
gtk-xft-hinting=1
|
||||
gtk-xft-hintstyle="hintnone"
|
||||
gtk-xft-rgba="none"
|
@ -1,16 +0,0 @@
|
||||
[Settings]
|
||||
gtk-theme-name=Deepin
|
||||
gtk-icon-theme-name=Deepin
|
||||
gtk-font-name=WenQuanYi Micro Hei 11
|
||||
gtk-cursor-theme-name=Deepin-Cursor
|
||||
gtk-cursor-theme-size=0
|
||||
gtk-toolbar-style=GTK_TOOLBAR_ICONS
|
||||
gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR
|
||||
gtk-button-images=1
|
||||
gtk-menu-images=1
|
||||
gtk-enable-event-sounds=0
|
||||
gtk-enable-input-feedback-sounds=0
|
||||
gtk-xft-antialias=1
|
||||
gtk-xft-hinting=1
|
||||
gtk-xft-hintstyle=hintnone
|
||||
gtk-xft-rgba=none
|
@ -25,7 +25,6 @@ import (
|
||||
"fmt"
|
||||
"os"
|
||||
. "pkg.linuxdeepin.com/dde-daemon/appearance/utils"
|
||||
"pkg.linuxdeepin.com/lib/gio-2.0"
|
||||
dutils "pkg.linuxdeepin.com/lib/utils"
|
||||
)
|
||||
|
||||
@ -82,10 +81,11 @@ func (sound *SoundTheme) Set(name string) error {
|
||||
return errInvalidTheme
|
||||
}
|
||||
|
||||
settings := gio.NewSettings("com.deepin.dde.personalization")
|
||||
settings := NewGSettings("com.deepin.dde.personalization")
|
||||
defer Unref(settings)
|
||||
|
||||
value := settings.GetString(settingsKeySoundTheme)
|
||||
if value == name {
|
||||
settings.Unref()
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -96,7 +96,6 @@ func (sound *SoundTheme) Set(name string) error {
|
||||
}
|
||||
}
|
||||
|
||||
settings.Unref()
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -22,21 +22,19 @@
|
||||
package fonts
|
||||
|
||||
import (
|
||||
. "pkg.linuxdeepin.com/dde-daemon/appearance/utils"
|
||||
xsettings "pkg.linuxdeepin.com/dde-daemon/xsettings_wrapper"
|
||||
"pkg.linuxdeepin.com/dde-daemon/xsettings"
|
||||
)
|
||||
|
||||
type FontManager struct {
|
||||
//standardList []StyleInfo
|
||||
//monospaceList []StyleInfo
|
||||
standardList []StyleInfo
|
||||
monospaceList []StyleInfo
|
||||
}
|
||||
|
||||
func NewFontManager() *FontManager {
|
||||
font := &FontManager{}
|
||||
|
||||
//font.standardList, font.monospaceList = getStyleInfoList()
|
||||
font.standardList, font.monospaceList = getStyleInfoList()
|
||||
xsettings.InitXSettings()
|
||||
InitWMSettings()
|
||||
|
||||
return font
|
||||
}
|
||||
|
@ -25,17 +25,19 @@ import (
|
||||
"fmt"
|
||||
"os/exec"
|
||||
. "pkg.linuxdeepin.com/dde-daemon/appearance/utils"
|
||||
xsettings "pkg.linuxdeepin.com/dde-daemon/xsettings_wrapper"
|
||||
"pkg.linuxdeepin.com/dde-daemon/xsettings"
|
||||
dutils "pkg.linuxdeepin.com/lib/utils"
|
||||
)
|
||||
|
||||
const (
|
||||
FontTypeStandard = "font-standard"
|
||||
FontTypeMonospaced = "font-mono"
|
||||
|
||||
wmGSettingsSchema = "org.gnome.desktop.wm.preferences"
|
||||
)
|
||||
|
||||
func (font *FontManager) IsStandardFontValid(name string) bool {
|
||||
for _, info := range getStandardFonts() {
|
||||
for _, info := range font.standardList {
|
||||
if name == info.Id {
|
||||
return true
|
||||
}
|
||||
@ -45,7 +47,7 @@ func (font *FontManager) IsStandardFontValid(name string) bool {
|
||||
}
|
||||
|
||||
func (font *FontManager) IsMonospacedFontValid(name string) bool {
|
||||
for _, info := range getMonospaceFonts() {
|
||||
for _, info := range font.monospaceList {
|
||||
if name == info.Id {
|
||||
return true
|
||||
}
|
||||
@ -73,12 +75,12 @@ func (font *FontManager) Set(fontType, name string, size int32) {
|
||||
}
|
||||
|
||||
xsettings.SetString(xsettings.GtkStringFontName, value)
|
||||
WMSetString(WMTitlebarFont, value)
|
||||
settings := CheckAndNewGSettings(wmGSettingsSchema)
|
||||
if settings != nil {
|
||||
settings.SetString("titlebar-font", value)
|
||||
//Unref(settings)
|
||||
}
|
||||
setQt4Font(GetUserQt4Config(), name, size)
|
||||
WriteUserGtk3Config(GetUserGtk3Config(),
|
||||
"gtk-font-name", value)
|
||||
WriteUserGtk2Config(GetUserGtk2Config(),
|
||||
"gtk-font-name", value)
|
||||
case FontTypeMonospaced:
|
||||
if !font.IsMonospacedFontValid(name) ||
|
||||
!font.IsFontSizeValid(size) {
|
||||
@ -101,29 +103,11 @@ func (font *FontManager) SetXft(anti, hinting uint32, hintstyle, rgba string) {
|
||||
xsettings.SetInteger(xsettings.XftBoolHinting, hinting)
|
||||
xsettings.SetString(xsettings.XftStringHintStyle, hintstyle)
|
||||
xsettings.SetString(xsettings.XftStringRgba, rgba)
|
||||
|
||||
WriteUserGtk2Config(GetUserGtk2Config(),
|
||||
"gtk-xft-antialias", fmt.Sprintf("%v", anti))
|
||||
WriteUserGtk2Config(GetUserGtk2Config(),
|
||||
"gtk-xft-hinting", fmt.Sprintf("%v", hinting))
|
||||
WriteUserGtk2Config(GetUserGtk2Config(),
|
||||
"gtk-xft-hintstyle", hintstyle)
|
||||
WriteUserGtk2Config(GetUserGtk2Config(),
|
||||
"gtk-xft-rgba", rgba)
|
||||
|
||||
WriteUserGtk3Config(GetUserGtk3Config(),
|
||||
"gtk-xft-antialias", fmt.Sprintf("%v", anti))
|
||||
WriteUserGtk3Config(GetUserGtk3Config(),
|
||||
"gtk-xft-hinting", fmt.Sprintf("%v", hinting))
|
||||
WriteUserGtk3Config(GetUserGtk3Config(),
|
||||
"gtk-xft-hintstyle", hintstyle)
|
||||
WriteUserGtk3Config(GetUserGtk3Config(),
|
||||
"gtk-xft-rgba", rgba)
|
||||
}
|
||||
|
||||
func (font *FontManager) GetStyleListByName(name string) []string {
|
||||
infos := getStandardFonts()
|
||||
infos = append(infos, getMonospaceFonts()...)
|
||||
infos := font.standardList
|
||||
infos = append(infos, font.monospaceList...)
|
||||
|
||||
return getStyleList(name, infos)
|
||||
}
|
||||
@ -131,14 +115,20 @@ func (font *FontManager) GetStyleListByName(name string) []string {
|
||||
func (font *FontManager) GetNameList(fontType string) []string {
|
||||
switch fontType {
|
||||
case FontTypeStandard:
|
||||
return getNameStrList(getStandardFonts())
|
||||
font.standardList = getStandardFonts()
|
||||
return getNameStrList(font.standardList)
|
||||
case FontTypeMonospaced:
|
||||
return getNameStrList(getMonospaceFonts())
|
||||
font.monospaceList = getMonospaceFonts()
|
||||
return getNameStrList(font.monospaceList)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (font *FontManager) Destroy() {
|
||||
xsettings.Unref()
|
||||
}
|
||||
|
||||
func setQt4Font(config, name string, size int32) {
|
||||
value := fmt.Sprintf("\"%s, %v, -1, 5, 50, 0, 0, 0, 0, 0\"",
|
||||
name, size)
|
||||
|
@ -112,7 +112,7 @@ get_font_info_list (int *num)
|
||||
cnt++;
|
||||
}
|
||||
FcFontSetDestroy(fs);
|
||||
FcFini();
|
||||
FcFini(); // Error: FcCacheFini
|
||||
|
||||
*num = cnt;
|
||||
|
||||
|
@ -55,11 +55,8 @@ func (m *Manager) listenGSettings() {
|
||||
return
|
||||
}
|
||||
|
||||
m.gnomeSettings.Connect("changed", func(s *gio.Settings, key string) {
|
||||
switch key {
|
||||
case "picture-uri":
|
||||
m.bg.Set(m.gnomeSettings.GetString(key))
|
||||
}
|
||||
m.gnomeSettings.Connect("changed::picture-uri", func(s *gio.Settings, key string) {
|
||||
m.bg.Set(m.gnomeSettings.GetString(key))
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -32,15 +32,28 @@ var (
|
||||
|
||||
var _manager *Manager
|
||||
|
||||
func finalize() {
|
||||
logger.EndTracing()
|
||||
_manager.destroy()
|
||||
_manager = nil
|
||||
}
|
||||
|
||||
func Start() {
|
||||
if _manager != nil {
|
||||
return
|
||||
}
|
||||
|
||||
logger.BeginTracing()
|
||||
_manager = NewManager()
|
||||
if _manager == nil {
|
||||
logger.Error("New Manager Failed")
|
||||
logger.EndTracing()
|
||||
return
|
||||
}
|
||||
err := dbus.InstallOnSession(_manager)
|
||||
if err != nil {
|
||||
logger.Error(err)
|
||||
finalize()
|
||||
return
|
||||
}
|
||||
}
|
||||
@ -50,7 +63,5 @@ func Stop() {
|
||||
return
|
||||
}
|
||||
|
||||
logger.EndTracing()
|
||||
_manager.destroy()
|
||||
_manager = nil
|
||||
finalize()
|
||||
}
|
||||
|
@ -25,10 +25,11 @@ import (
|
||||
"path"
|
||||
. "pkg.linuxdeepin.com/dde-daemon/appearance/factory"
|
||||
"pkg.linuxdeepin.com/dde-daemon/appearance/fonts"
|
||||
. "pkg.linuxdeepin.com/dde-daemon/appearance/utils"
|
||||
"pkg.linuxdeepin.com/lib/dbus"
|
||||
"pkg.linuxdeepin.com/lib/dbus/property"
|
||||
"pkg.linuxdeepin.com/lib/gio-2.0"
|
||||
dutils "pkg.linuxdeepin.com/lib/utils"
|
||||
"sort"
|
||||
"strings"
|
||||
"sync"
|
||||
)
|
||||
@ -69,7 +70,8 @@ type Manager struct {
|
||||
settings *gio.Settings
|
||||
gnomeSettings *gio.Settings
|
||||
|
||||
lock sync.Mutex
|
||||
lock sync.Mutex
|
||||
wLocker sync.Mutex
|
||||
}
|
||||
|
||||
func NewManager() *Manager {
|
||||
@ -92,7 +94,7 @@ func NewManager() *Manager {
|
||||
m.setPropGreeterThemeList(m.greeter.GetNameStrList())
|
||||
m.setPropBackgroundList(m.bg.GetNameStrList())
|
||||
|
||||
m.settings = gio.NewSettings("com.deepin.dde.personalization")
|
||||
m.settings = NewGSettings("com.deepin.dde.personalization")
|
||||
m.CurrentTheme = property.NewGSettingsStringProperty(
|
||||
m, "CurrentTheme",
|
||||
m.settings, deepinGSKeyTheme)
|
||||
@ -100,9 +102,8 @@ func NewManager() *Manager {
|
||||
m, "GreeterTheme",
|
||||
m.settings, deepinGSKeyGreeter)
|
||||
|
||||
if dutils.IsGSchemaExist("org.gnome.desktop.background") {
|
||||
m.gnomeSettings = gio.NewSettings("org.gnome.desktop.background")
|
||||
}
|
||||
m.gnomeSettings = CheckAndNewGSettings("org.gnome.desktop.background")
|
||||
|
||||
m.themeObjMap = make(map[string]*Theme)
|
||||
m.listenGSettings()
|
||||
m.rebuildThemes()
|
||||
@ -167,16 +168,18 @@ func (m *Manager) destroy() {
|
||||
m.sound.Destroy()
|
||||
m.bg.Destroy()
|
||||
m.greeter.Destroy()
|
||||
m.font.Destroy()
|
||||
|
||||
m.settings.Unref()
|
||||
if m.gnomeSettings != nil {
|
||||
m.gnomeSettings.Unref()
|
||||
}
|
||||
Unref(m.settings)
|
||||
Unref(m.gnomeSettings)
|
||||
|
||||
// if dbus.InstallOnSession() not called, what will happen?
|
||||
// Now(2014.14.18) it is ok.
|
||||
dbus.UnInstallObject(m)
|
||||
}
|
||||
|
||||
func sortNameByDeepin(list []string) []string {
|
||||
sort.Strings(list)
|
||||
deepinList := []string{}
|
||||
tmpList := []string{}
|
||||
|
||||
|
113
appearance/utils/gsettings.go
Normal file
113
appearance/utils/gsettings.go
Normal file
@ -0,0 +1,113 @@
|
||||
/**
|
||||
* Copyright (c) 2011 ~ 2014 Deepin, Inc.
|
||||
* 2013 ~ 2014 jouyouyun
|
||||
*
|
||||
* Author: jouyouyun <jouyouwen717@gmail.com>
|
||||
* Maintainer: jouyouyun <jouyouwen717@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
**/
|
||||
|
||||
package utils
|
||||
|
||||
import (
|
||||
"pkg.linuxdeepin.com/lib/gio-2.0"
|
||||
dutils "pkg.linuxdeepin.com/lib/utils"
|
||||
"sync"
|
||||
)
|
||||
|
||||
var (
|
||||
locker sync.Mutex
|
||||
|
||||
schemaGSettingsMap = make(map[string]*gio.Settings)
|
||||
gsettingsCountMap = make(map[*gio.Settings]int)
|
||||
)
|
||||
|
||||
func NewGSettings(schema string) *gio.Settings {
|
||||
s, ok := schemaGSettingsMap[schema]
|
||||
if !ok {
|
||||
return newGsettings(schema, false)
|
||||
}
|
||||
|
||||
locker.Lock()
|
||||
gsettingsCountMap[s]++
|
||||
locker.Unlock()
|
||||
|
||||
return s
|
||||
}
|
||||
|
||||
func CheckAndNewGSettings(schema string) *gio.Settings {
|
||||
s, ok := schemaGSettingsMap[schema]
|
||||
if !ok {
|
||||
return newGsettings(schema, true)
|
||||
}
|
||||
|
||||
locker.Lock()
|
||||
gsettingsCountMap[s]++
|
||||
locker.Unlock()
|
||||
|
||||
return s
|
||||
}
|
||||
|
||||
func Unref(s *gio.Settings) {
|
||||
if s == nil {
|
||||
return
|
||||
}
|
||||
|
||||
_, ok := gsettingsCountMap[s]
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
|
||||
locker.Lock()
|
||||
gsettingsCountMap[s]--
|
||||
if gsettingsCountMap[s] == 0 {
|
||||
delete(gsettingsCountMap, s)
|
||||
deleteSchemaByGSettings(s)
|
||||
s.Unref()
|
||||
s = nil
|
||||
}
|
||||
locker.Unlock()
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func newGsettings(schema string, check bool) *gio.Settings {
|
||||
if check {
|
||||
if !dutils.IsGSchemaExist(schema) {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
s := gio.NewSettings(schema)
|
||||
|
||||
locker.Lock()
|
||||
schemaGSettingsMap[schema] = s
|
||||
gsettingsCountMap[s]++
|
||||
locker.Unlock()
|
||||
|
||||
return s
|
||||
}
|
||||
|
||||
func deleteSchemaByGSettings(s *gio.Settings) {
|
||||
var schema string
|
||||
for k, v := range schemaGSettingsMap {
|
||||
if v == s {
|
||||
schema = k
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
delete(schemaGSettingsMap, schema)
|
||||
}
|
@ -23,12 +23,8 @@ package utils
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path"
|
||||
dutils "pkg.linuxdeepin.com/lib/utils"
|
||||
"regexp"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -42,89 +38,7 @@ var (
|
||||
errWriteKeyFile = fmt.Errorf("Write key to keyfile failed")
|
||||
)
|
||||
|
||||
func GetUserGtk3Config() string {
|
||||
dir := path.Join(dutils.GetConfigDir(), "gtk-3.0")
|
||||
if !dutils.IsFileExist(dir) {
|
||||
err := os.MkdirAll(dir, dirFileMode)
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
}
|
||||
return path.Join(dir, "settings.ini")
|
||||
}
|
||||
|
||||
func GetUserGtk2Config() string {
|
||||
return path.Join(os.Getenv("HOME"), ".gtkrc-2.0")
|
||||
}
|
||||
|
||||
func GetUserQt4Config() string {
|
||||
dir := dutils.GetConfigDir()
|
||||
return path.Join(dir, "Trolltech.conf")
|
||||
}
|
||||
|
||||
func WriteUserGtk3Config(filename, key, value string) error {
|
||||
if len(filename) == 0 || len(key) == 0 ||
|
||||
len(value) == 0 {
|
||||
return errInvalidArgs
|
||||
}
|
||||
|
||||
ok := dutils.WriteKeyToKeyFile(filename, "Settings", key, value)
|
||||
if !ok {
|
||||
return errWriteKeyFile
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func WriteUserGtk2Config(filename, key, value string) error {
|
||||
if len(filename) == 0 || len(key) == 0 ||
|
||||
len(value) == 0 {
|
||||
return errInvalidArgs
|
||||
}
|
||||
|
||||
var line string
|
||||
switch key {
|
||||
case "gtk-theme-name", "gtk-icon-theme-name",
|
||||
"gtk-font-name", "gtk-cursor-theme-name",
|
||||
"gtk-xft-hintstyle", "gtk-xft-rgba":
|
||||
line = key + "=\"" + value + "\""
|
||||
default:
|
||||
line = key + "=" + value
|
||||
}
|
||||
|
||||
if !dutils.IsFileExist(filename) {
|
||||
return ioutil.WriteFile(filename, []byte(line), regularFileMode)
|
||||
}
|
||||
|
||||
return writeLineToFile(filename, "^"+key+"=", line)
|
||||
}
|
||||
|
||||
func writeLineToFile(filename, key, value string) error {
|
||||
contents, err := ioutil.ReadFile(filename)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var (
|
||||
tmpStr string
|
||||
found bool
|
||||
)
|
||||
lines := strings.Split(string(contents), "\n")
|
||||
for i, line := range lines {
|
||||
if i != 0 {
|
||||
tmpStr += "\n"
|
||||
}
|
||||
if ok, _ := regexp.MatchString(key, line); ok {
|
||||
tmpStr += value
|
||||
found = true
|
||||
continue
|
||||
}
|
||||
tmpStr += line
|
||||
}
|
||||
|
||||
if !found {
|
||||
return errInvalidKey
|
||||
}
|
||||
|
||||
return ioutil.WriteFile(filename, []byte(tmpStr), regularFileMode)
|
||||
}
|
||||
|
15
appearance/utils/testdata/gtkrc-2.0
vendored
15
appearance/utils/testdata/gtkrc-2.0
vendored
@ -1,15 +0,0 @@
|
||||
gtk-theme-name="Deepin"
|
||||
gtk-icon-theme-name="Faenza"
|
||||
gtk-font-name="WenQuanYi Micro Hei 9"
|
||||
gtk-cursor-theme-name="Deepin-Cursor"
|
||||
gtk-cursor-theme-size=0
|
||||
gtk-toolbar-style=GTK_TOOLBAR_ICONS
|
||||
gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR
|
||||
gtk-button-images=1
|
||||
gtk-menu-images=1
|
||||
gtk-enable-event-sounds=0
|
||||
gtk-enable-input-feedback-sounds=0
|
||||
gtk-xft-antialias=1
|
||||
gtk-xft-hinting=1
|
||||
gtk-xft-hintstyle="hintnone"
|
||||
gtk-xft-rgba="none"
|
16
appearance/utils/testdata/settings.ini
vendored
16
appearance/utils/testdata/settings.ini
vendored
@ -1,16 +0,0 @@
|
||||
[Settings]
|
||||
gtk-theme-name=Deepin
|
||||
gtk-icon-theme-name=Deepin
|
||||
gtk-font-name=WenQuanYi Micro Hei 11
|
||||
gtk-cursor-theme-name=Deepin-Cursor
|
||||
gtk-cursor-theme-size=0
|
||||
gtk-toolbar-style=GTK_TOOLBAR_ICONS
|
||||
gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR
|
||||
gtk-button-images=1
|
||||
gtk-menu-images=1
|
||||
gtk-enable-event-sounds=0
|
||||
gtk-enable-input-feedback-sounds=0
|
||||
gtk-xft-antialias=1
|
||||
gtk-xft-hinting=1
|
||||
gtk-xft-hintstyle=hintnone
|
||||
gtk-xft-rgba=none
|
@ -23,7 +23,6 @@ package utils
|
||||
|
||||
import (
|
||||
C "launchpad.net/gocheck"
|
||||
"os"
|
||||
"testing"
|
||||
)
|
||||
|
||||
@ -84,30 +83,3 @@ func (*testWrapper) TestSeedValid(c *C.C) {
|
||||
c.Check(isThumbSeedValid("--cursor"), C.Equals, true)
|
||||
c.Check(isThumbSeedValid("--font"), C.Equals, false)
|
||||
}
|
||||
|
||||
func (*testWrapper) TestGetConfig(c *C.C) {
|
||||
homeDir := os.Getenv("HOME")
|
||||
os.Setenv("HOME", "testdata")
|
||||
c.Check(GetUserGtk2Config(), C.Equals, "testdata/.gtkrc-2.0")
|
||||
os.Setenv("HOME", homeDir)
|
||||
}
|
||||
|
||||
func (*testWrapper) TestWriteConfig(c *C.C) {
|
||||
c.Check(
|
||||
WriteUserGtk3Config("testdata/settings.ini",
|
||||
"gtk-theme-name", "Deepin"),
|
||||
C.Not(C.NotNil))
|
||||
c.Check(
|
||||
WriteUserGtk3Config("testdata/settings.ini",
|
||||
"", ""),
|
||||
C.NotNil)
|
||||
|
||||
c.Check(
|
||||
WriteUserGtk2Config("testdata/gtkrc-2.0",
|
||||
"gtk-theme-name", "Deepin"),
|
||||
C.Not(C.NotNil))
|
||||
c.Check(
|
||||
WriteUserGtk3Config("testdata/gtkrc-2.0",
|
||||
"", ""),
|
||||
C.NotNil)
|
||||
}
|
||||
|
@ -1,64 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) 2011 ~ 2014 Deepin, Inc.
|
||||
* 2013 ~ 2014 jouyouyun
|
||||
*
|
||||
* Author: jouyouyun <jouyouwen717@gmail.com>
|
||||
* Maintainer: jouyouyun <jouyouwen717@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
**/
|
||||
|
||||
package utils
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"pkg.linuxdeepin.com/lib/gio-2.0"
|
||||
dutils "pkg.linuxdeepin.com/lib/utils"
|
||||
)
|
||||
|
||||
const (
|
||||
WMThemeName = "theme"
|
||||
WMTitlebarFont = "titlebar-font"
|
||||
)
|
||||
|
||||
const (
|
||||
wmGSettingsSchema = "org.gnome.desktop.wm.preferences"
|
||||
)
|
||||
|
||||
var (
|
||||
errSchemaNotExist = fmt.Errorf("GSettings schema not exist")
|
||||
)
|
||||
|
||||
var _wmSettings *gio.Settings
|
||||
|
||||
func InitWMSettings() error {
|
||||
if _wmSettings != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
if !dutils.IsGSchemaExist(wmGSettingsSchema) {
|
||||
return errSchemaNotExist
|
||||
}
|
||||
|
||||
_wmSettings = gio.NewSettings(wmGSettingsSchema)
|
||||
return nil
|
||||
}
|
||||
|
||||
func WMSetString(key, value string) bool {
|
||||
if _wmSettings == nil {
|
||||
return false
|
||||
}
|
||||
|
||||
return _wmSettings.SetString(key, value)
|
||||
}
|
@ -239,7 +239,17 @@ func (s *Source) SetPort(name string) {
|
||||
|
||||
var _audio *Audio
|
||||
|
||||
func finalize() {
|
||||
_audio.destroy()
|
||||
_audio = nil
|
||||
logger.EndTracing()
|
||||
}
|
||||
|
||||
func Start() {
|
||||
if _audio != nil {
|
||||
return
|
||||
}
|
||||
|
||||
logger.BeginTracing()
|
||||
|
||||
ctx := pulse.GetContext()
|
||||
@ -247,6 +257,7 @@ func Start() {
|
||||
|
||||
if err := dbus.InstallOnSession(_audio); err != nil {
|
||||
logger.Error("Failed InstallOnSession:", err)
|
||||
finalize()
|
||||
return
|
||||
}
|
||||
}
|
||||
@ -256,10 +267,7 @@ func Stop() {
|
||||
return
|
||||
}
|
||||
|
||||
_audio.destroy()
|
||||
_audio = nil
|
||||
|
||||
logger.EndTracing()
|
||||
finalize()
|
||||
}
|
||||
|
||||
var playFeedback = func() func() {
|
||||
|
@ -65,10 +65,10 @@ func listenDaemonSettings() {
|
||||
_daemonSettings.Connect("changed", func(s *gio.Settings, key string) {
|
||||
enable := _daemonSettings.GetBoolean(key)
|
||||
if enable {
|
||||
logger.Info("Enable plugin:", key)
|
||||
logger.Info("-------------Enable plugin:", key)
|
||||
loader.StartPlugin(key)
|
||||
} else {
|
||||
logger.Info("Disable plugin:", key)
|
||||
logger.Info("+++++++++++++Disable plugin:", key)
|
||||
loader.StopPlugin(key)
|
||||
}
|
||||
})
|
||||
|
@ -32,6 +32,10 @@ var (
|
||||
)
|
||||
|
||||
func Start() {
|
||||
if bluetooth != nil {
|
||||
return
|
||||
}
|
||||
|
||||
logger.BeginTracing()
|
||||
|
||||
bluetooth = NewBluetooth()
|
||||
@ -39,6 +43,7 @@ func Start() {
|
||||
if err != nil {
|
||||
// don't panic or fatal here
|
||||
logger.Error("register dbus interface failed: ", err)
|
||||
bluetooth = nil
|
||||
return
|
||||
}
|
||||
|
||||
@ -47,6 +52,11 @@ func Start() {
|
||||
}
|
||||
|
||||
func Stop() {
|
||||
if bluetooth == nil {
|
||||
return
|
||||
}
|
||||
|
||||
DestroyBluetooth(bluetooth)
|
||||
bluetooth = nil
|
||||
logger.EndTracing()
|
||||
}
|
||||
|
@ -27,16 +27,14 @@ static GsdClipboardManager *clip_manager = NULL;
|
||||
int
|
||||
start_clip_manager()
|
||||
{
|
||||
if (clip_manager != NULL) {
|
||||
gsd_clipboard_manager_stop(clip_manager);
|
||||
g_object_unref(G_OBJECT(clip_manager));
|
||||
clip_manager = NULL;
|
||||
if (clip_manager) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
clip_manager = gsd_clipboard_manager_new();
|
||||
if ( clip_manager == NULL ) {
|
||||
g_warning("New Clipboard Manager Failed");
|
||||
return 1;
|
||||
return -1;
|
||||
}
|
||||
|
||||
GError *err = NULL;
|
||||
@ -44,7 +42,7 @@ start_clip_manager()
|
||||
g_warning("Start Clipboard Manager Failed: %s", err->message);
|
||||
g_object_unref(G_OBJECT(clip_manager));
|
||||
clip_manager = NULL;
|
||||
return 1;
|
||||
return -1;
|
||||
}
|
||||
/*gtk_main();*/
|
||||
|
||||
|
@ -26,6 +26,7 @@ import (
|
||||
"pkg.linuxdeepin.com/dde-daemon/datetime/ntp"
|
||||
"pkg.linuxdeepin.com/dde-daemon/datetime/timezone"
|
||||
. "pkg.linuxdeepin.com/dde-daemon/datetime/utils"
|
||||
"pkg.linuxdeepin.com/lib/dbus"
|
||||
)
|
||||
|
||||
var (
|
||||
@ -130,8 +131,13 @@ func (date *DateTime) GetAllZoneInfo() []timezone.ZoneInfo {
|
||||
return timezone.GetZoneInfoList()
|
||||
}
|
||||
|
||||
func (date *DateTime) Destroy() {
|
||||
func (date *DateTime) destroy() {
|
||||
DestroySetDateTime()
|
||||
ntp.FiniNtpModule()
|
||||
date.settings.Unref()
|
||||
dbus.UnInstallObject(date)
|
||||
|
||||
if date.logger != nil {
|
||||
date.logger.EndTracing()
|
||||
}
|
||||
}
|
||||
|
@ -28,7 +28,16 @@ import (
|
||||
|
||||
var _date *DateTime
|
||||
|
||||
func finalize() {
|
||||
_date.destroy()
|
||||
_date = nil
|
||||
}
|
||||
|
||||
func Start() {
|
||||
if _date != nil {
|
||||
return
|
||||
}
|
||||
|
||||
var logger = log.NewLogger(dbusSender)
|
||||
|
||||
logger.BeginTracing()
|
||||
@ -36,11 +45,13 @@ func Start() {
|
||||
_date = NewDateTime(logger)
|
||||
if _date == nil {
|
||||
logger.Error("Create DateTime Failed")
|
||||
logger.EndTracing()
|
||||
return
|
||||
}
|
||||
err := dbus.InstallOnSession(_date)
|
||||
if err != nil {
|
||||
logger.Error("Install DBus For DateTime Failed")
|
||||
finalize()
|
||||
return
|
||||
}
|
||||
}
|
||||
@ -50,7 +61,5 @@ func Stop() {
|
||||
return
|
||||
}
|
||||
|
||||
_date.Destroy()
|
||||
dbus.UnInstallObject(_date)
|
||||
_date = nil
|
||||
finalize()
|
||||
}
|
||||
|
@ -99,6 +99,10 @@ func initAtom() {
|
||||
}
|
||||
|
||||
func Start() {
|
||||
if dockProperty != nil {
|
||||
return
|
||||
}
|
||||
|
||||
logger.BeginTracing()
|
||||
|
||||
initDeepin()
|
||||
|
13
dsc/dsc.go
13
dsc/dsc.go
@ -82,7 +82,13 @@ func getDscConfInfo() (isUpdate bool, duration int32) {
|
||||
|
||||
}
|
||||
|
||||
var running bool
|
||||
|
||||
func Start() {
|
||||
if running {
|
||||
return
|
||||
}
|
||||
|
||||
go setDSCAutoUpdate(time.Duration(time.Minute * 5))
|
||||
|
||||
go func() {
|
||||
@ -95,8 +101,15 @@ func Start() {
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
running = true
|
||||
}
|
||||
|
||||
func Stop() {
|
||||
if !running {
|
||||
return
|
||||
}
|
||||
|
||||
quitFlag <- true
|
||||
running = false
|
||||
}
|
||||
|
@ -32,39 +32,61 @@ const (
|
||||
|
||||
var _m *Manager
|
||||
|
||||
func finalize() {
|
||||
endDeviceListenThread()
|
||||
|
||||
_m.destroy()
|
||||
_m = nil
|
||||
}
|
||||
|
||||
func Start() {
|
||||
if _m != nil {
|
||||
return
|
||||
}
|
||||
|
||||
var logger = log.NewLogger("com.deepin.daemon.InputDevices")
|
||||
logger.BeginTracing()
|
||||
|
||||
if !initDeviceChangedWatcher() {
|
||||
logger.Fatal("Init device changed wacher failed")
|
||||
logger.Error("Init device changed wacher failed")
|
||||
logger.EndTracing()
|
||||
return
|
||||
}
|
||||
|
||||
_m := NewManager(logger)
|
||||
err := dbus.InstallOnSession(_m)
|
||||
if err != nil {
|
||||
logger.Fatal("Install Manager DBus Failed:", err)
|
||||
logger.Error("Install Manager DBus Failed:", err)
|
||||
finalize()
|
||||
return
|
||||
}
|
||||
|
||||
err = dbus.InstallOnSession(_m.mouse)
|
||||
if err != nil {
|
||||
logger.Fatal("Install Mouse DBus Failed:", err)
|
||||
logger.Error("Install Mouse DBus Failed:", err)
|
||||
finalize()
|
||||
return
|
||||
}
|
||||
|
||||
err = dbus.InstallOnSession(_m.touchpad)
|
||||
if err != nil {
|
||||
logger.Fatal("Install Touchpad DBus Failed:", err)
|
||||
logger.Error("Install Touchpad DBus Failed:", err)
|
||||
finalize()
|
||||
return
|
||||
}
|
||||
|
||||
err = dbus.InstallOnSession(_m.kbd)
|
||||
if err != nil {
|
||||
logger.Fatal("Install Keyboard DBus Failed:", err)
|
||||
logger.Error("Install Keyboard DBus Failed:", err)
|
||||
finalize()
|
||||
return
|
||||
}
|
||||
|
||||
err = dbus.InstallOnSession(_m.wacom)
|
||||
if err != nil {
|
||||
logger.Fatal("Install Wacom DBus Failed:", err)
|
||||
logger.Error("Install Wacom DBus Failed:", err)
|
||||
finalize()
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
@ -73,16 +95,5 @@ func Stop() {
|
||||
return
|
||||
}
|
||||
|
||||
if _m.logger != nil {
|
||||
_m.logger.EndTracing()
|
||||
}
|
||||
|
||||
endDeviceListenThread()
|
||||
|
||||
dbus.UnInstallObject(_m.mouse)
|
||||
dbus.UnInstallObject(_m.touchpad)
|
||||
dbus.UnInstallObject(_m.kbd)
|
||||
dbus.UnInstallObject(_m.wacom)
|
||||
dbus.UnInstallObject(_m)
|
||||
_m = nil
|
||||
finalize()
|
||||
}
|
||||
|
@ -70,6 +70,18 @@ func NewManager(l *log.Logger) *Manager {
|
||||
return m
|
||||
}
|
||||
|
||||
func (m *Manager) destroy() {
|
||||
dbus.UnInstallObject(_m.mouse)
|
||||
dbus.UnInstallObject(_m.touchpad)
|
||||
dbus.UnInstallObject(_m.kbd)
|
||||
dbus.UnInstallObject(_m.wacom)
|
||||
dbus.UnInstallObject(_m)
|
||||
|
||||
if _m.logger != nil {
|
||||
_m.logger.EndTracing()
|
||||
}
|
||||
}
|
||||
|
||||
func (m *Manager) GetDBusInfo() dbus.DBusInfo {
|
||||
return dbus.DBusInfo{
|
||||
Dest: dbusSender,
|
||||
|
@ -104,6 +104,8 @@ type Manager struct {
|
||||
|
||||
KeyReleaseEvent func(string)
|
||||
KeyPressEvent func(string)
|
||||
|
||||
mediaKey *MediaKeyManager
|
||||
}
|
||||
|
||||
type MediaKeyManager struct {
|
||||
|
@ -318,17 +318,25 @@ func grabKeyPairs(pairs map[string]string, isGrab bool) {
|
||||
}
|
||||
}
|
||||
|
||||
func grabMediaKeys() {
|
||||
func grabMediaKeys(grab bool) {
|
||||
keyList := mediaGSettings.ListKeys()
|
||||
for _, key := range keyList {
|
||||
value := mediaGSettings.GetString(key)
|
||||
grabKeyPress(X.RootWin(), convertKeysToMods(value))
|
||||
if grab {
|
||||
grabKeyPress(X.RootWin(), convertKeysToMods(value))
|
||||
} else {
|
||||
ungrabKey(X.RootWin(), convertKeysToMods(value))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var pressKeyStr string
|
||||
|
||||
func grabKeyboardAndMouse() {
|
||||
func grabKeyboardAndMouse(m *Manager) {
|
||||
if m == nil {
|
||||
return
|
||||
}
|
||||
|
||||
//go func() {
|
||||
X, err := xgbutil.NewConn()
|
||||
if err != nil {
|
||||
@ -348,7 +356,7 @@ func grabKeyboardAndMouse() {
|
||||
|
||||
xevent.ButtonPressFun(
|
||||
func(X *xgbutil.XUtil, e xevent.ButtonPressEvent) {
|
||||
dbus.Emit(GetManager(), "KeyReleaseEvent", "")
|
||||
dbus.Emit(m, "KeyReleaseEvent", "")
|
||||
ungrabAllMouseButton(X)
|
||||
keybind.UngrabKeyboard(X)
|
||||
logger.Info("Button Press Event")
|
||||
@ -359,7 +367,7 @@ func grabKeyboardAndMouse() {
|
||||
func(X *xgbutil.XUtil, e xevent.KeyPressEvent) {
|
||||
value := parseKeyEnvent(X, e.State, e.Detail)
|
||||
pressKeyStr = value
|
||||
dbus.Emit(GetManager(), "KeyPressEvent", value)
|
||||
dbus.Emit(m, "KeyPressEvent", value)
|
||||
}).Connect(X, X.RootWin())
|
||||
|
||||
xevent.KeyReleaseFun(
|
||||
@ -369,7 +377,7 @@ func grabKeyboardAndMouse() {
|
||||
pressKeyStr = "Super"
|
||||
}
|
||||
|
||||
dbus.Emit(GetManager(), "KeyReleaseEvent", pressKeyStr)
|
||||
dbus.Emit(m, "KeyReleaseEvent", pressKeyStr)
|
||||
pressKeyStr = ""
|
||||
ungrabAllMouseButton(X)
|
||||
keybind.UngrabKeyboard(X)
|
||||
|
@ -92,107 +92,122 @@ func (m *Manager) setCompizSettings(id int32, key, value string) {
|
||||
|
||||
func (m *Manager) listenCompizSettings() {
|
||||
coreSettings.Connect("changed", func(s *gio.Settings, key string) {
|
||||
shortcut := coreSettings.GetString(key)
|
||||
switch key {
|
||||
case "show-desktop-key":
|
||||
shortcut := coreSettings.GetString(key)
|
||||
updateSystemSettings("show-desktop", shortcut)
|
||||
case "close-window-key":
|
||||
shortcut := coreSettings.GetString(key)
|
||||
updateSystemSettings("close", shortcut)
|
||||
case "maximize-window-key":
|
||||
shortcut := coreSettings.GetString(key)
|
||||
updateSystemSettings("maximize", shortcut)
|
||||
case "unmaximize-window-key":
|
||||
shortcut := coreSettings.GetString(key)
|
||||
updateSystemSettings("unmaximize", shortcut)
|
||||
case "minimize-window-key":
|
||||
shortcut := coreSettings.GetString(key)
|
||||
updateSystemSettings("minimize", shortcut)
|
||||
case "toggle-window-shaded-key":
|
||||
shortcut := coreSettings.GetString(key)
|
||||
updateSystemSettings("toggle-shaded", shortcut)
|
||||
case "window-menu-key":
|
||||
shortcut := coreSettings.GetString(key)
|
||||
updateSystemSettings("activate-window-menu", shortcut)
|
||||
}
|
||||
})
|
||||
|
||||
moveSettings.Connect("changed", func(s *gio.Settings, key string) {
|
||||
moveSettings.Connect("changed::initiate-key", func(s *gio.Settings, key string) {
|
||||
shortcut := moveSettings.GetString(key)
|
||||
switch key {
|
||||
case "initiate-key":
|
||||
updateSystemSettings("begin-move", shortcut)
|
||||
}
|
||||
updateSystemSettings("begin-move", shortcut)
|
||||
})
|
||||
|
||||
resizeSettings.Connect("changed", func(s *gio.Settings, key string) {
|
||||
resizeSettings.Connect("changed::initiate-key", func(s *gio.Settings, key string) {
|
||||
shortcut := resizeSettings.GetString(key)
|
||||
switch key {
|
||||
case "initiate-key":
|
||||
updateSystemSettings("begin-resize", shortcut)
|
||||
}
|
||||
updateSystemSettings("begin-resize", shortcut)
|
||||
})
|
||||
|
||||
vpswitchSettings.Connect("changed", func(s *gio.Settings, key string) {
|
||||
shortcut := vpswitchSettings.GetString(key)
|
||||
switch key {
|
||||
case "switch-to-1-key":
|
||||
shortcut := vpswitchSettings.GetString(key)
|
||||
updateSystemSettings("switch-to-workspace-1", shortcut)
|
||||
case "switch-to-2-key":
|
||||
shortcut := vpswitchSettings.GetString(key)
|
||||
updateSystemSettings("switch-to-workspace-2", shortcut)
|
||||
case "switch-to-3-key":
|
||||
shortcut := vpswitchSettings.GetString(key)
|
||||
updateSystemSettings("switch-to-workspace-3", shortcut)
|
||||
case "switch-to-4-key":
|
||||
shortcut := vpswitchSettings.GetString(key)
|
||||
updateSystemSettings("switch-to-workspace-4", shortcut)
|
||||
}
|
||||
})
|
||||
|
||||
putSettings.Connect("changed", func(s *gio.Settings, key string) {
|
||||
shortcut := putSettings.GetString(key)
|
||||
switch key {
|
||||
case "put-viewport-1-key":
|
||||
shortcut := putSettings.GetString(key)
|
||||
updateSystemSettings("put-viewport-1-key", shortcut)
|
||||
case "put-viewport-2-key":
|
||||
shortcut := putSettings.GetString(key)
|
||||
updateSystemSettings("put-viewport-2-key", shortcut)
|
||||
case "put-viewport-3-key":
|
||||
shortcut := putSettings.GetString(key)
|
||||
updateSystemSettings("put-viewport-3-key", shortcut)
|
||||
case "put-viewport-4-key":
|
||||
shortcut := putSettings.GetString(key)
|
||||
updateSystemSettings("put-viewport-4-key", shortcut)
|
||||
}
|
||||
})
|
||||
|
||||
wallSettings.Connect("changed", func(s *gio.Settings, key string) {
|
||||
shortcut := wallSettings.GetString(key)
|
||||
switch key {
|
||||
case "left-key":
|
||||
shortcut := wallSettings.GetString(key)
|
||||
updateSystemSettings("switch-to-workspace-left", shortcut)
|
||||
case "right-key":
|
||||
shortcut := wallSettings.GetString(key)
|
||||
updateSystemSettings("switch-to-workspace-right", shortcut)
|
||||
case "up-key":
|
||||
shortcut := wallSettings.GetString(key)
|
||||
updateSystemSettings("switch-to-workspace-up", shortcut)
|
||||
case "down-key":
|
||||
shortcut := wallSettings.GetString(key)
|
||||
updateSystemSettings("switch-to-workspace-down", shortcut)
|
||||
case "left-window-key":
|
||||
shortcut := wallSettings.GetString(key)
|
||||
updateSystemSettings("move-to-workspace-left", shortcut)
|
||||
case "right-window-key":
|
||||
shortcut := wallSettings.GetString(key)
|
||||
updateSystemSettings("move-to-workspace-right", shortcut)
|
||||
case "up-window-key":
|
||||
shortcut := wallSettings.GetString(key)
|
||||
updateSystemSettings("move-to-workspace-up", shortcut)
|
||||
case "down-window-key":
|
||||
shortcut := wallSettings.GetString(key)
|
||||
updateSystemSettings("move-to-workspace-down", shortcut)
|
||||
}
|
||||
})
|
||||
|
||||
shiftSettings.Connect("changed", func(s *gio.Settings, key string) {
|
||||
shortcut := shiftSettings.GetString(key)
|
||||
switch key {
|
||||
case "next-key":
|
||||
shortcut := shiftSettings.GetString(key)
|
||||
updateSystemSettings("next-key", shortcut)
|
||||
case "prev-key":
|
||||
shortcut := shiftSettings.GetString(key)
|
||||
updateSystemSettings("prev-key", shortcut)
|
||||
}
|
||||
})
|
||||
|
||||
switcherSettings.Connect("changed", func(s *gio.Settings, key string) {
|
||||
shortcut := switcherSettings.GetString(key)
|
||||
switch key {
|
||||
case "next-key":
|
||||
shortcut := switcherSettings.GetString(key)
|
||||
updateSystemSettings("switch-applications", shortcut)
|
||||
case "prev-key":
|
||||
shortcut := switcherSettings.GetString(key)
|
||||
updateSystemSettings("switch-applications-backward", shortcut)
|
||||
}
|
||||
})
|
||||
|
@ -31,20 +31,10 @@ import (
|
||||
"strings"
|
||||
)
|
||||
|
||||
var _mediaManager *MediaKeyManager
|
||||
|
||||
const (
|
||||
CMD_DDE_OSD = "/usr/lib/deepin-daemon/dde-osd "
|
||||
)
|
||||
|
||||
func GetMediaManager() *MediaKeyManager {
|
||||
if _mediaManager == nil {
|
||||
_mediaManager = &MediaKeyManager{}
|
||||
}
|
||||
|
||||
return _mediaManager
|
||||
}
|
||||
|
||||
func (obj *MediaKeyManager) emitMediaSignal(modStr, keyStr string, press bool) bool {
|
||||
switch keyStr {
|
||||
case "XF86MonBrightnessUp":
|
||||
@ -209,7 +199,7 @@ func doAction(action string) {
|
||||
}
|
||||
}
|
||||
|
||||
func (obj *Manager) listenKeyEvents() {
|
||||
func (m *Manager) listenKeyEvents() {
|
||||
xevent.KeyPressFun(
|
||||
func(X *xgbutil.XUtil, e xevent.KeyPressEvent) {
|
||||
modStr := keybind.ModifierString(e.State)
|
||||
@ -218,7 +208,7 @@ func (obj *Manager) listenKeyEvents() {
|
||||
keyStr = "space"
|
||||
}
|
||||
logger.Infof("KeyStr: %s, modStr: %s", keyStr, modStr)
|
||||
if !GetMediaManager().emitMediaSignal(modStr, keyStr, true) {
|
||||
if !m.mediaKey.emitMediaSignal(modStr, keyStr, true) {
|
||||
modStr = deleteSpecialMod(modStr)
|
||||
value := ""
|
||||
if len(modStr) < 1 {
|
||||
@ -247,7 +237,7 @@ func (obj *Manager) listenKeyEvents() {
|
||||
keyStr = "space"
|
||||
}
|
||||
//modStr = deleteSpecialMod(modStr)
|
||||
GetMediaManager().emitMediaSignal(modStr, keyStr, false)
|
||||
m.mediaKey.emitMediaSignal(modStr, keyStr, false)
|
||||
}).Connect(X, X.RootWin())
|
||||
}
|
||||
|
||||
|
@ -43,19 +43,31 @@ var (
|
||||
mediaGSettings *gio.Settings
|
||||
)
|
||||
|
||||
|
||||
func initGSettings() {
|
||||
bindGSettings = gio.NewSettings("com.deepin.dde.keybinding")
|
||||
sysGSettings = gio.NewSettings("com.deepin.dde.keybinding.system")
|
||||
bindGSettings = gio.NewSettings("com.deepin.dde.keybinding")
|
||||
sysGSettings = gio.NewSettings("com.deepin.dde.keybinding.system")
|
||||
mediaGSettings = gio.NewSettings("com.deepin.dde.keybinding.mediakey")
|
||||
}
|
||||
|
||||
func StartKeyBinding() {
|
||||
var err error
|
||||
func finiGSettings() {
|
||||
if bindGSettings != nil {
|
||||
bindGSettings.Unref()
|
||||
}
|
||||
|
||||
if X, err = xgbutil.NewConn(); err != nil {
|
||||
logger.Warning("New XGB Util Failed:", err)
|
||||
panic(err)
|
||||
if sysGSettings != nil {
|
||||
sysGSettings.Unref()
|
||||
}
|
||||
|
||||
if mediaGSettings != nil {
|
||||
mediaGSettings.Unref()
|
||||
}
|
||||
}
|
||||
|
||||
func StartKeyBinding() error {
|
||||
var err error
|
||||
X, err = xgbutil.NewConn()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
keybind.Initialize(X)
|
||||
initXRecord()
|
||||
@ -67,32 +79,82 @@ func StartKeyBinding() {
|
||||
|
||||
grabKeyPairs(getSystemKeyPairs(), true)
|
||||
grabKeyPairs(getCustomKeyPairs(), true)
|
||||
grabMediaKeys()
|
||||
grabMediaKeys(true)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func endKeyBinding() {
|
||||
if X == nil {
|
||||
return
|
||||
}
|
||||
|
||||
stopXRecord()
|
||||
grabMediaKeys(false)
|
||||
grabKeyPairs(getSystemKeyPairs(), false)
|
||||
grabKeyPairs(getCustomKeyPairs(), false)
|
||||
xevent.Quit(X)
|
||||
X = nil
|
||||
}
|
||||
|
||||
var (
|
||||
_manager *Manager
|
||||
)
|
||||
|
||||
func finalize() {
|
||||
finiGSettings()
|
||||
endKeyBinding()
|
||||
|
||||
dbus.UnInstallObject(_manager)
|
||||
_manager = nil
|
||||
logger.EndTracing()
|
||||
}
|
||||
|
||||
func Start() {
|
||||
if _manager != nil {
|
||||
return
|
||||
}
|
||||
|
||||
logger.BeginTracing()
|
||||
initGSettings()
|
||||
|
||||
StartKeyBinding()
|
||||
|
||||
if err := dbus.InstallOnSession(GetManager()); err != nil {
|
||||
logger.Error("Install DBus Failed:", err)
|
||||
panic(err)
|
||||
err := StartKeyBinding()
|
||||
if err != nil {
|
||||
logger.Error("failed start keybinding:", err)
|
||||
logger.EndTracing()
|
||||
finiGSettings()
|
||||
return
|
||||
}
|
||||
|
||||
if err := dbus.InstallOnSession(GetMediaManager()); err != nil {
|
||||
_manager = newManager()
|
||||
if _manager == nil {
|
||||
logger.Error("Create keybinding manager failed")
|
||||
finiGSettings()
|
||||
endKeyBinding()
|
||||
return
|
||||
}
|
||||
|
||||
err = dbus.InstallOnSession(_manager)
|
||||
if err != nil {
|
||||
logger.Error("Install DBus Failed:", err)
|
||||
panic(err)
|
||||
finalize()
|
||||
return
|
||||
}
|
||||
|
||||
err = dbus.InstallOnSession(_manager.mediaKey)
|
||||
if err != nil {
|
||||
logger.Error("Install DBus Failed:", err)
|
||||
finalize()
|
||||
return
|
||||
}
|
||||
|
||||
go xevent.Main(X)
|
||||
}
|
||||
|
||||
func Stop() {
|
||||
logger.EndTracing()
|
||||
if _manager == nil {
|
||||
return
|
||||
}
|
||||
|
||||
stopXRecord()
|
||||
xevent.Quit(X)
|
||||
dbus.UnInstallObject(GetManager())
|
||||
finalize()
|
||||
}
|
||||
|
@ -26,8 +26,6 @@ import (
|
||||
"strings"
|
||||
)
|
||||
|
||||
var _manager *Manager
|
||||
|
||||
func (obj *Manager) Reset() bool {
|
||||
list := sysGSettings.ListKeys()
|
||||
for _, key := range list {
|
||||
@ -150,26 +148,20 @@ func (obj *Manager) GrabSignalShortcut(shortcut, action string, isGrab bool) {
|
||||
}
|
||||
|
||||
func (obj *Manager) GrabKbdAndMouse() {
|
||||
go grabKeyboardAndMouse()
|
||||
go grabKeyboardAndMouse(obj)
|
||||
}
|
||||
|
||||
func newManager() *Manager {
|
||||
obj := &Manager{}
|
||||
obj.idSettingsMap = make(map[int32]*gio.Settings)
|
||||
m := &Manager{}
|
||||
|
||||
obj.listenKeyEvents()
|
||||
obj.listenSettings()
|
||||
obj.listenCompizSettings()
|
||||
obj.listenAllCustomSettings()
|
||||
obj.updateProps()
|
||||
m.mediaKey = &MediaKeyManager{}
|
||||
m.idSettingsMap = make(map[int32]*gio.Settings)
|
||||
|
||||
return obj
|
||||
}
|
||||
|
||||
func GetManager() *Manager {
|
||||
if _manager == nil {
|
||||
_manager = newManager()
|
||||
}
|
||||
|
||||
return _manager
|
||||
m.listenKeyEvents()
|
||||
m.listenSettings()
|
||||
m.listenCompizSettings()
|
||||
m.listenAllCustomSettings()
|
||||
m.updateProps()
|
||||
|
||||
return m
|
||||
}
|
||||
|
@ -45,12 +45,15 @@ func Start() *LangSelector {
|
||||
|
||||
_lang = newLangSelector(logger)
|
||||
if _lang == nil {
|
||||
logger.Fatal("Create LangSelector Failed")
|
||||
logger.Error("Create LangSelector Failed")
|
||||
return nil
|
||||
}
|
||||
|
||||
err := dbus.InstallOnSession(_lang)
|
||||
if err != nil {
|
||||
logger.Fatal("Install Session DBus Failed:", err)
|
||||
logger.Error("Install Session DBus Failed:", err)
|
||||
Stop()
|
||||
return nil
|
||||
}
|
||||
|
||||
_lang.onGenLocaleStatus()
|
||||
|
@ -20,11 +20,13 @@ var logger = log.NewLogger("dde-daemon/launcher-daemon")
|
||||
var launcher *Launcher = nil
|
||||
|
||||
func Stop() {
|
||||
if launcher != nil {
|
||||
launcher.destroy()
|
||||
launcher = nil
|
||||
if launcher == nil {
|
||||
return
|
||||
}
|
||||
|
||||
launcher.destroy()
|
||||
launcher = nil
|
||||
|
||||
logger.EndTracing()
|
||||
}
|
||||
|
||||
@ -34,6 +36,10 @@ func startFailed(err error) {
|
||||
}
|
||||
|
||||
func Start() {
|
||||
if launcher != nil {
|
||||
return
|
||||
}
|
||||
|
||||
var err error
|
||||
|
||||
logger.BeginTracing()
|
||||
|
@ -48,7 +48,8 @@ func Register(newModule *Module) {
|
||||
}
|
||||
}
|
||||
if newModule.Start == nil || newModule.Stop == nil {
|
||||
logger.Fatal("can't register an incomplete module " + newModule.Name)
|
||||
logger.Error("can't register an incomplete module " + newModule.Name)
|
||||
return
|
||||
}
|
||||
modules = append([]*Module{newModule}, modules...)
|
||||
}
|
||||
|
@ -4,7 +4,7 @@ import (
|
||||
"github.com/howeyc/fsnotify"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"os/user"
|
||||
"path"
|
||||
"pkg.linuxdeepin.com/lib/dbus"
|
||||
"pkg.linuxdeepin.com/lib/gio-2.0"
|
||||
"pkg.linuxdeepin.com/lib/glib-2.0"
|
||||
@ -14,6 +14,8 @@ import (
|
||||
|
||||
type DefaultApps struct {
|
||||
DefaultAppChanged func()
|
||||
|
||||
watcher *dutils.WatchProxy
|
||||
}
|
||||
|
||||
type AppInfo struct {
|
||||
@ -131,78 +133,25 @@ func (dapp *DefaultApps) SetDefaultAppViaType(typeName, appID string) bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (dapp *DefaultApps) listenMimeCacheFile() {
|
||||
var (
|
||||
err error
|
||||
userInfo *user.User
|
||||
)
|
||||
|
||||
mimeWatcher, err = fsnotify.NewWatcher()
|
||||
if err != nil {
|
||||
logger.Error("New Watcher Failed:", err)
|
||||
panic(err)
|
||||
func (dapp *DefaultApps) handleMimeFileChanged(ev *fsnotify.FileEvent) {
|
||||
if ev == nil {
|
||||
return
|
||||
}
|
||||
|
||||
userInfo, err = user.Current()
|
||||
if err != nil {
|
||||
logger.Error("Get current user failed:", err)
|
||||
panic(err)
|
||||
}
|
||||
|
||||
mimeFile := userInfo.HomeDir + "/" + MIME_CACHE_FILE
|
||||
if ok := dutils.IsFileExist(mimeFile); !ok {
|
||||
f, err := os.Create(mimeFile)
|
||||
if err != nil {
|
||||
logger.Debugf("Create '%s' failed: %v",
|
||||
mimeFile, err)
|
||||
return
|
||||
if ev.IsDelete() {
|
||||
if dapp.watcher != nil {
|
||||
dapp.watcher.ResetFileListWatch()
|
||||
}
|
||||
f.Close()
|
||||
} else {
|
||||
dbus.Emit(dapp, "DefaultAppChanged")
|
||||
}
|
||||
err = mimeWatcher.Watch(mimeFile)
|
||||
if err != nil {
|
||||
logger.Debug("Watch '%s' Failed: %s",
|
||||
MIME_CACHE_FILE, err)
|
||||
panic(err)
|
||||
}
|
||||
|
||||
func (dapp *DefaultApps) destroy() {
|
||||
dbus.UnInstallObject(dapp)
|
||||
if dapp.watcher != nil {
|
||||
dapp.watcher.EndWatch()
|
||||
}
|
||||
|
||||
go func() {
|
||||
defer mimeWatcher.Close()
|
||||
for {
|
||||
select {
|
||||
case ev, ok := <-mimeWatcher.Event:
|
||||
if !ok {
|
||||
if mimeWatcher != nil {
|
||||
mimeWatcher.RemoveWatch(mimeFile)
|
||||
}
|
||||
mimeWatcher, _ = fsnotify.NewWatcher()
|
||||
mimeWatcher.Watch(mimeFile)
|
||||
break
|
||||
}
|
||||
|
||||
if ev == nil {
|
||||
break
|
||||
}
|
||||
|
||||
logger.Debug("Watch Event:", ev)
|
||||
if ev.IsDelete() {
|
||||
mimeWatcher.Watch(mimeFile)
|
||||
} else {
|
||||
dbus.Emit(dapp, "DefaultAppChanged")
|
||||
}
|
||||
case err, ok := <-mimeWatcher.Error:
|
||||
logger.Debug("Watch Error:", err)
|
||||
if !ok || err != nil {
|
||||
if mimeWatcher != nil {
|
||||
mimeWatcher.RemoveWatch(mimeFile)
|
||||
}
|
||||
mimeWatcher, _ = fsnotify.NewWatcher()
|
||||
mimeWatcher.Watch(mimeFile)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
func NewDefaultApps() *DefaultApps {
|
||||
@ -215,15 +164,13 @@ func NewDefaultApps() *DefaultApps {
|
||||
|
||||
dapp := &DefaultApps{}
|
||||
|
||||
var err error
|
||||
mimeWatcher, err = fsnotify.NewWatcher()
|
||||
if err != nil {
|
||||
logger.Debug("Create mime file watcher failed:", err)
|
||||
panic(err)
|
||||
dapp.watcher = dutils.NewWatchProxy()
|
||||
if dapp.watcher != nil {
|
||||
dapp.watcher.SetFileList(getWatchFiles())
|
||||
dapp.watcher.SetEventHandler(dapp.handleMimeFileChanged)
|
||||
go dapp.watcher.StartWatch()
|
||||
}
|
||||
|
||||
dapp.listenMimeCacheFile()
|
||||
|
||||
return dapp
|
||||
}
|
||||
|
||||
@ -257,6 +204,26 @@ func NewAppInfoByID(id string) (AppInfo, bool) {
|
||||
return appInfo, true
|
||||
}
|
||||
|
||||
func getWatchFiles() []string {
|
||||
homeDir := os.Getenv("HOME")
|
||||
if len(homeDir) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
mimeFile := path.Join(homeDir, MIME_CACHE_FILE)
|
||||
if dutils.IsFileExist(mimeFile) {
|
||||
return []string{mimeFile}
|
||||
}
|
||||
|
||||
fp, err := os.Create(mimeFile)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
fp.Close()
|
||||
|
||||
return []string{mimeFile}
|
||||
}
|
||||
|
||||
func GetLocalLang() string {
|
||||
langStr := os.Getenv("LANG")
|
||||
array := strings.Split(langStr, ".")
|
||||
|
@ -5,6 +5,7 @@ import (
|
||||
"pkg.linuxdeepin.com/lib/dbus/property"
|
||||
. "pkg.linuxdeepin.com/lib/gettext"
|
||||
"pkg.linuxdeepin.com/lib/gio-2.0"
|
||||
dutils "pkg.linuxdeepin.com/lib/utils"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -16,58 +17,71 @@ const (
|
||||
MEDIA_KEY_START_SOFT = "autorun-x-content-start-app"
|
||||
)
|
||||
|
||||
var (
|
||||
mediaGSettings = gio.NewSettings("org.gnome.desktop.media-handling")
|
||||
const (
|
||||
mediaSchema = "org.gnome.desktop.media-handling"
|
||||
)
|
||||
|
||||
type MediaMount struct {
|
||||
AutoMountOpen *property.GSettingsBoolProperty `access:"readwrite"`
|
||||
MediaActionChanged func()
|
||||
|
||||
settings *gio.Settings
|
||||
}
|
||||
|
||||
func NewMediaMount() *MediaMount {
|
||||
if !dutils.IsGSchemaExist(mediaSchema) {
|
||||
return nil
|
||||
}
|
||||
|
||||
media := &MediaMount{}
|
||||
|
||||
media.settings = gio.NewSettings(mediaSchema)
|
||||
media.AutoMountOpen = property.NewGSettingsBoolProperty(
|
||||
media, "AutoMountOpen",
|
||||
mediaGSettings, MEDIA_KEY_AUTOMOUNT)
|
||||
media.settings, MEDIA_KEY_AUTOMOUNT)
|
||||
media.listenGSettings()
|
||||
|
||||
return media
|
||||
}
|
||||
|
||||
func (op *MediaMount) SetMediaAppByMime(mime, appID string) {
|
||||
setActionByMime(mime, appID)
|
||||
func (media *MediaMount) destroy() {
|
||||
dbus.UnInstallObject(media)
|
||||
media.settings.Unref()
|
||||
}
|
||||
|
||||
func (op *MediaMount) DefaultMediaAppByMime(mime string) AppInfo {
|
||||
return getActionByMime(mime)
|
||||
func (media *MediaMount) SetMediaAppByMime(mime, appID string) {
|
||||
media.setActionByMime(mime, appID)
|
||||
}
|
||||
|
||||
func (op *MediaMount) MediaAppListByMime(mime string) []AppInfo {
|
||||
return getActionsByMime(mime)
|
||||
func (media *MediaMount) DefaultMediaAppByMime(mime string) AppInfo {
|
||||
return media.getActionByMime(mime)
|
||||
}
|
||||
|
||||
func (op *MediaMount) listenGSettings() {
|
||||
mediaGSettings.Connect("changed::autorun-x-content-ignore",
|
||||
func (media *MediaMount) MediaAppListByMime(mime string) []AppInfo {
|
||||
return media.getActionsByMime(mime)
|
||||
}
|
||||
|
||||
func (media *MediaMount) listenGSettings() {
|
||||
media.settings.Connect("changed::autorun-x-content-ignore",
|
||||
func(s *gio.Settings, key string) {
|
||||
dbus.Emit(op, "MediaActionChanged")
|
||||
dbus.Emit(media, "MediaActionChanged")
|
||||
})
|
||||
|
||||
mediaGSettings.Connect("changed::autorun-x-content-open-folder",
|
||||
media.settings.Connect("changed::autorun-x-content-open-folder",
|
||||
func(s *gio.Settings, key string) {
|
||||
dbus.Emit(op, "MediaActionChanged")
|
||||
dbus.Emit(media, "MediaActionChanged")
|
||||
})
|
||||
|
||||
mediaGSettings.Connect("changed::autorun-x-content-start-app",
|
||||
media.settings.Connect("changed::autorun-x-content-start-app",
|
||||
func(s *gio.Settings, key string) {
|
||||
dbus.Emit(op, "MediaActionChanged")
|
||||
dbus.Emit(media, "MediaActionChanged")
|
||||
})
|
||||
}
|
||||
|
||||
func getActionByMime(mime string) AppInfo {
|
||||
ignoreList := mediaGSettings.GetStrv(MEDIA_KEY_IGNORE)
|
||||
openFolderList := mediaGSettings.GetStrv(MEDIA_KEY_OPEN_FOLDER)
|
||||
runSoftList := mediaGSettings.GetStrv(MEDIA_KEY_START_SOFT)
|
||||
func (media *MediaMount) getActionByMime(mime string) AppInfo {
|
||||
ignoreList := media.settings.GetStrv(MEDIA_KEY_IGNORE)
|
||||
openFolderList := media.settings.GetStrv(MEDIA_KEY_OPEN_FOLDER)
|
||||
runSoftList := media.settings.GetStrv(MEDIA_KEY_START_SOFT)
|
||||
|
||||
if isMimeExist(mime, ignoreList) {
|
||||
return AppInfo{ID: "Nothing", Name: Tr("Nothing"), Exec: ""}
|
||||
@ -84,7 +98,7 @@ func getActionByMime(mime string) AppInfo {
|
||||
return m.DefaultAppViaType(mime)
|
||||
}
|
||||
|
||||
func getActionsByMime(mime string) []AppInfo {
|
||||
func (media *MediaMount) getActionsByMime(mime string) []AppInfo {
|
||||
apps := []AppInfo{}
|
||||
defaultApps := []AppInfo{
|
||||
AppInfo{ID: "Nothing", Name: Tr("Nothing"), Exec: ""},
|
||||
@ -101,56 +115,56 @@ func getActionsByMime(mime string) []AppInfo {
|
||||
return apps
|
||||
}
|
||||
|
||||
func setActionByMime(mime, appID string) {
|
||||
ignoreList := mediaGSettings.GetStrv(MEDIA_KEY_IGNORE)
|
||||
openFolderList := mediaGSettings.GetStrv(MEDIA_KEY_OPEN_FOLDER)
|
||||
runSoftList := mediaGSettings.GetStrv(MEDIA_KEY_START_SOFT)
|
||||
func (media *MediaMount) setActionByMime(mime, appID string) {
|
||||
ignoreList := media.settings.GetStrv(MEDIA_KEY_IGNORE)
|
||||
openFolderList := media.settings.GetStrv(MEDIA_KEY_OPEN_FOLDER)
|
||||
runSoftList := media.settings.GetStrv(MEDIA_KEY_START_SOFT)
|
||||
|
||||
switch appID {
|
||||
case "Nothing":
|
||||
if !isMimeExist(mime, ignoreList) {
|
||||
ignoreList = append(ignoreList, mime)
|
||||
mediaGSettings.SetStrv(MEDIA_KEY_IGNORE, ignoreList)
|
||||
media.settings.SetStrv(MEDIA_KEY_IGNORE, ignoreList)
|
||||
}
|
||||
|
||||
list, ok := delMimeFromList(mime, openFolderList)
|
||||
if ok {
|
||||
mediaGSettings.SetStrv(MEDIA_KEY_OPEN_FOLDER, list)
|
||||
media.settings.SetStrv(MEDIA_KEY_OPEN_FOLDER, list)
|
||||
}
|
||||
|
||||
list, ok = delMimeFromList(mime, runSoftList)
|
||||
if ok {
|
||||
mediaGSettings.SetStrv(MEDIA_KEY_START_SOFT, list)
|
||||
media.settings.SetStrv(MEDIA_KEY_START_SOFT, list)
|
||||
}
|
||||
case "Open Folder":
|
||||
if !isMimeExist(mime, openFolderList) {
|
||||
openFolderList = append(openFolderList, mime)
|
||||
mediaGSettings.SetStrv(MEDIA_KEY_OPEN_FOLDER, openFolderList)
|
||||
media.settings.SetStrv(MEDIA_KEY_OPEN_FOLDER, openFolderList)
|
||||
}
|
||||
|
||||
list, ok := delMimeFromList(mime, ignoreList)
|
||||
if ok {
|
||||
mediaGSettings.SetStrv(MEDIA_KEY_IGNORE, list)
|
||||
media.settings.SetStrv(MEDIA_KEY_IGNORE, list)
|
||||
}
|
||||
|
||||
list, ok = delMimeFromList(mime, runSoftList)
|
||||
if ok {
|
||||
mediaGSettings.SetStrv(MEDIA_KEY_START_SOFT, list)
|
||||
media.settings.SetStrv(MEDIA_KEY_START_SOFT, list)
|
||||
}
|
||||
case "Run Soft", "nautilus-autorun-software.desktop":
|
||||
if !isMimeExist(mime, runSoftList) {
|
||||
runSoftList = append(runSoftList, mime)
|
||||
mediaGSettings.SetStrv(MEDIA_KEY_START_SOFT, runSoftList)
|
||||
media.settings.SetStrv(MEDIA_KEY_START_SOFT, runSoftList)
|
||||
}
|
||||
|
||||
list, ok := delMimeFromList(mime, ignoreList)
|
||||
if ok {
|
||||
mediaGSettings.SetStrv(MEDIA_KEY_IGNORE, list)
|
||||
media.settings.SetStrv(MEDIA_KEY_IGNORE, list)
|
||||
}
|
||||
|
||||
list, ok = delMimeFromList(mime, openFolderList)
|
||||
if ok {
|
||||
mediaGSettings.SetStrv(MEDIA_KEY_OPEN_FOLDER, list)
|
||||
media.settings.SetStrv(MEDIA_KEY_OPEN_FOLDER, list)
|
||||
}
|
||||
default:
|
||||
m := DefaultApps{}
|
||||
@ -158,17 +172,17 @@ func setActionByMime(mime, appID string) {
|
||||
|
||||
list, ok := delMimeFromList(mime, ignoreList)
|
||||
if ok {
|
||||
mediaGSettings.SetStrv(MEDIA_KEY_IGNORE, list)
|
||||
media.settings.SetStrv(MEDIA_KEY_IGNORE, list)
|
||||
}
|
||||
|
||||
list, ok = delMimeFromList(mime, openFolderList)
|
||||
if ok {
|
||||
mediaGSettings.SetStrv(MEDIA_KEY_OPEN_FOLDER, list)
|
||||
media.settings.SetStrv(MEDIA_KEY_OPEN_FOLDER, list)
|
||||
}
|
||||
|
||||
list, ok = delMimeFromList(mime, runSoftList)
|
||||
if ok {
|
||||
mediaGSettings.SetStrv(MEDIA_KEY_START_SOFT, list)
|
||||
media.settings.SetStrv(MEDIA_KEY_START_SOFT, list)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
102
mime/main.go
102
mime/main.go
@ -1,6 +1,7 @@
|
||||
package mime
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"pkg.linuxdeepin.com/lib/dbus"
|
||||
"pkg.linuxdeepin.com/lib/log"
|
||||
@ -60,37 +61,98 @@ func (dapp *DefaultApps) Reset() bool {
|
||||
}
|
||||
|
||||
func (media *MediaMount) Reset() bool {
|
||||
mediaGSettings.Reset(MEDIA_KEY_AUTOMOUNT)
|
||||
mediaGSettings.Reset(MEDIA_KEY_AUTOOPEN)
|
||||
mediaGSettings.Reset(MEDIA_KEY_AUTORUN_NEVER)
|
||||
mediaGSettings.Reset(MEDIA_KEY_IGNORE)
|
||||
mediaGSettings.Reset(MEDIA_KEY_OPEN_FOLDER)
|
||||
mediaGSettings.Reset(MEDIA_KEY_START_SOFT)
|
||||
media.settings.Reset(MEDIA_KEY_AUTOMOUNT)
|
||||
media.settings.Reset(MEDIA_KEY_AUTOOPEN)
|
||||
media.settings.Reset(MEDIA_KEY_AUTORUN_NEVER)
|
||||
media.settings.Reset(MEDIA_KEY_IGNORE)
|
||||
media.settings.Reset(MEDIA_KEY_OPEN_FOLDER)
|
||||
media.settings.Reset(MEDIA_KEY_START_SOFT)
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func Stop() {
|
||||
var (
|
||||
_dapp *DefaultApps
|
||||
_media *MediaMount
|
||||
)
|
||||
|
||||
func startDefaultApps() error {
|
||||
_dapp = NewDefaultApps()
|
||||
if _dapp == nil {
|
||||
return fmt.Errorf("Create DefaultApps Failed")
|
||||
}
|
||||
|
||||
err := dbus.InstallOnSession(_dapp)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func endDefaultApps() {
|
||||
if _dapp == nil {
|
||||
return
|
||||
}
|
||||
|
||||
_dapp.destroy()
|
||||
_dapp = nil
|
||||
}
|
||||
|
||||
func startMediaMount() error {
|
||||
_media = NewMediaMount()
|
||||
if _media == nil {
|
||||
return fmt.Errorf("Create MediaMount Failed")
|
||||
}
|
||||
err := dbus.InstallOnSession(_media)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func endMediaMount() {
|
||||
if _media == nil {
|
||||
return
|
||||
}
|
||||
|
||||
_media.destroy()
|
||||
_media = nil
|
||||
}
|
||||
|
||||
func finalize() {
|
||||
endDefaultApps()
|
||||
endMediaMount()
|
||||
logger.EndTracing()
|
||||
}
|
||||
|
||||
func Start() {
|
||||
logger.BeginTracing()
|
||||
|
||||
var err error
|
||||
|
||||
dapp := NewDefaultApps()
|
||||
if dapp == nil {
|
||||
func Stop() {
|
||||
if _dapp == nil {
|
||||
return
|
||||
}
|
||||
err = dbus.InstallOnSession(dapp)
|
||||
if err != nil {
|
||||
logger.Fatal("Install Session Failed:", err)
|
||||
|
||||
finalize()
|
||||
}
|
||||
|
||||
func Start() {
|
||||
if _dapp != nil {
|
||||
return
|
||||
}
|
||||
|
||||
media := NewMediaMount()
|
||||
err = dbus.InstallOnSession(media)
|
||||
logger.BeginTracing()
|
||||
err := startDefaultApps()
|
||||
if err != nil {
|
||||
logger.Fatal("Install Session Failed:", err)
|
||||
logger.Error(err)
|
||||
logger.EndTracing()
|
||||
endDefaultApps()
|
||||
return
|
||||
}
|
||||
|
||||
err = startMediaMount()
|
||||
if err != nil {
|
||||
logger.Error(err)
|
||||
finalize()
|
||||
return
|
||||
}
|
||||
}
|
||||
|
@ -53,6 +53,10 @@ func (m *Manager) refrashDiskInfoList() {
|
||||
}
|
||||
}
|
||||
|
||||
func (m *Manager) endDiskrefrash() {
|
||||
close(m.quitFlag)
|
||||
}
|
||||
|
||||
func (m *Manager) listenSignalChanged() {
|
||||
monitor.Connect("mount-added", func(volumeMonitor *gio.VolumeMonitor, mount *gio.Mount) {
|
||||
// Judge whether the property 'mount_and_open' set true
|
||||
|
@ -51,7 +51,7 @@ type Manager struct {
|
||||
DiskList []DiskInfo
|
||||
Error func(string, string)
|
||||
|
||||
quitFlag chan bool
|
||||
quitFlag chan struct{}
|
||||
}
|
||||
|
||||
const (
|
||||
@ -300,38 +300,50 @@ func destroyObjectMap() {
|
||||
objectMap = make(map[string]*ObjectInfo)
|
||||
}
|
||||
|
||||
func (m *Manager) destroy() {
|
||||
m.endDiskrefrash()
|
||||
dbus.UnInstallObject(m)
|
||||
}
|
||||
|
||||
func NewManager() *Manager {
|
||||
m := &Manager{}
|
||||
m.setPropName("DiskList")
|
||||
m.listenSignalChanged()
|
||||
m.quitFlag = make(chan bool)
|
||||
m.quitFlag = make(chan struct{})
|
||||
|
||||
go m.refrashDiskInfoList()
|
||||
|
||||
return m
|
||||
}
|
||||
|
||||
var _manager *Manager
|
||||
|
||||
func GetManager() *Manager {
|
||||
if _manager == nil {
|
||||
_manager = NewManager()
|
||||
}
|
||||
|
||||
return _manager
|
||||
func finalize() {
|
||||
_manager.destroy()
|
||||
_manager = nil
|
||||
logger.EndTracing()
|
||||
}
|
||||
|
||||
func Start() {
|
||||
logger.BeginTracing()
|
||||
|
||||
m := GetManager()
|
||||
err := dbus.InstallOnSession(m)
|
||||
if err != nil {
|
||||
logger.Fatal("Install DBus Session Failed:", err)
|
||||
if _manager != nil {
|
||||
return
|
||||
}
|
||||
|
||||
go m.refrashDiskInfoList()
|
||||
logger.BeginTracing()
|
||||
|
||||
_manager = NewManager()
|
||||
err := dbus.InstallOnSession(_manager)
|
||||
if err != nil {
|
||||
logger.Error("Install DBus Session Failed:", err)
|
||||
finalize()
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
func Stop() {
|
||||
GetManager().quitFlag <- true
|
||||
logger.EndTracing()
|
||||
if _manager == nil {
|
||||
return
|
||||
}
|
||||
|
||||
finalize()
|
||||
}
|
||||
|
@ -295,32 +295,66 @@ func listenAudioSignal() {
|
||||
})
|
||||
}
|
||||
|
||||
func Start() {
|
||||
logger.BeginTracing()
|
||||
func initDBusIFC() error {
|
||||
var err error
|
||||
|
||||
dbusObj, err = libdbus.NewDBusDaemon("org.freedesktop.DBus",
|
||||
"/")
|
||||
if err != nil {
|
||||
logger.Fatal("New DBusDaemon Failed: ", err)
|
||||
logger.Error("New DBusDaemon Failed: ", err)
|
||||
return err
|
||||
}
|
||||
|
||||
mediaKeyObj, err = libkeybind.NewMediaKey(
|
||||
"com.deepin.daemon.KeyBinding",
|
||||
"/com/deepin/daemon/MediaKey")
|
||||
if err != nil {
|
||||
logger.Fatal("New MediaKey Object Failed: ", err)
|
||||
logger.Error("New MediaKey Object Failed: ", err)
|
||||
return err
|
||||
}
|
||||
|
||||
loginObj, err = liblogin1.NewManager("org.freedesktop.login1",
|
||||
"/org/freedesktop/login1")
|
||||
if err != nil {
|
||||
logger.Fatal("New Login1 Manager Failed: ", err)
|
||||
logger.Error("New Login1 Manager Failed: ", err)
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func finalizeDBusIFC() {
|
||||
if dbusObj != nil {
|
||||
libdbus.DestroyDBusDaemon(dbusObj)
|
||||
dbusObj = nil
|
||||
}
|
||||
|
||||
if mediaKeyObj != nil {
|
||||
libkeybind.DestroyMediaKey(mediaKeyObj)
|
||||
mediaKeyObj = nil
|
||||
}
|
||||
|
||||
if loginObj != nil {
|
||||
liblogin1.DestroyManager(loginObj)
|
||||
loginObj = nil
|
||||
}
|
||||
}
|
||||
|
||||
func Start() {
|
||||
finalizeDBusIFC()
|
||||
|
||||
logger.BeginTracing()
|
||||
err := initDBusIFC()
|
||||
if err != nil {
|
||||
logger.Error(err)
|
||||
logger.EndTracing()
|
||||
return
|
||||
}
|
||||
|
||||
listenAudioSignal()
|
||||
}
|
||||
|
||||
func Stop() {
|
||||
finalizeDBusIFC()
|
||||
logger.EndTracing()
|
||||
}
|
||||
|
@ -32,6 +32,10 @@ var (
|
||||
)
|
||||
|
||||
func Start() {
|
||||
if manager != nil {
|
||||
return
|
||||
}
|
||||
|
||||
logger.BeginTracing()
|
||||
|
||||
initSlices() // initialize slice code
|
||||
@ -40,6 +44,7 @@ func Start() {
|
||||
err := dbus.InstallOnSession(manager)
|
||||
if err != nil {
|
||||
logger.Error("register dbus interface failed: ", err)
|
||||
manager = nil
|
||||
return
|
||||
}
|
||||
|
||||
@ -51,8 +56,13 @@ func Start() {
|
||||
}
|
||||
|
||||
func Stop() {
|
||||
if manager == nil {
|
||||
return
|
||||
}
|
||||
|
||||
destroyDbusDaemon()
|
||||
DestroyManager(manager)
|
||||
dbus.UnInstallObject(manager)
|
||||
manager = nil
|
||||
logger.EndTracing()
|
||||
}
|
||||
|
@ -28,30 +28,40 @@ var (
|
||||
power *Power
|
||||
)
|
||||
|
||||
func initializeLibs() {
|
||||
func initializeLibs() error {
|
||||
var err error
|
||||
upower, err = libupower.NewUpower(UPOWER_BUS_NAME, "/org/freedesktop/UPower")
|
||||
if err != nil {
|
||||
logger.Warning("create dbus upower failed:", err)
|
||||
return err
|
||||
}
|
||||
login1, err = liblogin1.NewManager("org.freedesktop.login1", "/org/freedesktop/login1")
|
||||
if err != nil {
|
||||
logger.Warning("create dbus login1 failed:", err)
|
||||
finalizeLibs()
|
||||
return err
|
||||
}
|
||||
mediaKey, err = libkeybinding.NewMediaKey("com.deepin.daemon.KeyBinding", "/com/deepin/daemon/MediaKey")
|
||||
if err != nil {
|
||||
logger.Warning("create dbus mediaKey failed:", err)
|
||||
finalizeLibs()
|
||||
return err
|
||||
}
|
||||
notifier, err = libnotifications.NewNotifier("org.freedesktop.Notifications", "/org/freedesktop/Notifications")
|
||||
if err != nil {
|
||||
logger.Warning("Can't build org.freedesktop.Notficaations:", err)
|
||||
finalizeLibs()
|
||||
return err
|
||||
}
|
||||
player, err = libsound.NewSound("com.deepin.api.Sound", "/com/deepin/api/Sound")
|
||||
if err != nil {
|
||||
logger.Warning("Can't build com.deepin.api.Sound:", err)
|
||||
finalizeLibs()
|
||||
return err
|
||||
}
|
||||
|
||||
power = NewPower()
|
||||
return nil
|
||||
}
|
||||
|
||||
func finalizeLibs() {
|
||||
@ -84,12 +94,25 @@ func finalizeLibs() {
|
||||
var workaround *fullScreenWorkaround
|
||||
|
||||
func Start() {
|
||||
if power != nil {
|
||||
return
|
||||
}
|
||||
|
||||
logger.BeginTracing()
|
||||
|
||||
initializeLibs()
|
||||
err := initializeLibs()
|
||||
if err != nil {
|
||||
logger.Error(err)
|
||||
logger.EndTracing()
|
||||
return
|
||||
}
|
||||
|
||||
if err := dbus.InstallOnSession(power); err != nil {
|
||||
err = dbus.InstallOnSession(power)
|
||||
if err != nil {
|
||||
logger.Error("Failed InstallOnSession:", err)
|
||||
finalizeLibs()
|
||||
logger.EndTracing()
|
||||
return
|
||||
}
|
||||
|
||||
workaround = newFullScreenWorkaround()
|
||||
@ -97,8 +120,13 @@ func Start() {
|
||||
}
|
||||
|
||||
func Stop() {
|
||||
if power == nil {
|
||||
return
|
||||
}
|
||||
|
||||
if workaround != nil {
|
||||
workaround.stop()
|
||||
workaround = nil
|
||||
}
|
||||
finalizeLibs()
|
||||
logger.EndTracing()
|
||||
|
@ -91,39 +91,90 @@ func (op *Manager) BottomRightAction() string {
|
||||
return zoneSettings.GetString("right-down")
|
||||
}
|
||||
|
||||
func Stop() {
|
||||
logger.EndTracing()
|
||||
}
|
||||
func Start() {
|
||||
logger.BeginTracing()
|
||||
|
||||
func initDBusIFC() error {
|
||||
var err error
|
||||
dspObj, err = libdsp.NewDisplay("com.deepin.daemon.Display",
|
||||
"/com/deepin/daemon/Display")
|
||||
if err != nil {
|
||||
logger.Fatal("New Display Failed: ", err)
|
||||
finalizeDBusIFC()
|
||||
return err
|
||||
}
|
||||
|
||||
areaObj, err = libarea.NewXMouseArea("com.deepin.api.XMouseArea",
|
||||
"/com/deepin/api/XMouseArea")
|
||||
if err != nil {
|
||||
logger.Fatal("New XMouseArea Failed: ", err)
|
||||
finalizeDBusIFC()
|
||||
return err
|
||||
}
|
||||
|
||||
launchObj, err = launcher.NewLauncher("com.deepin.dde.launcher",
|
||||
"/com/deepin/dde/launcher")
|
||||
if err != nil {
|
||||
logger.Fatal("New DDE Launcher Failed: ", err)
|
||||
finalizeDBusIFC()
|
||||
return err
|
||||
}
|
||||
|
||||
m := newManager()
|
||||
err = dbus.InstallOnSession(m)
|
||||
if err != nil {
|
||||
logger.Fatal("Install Zone Session Failed: ", err)
|
||||
}
|
||||
|
||||
m.SetTopLeft(m.TopLeftAction())
|
||||
m.SetBottomLeft(m.BottomLeftAction())
|
||||
m.SetTopRight(m.TopRightAction())
|
||||
m.SetBottomRight(m.BottomRightAction())
|
||||
return nil
|
||||
}
|
||||
|
||||
func finalizeDBusIFC() {
|
||||
if dspObj != nil {
|
||||
libdsp.DestroyDisplay(dspObj)
|
||||
dspObj = nil
|
||||
}
|
||||
|
||||
if areaObj != nil {
|
||||
libarea.DestroyXMouseArea(areaObj)
|
||||
areaObj = nil
|
||||
}
|
||||
|
||||
if launchObj != nil {
|
||||
launcher.DestroyLauncher(launchObj)
|
||||
launchObj = nil
|
||||
}
|
||||
}
|
||||
|
||||
var _m *Manager
|
||||
|
||||
func finalize() {
|
||||
finalizeDBusIFC()
|
||||
_m.destroy()
|
||||
_m = nil
|
||||
}
|
||||
|
||||
func Stop() {
|
||||
if _m == nil {
|
||||
return
|
||||
}
|
||||
|
||||
finalize()
|
||||
logger.EndTracing()
|
||||
}
|
||||
|
||||
func Start() {
|
||||
if _m != nil {
|
||||
return
|
||||
}
|
||||
|
||||
logger.BeginTracing()
|
||||
|
||||
err := initDBusIFC()
|
||||
if err != nil {
|
||||
logger.Error("Create dbus interface failed:", err)
|
||||
logger.EndTracing()
|
||||
return
|
||||
}
|
||||
|
||||
_m = newManager()
|
||||
err = dbus.InstallOnSession(_m)
|
||||
if err != nil {
|
||||
logger.Error("Install Zone Session Failed: ", err)
|
||||
finalize()
|
||||
return
|
||||
}
|
||||
|
||||
_m.SetTopLeft(_m.TopLeftAction())
|
||||
_m.SetBottomLeft(_m.BottomLeftAction())
|
||||
_m.SetTopRight(_m.TopRightAction())
|
||||
_m.SetBottomRight(_m.BottomRightAction())
|
||||
}
|
||||
|
@ -39,19 +39,22 @@ func init() {
|
||||
dspObj, err = libdsp.NewDisplay("com.deepin.daemon.Display",
|
||||
"/com/deepin/daemon/Display")
|
||||
if err != nil {
|
||||
logger.Fatal("New Display Failed: ", err)
|
||||
logger.Error("New Display Failed: ", err)
|
||||
return
|
||||
}
|
||||
|
||||
areaObj, err = libarea.NewXMouseArea("com.deepin.api.XMouseArea",
|
||||
"/com/deepin/api/XMouseArea")
|
||||
if err != nil {
|
||||
logger.Fatal("New XMouseArea Failed: ", err)
|
||||
logger.Error("New XMouseArea Failed: ", err)
|
||||
return
|
||||
}
|
||||
|
||||
launchObj, err = launcher.NewLauncher("com.deepin.dde.launcher",
|
||||
"/com/deepin/dde/launcher")
|
||||
if err != nil {
|
||||
logger.Fatal("New DDE Launcher Failed: ", err)
|
||||
logger.Error("New DDE Launcher Failed: ", err)
|
||||
return
|
||||
}
|
||||
|
||||
C.Suite(newManager())
|
||||
|
@ -23,6 +23,7 @@ package screenedge
|
||||
|
||||
import (
|
||||
"os/exec"
|
||||
"pkg.linuxdeepin.com/lib/dbus"
|
||||
"strings"
|
||||
)
|
||||
|
||||
@ -140,9 +141,12 @@ func getEdgeForCommand(cmd string) string {
|
||||
keys := zoneSettings.ListKeys()
|
||||
|
||||
for _, key := range keys {
|
||||
v := zoneSettings.GetString(key)
|
||||
if v == cmd {
|
||||
return key
|
||||
switch key {
|
||||
case "left-up", "left-down", "right-up", "right-down":
|
||||
v := zoneSettings.GetString(key)
|
||||
if v == cmd {
|
||||
return key
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -170,6 +174,12 @@ func enableOneEdge(edge string) {
|
||||
}
|
||||
}
|
||||
|
||||
func (m *Manager) destroy() {
|
||||
unregisterZoneArea()
|
||||
finalizeDBusIFC()
|
||||
dbus.UnInstallObject(m)
|
||||
}
|
||||
|
||||
func newManager() *Manager {
|
||||
m := &Manager{}
|
||||
|
||||
|
@ -123,6 +123,10 @@ func (*ScreenSaver) GetDBusInfo() dbus.DBusInfo {
|
||||
}
|
||||
}
|
||||
|
||||
func (ss *ScreenSaver) destroy() {
|
||||
dbus.UnInstallObject(ss)
|
||||
}
|
||||
|
||||
func NewScreenSaver() *ScreenSaver {
|
||||
s := &ScreenSaver{inhibitors: make(map[uint32]inhibitor)}
|
||||
s.xu, _ = xgbutil.NewConn()
|
||||
@ -134,14 +138,30 @@ func NewScreenSaver() *ScreenSaver {
|
||||
go s.loop()
|
||||
return s
|
||||
}
|
||||
func Start() {
|
||||
ssaver := NewScreenSaver()
|
||||
|
||||
if err := dbus.InstallOnSession(ssaver); err != nil {
|
||||
var _ssaver *ScreenSaver
|
||||
|
||||
func Start() {
|
||||
if _ssaver != nil {
|
||||
return
|
||||
}
|
||||
|
||||
_ssaver = NewScreenSaver()
|
||||
|
||||
err := dbus.InstallOnSession(_ssaver)
|
||||
if err != nil {
|
||||
_ssaver.destroy()
|
||||
_ssaver = nil
|
||||
return
|
||||
}
|
||||
}
|
||||
func Stop() {
|
||||
if _ssaver == nil {
|
||||
return
|
||||
}
|
||||
|
||||
_ssaver.destroy()
|
||||
_ssaver = nil
|
||||
}
|
||||
|
||||
func (ss *ScreenSaver) loop() {
|
||||
|
@ -30,37 +30,33 @@ const (
|
||||
_DDE_DOCK_CMD = "/usr/bin/dde-dock"
|
||||
)
|
||||
|
||||
type DDEDock_T struct{}
|
||||
type Dock struct{}
|
||||
|
||||
var _dock *DDEDock_T
|
||||
func NewDock() *Dock {
|
||||
dock := &Dock{}
|
||||
|
||||
func GetDDeDock_T() *DDEDock_T {
|
||||
if _dock == nil {
|
||||
_dock = &DDEDock_T{}
|
||||
}
|
||||
|
||||
return _dock
|
||||
return dock
|
||||
}
|
||||
|
||||
func (dock *DDEDock_T) fixSwitchMode() {
|
||||
func (dock *Dock) fixSwitchMode() {
|
||||
_, err := exec.Command("/usr/bin/xdotool", "search", "--onlyvisible", "dde-dock", "windowmove", "%1", "x", "y").Output()
|
||||
if err != nil {
|
||||
Logger.Warning("fixSwitchMode failed:", err)
|
||||
logger.Warning("fixSwitchMode failed:", err)
|
||||
}
|
||||
}
|
||||
|
||||
func (dock *DDEDock_T) restartDock() {
|
||||
func (dock *Dock) restartDock() {
|
||||
if isDBusSenderExist(_DDE_DOCK_SENDER) {
|
||||
dock.fixSwitchMode()
|
||||
return
|
||||
}
|
||||
|
||||
if _, err := exec.Command("/usr/bin/killall", _DDE_DOCK_CMD).Output(); err != nil {
|
||||
Logger.Warning("killall dde-dock failed:", err)
|
||||
logger.Warning("killall dde-dock failed:", err)
|
||||
}
|
||||
|
||||
if err := exec.Command(_DDE_DOCK_CMD, "").Run(); err != nil {
|
||||
Logger.Warning("launch dde-dock failed:", err)
|
||||
logger.Warning("launch dde-dock failed:", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
@ -25,39 +25,33 @@ import (
|
||||
"os/exec"
|
||||
)
|
||||
|
||||
type DockApplet_T struct{}
|
||||
type DockApplet struct{}
|
||||
|
||||
const (
|
||||
_DOCK_APPLET_SENDER = "dde.dock.entry.AppletManager"
|
||||
_DOCK_APPLET_CMD = "/usr/bin/dde-dock-applets"
|
||||
)
|
||||
|
||||
var _da *DockApplet_T
|
||||
func NewDockApplet() *DockApplet {
|
||||
applet := &DockApplet{}
|
||||
|
||||
func GetDockApplet_T() *DockApplet_T {
|
||||
if _da == nil {
|
||||
da := &DockApplet_T{}
|
||||
|
||||
_da = da
|
||||
}
|
||||
|
||||
return _da
|
||||
return applet
|
||||
}
|
||||
|
||||
//TODO:
|
||||
// Through the dock applet xid to determine whether dde-dock-applet normal
|
||||
// handle when no dock applet plugin show
|
||||
func (da *DockApplet_T) restartDockApplet() {
|
||||
func (applet *DockApplet) restartDockApplet() {
|
||||
if isDBusSenderExist(_DOCK_APPLET_SENDER) {
|
||||
return
|
||||
}
|
||||
|
||||
if _, err := exec.Command("/usr/bin/killall", _DOCK_APPLET_CMD).Output(); err != nil {
|
||||
Logger.Warning("killall dde-dock-applets failed:", err)
|
||||
logger.Warning("killall dde-dock-applets failed:", err)
|
||||
}
|
||||
|
||||
if err := exec.Command(_DOCK_APPLET_CMD, "").Run(); err != nil {
|
||||
Logger.Warning("launch dde-dock-applets failed:", err)
|
||||
logger.Warning("launch dde-dock-applets failed:", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
@ -22,50 +22,66 @@
|
||||
package sessionwatcher
|
||||
|
||||
import (
|
||||
"dbus/org/freedesktop/dbus"
|
||||
"pkg.linuxdeepin.com/lib/log"
|
||||
"time"
|
||||
)
|
||||
|
||||
var (
|
||||
Logger = log.NewLogger("dde-daemon/sessionwatcher")
|
||||
dbusDaemon *dbus.DBusDaemon
|
||||
|
||||
exitTimer chan bool
|
||||
logger = log.NewLogger("dde-daemon/sessionwatcher")
|
||||
)
|
||||
|
||||
func startTimer() {
|
||||
type Manager struct {
|
||||
dock *Dock
|
||||
appelt *DockApplet
|
||||
exitTimer chan struct{}
|
||||
}
|
||||
|
||||
func NewManager() *Manager {
|
||||
m := &Manager{}
|
||||
|
||||
m.dock = NewDock()
|
||||
m.appelt = NewDockApplet()
|
||||
m.exitTimer = make(chan struct{})
|
||||
|
||||
return m
|
||||
}
|
||||
|
||||
func (m *Manager) destroy() {
|
||||
close(m.exitTimer)
|
||||
}
|
||||
|
||||
func (m *Manager) startTimer() {
|
||||
for {
|
||||
timer := time.NewTimer(time.Second * 5)
|
||||
select {
|
||||
case <-timer.C:
|
||||
go GetDockApplet_T().restartDockApplet()
|
||||
go GetDDeDock_T().restartDock()
|
||||
case <-exitTimer:
|
||||
close(exitTimer)
|
||||
go m.appelt.restartDockApplet()
|
||||
go m.dock.restartDock()
|
||||
case <-m.exitTimer:
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func Start() {
|
||||
Logger.BeginTracing()
|
||||
var _m *Manager
|
||||
|
||||
var err error
|
||||
if dbusDaemon, err = dbus.NewDBusDaemon("org.freedesktop.DBus", "/"); err != nil {
|
||||
Logger.Fatal("New DBusDaemon Failed:", err)
|
||||
func Start() {
|
||||
if _m != nil {
|
||||
return
|
||||
}
|
||||
|
||||
exitTimer = make(chan bool)
|
||||
go startTimer()
|
||||
logger.BeginTracing()
|
||||
|
||||
_m = NewManager()
|
||||
go _m.startTimer()
|
||||
}
|
||||
|
||||
func Stop() {
|
||||
Logger.EndTracing()
|
||||
if exitTimer != nil {
|
||||
exitTimer <- true
|
||||
if _m == nil {
|
||||
return
|
||||
}
|
||||
dbus.DestroyDBusDaemon(dbusDaemon)
|
||||
Logger.Debug("Exit sessionwatcher...")
|
||||
|
||||
logger.EndTracing()
|
||||
_m.destroy()
|
||||
_m = nil
|
||||
}
|
||||
|
@ -21,7 +21,18 @@
|
||||
|
||||
package sessionwatcher
|
||||
|
||||
import (
|
||||
"dbus/org/freedesktop/dbus"
|
||||
)
|
||||
|
||||
func isDBusSenderExist(sender string) bool {
|
||||
dbusDaemon, err := dbus.NewDBusDaemon("org.freedesktop.DBus", "/")
|
||||
if err != nil {
|
||||
logger.Error("Create freedesktop DBus failed:", err)
|
||||
return false
|
||||
}
|
||||
defer dbus.DestroyDBusDaemon(dbusDaemon)
|
||||
|
||||
names, _ := dbusDaemon.ListNames()
|
||||
for _, name := range names {
|
||||
if name == sender {
|
||||
|
@ -20,32 +20,3 @@
|
||||
**/
|
||||
|
||||
package sessionwatcher
|
||||
|
||||
/*
|
||||
import (
|
||||
"dbus/org/freedesktop/dbus"
|
||||
C "launchpad.net/gocheck"
|
||||
"testing"
|
||||
)
|
||||
|
||||
type testWrap struct{}
|
||||
|
||||
func Test(t *testing.T) {
|
||||
C.TestingT(t)
|
||||
}
|
||||
|
||||
func init() {
|
||||
var err error
|
||||
if dbusDaemon, err = dbus.NewDBusDaemon("org.freedesktop.DBus", "/"); err != nil {
|
||||
dbusDaemon = nil
|
||||
return
|
||||
}
|
||||
|
||||
C.Suite(&testWrap{})
|
||||
}
|
||||
|
||||
func (t *testWrap) TestDBusExist(c *C.C) {
|
||||
c.Check(isDBusSenderExist("org.freedesktop.DBus"), C.Equals, true)
|
||||
c.Check(isDBusSenderExist("1234235425346464564/32"), C.Equals, false)
|
||||
}
|
||||
*/
|
||||
|
@ -214,8 +214,6 @@ func getDiskCap() (uint64, error) {
|
||||
return diskCap, nil
|
||||
}
|
||||
|
||||
var _sys *SystemInfo
|
||||
|
||||
func NewSystemInfo(l *log.Logger) *SystemInfo {
|
||||
sys := &SystemInfo{}
|
||||
|
||||
@ -262,21 +260,31 @@ func NewSystemInfo(l *log.Logger) *SystemInfo {
|
||||
return sys
|
||||
}
|
||||
|
||||
func Start() {
|
||||
logger := log.NewLogger("com.deepin.daemon.SystemInfo")
|
||||
logger.BeginTracing()
|
||||
var _sysInfo *SystemInfo
|
||||
|
||||
sys := NewSystemInfo(logger)
|
||||
err := dbus.InstallOnSession(sys)
|
||||
if err != nil {
|
||||
logger.Error(err)
|
||||
}
|
||||
}
|
||||
func Stop() {
|
||||
if _sys == nil {
|
||||
func Start() {
|
||||
if _sysInfo != nil {
|
||||
return
|
||||
}
|
||||
|
||||
_sys.logger.EndTracing()
|
||||
_sys = nil
|
||||
logger := log.NewLogger("com.deepin.daemon.SystemInfo")
|
||||
logger.BeginTracing()
|
||||
|
||||
_sysInfo = NewSystemInfo(logger)
|
||||
err := dbus.InstallOnSession(_sysInfo)
|
||||
if err != nil {
|
||||
logger.Error(err)
|
||||
_sysInfo = nil
|
||||
logger.EndTracing()
|
||||
return
|
||||
}
|
||||
}
|
||||
func Stop() {
|
||||
if _sysInfo == nil {
|
||||
return
|
||||
}
|
||||
|
||||
_sysInfo.logger.EndTracing()
|
||||
dbus.UnInstallObject(_sysInfo)
|
||||
_sysInfo = nil
|
||||
}
|
||||
|
@ -19,11 +19,12 @@
|
||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
**/
|
||||
|
||||
package xsettings_wrapper
|
||||
package xsettings
|
||||
|
||||
import (
|
||||
"dbus/com/deepin/sessionmanager"
|
||||
"fmt"
|
||||
"sync"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -76,6 +77,25 @@ var (
|
||||
|
||||
var _xsettings *sessionmanager.XSettings
|
||||
|
||||
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 {
|
||||
@ -90,10 +110,15 @@ func InitXSettings() error {
|
||||
return err
|
||||
}
|
||||
_xsettings = xsettings
|
||||
refXSettings()
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func Unref() {
|
||||
unrefXSetting()
|
||||
}
|
||||
|
||||
func SetString(name string, value string) error {
|
||||
if _xsettings == nil {
|
||||
return errUninitialized
|
Loading…
x
Reference in New Issue
Block a user