Add option to disallow killing of a client

This commit is contained in:
speedie 2023-02-09 16:10:43 +01:00
parent a776b419ff
commit 23e3cca8a0
12 changed files with 111 additions and 39 deletions

View file

@ -476,7 +476,7 @@ Below is a list of all .Xresources values you can define.
- speedwm.layout.monocle.clientcount: 0 - speedwm.layout.monocle.clientcount: 0
- speedwm.layout.monocle.count: 0 - speedwm.layout.monocle.count: 0
- speedwm.layout.monocle.format: [%d/%d] - speedwm.layout.monocle.format: [%d/%d]
- speedwm.layout.custom.cmd: printf '' | spmenu -i -l 10 -p 'Enter S expression:' - speedwm.layout.custom.cmd: speedwm-sxp
- speedwm.mfact: 0.50 - speedwm.mfact: 0.50
- speedwm.mfact.lowest: 0.05 - speedwm.mfact.lowest: 0.05
- speedwm.mouse.clicktofocus: 0 - speedwm.mouse.clicktofocus: 0

8
bar.h
View file

@ -70,9 +70,9 @@
*/ */
static const BarRule barrules[] = { static const BarRule barrules[] = {
/* Monitor Bar Alignment Width Draw Click Value Module name */ /* Monitor Bar Alignment Width Draw Click Value Module name */
{ -1, 0, bar_align_left, width_ltsymbol, draw_ltsymbol, click_ltsymbol, 0, "layout" }, { -1, 1, bar_align_left, width_ltsymbol, draw_ltsymbol, click_ltsymbol, 0, "layout" },
{ -1, 0, bar_align_left, width_tags_pwl, draw_tags_pwl, click_tags_pwl, 0, "powerline tags" }, { -1, 1, bar_align_left, width_tags_pwl, draw_tags_pwl, click_tags_pwl, 0, "powerline tags" },
{ 'A', 0, bar_align_right, width_systray, draw_systray, click_systray, 0, "systray" }, { 'A', 1, bar_align_right, width_systray, draw_systray, click_systray, 0, "systray" },
{ -1, 0, bar_align_right, width_status_pwl, draw_status_pwl, click_status_pwl, 0, "powerline status" }, { -1, 1, bar_align_right, width_status_pwl, draw_status_pwl, click_status_pwl, 0, "powerline status" },
{ -1, 0, bar_align_none, width_title, draw_title, click_title, 0, "title" }, { -1, 0, bar_align_none, width_title, draw_title, click_title, 0, "title" },
}; };

View file

@ -40,6 +40,7 @@ speedwm.border.size: 1 ! Size of the border around windows in
!! Client options !! Client options
speedwm.client.map: 1 ! Map and unmap windows through X11 (0/1) speedwm.client.map: 1 ! Map and unmap windows through X11 (0/1)
speedwm.client.allowkill: 1 ! Allow killing clients by default (0/1)
speedwm.client.allowurgent: 1 ! Allow windows to have the 'urgent' status (0/1) speedwm.client.allowurgent: 1 ! Allow windows to have the 'urgent' status (0/1)
speedwm.client.automove: 1 ! Allow windows to move themselves on demand. This may be annoying depending on what software you use and is disabled by default for this reason (0/1) speedwm.client.automove: 1 ! Allow windows to move themselves on demand. This may be annoying depending on what software you use and is disabled by default for this reason (0/1)
speedwm.client.autofocus: 1 ! Allow windows to focus themselves on demand. This may be annoying depending on what software you use and is disabled by default for this reason (0/1) speedwm.client.autofocus: 1 ! Allow windows to focus themselves on demand. This may be annoying depending on what software you use and is disabled by default for this reason (0/1)

View file

@ -21,23 +21,23 @@
- 21 - Toggle the bar - 21 - Toggle the bar
- 22 - Toggle fullscreen - 22 - Toggle fullscreen
- 23 - Toggle floating - 23 - Toggle floating
- 24 - Swap the current window with the next - 24 - Swap the current client with the next
- 25 - Reorganize tags (Reorder them) - 25 - Reorganize tags (Reorder them)
- 26 - Shutdown speedwm - 26 - Shutdown speedwm
- 27 - Restart speedwm - 27 - Restart speedwm
- 28 - Show the focused window - 28 - Show the focused client
- 29 - Hide the focused window - 29 - Hide the focused client
- 30 - Kill the focused window - 30 - Kill the focused client
- 31 - Rotate the stack up - 31 - Rotate the stack up
- 32 - Rotate the stack down - 32 - Rotate the stack down
- 33 - Increase number of windows in the master stack - 33 - Increase number of clients in the master stack
- 34 - Decrease number of windows in the master stack - 34 - Decrease number of clients in the master stack
- 35 - Focus the Master window - 35 - Focus the Master client
- 36 - Switch focus between windows +1 - 36 - Switch focus between clients +1
- 37 - Switch focus between windows -1 - 37 - Switch focus between clients -1
- 38 - Switch focus between hidden windows +1 - 38 - Switch focus between hidden clients +1
- 39 - Switch focus between hidden windows -1 - 39 - Switch focus between hidden clients -1
- 40 - Toggle opacity for windows - 40 - Toggle opacity for clients
- 41 - Increase cfact by 0.05 - 41 - Increase cfact by 0.05
- 42 - Decrease cfact by 0.05 - 42 - Decrease cfact by 0.05
- 43 - Switch to the previous tag - 43 - Switch to the previous tag
@ -50,7 +50,7 @@
- 50 - Decrease inner gaps by 1 - 50 - Decrease inner gaps by 1
- 51 - Increase outer gaps by 1 - 51 - Increase outer gaps by 1
- 52 - Decrease outer gaps by 1 - 52 - Decrease outer gaps by 1
- 53 - Kill all windows except focused - 53 - Kill all clients except focused
- 54 - Focus the next monitor - 54 - Focus the next monitor
- 55 - Focus the previous monitor - 55 - Focus the previous monitor
- 56 - Show the scratchpad - 56 - Show the scratchpad
@ -59,15 +59,15 @@
- 59 - Reset layout/mfact - 59 - Reset layout/mfact
- 60 - Reset mastercount - 60 - Reset mastercount
- 61 - Toggle systray - 61 - Toggle systray
- 62 - Hide all windows - 62 - Hide all clients
- 63 - Show all windows - 63 - Show all clients
- 64 - Reset mfact - 64 - Reset mfact
- 65 - Reload .Xresources on the fly - 65 - Reload .Xresources on the fly
- 66 - Switch to the previous tag, skipping empty tags - 66 - Switch to the previous tag, skipping empty tags
- 67 - Switch to the next tag, skipping empty tags - 67 - Switch to the next tag, skipping empty tags
- 68 - Toggle the tag area in the bar - 68 - Toggle the tag area in the bar
- 69 - Toggle the empty tags in the bar - 69 - Toggle the empty tags in the bar
- 70 - Unused - 70 - Toggle allowing killing of the selected client
- 71 - Unused - 71 - Unused
- 72 - Unused - 72 - Unused
- 73 - Unused - 73 - Unused
@ -80,7 +80,7 @@
- 80 - Toggle the status area in the bar - 80 - Toggle the status area in the bar
- 81 - Toggle the floating indicator area in the bar - 81 - Toggle the floating indicator area in the bar
- 82 - Toggle the sticky indicator area in the bar - 82 - Toggle the sticky indicator area in the bar
- 83 - Toggle the icon in the window title - 83 - Toggle the icon in the client title
- 84 - Unused - 84 - Unused
- 85 - Unused - 85 - Unused
- 86 - Unused - 86 - Unused
@ -110,13 +110,13 @@
- 110 - Rotate backwards in the stack axis - 110 - Rotate backwards in the stack axis
- 111 - Rotate backwards in the secondary stack axis - 111 - Rotate backwards in the secondary stack axis
- 112 - Mirror the layout - 112 - Mirror the layout
- 113 - Enter an empty layout where all windows are hidden - 113 - Enter an empty layout where all clients are hidden
- 114 - Increase barpadding and gaps by 1 - 114 - Increase barpadding and gaps by 1
- 115 - Decrease barpadding and gaps by 1 - 115 - Decrease barpadding and gaps by 1
- 116 - Toggle mark on a window. - 116 - Toggle mark on a client.
- 117 - Swap focus with the marked window. - 117 - Swap focus with the marked client.
- 118 - Swap the focused window with the marked window. - 118 - Swap the focused client with the marked client.
- 119 - Center the focused window - 119 - Center the focused client
- 120 - Toggle border for the focused window - 120 - Toggle border for the focused client
- 121 - Reset bar padding and gaps - 121 - Reset bar padding and gaps

View file

@ -47,21 +47,57 @@
/* Keybinds */ /* Keybinds */
static Key keys[] = { static Key keys[] = {
/* type modifier chain key key function argument */ /* type modifier chain key key function argument */
{ KeyPress, MODIFIER1|SHIFT, -1, XK_semicolon, spawn, cmd( "spmenu_run -l 0 -p 'Run:' -na" ) },
{ KeyPress, MODIFIER1|SHIFT, -1, XK_Return, spawn, cmd( TERMINAL ) },
{ KeyPress, MODIFIER1|SHIFT, -1, XK_w, spawn, cmd( "chromium || chromium-bin" ) },
{ KeyPress, MODIFIER1|CONTROL, -1, XK_Tab, spawn, cmd( "speedwm-utils layout" ) },
/* Run keybinds */
{ KeyPress, MODIFIER1, -1, XK_semicolon, spawn, cmd( "j4-dmenu-desktop --term=st --dmenu='spmenu -l 20 -p Open:'" ) },
{ KeyPress, MODIFIER1|SHIFT, -1, XK_semicolon, spawn, cmd( "spmenu_run -l 0 -p 'Run:' -na" ) },
/* Application keybinds */
{ KeyPress, MODIFIER1|SHIFT, -1, XK_Return, spawn, cmd( TERMINAL ) },
{ KeyPress, MODIFIER1|SHIFT, -1, XK_s, spawn, cmd( "speedwm-screenshotutil -s" ) },
{ KeyPress, MODIFIER1|SHIFT, -1, XK_f, spawn, cmd( TERMINAL "lfrun || lf" ) },
{ KeyPress, MODIFIER1|SHIFT, -1, XK_w, spawn, cmd( "chromium || chromium-bin" ) },
{ KeyPress, MODIFIER1|SHIFT, -1, XK_o, spawn, cmd( "speedwm-dfmpeg" ) },
{ KeyPress, MODIFIER1|SHIFT, -1, XK_t, spawn, cmd( TERMINAL "nvim" ) },
{ KeyPress, MODIFIER1|SHIFT, -1, XK_a, spawn, cmd( TERMINAL "speedwm-audioctrl -runmixer" ) },
{ KeyPress, MODIFIER1|SHIFT, -1, XK_m, spawn, cmd( TERMINAL "tmux new-session -A -D -s cmus $(which --skip-alias cmus)" ) },
{ KeyPress, MODIFIER1|SHIFT, -1, XK_Tab, spawn, cmd( "speedwm-winnav" ) },
{ KeyPress, MODIFIER1|SHIFT, -1, XK_x, spawn, cmd( TERMINAL "htop" ) },
{ KeyPress, MODIFIER1|SHIFT, -1, XK_c, spawn, cmd( TERMINAL "tmux new-session -A -D -s weechat $(which --skip-alias weechat)" ) },
{ KeyPress, MODIFIER1|SHIFT, -1, XK_Escape, spawn, cmd( "speedwm-shutdown" ) },
{ KeyPress, MODIFIER1|SHIFT, -1, XK_u, spawn, cmd( TERMINAL "newsboat" ) },
{ KeyPress, MODIFIER1|SHIFT, -1, XK_r, spawn, cmd( TERMINAL "neomutt" ) },
{ KeyPress, MODIFIER1|CONTROL, -1, XK_Tab, spawn, cmd( "speedwm-utils layout" ) },
{ KeyPress, MODIFIER1|CONTROL, -1, XK_s, spawn, cmd( "speedwm-screenshotutil -f" ) },
{ KeyPress, MODIFIER1|CONTROL, -1, XK_m, spawn, cmd( "pkill cmus" ) },
{ KeyPress, MODIFIER1|CONTROL, -1, XK_q, spawn, cmd( "speedwm-audioctrl -mute" ) },
{ KeyPress, MODIFIER1|CONTROL, -1, XK_w, spawn, cmd( "speedwm-audioctrl -lower" ) },
{ KeyPress, MODIFIER1|CONTROL, -1, XK_e, spawn, cmd( "speedwm-audioctrl -raise" ) },
{ KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_q, spawn, cmd( "cmus-remote --pause" ) },
{ KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_w, spawn, cmd( "cmus-remote --volume -3000" ) },
{ KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_e, spawn, cmd( "cmus-remote --volume +3000" ) },
{ KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_Escape, spawn, cmd( "speedwm-utils" ) },
{ KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_s, spawn, cmd( "speedwm-swal" ) },
{ KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_n, spawn, cmd( "speedwm-netctrl" ) },
{ KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_b, spawn, cmd( "speedwm-btctrl" ) },
{ KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_r, spawn, cmd( "libspeedwm --perform core_wm_restart" ) },
/* Switcher */
{ KeyPress, MODIFIER1, -1, XK_Tab, switcherstart, {0} }, { KeyPress, MODIFIER1, -1, XK_Tab, switcherstart, {0} },
/* Systray */
{ KeyPress, MODIFIER1, -1, XK_s, togglesystray, {0} }, { KeyPress, MODIFIER1, -1, XK_s, togglesystray, {0} },
/* Layout keybinds */
{ KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_a, cyclelayout, {.i = -1 } }, { KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_a, cyclelayout, {.i = -1 } },
{ KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_d, cyclelayout, {.i = +1 } }, { KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_d, cyclelayout, {.i = +1 } },
/* Scratchpad keybinds */
{ KeyPress, MODIFIER1, -1, XK_minus, scratchpad_show, {0} }, { KeyPress, MODIFIER1, -1, XK_minus, scratchpad_show, {0} },
{ KeyPress, MODIFIER1|SHIFT, -1, XK_minus, scratchpad_hide, {0} }, { KeyPress, MODIFIER1|SHIFT, -1, XK_minus, scratchpad_hide, {0} },
{ KeyPress, MODIFIER1, -1, XK_equal, scratchpad_remove, {0} }, { KeyPress, MODIFIER1, -1, XK_equal, scratchpad_remove, {0} },
/* speedwm general binds */
{ KeyPress, MODIFIER1, -1, XK_f, togglefullscr, {0} }, { KeyPress, MODIFIER1, -1, XK_f, togglefullscr, {0} },
{ KeyPress, MODIFIER1, -1, XK_b, togglebar, {0} }, { KeyPress, MODIFIER1, -1, XK_b, togglebar, {0} },
{ KeyPress, MODIFIER1, -1, XK_r, resetmastercount, {0} }, { KeyPress, MODIFIER1, -1, XK_r, resetmastercount, {0} },
@ -153,6 +189,7 @@ static Key keys[] = {
{ KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_p, hideall, {0} }, { KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_p, hideall, {0} },
/* Chained keybinds */ /* Chained keybinds */
{ KeyPress, MODIFIER1, XK_r, XK_s, spawn, cmd( "pgrep -x screenkey && pkill screenkey || screenkey" ) },
{ KeyPress, MODIFIER1, XK_t, XK_r, reorganizetags, {0} }, { KeyPress, MODIFIER1, XK_t, XK_r, reorganizetags, {0} },
{ KeyPress, MODIFIER1, XK_p, XK_t, togglebarpadding, {0} }, { KeyPress, MODIFIER1, XK_p, XK_t, togglebarpadding, {0} },
{ KeyPress, MODIFIER1, XK_p, XK_u, setbarpadding, {.i = +5 } }, { KeyPress, MODIFIER1, XK_p, XK_u, setbarpadding, {.i = +5 } },
@ -192,10 +229,28 @@ static Key keys[] = {
/* Misc */ /* Misc */
{ KeyPress, MODIFIER1|SHIFT, -1, XK_backslash, killunsel, {0} }, { KeyPress, MODIFIER1|SHIFT, -1, XK_backslash, killunsel, {0} },
{ KeyPress, MODIFIER1|SHIFT, XK_e, XK_p, spawn, cmd( "speedwm-swal --previous" ) },
{ KeyPress, MODIFIER1|SHIFT, XK_e, XK_r, spawn, cmd( "speedwm-swal --randomize" ) },
{ KeyPress, MODIFIER1|SHIFT, XK_e, XK_a, spawn, cmd( "speedwm-virtualkeyboard" ) },
{ KeyPress, MODIFIER1|SHIFT, XK_e, XK_e, spawn, cmd( "speedwm-virtualkeyboard -e" ) },
/* Gap keybinds */ /* Gap keybinds */
{ KeyPress, MODIFIER1|CONTROL, -1, XK_z, incrgaps, {.i = +5 } }, { KeyPress, MODIFIER1|CONTROL, -1, XK_z, incrgaps, {.i = +5 } },
{ KeyPress, MODIFIER1|CONTROL, -1, XK_x, incrgaps, {.i = -5 } }, { KeyPress, MODIFIER1|CONTROL, -1, XK_x, incrgaps, {.i = -5 } },
/* Media buttons */ /* Media buttons */
{ KeyPress, 0, -1, XF86XK_WWW, spawn, cmd( "chromium || chromium-bin" ) }, { KeyPress, 0, -1, XF86XK_AudioMute, spawn, cmd( "speedwm-audioctrl -mute" ) },
{ KeyPress, 0, -1, XF86XK_AudioRaiseVolume, spawn, cmd( "speedwm-audioctrl -raise" ) },
{ KeyPress, 0, -1, XF86XK_AudioLowerVolume, spawn, cmd( "speedwm-audioctrl -lower" ) },
{ KeyPress, 0, -1, XF86XK_AudioPrev, spawn, cmd( "cmus-remote --prev" ) },
{ KeyPress, 0, -1, XF86XK_AudioNext, spawn, cmd( "cmus-remote --next" ) },
{ KeyPress, 0, -1, XF86XK_AudioStop, spawn, cmd( "pkill cmus" ) },
{ KeyPress, 0, -1, XF86XK_AudioPause, spawn, cmd( "cmus-remote --pause" ) },
{ KeyPress, 0, -1, XF86XK_WWW, spawn, cmd( "qutebrowser" ) },
{ KeyPress, 0, -1, XF86XK_PowerOff, spawn, cmd( "speedwm-shutdown" ) },
{ KeyPress, 0, -1, XF86XK_Sleep, spawn, cmd( "slock" ) },
{ KeyPress, 0, -1, XF86XK_Mail, spawn, cmd( TERMINAL "neomutt" ) },
{ KeyPress, 0, -1, XF86XK_TaskPane, spawn, cmd( TERMINAL "htop" ) },
{ KeyPress, 0, -1, XF86XK_WLAN, spawn, cmd( "speedwm-netctrl disconnect" ) },
{ KeyPress, 0, -1, XF86XK_Music, spawn, cmd( TERMINAL "tmux new-session -A -D -s cmus $(which --skip-alias cmus)" ) },
}; };

View file

@ -36,9 +36,11 @@ static const Button buttons[] = {
{ clickstatusbar, 0, Button1, spawn, {.v = clickstatus } }, { clickstatusbar, 0, Button1, spawn, {.v = clickstatus } },
{ clickstatusbar, 0, Button2, spawn, {.v = clickstatus } }, { clickstatusbar, 0, Button2, spawn, {.v = clickstatus } },
{ clickstatusbar, 0, Button3, spawn, {.v = clickstatus } }, { clickstatusbar, 0, Button3, spawn, {.v = clickstatus } },
{ clicktitle, 0, Button3, spawn, cmd( "speedwm-utils" ) },
{ clicktitle, 0, Button1, togglewin, {0} }, { clicktitle, 0, Button1, togglewin, {0} },
{ clicktitle, 0, Button4, inplacerotate, {.i = +2} }, { clicktitle, 0, Button4, inplacerotate, {.i = +2} },
{ clicktitle, 0, Button5, inplacerotate, {.i = -2} }, { clicktitle, 0, Button5, inplacerotate, {.i = -2} },
{ clickroot, 0, Button3, spawn, cmd( "j4-dmenu-desktop --term=st --dmenu='spmenu -l 20 -p Open:'" ) },
{ clicktags, 0, Button1, view, {0} }, { clicktags, 0, Button1, view, {0} },
{ clicktags, 0, Button4, viewtoleft, {0} }, { clicktags, 0, Button4, viewtoleft, {0} },
{ clicktags, 0, Button5, viewtoright, {0} }, { clicktags, 0, Button5, viewtoright, {0} },

View file

@ -53,6 +53,7 @@ static int startontag = 1; /* Start on a tag or not? */
static int floatscratchpad = 0; /* Float the scratchpad window on hide (0/1) */ static int floatscratchpad = 0; /* Float the scratchpad window on hide (0/1) */
/* Client properties */ /* Client properties */
static int allowkill = 1; /* Allow killing clients by default (0/1) */
static int autofocus = 1; /* Allow clients to automatically be focused when they request it. This comes with the side effect of potentially being annoying */ static int autofocus = 1; /* Allow clients to automatically be focused when they request it. This comes with the side effect of potentially being annoying */
static int automove = 1; /* Allow clients to automatically move when they request it */ static int automove = 1; /* Allow clients to automatically move when they request it */
static int autoresize = 1; /* Allow resizing clients automatically when they request it. */ static int autoresize = 1; /* Allow resizing clients automatically when they request it. */

View file

@ -78,8 +78,8 @@ static Signal signals[] = {
{ 67, viewtoright_vacant, {0} }, { 67, viewtoright_vacant, {0} },
{ 68, togglebartags, {0} }, { 68, togglebartags, {0} },
{ 69, togglebaremptytags, {0} }, { 69, togglebaremptytags, {0} },
{ 70, toggleakill, {0} },
/* /*
{ 70, Unused, {0} },
{ 71, Unused, {0} }, { 71, Unused, {0} },
{ 72, Unused, {0} }, { 72, Unused, {0} },
{ 73, Unused, {0} }, { 73, Unused, {0} },

View file

@ -919,8 +919,7 @@ speedwm.layout.monocle.count: 0
.IP \[bu] 2 .IP \[bu] 2
speedwm.layout.monocle.format: [%d/%d] speedwm.layout.monocle.format: [%d/%d]
.IP \[bu] 2 .IP \[bu] 2
speedwm.layout.custom.cmd: printf \[cq]\[cq] | spmenu -i -l 10 -p `Enter speedwm.layout.custom.cmd: speedwm-sxp
S expression:'
.IP \[bu] 2 .IP \[bu] 2
speedwm.mfact: 0.50 speedwm.mfact: 0.50
.IP \[bu] 2 .IP \[bu] 2

View file

@ -240,6 +240,7 @@ struct Client {
int basew, baseh, incw, inch, maxw, maxh, minw, minh; int basew, baseh, incw, inch, maxw, maxh, minw, minh;
int hintsvalid; /* https://git.suckless.org/dwm/commit/8806b6e2379372900e3d9e0bf6604bc7f727350b.html */ int hintsvalid; /* https://git.suckless.org/dwm/commit/8806b6e2379372900e3d9e0bf6604bc7f727350b.html */
int bw, oldbw; int bw, oldbw;
int cankill;
unsigned int tags; /* tags */ unsigned int tags; /* tags */
#if USEWINICON #if USEWINICON
unsigned int icw, ich; Picture icon; unsigned int icw, ich; Picture icon;
@ -624,6 +625,8 @@ static void setcfact(const Arg *arg);
static void setmfact(const Arg *arg); static void setmfact(const Arg *arg);
static void setup(void); static void setup(void);
static void toggleakill(const Arg *arg);
/* ipc */ /* ipc */
#if USEIPC #if USEIPC
static void setlayoutsafe(const Arg *arg); static void setlayoutsafe(const Arg *arg);
@ -3254,7 +3257,7 @@ incrogaps(const Arg *arg)
void void
killclient(const Arg *arg) killclient(const Arg *arg)
{ {
if (!selmon->sel || selmon->sel->ispermanent) if (!selmon->sel || selmon->sel->ispermanent || !selmon->sel->cankill)
return; return;
#if USESYSTRAY #if USESYSTRAY
if (!sendevent(selmon->sel->win, wmatom[WMDelete], NoEventMask, wmatom[WMDelete], CurrentTime, 0, 0, 0)) { if (!sendevent(selmon->sel->win, wmatom[WMDelete], NoEventMask, wmatom[WMDelete], CurrentTime, 0, 0, 0)) {
@ -3323,6 +3326,7 @@ manage(Window w, XWindowAttributes *wa)
c->h = c->oldh = wa->height; c->h = c->oldh = wa->height;
c->oldbw = wa->border_width; c->oldbw = wa->border_width;
c->cfact = 1.0; c->cfact = 1.0;
c->cankill = allowkill; /* we can kill by default */
#if USEWINICON #if USEWINICON
updateicon(c); updateicon(c);
@ -5600,6 +5604,15 @@ togglefloating(const Arg *arg)
arrange(selmon); arrange(selmon);
} }
void
toggleakill(const Arg *arg)
{
if (!selmon->sel)
return;
selmon->sel->cankill = !selmon->sel->cankill;
}
void void
setsticky(Client *c, int sticky) setsticky(Client *c, int sticky)
{ {

0
status.h Normal file → Executable file
View file

View file

@ -165,6 +165,7 @@ ResourcePref resources[] = {
{ "mouse.warpcursor", INTEGER, &warpcursor }, { "mouse.warpcursor", INTEGER, &warpcursor },
{ "mouse.clicktofocus", INTEGER, &clicktofocus }, { "mouse.clicktofocus", INTEGER, &clicktofocus },
{ "client.floatscratchpad", INTEGER, &floatscratchpad }, { "client.floatscratchpad", INTEGER, &floatscratchpad },
{ "client.allow.kill", INTEGER, &allowkill },
{ "client.autofocus", INTEGER, &autofocus }, { "client.autofocus", INTEGER, &autofocus },
{ "client.automove", INTEGER, &automove }, { "client.automove", INTEGER, &automove },
{ "client.autoresize", INTEGER, &autoresize }, { "client.autoresize", INTEGER, &autoresize },