Re: [VOTE] New Frame Classes



Hi.

Well, you can invent many many buttons, if not infinite. It's likely 
that pull-in-all ends in poor achievements.

If he needs often, say, toggle-sticky-button, then he can bind it to a
key. Or an alternative I come up with is to have a "general button"
suitable for user-definition. Perhaps it's a trimmed down version of
window operation menu, and they can easily add/remove commands to it.

Not sure at all.

> Possible future plans:
> 
> * Beeing able to change more options on the fly than the font-color (I
> dunno which ones yet, but
>   perhaps the button-order (maybe using some fancy custom GtkWidget?),
> or the frame-color (though
>   the later my cause ugly results on some themes perhaps))

So, more flexibility. My comment above can be re-interpreted in this
way.

> * add something like window-is-tabbed-p to recognize tabbed windows
A must. tab-raise-on-hover is currently raise-on-hover, but it can be
fixed with this.

In fact, what is needed is (windows-tab-group w), which returns the 
tab group to which the window belongs, or nil if none.

Anyway, tab lacks good standards. 

> add a new frame-class 'tabbed (so that themes can be set-up for
>   supporting both tabbed and non-tabbed windows *at once*)

It is good that Sawfish provide some fallback tab support for themes.

I confess I don't understand, after reading your patch, what the
frame-class is. ;) Yep, it's documented. 


Teika (Teika kazura)

On Sat, 26 Sep 2009 23:11:07 +0200, Christopher Roy Bratusek wrote:
> Hi all,
> 
> I've been thinking of new buttons provided by sawfish, so we don't need
> to reinvent the wheel everytime (like mxflat does). 
> Together with the new options for changing frame-font-colors
> independently of the theme and on-the-fly it may improve the
> experience of making new themes for sawfish (or improving old ones).
> 
> First of all the complete patch (frame-classes, their keymap,
> sawfish.texi, news.texi, ChangeLog and KEYBINDINGS update)
> 
> *************************************************
> diff --git a/ChangeLog b/ChangeLog
> index 10136ab..71cf661 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -42,6 +42,18 @@
>  
>  	* man/sawfish.texi: added update-frame-font-color
>  
> +	* man/sawfish.texi
> +	* KEYBINDINGS
> +	* lisp/sawfish/wm/frames.jl
> +	* lisp/sawfish/wm/keymaps.jl: added new buttons + keymaps + docs:
> +                                      - sticky button
> +				      - lock button
> +				      - rename button
> +				      - move/resize button
> +				      - raise/lower button
> +
> +	* man/news.texi: updated
> +
>  2009-09-23  Christopher Bratusek <zanghar freenet de>
>  	* man/news.texi: news items for 1.6.0 are partially rewritten [Teika
> Kazura]
>  
> diff --git a/KEYBINDINGS b/KEYBINDINGS
> index 7d3156c..d500489 100644
> --- a/KEYBINDINGS
> +++ b/KEYBINDINGS
> @@ -113,7 +113,7 @@ for example:
>  ( unbind-keys global-keymap "W-Tab" 'cycle-windows )
>  
>  another thing would be nested keybindings (I prefer `macros' instead of
> `nested keyinbindgs'),
> -like in emacs. nested means you first press keys which together act as
> a new modifier 
> +like in emacs. nested means you first press keys which together act as
> a new modifier
>  (this new modifier works like the compose key does -> you don't have to
> keep it pressed, like other modifiers),
>  then you press another key (or keybinding) to actually perform the
> desired action, example:
>  
> @@ -189,3 +189,31 @@ Button1-Click1 -> Popup Window Menu
>  shade-button-keymap (Those bindings are active when the pointer is on
> the shade button)
>  
>  Button1-Off -> Toggle Window Shaded
> +
> +sticky-button-keymap (Those bindings are active when the pointer is on
> the sticky button)
> +
> +Button1-Off -> Toggle Window Sticky
> +Button2-Off -> Toggle Window Viewport-Sticky
> +
> +lock-button-keymap (Those bindings are active when the pointer is on
> the lock button)
> +
> +Button1-Off -> Toggle Window Fixed-Position
> +
> +rename-button-keymap (Those bindings are active when the pointer is on
> the rename button)
> +
> +Button1-Off -> Rename Window
> +
> +move-resize-button-keymap (Those bindings are active when the pointer
> in on the move/resize button)
> +
> +Button1-Off -> Move Window Interactively
> +Button2-Off -> Resize Window Interactively
> +Button3-Off -> Move Window Center
> +Button4-Off -> Double Window Size
> +Button5-Off -> Halve Window Size
> +
> +raise-lower-button-keymap (Those bindings are active when the pointer
> in on the raise/lower button)
> +
> +Button1-Off -> Raise Window
> +Button2-Off -> Lower Window
> +Button4-Off -> Raise Window Depth
> +Button5-Off -> Lower Window Depth
> diff --git a/lisp/sawfish/wm/frames.jl b/lisp/sawfish/wm/frames.jl
> index 9c65c2e..c6b8397 100644
> --- a/lisp/sawfish/wm/frames.jl
> +++ b/lisp/sawfish/wm/frames.jl
> @@ -633,6 +633,11 @@ deciding which frame type to ask a theme to
> generate.")
>    (define-frame-class 'iconify-button '((keymap .
> iconify-button-keymap)))
>    (define-frame-class 'maximize-button '((keymap .
> maximize-button-keymap)))
>    (define-frame-class 'shade-button '((keymap . shade-button-keymap)))
> +  (define-frame-class 'sticky-button '((keymap .
> sticky-button-keymap)))
> +  (define-frame-class 'lock-button '((keymap . lock-button-keymap)))
> +  (define-frame-class 'rename-button '((keymap .
> rename-button-keymap)))
> +  (define-frame-class 'move-resize-button '((keymap .
> move-resize-button-keymap)))
> +  (define-frame-class 'raise-lower-button '((keymap .
> raise-lower-button-keymap)))
>  
>    (define-frame-class 'title `((keymap . title-keymap)
>  			       (cursor . ,(cursor-for-frame-part 'title))))
> diff --git a/lisp/sawfish/wm/keymaps.jl b/lisp/sawfish/wm/keymaps.jl
> index 25e761b..f27cec2 100644
> --- a/lisp/sawfish/wm/keymaps.jl
> +++ b/lisp/sawfish/wm/keymaps.jl
> @@ -101,7 +101,7 @@
>  			     "W-Button2-Click1" 'popup-window-menu
>  			     "W-Button1-Move" 'move-window-interactively
>  			     "Button1-Click1" 'raise-and-pass-through-click
> -			     "W-ISO_Left_Tab" 'tab-raise-left-window 
> +			     "W-ISO_Left_Tab" 'tab-raise-left-window
>  			     "H-ISO_Left_Tab" 'tab-raise-right-window)
>      "Keymap containing bindings active when a client window is
> focused."
>      :group bindings
> @@ -177,6 +177,57 @@ of a window. (Only mouse-bindings are evaluated in
> this map.)"
>      :group bindings
>      :type keymap)
>  
> +  (defcustom sticky-button-keymap (bind-keys (make-keymap)
> +				   "Button1-Off" 'toggle-window-sticky
> +				   "Button2-Off" '(call-command
> +				                   (lambda ()
> +						     (if (window-get (current-event-window) 'sticky-viewport)
> +						           (window-put (current-event-window) 'sticky-viewport
> nil)
> +							   (window-put (current-event-window) 'sticky-viewport t)))))
> +    "Keymap containing bindings active when the pointer is in the
> sticky button
> +of a window. (Only mouse-bindings are evaluated in this map.)"
> +    :group bindings
> +    :type keymap)
> +
> +  (defcustom lock-button-keymap (bind-keys (make-keymap)
> +    "Button1-Off" '(call-command
> +			(lambda ()
> +				(if (window-get (current-event-window) 'fixed-position)
> +					(window-put (current-event-window) 'fixed-position nil)
> +					(window-put (current-event-window) 'fixed-position t)))))
> +    "Keymap containing bindings active when the pointer is in the lock
> button
> +of a window. (Only mouse-bindings are evaluated in this map.)"
> +    :group bindings
> +    :type keymap)
> +
> +  (defcustom rename-button-keymap (bind-keys (make-keymap)
> +				   "Button1-Off" 'rename-window)
> +    "Keymap containing bindings active when the pointer is in the
> rename button
> +of a window. (Only mouse-bindings are evaluated in this map.)"
> +    :group bindings
> +    :type keymap)
> +
> +  (defcustom move-resize-button-keymap (bind-keys (make-keymap)
> +                                        "Button1-Off"
> 'move-window-interactively
> +					"Button2-Off" 'resize-window-interactively
> +					"Button3-Off" 'move-window-center
> +					"Button4-Off" 'double-window-size
> +					"Button5-Off" 'halve-window-size)
> +    "Keymap containing bindings active when the pointer is in the
> move/resize button
> +of a window. (Only mouse-bindings are evaluated in this map.)"
> +    :group bindings
> +    :type keymap)
> +
> +  (defcustom raise-lower-button-keymap (bind-keys (make-keymap)
> +                                         "Button1-Off" 'raise-window
> +					 "Button2-Off" 'lower-window
> +					 "Button4-Off" 'raise-window-depth
> +					 "Button5-Off" 'lower-window-depth)
> +    "Keymap containing bindings active when the pointer is in the
> raise/lower button
> +of a window. (Only mouse-bindings are evaluated in this map.)"
> +  :group bindings
> +  :type keymap)
> +
>    (defvar pointer-motion-threshold 2
>      "Distance in pixels pointer must move before generating motion
> events.")
>  
> @@ -196,7 +247,7 @@ of a window. (Only mouse-bindings are evaluated in
> this map.)"
>    (define (keymap-add-window w)
>      (unless (window-get w 'keymap)
>        (window-put w 'keymap window-keymap)))
> -  
> +
>    (add-hook 'add-window-hook keymap-add-window)
>  
>  ;; custom support for modifiers
> diff --git a/man/news.texi b/man/news.texi
> index 077c4bb..1387fe2 100644
> --- a/man/news.texi
> +++ b/man/news.texi
> @@ -83,7 +83,7 @@ Shrink-yank functions and @code{send-to-workspace}.
>  
>  @item Sawfish does now support theme-tarballs compressed with XZ (aka
> LZMA2) or LZMA [Christopher Bratusek]
>  
> - item 3 new sawfish-mmc based commands (@code{maximize-unframe},
> @code{maximize-reframe} and @code{rename-window}) [Christopher Bratusek]
> + item 3 new sawfish-mmc based commands (@code{maximize-unframe},
> @code{maximize-reframe} and @code{rename-window} (not ICCCM compliant))
> [Christopher Bratusek]
>  
>  @item 5 new move-cursor commands (@code{move-cursor-} @code{northwest},
> @code{northeast}, @code{southwest}, @code{southeast}), and
> @code{move-cursor-center} [Christopher Bratusek]
>  
> @@ -126,6 +126,19 @@ In KDE4 WM Selector, Sawfish is added.
>  
>  @item Added @code{get-window-by-class} and
> @code{get-window-by-class-re} [Christopher Bratusek]
>  @end itemize
> + item New Frame Classes:
> + itemize @minus
> +
> + item @code{sticky-button}, a button to toggle window @code{sticky} or
> @code{viewport-sticky} [Christopher Bratusek]
> +
> + item @code{lock-button}, a button to toggle window position
> @code{fixed} [Christopher Bratusek]
> +
> + item @code{rename-button}, a button to rename the window-title and
> window-icon properties (not ICCCM compliant) [Christopher Bratusek]
> +
> + item @code{move-resize-button}, a button to perform various move and
> resize actions on a window [Christopher Bratusek]
> +
> + item @code{raise-lower-button}, a button to perform various raising
> and lowering actions on a window [Christopher Bratusek]
> + end itemize
>  @item Widget Transistion:
>  @itemize @minus
>  
> diff --git a/man/sawfish.texi b/man/sawfish.texi
> index 4d14006..4fd46a9 100644
> --- a/man/sawfish.texi
> +++ b/man/sawfish.texi
> @@ -3231,10 +3231,11 @@ The names of the pre-defined classes are as
> follows, their meanings
>  should be self-explanatory:
>  
>  @code{title}, @code{menu-button}, @code{close-button},
> - code{iconify-button}, @code{maximize-button}, @code{top-border},
> - code{left-border}, @code{right-border}, @code{bottom-border},
> - code{top-left-corner}, @code{top-right-corner},
> - code{bottom-left-corner}, @code{bottom-right-corner}.
> + code{iconify-button}, @code{maximize-button}, @code{sticky-button},
> + code{lock-button}, @code{rename-button}, @code{move-resize-button},
> + code{raise-lower-button}, @code{top-border}, @code{left-border},
> + code{right-border}, @code{bottom-border}, @code{top-left-corner},
> + code{top-right-corner}, @code{bottom-left-corner},
> @code{bottom-right-corner}.
>  
>  @noindent
>  Extra classes can be created by adding to @code{frame-part-classes}.
> @@ -5347,6 +5348,11 @@ Keymaps active in the title and borders of window
> frames.
>  @itemx maximize-button-keymap
>  @itemx menu-button-keymap
>  @itemx shade-button-keymap
> + itemx sticky-button-keymap
> + itemx lock-button-keymap
> + itemx rename-button-keymap
> + itemx move-resize-button-keymap
> + itemx raise-lower-button-keymap
>  Keymaps active in the standard window frame buttons.
>  
>  @item override-keymap
> *************************************************
> 
> Alternatively I may add `toggle-window-sticky-viewport' and
> `toggle-window-fixed-position' commands
> instead of manually calling window-put, if that is desired.
> 
> Possible future plans:
> 
> * Beeing able to change more options on the fly than the font-color (I
> dunno which ones yet, but
>   perhaps the button-order (maybe using some fancy custom GtkWidget?),
> or the frame-color (though
>   the later my cause ugly results on some themes perhaps))
> 
> * add something like window-is-tabbed-p to recognize tabbed windows and
> add a new frame-class 'tabbed
>   (so that themes can be set-up for supporting both tabbed and
> non-tabbed windows *at once*)
> 
> * more?
> 
> Now I would like to hear your oppionions.
> 
> Happy Hacking,
> Chris



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]