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:
jouyouyun 2014-12-17 11:39:35 +08:00
parent d7d7d844dc
commit ef8674f58f
65 changed files with 972 additions and 788 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -112,7 +112,7 @@ get_font_info_list (int *num)
cnt++;
}
FcFontSetDestroy(fs);
FcFini();
FcFini(); // Error: FcCacheFini
*num = cnt;

View File

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

View File

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

View File

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

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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();*/

View File

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

View File

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

View File

@ -99,6 +99,10 @@ func initAtom() {
}
func Start() {
if dockProperty != nil {
return
}
logger.BeginTracing()
initDeepin()

View File

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

View File

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

View File

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

View File

@ -104,6 +104,8 @@ type Manager struct {
KeyReleaseEvent func(string)
KeyPressEvent func(string)
mediaKey *MediaKeyManager
}
type MediaKeyManager struct {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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, ".")

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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