[sawfish] Desktop environmet detection cleanup.



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]