diff options
author | Michael Cardell Widerkrantz <mc@hack.org> | 2012-02-15 09:22:48 +0100 |
---|---|---|
committer | Michael Cardell Widerkrantz <mc@hack.org> | 2012-02-15 09:22:48 +0100 |
commit | 5dbd2572635d5e6cc54c0920e8502f2f18839de8 (patch) | |
tree | 16a78a876967872fa39ed8513e7e132311d7a009 | |
parent | 61c2c490002813515caab181af7b4011d3b3def5 (diff) | |
download | mcwm-5dbd2572635d5e6cc54c0920e8502f2f18839de8.zip |
Put the iconify functionality behind a command line option (-i) and
added the default (false) to config.h.
Documented the iconfiy/hide windows functionality in the manual.
-rw-r--r-- | config.h | 6 | ||||
-rw-r--r-- | mcwm.c | 24 | ||||
-rw-r--r-- | mcwm.man | 39 |
3 files changed, 61 insertions, 8 deletions
@@ -33,6 +33,12 @@ #define TERMINAL "urxvt" /* + * Do we allow windows to be iconified? Set to true if you want this + * behaviour to be default. Can also be set by calling mcwm with -i. + */ +#define ALLOWICONS false + +/* * Start these programs when pressing MODKEY and mouse buttons on root window. */ #define MOUSE1 "" @@ -276,6 +276,7 @@ struct conf uint32_t focuscol; /* Focused border colour. */ uint32_t unfocuscol; /* Unfocused border colour. */ uint32_t fixedcol; /* Fixed windows border colour. */ + bool allowicons; /* Allow windows to be unmapped. */ } conf; xcb_atom_t atom_desktop; /* @@ -3904,21 +3905,27 @@ void events(void) break; case XCB_CLIENT_MESSAGE: + { + xcb_client_message_event_t *e + = (xcb_client_message_event_t *)ev; + + if (conf.allowicons) { - xcb_client_message_event_t *e - = (xcb_client_message_event_t *)ev; if (e->type == wm_change_state && e->format == 32 && e->data.data32[0] == XCB_ICCCM_WM_STATE_ICONIC) { - /* Unmap window and declare iconic. */ - xcb_unmap_window(conn, e->window); long data[] = { XCB_ICCCM_WM_STATE_ICONIC, XCB_NONE }; + + /* Unmap window and declare iconic. */ + + xcb_unmap_window(conn, e->window); xcb_change_property(conn, XCB_PROP_MODE_REPLACE, e->window, wm_state, wm_state, 32, 2, data); xcb_flush(conn); } - } + } /* if */ + } break; case XCB_CIRCULATE_REQUEST: @@ -4071,13 +4078,14 @@ int main(int argc, char **argv) conf.borderwidth = BORDERWIDTH; conf.terminal = TERMINAL; + conf.allowicons = ALLOWICONS; focuscol = FOCUSCOL; unfocuscol = UNFOCUSCOL; fixedcol = FIXEDCOL; while (1) { - ch = getopt(argc, argv, "b:t:f:u:x:"); + ch = getopt(argc, argv, "b:it:f:u:x:"); if (-1 == ch) { @@ -4092,6 +4100,10 @@ int main(int argc, char **argv) conf.borderwidth = atoi(optarg); break; + case 'i': + conf.allowicons = true; + break; + case 't': conf.terminal = optarg; break; @@ -7,6 +7,9 @@ mcwm \- MC's Window Manager for X11. .B \-b ] width [ +.B \-i +] +[ .B \-t .I terminal-program ] [ @@ -27,6 +30,12 @@ mcwm \- MC's Window Manager for X11. .PP \-b width sets border width to this many pixels. .PP +\-i turns on icons/hidden windows. +.B Please note +that there is no way from mcwm to get a hidden window back! You have +to use an external program such as a dock or the 9icon script (see +below) to get the window mapped again. +.PP \-t urxvt will start urxvt when MODKEY + Return is pressed. Change to your prefered terminal program or something else entirely. .PP @@ -150,7 +159,7 @@ If you don't like the default key bindings, border width, et cetera, look in the config.h file, change and recompile. In the config.h file you can also define mouse button actions on the root window. By default button 3 starts the command mcmenu. You can write your own -mcmenu by using, for instance, 9menu or ratmenu. +mcmenu by using, for instance, 9menu, dmenu or ratmenu. .PP .SH STARTING Typically the window manager is started from a script, either run by @@ -189,7 +198,7 @@ Here's a complete example using the 9menu program: .in +4 .nf \&#! /bin/sh -9menu -bg black -fg white \\ +exec 9menu -bg black -fg white \\ -popup \\ 'cpu:urxvt -e ssh cpu.example.org' \\ ':' \\ @@ -204,5 +213,31 @@ Here's a complete example using the 9menu program: .fi .in -4 .sp +.PP +Christian Neukirchen wrote a little script you can use to get +iconified windows mapped again. It relies on xwininfo and xdotool and +GNU xargs. +.sp +.in +4 +.nf +\&#! /bin/sh +# 9icon - show 9menu of iconified windows for unmapping + +IFS=" +" + +for win in $(xwininfo -root -children | awk '$1~/0x/ && $2~/"/ {print $1}'); do + xprop -id $win WM_NAME WM_STATE | + awk -F'"' -v win=$win ' + /^WM_NAME/ { name=$2 } + /window state: Iconic/ { + print name ":xdotool windowmap " win " windowraise " win + } + ' +done | xargs -r -d'\\n' \\ + 9menu -popup -label 9icon -bg grey20 -fg grey80 -font fixed +.fi +.in -4 +.sp .SH AUTHOR Michael Cardell Widerkrantz <mc@hack.org>. |