Commit 55a7ffad authored by Iban Hatchondo's avatar Iban Hatchondo
Browse files

- minor focus change:

  For application with a :no-input as focus model, we now gives the
  same event mask as the others. The problem was that an application
  with a globaly-active model can decide to sets the focus to one of
  its satellite window that have a no-input model. This is correct
  because the input model is indicate to the window manager how to
  give the focus to the application. But in any case, it indicates
  that the application will never have or not the focus.

- minor change in (setf fullscreen-mode): we now use the
  no-decoration-theme instead of undecorting.
parent a80d38fe
;;; -*- Mode: Lisp; Package: ECLIPSE-INTERNALS -*-
;;; $Id: widgets.lisp,v 1.15 2003/09/30 12:18:36 hatchond Exp $
;;; $Id: widgets.lisp,v 1.16 2003/10/06 17:57:26 ihatchondo Exp $
;;;
;;; ECLIPSE. The Common Lisp Window Manager.
;;; Copyright (C) 2000, 2001, 2002 Iban HATCHONDO
......@@ -162,9 +162,8 @@
;;;; Application
(defconstant +unfocusable-mask+
'(:property-change :enter-window :visibility-change))
(defconstant +focusable-mask+ '(:focus-change . #.+unfocusable-mask+))
(defconstant +application-mask+
'(:property-change :enter-window :visibility-change :focus-change))
(defconstant +properties-to-delete-on-withdrawn+
'(:_net_wm_state :_net_wm_desktop :_win_workspace))
......@@ -233,18 +232,12 @@
(with-event-mask (*root-window*)
(multiple-value-bind (x y w h) (window-geometry window)
(when master
(with-slots (children (master-win window)) master
(with-slots (children (master-win window) frame-style) master
(multiple-value-setq (x y)
(xlib:translate-coordinates master-win x y *root-window*))
(with-event-mask (master-win)
(xlib:reparent-window window *root-window* 0 0))
(xlib:destroy-window master-win)
(loop for (key widget) on children by #'cddr
unless (or (eql key :application) (eql key :icon))
do (remove-widget widget))
(remove-widget master))
(setf master nil
(slot-value icon 'master) *root*))
(setf (slot-value master 'old-frame-style) frame-style)
(setf (decoration-frame-style master)
(theme-default-style (lookup-theme "no-decoration")))))
(setf (geometry fgeometry) (values x y w h))
(if (xlib:query-extension *display* "XFree86-VidModeExtension")
(let* ((scr (first (xlib:display-roots *display*)))
......@@ -261,7 +254,8 @@
(setf (window-position window) (geometry-coordinates fgeometry)
(drawable-sizes window) (geometry-sizes fgeometry))
(unless (window-not-decorable-p window)
(decore-application window application))))
(setf (decoration-frame-style master)
(slot-value master 'old-frame-style)))))
(let ((prop (netwm:net-wm-state window)))
(if (eq ,mode :on)
(pushnew :_net_wm_state_fullscreen prop)
......@@ -271,11 +265,9 @@
(defun undecore-application (application &key state)
(with-slots (window master icon) application
(if master
(with-slots (frame-style (master-win window)) master
(multiple-value-bind (x y) (window-position master-win)
(incf x (style-left-margin frame-style))
(incf y (style-top-margin frame-style))
(xlib:reparent-window window *root-window* x y)))
(multiple-value-bind (x y)
(xlib:translate-coordinates window 0 0 *root-window*)
(xlib:reparent-window window *root-window* x y))
(event-process (make-event :destroy-notify :window window) *root*))
(when state
(setf (wm-state window) state)
......@@ -317,8 +309,7 @@
(grab-button window :any '(:button-press) :sync-pointer-p t))
(with-slots (initial-geometry) app
(setf (geometry initial-geometry) (window-geometry window)))
(setf (xlib:window-event-mask window)
(if (eq input :no-input) +unfocusable-mask+ +focusable-mask+)))
(setf (xlib:window-event-mask window) +application-mask+))
app))
(defun kill-client-window (window)
......
;;; -*- Mode: Lisp; Package: ECLIPSE-INTERNALS -*-
;;; $Id: wm.lisp,v 1.20 2003/10/01 01:53:05 hatchond Exp $
;;; $Id: wm.lisp,v 1.21 2003/10/06 17:57:26 ihatchondo Exp $
;;;
;;; ECLIPSE. The Common Lisp Window Manager.
;;; Copyright (C) 2000, 2001, 2002 Iban HATCHONDO
......@@ -36,6 +36,7 @@
(time :initform 0 :accessor decoration-precedent-time :allocation :class)
(wm-size-hints :initarg :wm-size-hints :reader decoration-wm-size-hints)
(frame-style :initarg :frame-style :accessor decoration-frame-style)
(old-frame-style :initform nil)
(application-gravity
:initarg :application-gravity
:initform :north-west
......@@ -506,7 +507,6 @@
(defmethod set-focus ((input-model (eql :no-input)) window timestamp)
(declare (ignorable window timestamp))
(xlib:set-input-focus *display* :pointer-root :pointer-root)
(values))
;; Next is methods for menu-3 who permit to manage any window :
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment