[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[STUMP] Real fullscreen and centering windows.
From: |
Philippe Brochard |
Subject: |
[STUMP] Real fullscreen and centering windows. |
Date: |
Mon, 13 Mar 2006 18:16:52 +0100 |
User-agent: |
Gnus/5.1007 (Gnus v5.10.7) Emacs/21.4 (gnu/linux) |
Hi everybody,
Here is a few patch to have windows that doesn't fill all the frame
automaticaly centered :
in core.lisp I have add this in maximize-window :
-- core.lisp ---------------------------------------------------------
(defun maximize-window (win)
"Maximize the window."
...
;; readjust the window to center if it doesn't fill all the frame
(setf (xlib:drawable-x win) (truncate (+ x (/ (- width
(xlib:drawable-width win)) 2)))
(xlib:drawable-y win) (truncate (+ y (/ (- height
(xlib:drawable-height win)) 2))))
(xlib:display-force-output *display*))))
----------------------------------------------------------------------
I have also improved the previous code to maximize a frame. Now the
background is filled to hide windows below the current window:
-- ~/.stumpwmrc ------------------------------------------------------
;;; Maximizing/minimizing current frame
;;;
;;; Add this in user.lisp: choose-frame-by-number, remove-split
;;; horiz-split-frame, vert-split-frame
;;; (minimize-frame screen)
(defvar *maximized-frame-size* (make-frame :x 0 :y 0 :width 1024 :height 768))
;;; For a dual screen.
;;(defvar *maximized-frame-size* (make-frame :x 1024 :y 0 :width 1024 :height
768))
(defvar *current-frame-size* (make-frame :x 0 :y 0 :width 0 :height 0))
(defvar *current-maximized-frame* nil)
(defvar *background-win* nil)
(defvar *background-win-color* nil)
(defun draw-background-win (screen)
(delete-background-win)
(let* ((focused-win (xlib:input-focus *display*))
(win (xlib:create-window :parent (xlib:screen-root (screen-number
screen))
:x (frame-x *maximized-frame-size*)
:y (frame-y *maximized-frame-size*)
:width (frame-width *maximized-frame-size*)
:height (frame-height *maximized-frame-size*)
:background (or *background-win-color*
(xlib:screen-black-pixel
(screen-number screen)))
:border (or *background-win-color*
(xlib:screen-black-pixel
(screen-number screen)))
:border-width 1
:event-mask '())))
(xlib:map-window win)
(setf (xlib:window-priority win) :above)
(setf (xlib:window-priority focused-win) :above)
(setf *background-win* win)
(xlib:display-force-output *display*)))
(defun delete-background-win ()
(when *background-win*
(xlib:destroy-window *background-win*)
(setf *background-win* nil)))
(defun maximize-frame (screen frame)
(when *current-maximized-frame*
(minimize-frame screen))
(setf (frame-x *current-frame-size*) (frame-x frame)
(frame-y *current-frame-size*) (frame-y frame)
(frame-width *current-frame-size*) (frame-width frame)
(frame-height *current-frame-size*) (frame-height frame))
(setf *current-maximized-frame* frame)
(setf (frame-x frame) (frame-x *maximized-frame-size*)
(frame-y frame) (frame-y *maximized-frame-size*)
(frame-width frame) (frame-width *maximized-frame-size*)
(frame-height frame) (frame-height *maximized-frame-size*))
(sync-frame-windows screen frame)
(focus-frame screen frame)
(draw-background-win screen))
(defun minimize-frame (screen)
(when *current-maximized-frame*
(setf (frame-x *current-maximized-frame*) (frame-x *current-frame-size*)
(frame-y *current-maximized-frame*) (frame-y *current-frame-size*)
(frame-width *current-maximized-frame*) (frame-width
*current-frame-size*)
(frame-height *current-maximized-frame*) (frame-height
*current-frame-size*))
(sync-frame-windows screen *current-maximized-frame*)
(setf *current-maximized-frame* nil)
(delete-background-win)
(focus-frame screen (screen-current-frame screen))))
(defun toggle-minmax-frame (screen frame)
(if *current-maximized-frame*
(minimize-frame screen)
(maximize-frame screen frame)))
(define-stumpwm-command "max" (screen)
(maximize-frame screen (screen-current-frame screen)))
(define-stumpwm-command "min" (screen)
(minimize-frame screen))
(define-stumpwm-command "toggle" (screen)
(toggle-minmax-frame screen (screen-current-frame screen)))
(define-stumpwm-command "bdb" (screen)
(setf (xlib:window-border (xlib:input-focus *display*))
(xlib:screen-black-pixel (screen-number screen))
*background-win-color* (xlib:screen-black-pixel (screen-number
screen))))
(define-stumpwm-command "bdw" (screen)
(setf (xlib:window-border (xlib:input-focus *display*))
(xlib:screen-white-pixel (screen-number screen))
*background-win-color* (xlib:screen-white-pixel (screen-number
screen))))
(add-hook *focus-window-hook*
#'(lambda (win)
(when *current-maximized-frame*
(draw-background-win (window-screen win)))))
----------------------------------------------------------------------
I have also add two function to sets the border color
bdb -> border black
bdw -> border white
With all this code, all windows are centered in the frame event if
they doesn't fill it and you have a real fullscreen.
I hope that can be useful.
Regards,
Philippe
--
Philippe Brochard <address@hidden>
http://hocwp.free.fr
-=-= http://www.gnu.org/home.fr.html =-=-
- [STUMP] Real fullscreen and centering windows.,
Philippe Brochard <=
Re: [STUMP] Real fullscreen and centering windows., Shawn Betts, 2006/03/24