Re: [VOTE] New Frame Classes
- From: Teika Kazura <teika lavabit com>
- To: sawfish-list gnome org
- Subject: Re: [VOTE] New Frame Classes
- Date: Thu, 08 Oct 2009 17:16:57 +0900 (JST)
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]