Scripts quick access edit this |
Synopsis[]
Another background selector.
Description[]
This script makes use of a custom widget (a gtk file chooser with embedded preview).
Installation[]
Place background.jl in ~/.sawfish/lisp.
Then place preview-image-selector.jl in /usr/share/sawfish/lisp/sawfish/gtk/widgets or in $SAWFISH_USER_LISP_DIR/sawfish/gtk/widgets.
Put this code in ~/.sawfishrc:
(require 'backgrounds) (add-hook 'after-initialization-hook set-background-hook)
Code[]
;; background.jl ;; Based on Backgrounds-hack.jl ;; Author: Lucas Pandolfo (defun set-background (path) (cond ((null path) nil) (t (system (concat background-set-app " \"" path "\" &")) (if (not (null menu-changes-default-bg)) (setq root-background path))))) (defun set-background-hook () (set-background root-background)) ;; CUSTOMIZATION STUFF (defgroup background "Background") (defcustom root-background nil "Current root background" :type preview-image-selector :group background :after-set set-background-hook) (defcustom background-set-app "fbsetbg" "Application to set desktop background" :type program-name :group background :after-set set-background-hook) (defcustom menu-changes-default-bg nil "Does the menu change the default background?" :type boolean :group background) (provide 'background)
;; preview-image-selector.jl ;; Based on file.jl ;; Author: Lucas Pandolfo ;; TODO: -Resize preview preserving aspect (define-structure sawfish.gtk.widgets.preview-image-selector (export ) (open rep rep.system gui.gtk-2.gtk sawfish.gtk.widget) (define (make-preview-item changed-callback) (let* ((box (gtk-hbox-new nil box-spacing)) (entry (gtk-entry-new)) (button (gtk-file-chooser-button-new '() 'open)) (preview (gtk-image-new))) (gtk-container-set-border-width box box-border) (gtk-box-pack-start box entry) (gtk-box-pack-start box button) (when changed-callback (g-signal-connect entry "changed" (make-signal-callback changed-callback))) (g-signal-connect button "update-preview" (lambda (w) (let* ((filename (gtk-file-chooser-get-preview-filename w)) (pixbuf (gdk-pixbuf-new-from-file filename))) (if pixbuf (progn (gtk-image-set-from-pixbuf preview (gdk-pixbuf-scale-simple pixbuf 256 200 'bilinear)) (gtk-file-chooser-set-preview-widget-active button t)) (gtk-file-chooser-set-preview-widget-active button nil))))) (gtk-file-chooser-set-preview-widget button preview) (g-signal-connect button "file-set" (lambda (w) (gtk-entry-set-text entry (gtk-file-chooser-get-filename button)))) (gtk-widget-show box) (lambda (op) (case op ((set) (lambda (x) (gtk-entry-set-text entry (and (stringp x) x)))) ((clear) (lambda () (gtk-entry-set-text entry ""))) ((ref) (lambda () (gtk-entry-get-text entry))) ((gtk-widget) box) ((validp) (lambda (x) (stringp x))))))) (define-widget-type 'preview-image-selector make-preview-item))