[sawfish] Desktop environmet detection cleanup.
- From: Christopher Bratusek <chrisb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [sawfish] Desktop environmet detection cleanup.
- Date: Fri, 17 Sep 2010 17:09:02 +0000 (UTC)
commit 72386f1fef7caf54be921f26831745a2622abbda
Author: Teika kazura <teika lavabit com>
Date: Wed Sep 15 22:22:05 2010 +0900
Desktop environmet detection cleanup.
* defaults.jl is deleted.
* DE detection are done by each module, e.g. kde detection is done in kde.jl.
* defvar of `desktop-environment' and `want-poweroff-menu' are centralized to user.jl
Each DE support module doesn't defvar them, but simple setq.
* standalone.jl is deleted. Adding poweroff menu is moved to menus.jl
* Doc
OPTIONS | 2 +-
lisp/sawfish/wm/defaults.jl | 46 -----------------
lisp/sawfish/wm/integration/gnome.jl | 70 ++++++++++++++------------
lisp/sawfish/wm/integration/kde.jl | 77 +++++++++++++++++------------
lisp/sawfish/wm/integration/standalone.jl | 50 -------------------
lisp/sawfish/wm/integration/xfce.jl | 77 ++++++++++++++++-------------
lisp/sawfish/wm/menus.jl | 16 ++++++
lisp/sawfish/wm/user.jl | 35 ++++++++++++--
man/news.texi | 2 +-
man/sawfish.texi | 6 ++
10 files changed, 181 insertions(+), 200 deletions(-)
---
diff --git a/OPTIONS b/OPTIONS
index 814b164..72d5160 100644
--- a/OPTIONS
+++ b/OPTIONS
@@ -196,7 +196,7 @@
;; "Sort the apps menu alphabetically.")
;; (defvar-setq want-poweroff-menu t
-;; "Add poweroff menu if you don't use GNOME / KDE.")
+;; "Add poweroff menu if you don't use GNOME / KDE / XFCE.")
;; window placement options
diff --git a/lisp/sawfish/wm/integration/gnome.jl b/lisp/sawfish/wm/integration/gnome.jl
index 81a8550..4cbe5b0 100644
--- a/lisp/sawfish/wm/integration/gnome.jl
+++ b/lisp/sawfish/wm/integration/gnome.jl
@@ -1,4 +1,4 @@
-;; gnome.jl -- more GNOME integration
+;; gnome.jl -- GNOME integration
;; Copyright (C) 2000 John Harper <john dcs warwick ac uk>
@@ -20,43 +20,49 @@
(define-structure sawfish.wm.integration.gnome
- (export )
+ (export detect-gnome)
(open rep
+ rep.system
sawfish.wm.menus
+ sawfish.wm.misc
sawfish.wm.custom
sawfish.wm.commands
sawfish.wm.commands.launcher)
(define-structure-alias gnome-int sawfish.wm.integration.gnome)
- (defvar-setq want-poweroff-menu nil)
- (defvar-setq desktop-environment "gnome")
-
- ;; invoke the GNOME terminal instead of xterm
- (unless (variable-customized-p 'xterm-program)
- (setq xterm-program "gnome-terminal.wrapper"))
-
- ;; use the GNOME help browser and url launcher
- (unless (variable-customized-p 'browser-program)
- (setq browser-program "gnome-www-browser"))
-
- ;; add some GNOME menu-entries
- (let ((menu (assoc (_ "_Help") root-menu)))
- (when menu
- (nconc menu `(()
- (,(_ "_GNOME Help") (system "yelp &"))
- (,(_ "GNOME _Website") (browser "http://www.gnome.org"))
- (,(_ "_About GNOME") (system "gnome-about &"))))))
-
-
- ;; add gnome-logout and customize menu-entries
- (let ((menu (assoc (_ "Sessi_on") root-menu)))
- (when menu
- (nconc menu `(()
- (,(_ "_Customize GNOME") (system "gnome-control-center &"))
- ()
- (,(_ "_Logout from GNOME")
- (system "gnome-session-save --logout-dialog &"))
- (,(_ "_Shutdown from GNOME")
- (system "gnome-session-save --shutdown-dialog &")))))))
+ ;; Returns t or nil. If detected, do also gnome support init.
+ (define (detect-gnome)
+ (if (getenv "GNOME_DESKTOP_SESSION_ID")
+ (let (menu)
+ (setq desktop-environment "gnome")
+ (setq want-poweroff-menu nil)
+
+ ;; invoke the GNOME terminal instead of xterm
+ (unless (variable-customized-p 'xterm-program)
+ (setq xterm-program "gnome-terminal.wrapper"))
+
+ ;; use the GNOME help browser and url launcher
+ (unless (variable-customized-p 'browser-program)
+ (setq browser-program "gnome-www-browser"))
+
+ ;; add some GNOME menu-entries
+ (when (setq menu (assoc (_ "_Help") root-menu))
+ (nconc menu `(()
+ (,(_ "_GNOME Help") (system "yelp &"))
+ (,(_ "GNOME _Website") (browser "http://www.gnome.org"))
+ (,(_ "_About GNOME") (system "gnome-about &")))))
+
+ ;; add gnome-logout and customize menu-entries
+ (when (setq menu (assoc (_ "Sessi_on") root-menu))
+ (nconc menu `(()
+ (,(_ "_Customize GNOME") (system "gnome-control-center &"))
+ ()
+ (,(_ "_Logout from GNOME")
+ (system "gnome-session-save --logout-dialog &"))
+ (,(_ "_Shutdown from GNOME")
+ (system "gnome-session-save --shutdown-dialog &")))))
+ t)
+ ;; no, gnome not found
+ nil)))
diff --git a/lisp/sawfish/wm/integration/kde.jl b/lisp/sawfish/wm/integration/kde.jl
index 9cc7e24..0c8b515 100644
--- a/lisp/sawfish/wm/integration/kde.jl
+++ b/lisp/sawfish/wm/integration/kde.jl
@@ -1,4 +1,4 @@
-;; kde-int.jl -- more KDE integration
+;; kde-int.jl -- KDE integration
;; Copyright (C) 2000 John Harper <john dcs warwick ac uk>
@@ -20,45 +20,60 @@
(define-structure sawfish.wm.integration.kde
- (export )
+ (export detect-kde)
(open rep
+ rep.system
sawfish.wm.menus
+ sawfish.wm.misc
sawfish.wm.custom
sawfish.wm.commands
- sawfish.wm.commands.launcher)
+ sawfish.wm.commands.launcher
+ sawfish.wm.ext.apps-menu)
(define-structure-alias kde-int sawfish.wm.integration.kde)
- (defvar-setq want-poweroff-menu nil)
- (defvar-setq desktop-environment "kde")
- (defvar-setq desktop-directory '("/usr/share/applications/" "/usr/share/applications/kde4/"))
+ (defvar kde-desktop-directories
+ '("/usr/share/applications/kde4/")
+ "KDE specific directories where *.desktop files are stored.")
- ;; invoke the KDE terminal instead of xterm
- (unless (variable-customized-p 'xterm-program)
- (setq xterm-program "konsole"))
+ ;; Returns t or nil. If detected, do also kde support init.
+ (define (detect-kde)
+ (if (getenv "KDE_FULL_SESSION")
+ (let (menu
+ kde-logout-cmd)
+ (setq desktop-environment "kde")
+ (setq want-poweroff-menu nil)
+ (setq desktop-directory
+ (append desktop-directory kde-desktop-directories))
- ;; use the KDE Browser
- (unless (variable-customized-p 'browser-program)
- (setq browser-program "konqueror"))
+ ;; invoke the KDE terminal instead of xterm
+ (unless (variable-customized-p 'xterm-program)
+ (setq xterm-program "konsole"))
- ;; add some KDE help menus
- (let ((menu (assoc (_ "_Help") root-menu)))
- (when menu
- (nconc menu `(()
- (,(_ "_KDE Help") (system "khelpcenter &"))
- (,(_ "KDE _Website") (browser "http://www.kde.org"))))))
+ ;; use the KDE Browser
+ (unless (variable-customized-p 'browser-program)
+ (setq browser-program "konqueror"))
- ;; add kde-logout menu item
- (let ((menu (assoc (_ "Sessi_on") root-menu))
- (kde-logout-cmd "qdbus org.kde.ksmserver /KSMServer org.kde.KSMServerInterface.logout"))
- (when menu
- (nconc menu `(()
- (,(_ "_Customize KDE") (system "systemsettings &"))
- ()
- (,(_ "_Logout from KDE")
- (system ,(concat kde-logout-cmd " 1 0 -1 &")))
- (,(_ "_Reboot from KDE")
- (system ,(concat kde-logout-cmd " 1 1 -1 &")))
- (,(_ "_Shutdown from KDE")
- (system ,(concat kde-logout-cmd " 1 2 -1 &"))))))))
+ ;; add some KDE help menus
+ (when (setq menu (assoc (_ "_Help") root-menu))
+ (nconc menu `(()
+ (,(_ "_KDE Help") (system "khelpcenter &"))
+ (,(_ "KDE _Website") (browser "http://www.kde.org")))))
+
+ ;; add kde-logout menu item
+ (when (setq menu (assoc (_ "Sessi_on") root-menu))
+ (setq kde-logout-cmd "qdbus org.kde.ksmserver /KSMServer org.kde.KSMServerInterface.logout")
+ (nconc menu `(()
+ (,(_ "_Customize KDE") (system "systemsettings &"))
+ ()
+ (,(_ "_Logout from KDE")
+ (system ,(concat kde-logout-cmd " 1 0 -1 &")))
+ (,(_ "_Reboot from KDE")
+ (system ,(concat kde-logout-cmd " 1 1 -1 &")))
+ (,(_ "_Shutdown from KDE")
+ (system ,(concat kde-logout-cmd " 1 2 -1 &"))))))
+ t)
+ ;; no, kde is not found.
+ nil
+ )))
diff --git a/lisp/sawfish/wm/integration/xfce.jl b/lisp/sawfish/wm/integration/xfce.jl
index c8b9c9d..7e73487 100644
--- a/lisp/sawfish/wm/integration/xfce.jl
+++ b/lisp/sawfish/wm/integration/xfce.jl
@@ -1,4 +1,4 @@
-;; xfce.jl -- more XFCE integration
+;; xfce.jl -- XFCE integration
;; Copyright (C) 2010 Christopher Bratusek <zanghar freenet de>
@@ -20,44 +20,51 @@
(define-structure sawfish.wm.integration.xfce
- (export )
+ (export detect-xfce)
(open rep
+ rep.system
sawfish.wm.menus
+ sawfish.wm.misc
sawfish.wm.custom
sawfish.wm.commands
sawfish.wm.commands.launcher)
- (define-structure-alias gnome-int sawfish.wm.integration.xfce)
-
- (defvar-setq want-poweroff-menu nil)
- (defvar-setq desktop-environment "xfce")
-
- ;; invoke the GNOME terminal instead of xterm
- (unless (variable-customized-p 'xterm-program)
- (setq xterm-program "xfce4-terminal"))
-
- ;; use the GNOME help browser and url launcher
- (unless (variable-customized-p 'browser-program)
- (setq browser-program "midori"))
-
- ;; add some GNOME help menus
- (let ((menu (assoc (_ "_Help") root-menu)))
- (when menu
- (nconc menu `(()
- (,(_ "_XFCE Help") (system "xfhelp4 &"))
- (,(_ "XFCE _Website") (browser "http://www.xfce.org"))
- (,(_ "_About XFCE") (system "xfce4-about &"))))))
-
- ;; add gnome-logout menu item
- (let ((menu (assoc (_ "Sessi_on") root-menu)))
- (when menu
- (nconc menu `(()
- (,(_ "_Customize XFCE") (system "xfce4-settings-manager &"))
- ()
- (,(_ "_Logout from XFCE")
- (system "xfce4-session-logout --logout &"))
- (,(_ "_Reboot from XFCE")
- (system "xfce4-session-logout --reboot &"))
- (,(_ "_Shutdown from XFCE")
- (system "xfce4-session-logout --halt &")))))))
+ (define-structure-alias xfce-int sawfish.wm.integration.xfce)
+
+ ;; Returns t or nil. If detected, do also xfce support init.
+ (define (detect-xfce)
+ (if (get-x-property 'root '_DT_SAVE_MODE)
+ (let (menu)
+ (setq desktop-environment "xfce")
+ (setq want-poweroff-menu nil)
+
+ ;; invoke the GNOME terminal instead of xterm
+ (unless (variable-customized-p 'xterm-program)
+ (setq xterm-program "xfce4-terminal"))
+
+ ;; use the GNOME help browser and url launcher
+ (unless (variable-customized-p 'browser-program)
+ (setq browser-program "midori"))
+
+ ;; add some GNOME help menus
+ (when (setq menu (assoc (_ "_Help") root-menu))
+ (nconc menu `(()
+ (,(_ "_XFCE Help") (system "xfhelp4 &"))
+ (,(_ "XFCE _Website") (browser "http://www.xfce.org"))
+ (,(_ "_About XFCE") (system "xfce4-about &")))))
+
+ ;; add gnome-logout menu item
+ (when (setq menu (assoc (_ "Sessi_on") root-menu))
+ (nconc menu `(()
+ (,(_ "_Customize XFCE") (system "xfce4-settings-manager &"))
+ ()
+ (,(_ "_Logout from XFCE")
+ (system "xfce4-session-logout --logout &"))
+ (,(_ "_Reboot from XFCE")
+ (system "xfce4-session-logout --reboot &"))
+ (,(_ "_Shutdown from XFCE")
+ (system "xfce4-session-logout --halt &")))))
+ t)
+ ;; No, xfce isn't running
+ nil)))
diff --git a/lisp/sawfish/wm/menus.jl b/lisp/sawfish/wm/menus.jl
index b6c236a..a277229 100644
--- a/lisp/sawfish/wm/menus.jl
+++ b/lisp/sawfish/wm/menus.jl
@@ -28,6 +28,7 @@
popup-root-menu
popup-apps-menu
add-window-menu-toggle
+ add-poweroff-menu
custom-menu)
(open rep
@@ -168,6 +169,21 @@ before killing it.")
(defvar apps-menu)
+ (define (add-poweroff-menu)
+ "Add poweroff related menu items to Session sub-menu."
+ (require 'sawfish.wm.commands.poweroff)
+ (let ((menu (assoc (_ "Sessi_on") root-menu)))
+ (when menu
+ (nconc menu `(()
+ (,(_ "_Reboot System")
+ (poweroff 'reboot))
+ (,(_ "_Shutdown System")
+ (poweroff 'halt))
+ (,(_ "S_uspend System")
+ (poweroff 'suspend))
+ (,(_ "_Hibernate System")
+ (poweroff 'hibernate)))))))
+
(define (menu-start-process)
(when menu-timer
(delete-timer menu-timer)
diff --git a/lisp/sawfish/wm/user.jl b/lisp/sawfish/wm/user.jl
index 7f75ee1..83a750e 100644
--- a/lisp/sawfish/wm/user.jl
+++ b/lisp/sawfish/wm/user.jl
@@ -39,6 +39,7 @@
((open rep
rep.regexp
rep.system
+ rep.structures
rep.io.files
rep.io.processes
sawfish.wm
@@ -48,10 +49,22 @@
sawfish.wm.ext.error-handler
sawfish.wm.ext.apps-menu
sawfish.wm.frames
- sawfish.wm.integration.standalone
- sawfish.wm.commands.poweroff)
+ sawfish.wm.menus)
+ (access sawfish.wm.integration.kde
+ sawfish.wm.integration.gnome
+ sawfish.wm.integration.xfce)
+
(set-binds))
+ ;; "none" looks ugly, but if you are to change it to "", fix
+ ;; apps-menu, too, or it will break.
+ (defvar desktop-environment "none"
+ "Running desktop environment, detected by Sawfish.
+Possible values are \"kde\", \"gnome\", \"xfce\", or \"none\".")
+
+ (defvar want-poweroff-menu t
+ "Add poweroff menu if you don't use GNOME / KDE / XFCE.")
+
(setq *user-structure* 'user)
;; frame-style loaded if user hasn't set their own
@@ -83,7 +96,21 @@
(message "Renamed file ~/.sawmillrc -> ~/.sawfishrc"))
)
+ ;; Detect desktop environment
+ (define (detect-desktop-environment)
+ (or (sawfish.wm.integration.gnome#detect-gnome)
+ (sawfish.wm.integration.kde#detect-kde)
+ (sawfish.wm.integration.xfce#detect-xfce))
+ )
+
+ ;; Don't signal an error even if user "require" them. These modules
+ ;; existed in the past.
+ (provide 'sawfish-defaults)
+ (provide 'sawfish.wm.defaults)
+
;;; From here, executed at startup.
+
+ ;; load ~/.sawfish/rc
(unless (get-command-line-option "--no-rc")
(condition-case error-data
(progn
@@ -96,8 +123,8 @@
(unless batch-mode
(rename-old-stuff)
- ;; load these before customized settings
- (load "sawfish/wm/defaults" t)
+ ;; detect DE before loading rc
+ (detect-desktop-environment)
;; then the customized options
(condition-case data
diff --git a/man/news.texi b/man/news.texi
index f3f13eb..07e9f11 100644
--- a/man/news.texi
+++ b/man/news.texi
@@ -146,7 +146,7 @@ accelerators. Entries for invoking @code{gnome-control-center} or KDE
improved.
A new variable @code{desktop-environment} tells which desktop
-environment (gnome, kde, xfce or none) is running.
+environment is running (@pxref{External Applications}).
@item Apps-Menu improvements [Matthew Love]
diff --git a/man/sawfish.texi b/man/sawfish.texi
index c1e25c3..1cf627d 100644
--- a/man/sawfish.texi
+++ b/man/sawfish.texi
@@ -6730,6 +6730,12 @@ The program launched by the @code{browser} function. Interpreted by shell.
Start a new browser instance. Visit @var{URL} if supplied.
@end deffn
+Sawfish detects some desktop environments.
+ defvar desktop-environment
+Running desktop environment, detected by Sawfish.
+Possible values are "kde", "gnome", "xfce", or "none".
+ end defvar
+
@node Standard Hooks, Standard Properties, External Applications, Top
@chapter Standard Hooks
@cindex Standard hooks
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]