Update of /project/eclipse/cvsroot/eclipse
In directory cl-net:/tmp/cvs-serv12329
Modified Files:
.eclipse input.lisp package.lisp themer.lisp widgets.lisp
wm.lisp
Log Message:
Fix: theme rework to remove eql specializer on theme name in favor of theme object.
--- /project/eclipse/cvsroot/eclipse/.eclipse 2003/08/28 14:51:37 1.5
+++ /project/eclipse/cvsroot/eclipse/.eclipse 2009/11/17 21:17:29 1.6
@@ -58,7 +58,7 @@
:modifiers '(:and :ALT-LEFT :CONTROL-LEFT))
(define-key-combo :scroll-down
:keys '(:q)
- :modifiers '(:and :ALT-LEFT :CONTROL-LEFT))
+ :modifiers '(:and :ISO-LEVEL3-SHIFT :CONTROL-LEFT))
;; example of user define keystroke:
;(define-key-combo :raise-pointered-window
--- /project/eclipse/cvsroot/eclipse/input.lisp 2009/02/20 18:03:55 1.53
+++ /project/eclipse/cvsroot/eclipse/input.lisp 2009/11/17 21:17:29 1.54
@@ -1,5 +1,5 @@
;;; -*- Mode: Lisp; Package: ECLIPSE-INTERNALS -*-
-;;; $Id: input.lisp,v 1.53 2009/02/20 18:03:55 ihatchondo Exp $
+;;; $Id: input.lisp,v 1.54 2009/11/17 21:17:29 ihatchondo Exp $
;;;
;;; ECLIPSE. The Common Lisp Window Manager.
;;; Copyright (C) 2000, 2001, 2002 Iban HATCHONDO
@@ -148,13 +148,12 @@
(undecore-application widget :state 0)
(setf (wm-state window) 3)))))
(decoration
- (let ((application (get-child widget :application)))
+ (let ((application (get-child widget :application)))
(if (application-iconic-p application)
(setf (wm-state (widget-window application)) 3)
- (with-slots (window send-event-p) event
+ (progn
(setf send-event-p t)
(setf window (widget-window application))
- (format t "about to withdraw: ~a ~%" (wm-name window))
(event-process event root)))))))))
(defmethod event-process ((event destroy-notify) (root root))
@@ -451,13 +450,13 @@
(defmethod event-process ((event exposure) (button button))
(when (zerop (event-count event))
(let* ((master (slot-value button 'master))
- (name (if master
- (slot-value (decoration-frame-style master) 'name)
- (theme-name (root-decoration-theme *root*)))))
- (repaint button name (and master (focused-p master))))))
+ (theme (if master
+ (slot-value (decoration-frame-style master) 'theme)
+ (root-decoration-theme *root*))))
+ (repaint button theme (and master (focused-p master))))))
(defmethod event-process ((event exposure) (box box-button))
- (repaint box (theme-name (root-decoration-theme *root*)) nil))
+ (repaint box (root-decoration-theme *root*) nil))
(defmethod event-process ((event button-release) (close close-button))
(close-widget (get-child (button-master close) :application)))
--- /project/eclipse/cvsroot/eclipse/package.lisp 2005/01/16 23:25:59 1.19
+++ /project/eclipse/cvsroot/eclipse/package.lisp 2009/11/17 21:17:29 1.20
@@ -1,5 +1,5 @@
;;; -*- Mode: Lisp; Package: User -*-
-;;; $Id: package.lisp,v 1.19 2005/01/16 23:25:59 ihatchondo Exp $
+;;; $Id: package.lisp,v 1.20 2009/11/17 21:17:29 ihatchondo Exp $
;;;
;;; This file is part of Eclipse.
;;; Copyright (C) 2002 Iban HATCHONDO
@@ -181,7 +181,7 @@
#:pixmap-width ;function
#:procede-decoration ;function
#:query-application-tree ;function
- #:%quit% ;function
+ #:quit ;function
#:realize-menu-items ;function
#:realize-pop-up ;function
#:recompute-wm-normal-hints ;function
@@ -254,6 +254,7 @@
#:frame-item-pixmaps ;generic function
#:frame-item-sizes ;generic function
#:frame-item-width ;generic function
+ #:frame-style-theme ;generic function
#:free-frame-style ;generic function
#:get-child ;generic function
#:get-pixmap ;generic function
--- /project/eclipse/cvsroot/eclipse/themer.lisp 2009/11/17 18:08:43 1.12
+++ /project/eclipse/cvsroot/eclipse/themer.lisp 2009/11/17 21:17:29 1.13
@@ -1,5 +1,5 @@
;;; -*- Mode: Lisp; Package: ECLIPSE-INTERNALS -*-
-;;; $Id: themer.lisp,v 1.12 2009/11/17 18:08:43 ihatchondo Exp $
+;;; $Id: themer.lisp,v 1.13 2009/11/17 21:17:29 ihatchondo Exp $
;;;
;;; This file is part of Eclipse.
;;; Copyright (C) 2002 Iban HATCHONDO
@@ -31,11 +31,11 @@
(gethash name *themes*))
(defclass frame-style ()
- ((name
- :initform "no name"
- :type string
- :initarg :theme-name
- :reader frame-style-theme-name)
+ ((theme
+ :initform nil
+ :type (or null theme)
+ :initarg style-theme
+ :reader frame-style-theme)
(title-bar-position
:initform :top
:type keyword
@@ -239,6 +239,9 @@
(defmethod initialize-instance :after ((theme theme) &rest options)
(declare (ignorable options))
+ (with-slots (default-style transient-style) theme
+ (when default-style (setf (slot-value default-style 'theme) theme))
+ (when transient-style (setf (slot-value transient-style 'theme) theme)))
(setf (gethash (theme-name theme) *themes*) theme))
;;;; build-in no decoration theme.
@@ -247,7 +250,6 @@
(make-instance 'theme :name "no-decoration"
:default-style (make-instance 'default-style
- :theme-name "no-decoration"
:title-bar-position :none))
;;;; misc functions.
@@ -299,11 +301,8 @@
;;;; theme manipulation.
-;; I defined this here, just to avoid compilation warnings.
-;; But it doesn't matter, because just before loading a theme
-;; (fmakunbound 'initialize-frame) is called.
-(defun initialize-frame (directory-name window)
- (declare (ignorable directory-name window))
+(defmethod initialize-frame (theme-class-symbol directory-name window)
+ (declare (ignorable theme-class-symbol directory-name window))
(values))
(defun free-theme (name)
@@ -316,11 +315,13 @@
(defun load-theme (root-window name)
"Loads and returns theme named by parameter name. Themes are cached."
- (unless (lookup-theme name)
- (fmakunbound 'initialize-frame)
- (setf name (ensure-theme-directory-exists name))
- (load (concatenate 'string name "theme.o"))
- (setf name (theme-name (initialize-frame name root-window))))
+ (unless (lookup-theme name)
+ (let* ((tclass (string-upcase name))
+ (theme-package (concatenate 'string tclass "-ECLIPSE-THEME")))
+ (setf name (ensure-theme-directory-exists name))
+ (load (concatenate 'string name "theme.o"))
+ (let ((tclass (with-standard-io-syntax (intern tclass theme-package))))
+ (setf name (theme-name (initialize-frame tclass name root-window))))))
(use-package (format nil "~:@(~A~)-ECLIPSE-THEME" name))
(lookup-theme name))
@@ -407,28 +408,30 @@
((style1 title-pos1 bkgrd1 parts-to-redraw-on-focus1 items1)
(style2 title-pos2 bkgrd2 parts-to-redraw-on-focus2 items2))
(mapcar #'parse-args forms)
-
- `(defun initialize-frame (dir window)
- (let ((fs1 ,(and items1
+ (let ((theme-class (format nil "~:@(~a~)" (symbol-value theme-name))))
+ `(progn
+ (defclass ,(intern theme-class) (eclipse::theme) ()
+ (:documentation ,(format nil "~a theme base class" theme-name)))
+ (defmethod eclipse-internals::initialize-frame
+ ((name (eql ',(intern theme-class))) dir window)
+ (let ((fs1 ,(and items1
`(make-instance
',(intern (symbol-name style1) "ECLIPSE-INTERNALS")
- :theme-name ,theme-name
:title-bar-position ,title-pos1
:background (make-background ,bkgrd1 window dir)
:parts-to-redraw-on-focus
',parts-to-redraw-on-focus1)))
- (fs2 ,(and items2
+ (fs2 ,(and items2
`(make-instance
',(intern (symbol-name style2) "ECLIPSE-INTERNALS")
- :theme-name ,theme-name
:title-bar-position ,title-pos2
:background (make-background ,bkgrd2 window dir)
:parts-to-redraw-on-focus
',parts-to-redraw-on-focus2))))
- ,(unless items2 `(declare (ignorable fs2)))
- ,(when items1 (define-style `fs1 items1 `dir `window))
- ,(when items2 (define-style `fs2 items2 `dir `window `fs1))
- (make-instance 'eclipse::theme :name ,theme-name
- ,@(and style1 `(,style1 fs1))
- ,@(and style2 `(,style2 fs2))))))))
+ ,(unless items2 `(declare (ignorable fs2)))
+ ,(when items1 (define-style `fs1 items1 `dir `window))
+ ,(when items2 (define-style `fs2 items2 `dir `window `fs1))
+ (make-instance ',(intern theme-class) :name ,theme-name
+ ,@(and style1 `(,style1 fs1))
+ ,@(and style2 `(,style2 fs2))))))))))
--- /project/eclipse/cvsroot/eclipse/widgets.lisp 2009/11/17 17:33:21 1.58
+++ /project/eclipse/cvsroot/eclipse/widgets.lisp 2009/11/17 21:17:29 1.59
@@ -1,5 +1,5 @@
;;; -*- Mode: Lisp; Package: ECLIPSE-INTERNALS -*-
-;;; $Id: widgets.lisp,v 1.58 2009/11/17 17:33:21 ihatchondo Exp $
+;;; $Id: widgets.lisp,v 1.59 2009/11/17 21:17:29 ihatchondo Exp $
;;;
;;; ECLIPSE. The Common Lisp Window Manager.
;;; Copyright (C) 2000, 2001, 2002 Iban HATCHONDO
@@ -73,12 +73,12 @@
maximization the widget will be enlarged to cover the whole screen except
any existing panels (e.g applications with the :_net_wm_window_type_dock
atom present in there _net_wm_window_type property.
- widget (base-widget): the widget to (un)maximize.
- code (integer 1 3):
- 1 operates on width and height.
- 2 operates on height.
- 3 operates on width.
- :fill-p (boolean): If NIL, cover the whole screen (except dock type
+ - widget (base-widget): the widget to (un)maximize.
+ - code (integer 1 3):
+ -- 1 operates on width and height.
+ -- 2 operates on height.
+ -- 3 operates on width.
+ - :fill-p (boolean): If NIL, cover the whole screen (except dock type
applications). If T, finds the first region of the screen that does
not overlap applications not already overlapped by the widget."))
@@ -96,14 +96,14 @@
(:documentation "Returns T if one of the state :win_state_fixed_position
:_net_wm_state_sticky is set for the widget."))
-(defgeneric repaint (widget theme-name focus)
- (:method (widget theme-name focus) nil)
+(defgeneric repaint (widget theme focus)
+ (:method (widget theme focus) nil)
(:documentation
"This method is dedicated to widget repaint such as every buttons, icons,
edges ...
- It is specialized on widget type, theme name (via an eql specializer) and a
- boolean that indicate if the corresponding toplevel (type decoration) is or
- not focused.
+
+ It is specialized on widget type, frame-style theme and a boolean that
+ indicate if the corresponding toplevel (type decoration) is or not focused.
Except for standard expose events, the repaint dispatching on focus change
will be perform according to parts-to-redraw-on-focus list given in
@@ -567,16 +567,16 @@
(defconstant +std-button-mask+
'(:button-press :button-release :button-motion :owner-grab-button :exposure))
-(defmethod repaint ((widget button) theme-name (focus t))
- (declare (ignorable theme-name focus))
+(defmethod repaint ((widget button) theme (focus t))
+ (declare (ignorable theme focus))
(with-slots (item-to-draw window gcontext) widget
(xlib:clear-area window)
(typecase item-to-draw
(string (draw-centered-text window gcontext item-to-draw))
(xlib:pixmap (draw-pixmap window gcontext item-to-draw)))))
-(defmethod repaint ((widget button) theme-name (focus null))
- (declare (ignorable theme-name focus))
+(defmethod repaint ((widget button) theme (focus null))
+ (declare (ignorable theme focus))
(xlib:clear-area (widget-window widget)))
(defmethod shaded-p ((widget button))
@@ -654,8 +654,8 @@
(window-position window) (values x y)
(slot-value box 'item-to-draw) m))))))
-(defmethod repaint ((widget box-button) theme-name focus &aux x)
- (declare (ignorable theme-name focus))
+(defmethod repaint ((widget box-button) theme focus &aux x)
+ (declare (ignorable theme focus))
(with-slots (window item-to-draw gcontext pixmap) widget
(xlib:clear-area window)
(when pixmap
@@ -713,19 +713,19 @@
(declare (ignorable value))
(with-slots (window master) button
(when (decoration-p master)
- (with-slots (name) (decoration-frame-style master)
- (repaint button name (focused-p master))))))
+ (with-slots (theme) (decoration-frame-style master)
+ (repaint button theme (focused-p master))))))
-(defmethod repaint ((widget push-button) theme-name (focus t))
- (declare (ignorable theme-name focus))
+(defmethod repaint ((widget push-button) theme (focus t))
+ (declare (ignorable theme focus))
(with-slots (window gcontext armed active-p item-to-draw) widget
(xlib:clear-area window)
(let ((p (and armed active-p (push-button-pixmap widget :focused-click))))
(when (or p item-to-draw)
(draw-pixmap window gcontext (or p item-to-draw))))))
-(defmethod repaint ((widget push-button) theme-name (focus null))
- (declare (ignorable theme-name focus))
+(defmethod repaint ((widget push-button) theme (focus null))
+ (declare (ignorable theme focus))
(with-slots (window gcontext armed active-p) widget
(xlib:clear-area window)
(let ((pixmap (push-button-pixmap widget :unfocused-click)))
@@ -752,8 +752,8 @@
(hmargin :initform 0)
(parent :initform nil)))
-(defmethod repaint ((widget title-bar) theme-name focus)
- (declare (ignorable theme-name focus))
+(defmethod repaint ((widget title-bar) theme focus)
+ (declare (ignorable theme focus))
(with-slots (item-to-draw window gcontext) widget
(xlib:clear-area window)
(when item-to-draw
@@ -931,8 +931,8 @@
(and pixmap-to-free (xlib:free-pixmap pixmap-to-free))
(setf pixmap-to-free nil)))
-(defmethod repaint ((widget icon) theme-name focus)
- (declare (ignorable theme-name focus))
+(defmethod repaint ((widget icon) theme focus)
+ (declare (ignorable theme focus))
(with-slots (window item-to-draw gcontext) widget
(xlib:clear-area window)
(draw-centered-text window gcontext item-to-draw :color *white*)))
--- /project/eclipse/cvsroot/eclipse/wm.lisp 2009/11/17 17:31:25 1.58
+++ /project/eclipse/cvsroot/eclipse/wm.lisp 2009/11/17 21:17:29 1.59
@@ -1,5 +1,5 @@
;;; -*- Mode: Lisp; Package: ECLIPSE-INTERNALS -*-
-;;; $Id: wm.lisp,v 1.58 2009/11/17 17:31:25 ihatchondo Exp $
+;;; $Id: wm.lisp,v 1.59 2009/11/17 21:17:29 ihatchondo Exp $
;;;
;;; ECLIPSE. The Common Lisp Window Manager.
;;; Copyright (C) 2000, 2001, 2002 Iban HATCHONDO
@@ -159,9 +159,9 @@
(defmethod dispatch-repaint ((master decoration)
&key (focus (focused-p master)))
(declare (optimize (speed 3) (safety 1)))
- (with-slots (parts-to-redraw-on-focus name) (decoration-frame-style master)
- (declare (type string name))
- (mapc #'(lambda (k) (repaint (get-child master k) name focus))
+ (with-slots (parts-to-redraw-on-focus theme) (decoration-frame-style master)
+ (declare (type theme theme))
+ (mapc #'(lambda (k) (repaint (get-child master k) theme focus))
parts-to-redraw-on-focus)))
(defun recompute-wm-normal-hints (window hmargin vmargin)
@@ -720,7 +720,7 @@
((window-not-decorable-p window (application-type application))
(setf (netwm:net-frame-extents window) (values 0 0 0 0))
(setf (wm-state window) 1)
- (xlib:map-window window))
+ (xlib:map-window window))
(t (decore-application window application :map t)))
(with-slots (wants-focus-p input-model type) application
(unless (member :_net_wm_window_type_desktop type)
@@ -737,7 +737,7 @@
:type boolean :reader close-application-p)))
(defun eclipse-internal-loop ()
- (let* ((exit 0) time)
+ (let* ((exit 0))
;; Sets the root window pop-up menu
(when *menu-1-exit-p*
@@ -765,10 +765,9 @@
(xlib:with-server-grabbed (*display*)
(mapc (lambda (w)
- (unless (ignore-errors (ignorable-window-p w))
+ (unless (ignore-errors (ignorable-window-p w))
(procede-decoration w)))
(xlib:query-tree *root-window*))))
-
;; Main loop
(loop
(catch 'general-error
@@ -786,7 +785,7 @@
when (application-p val)
if *close-display-p* do (close-widget val)
else do (undecore-application val))
- (setf time 10 exit 2))
+ (setf exit 2))
(2 (when (root-sm-conn *root*)
(close-sm-connection *root* :exit-p nil))
(xlib:display-finish-output *display*)