Commit Graph

905 Commits

Author SHA1 Message Date
okan
7aacbe28e4 Ensure clients stay within the viewable bounds on placement, even with empty
borders; based on a patch from Vadim Vygonets.
2017-05-05 14:14:19 +00:00
okan
c6ed26e240 Clean up, unify and accurately calculate edge distance with client move/resize
actions, so as to not lose windows off the edge.

inspired by diffs (and feedback) from Vadim Vygonets.
2017-05-01 12:54:55 +00:00
okan
8bbf0afc60 Switch bwidth type; unfortunately X11 is inconsistent. 2017-04-26 21:10:54 +00:00
okan
8ed62b1986 The r1.36 menuq_add() conversion did this one wrong; fix by reverting to the
original code which adds to resultentry list, as opposed to the wrong one in
menuq_add(). Fixes crash noticed by at least Rickard Gustafsson.
2017-04-25 13:40:33 +00:00
okan
591ec2708f Remove 'noresult' (and simplify) as it does nothing and makes the logic around
it needless. History doesn't show what this might have been used for in future
iterations.
2017-04-25 12:08:05 +00:00
okan
021d728d1c search_match_path() isn't supposed to return anything. 2017-04-24 15:06:11 +00:00
okan
193dcb4533 Move queue init to caller so it's only called once in a few cases. 2017-04-24 13:35:25 +00:00
okan
9edb3399b6 sort 2017-04-24 13:31:19 +00:00
okan
0b5e66ec4d Raise the previously focused window, instead of the previous window in the
cycle list; seems to match behaviour of other wm's; from Walter Alejandro
Iglesias.
2017-04-24 12:27:32 +00:00
okan
1d5e421839 For {h,v}tile, instead of keeping the master client's {h,v} geometry, expand it
to %50 of the area, then fill in the remaining space with the other clients in
the same group; from Gerrit Meyerheim.

support from ajacoutot.
2017-04-24 12:18:04 +00:00
okan
1992827992 Fix group hidden state when a client wants to be on all desktops on start;
reported by Vadim Vygonets with diff, but another approach was taken.
2017-02-10 15:00:54 +00:00
okan
d94ddf7b8f Call client_resize instead of client_move after client_placecalc since the size
may also change.

from Vadim Vygonets
2017-02-06 18:10:28 +00:00
okan
ad504d072b Typo on binding name; from Redouan Ait Mallouk. 2017-01-15 21:07:44 +00:00
okan
88785e0af3 Ensure client stays inbound on key-based resize; based on logic existing in
key-based client move; from Vadim Vygonets.
2017-01-05 21:18:20 +00:00
okan
1eaac10a9a When a window has a user or program specified position, ensure the edge of the
final position is at least viewable and warp'able by the difference of bwidth;
prevents mapping windows completely off the virtual screen.
2016-12-19 14:17:26 +00:00
okan
13e3ebc448 stray newlines 2016-12-06 21:59:33 +00:00
okan
62c01a2e19 Add search_print_text(), a default callback for mi->print in menu_filter(). While
here, normalize the remaining search_print_* argument paramters.
2016-12-06 21:54:10 +00:00
okan
dd468cc47d Consistent use of menuq_add for ssh menu. 2016-12-06 21:09:22 +00:00
okan
642c4932c1 Now that dim.{x,y} are available early, use them before requiring a
MotionNotify event.
2016-12-06 21:03:58 +00:00
okan
a623680c7e Set dim.{x,y} during client_init and update on resize, instead of
(re)calculating only when applying hints.
2016-12-06 21:00:13 +00:00
okan
382e777e16 'window-search' is spelled 'menu-window'; the former snuck in during the
conversion('menu-window' already existed and was properlly documented); found
the hard way by sthen@ while trying to convert.
2016-12-06 15:03:13 +00:00
okan
52901073ce Fold unbinding functions into one for each, key and mouse; plugs a leak when
unbinding a mouse button bound to a command.
2016-12-02 17:02:17 +00:00
okan
a5a9212293 use the correct type 2016-12-02 16:50:19 +00:00
okan
c6068df369 Tame the number of 'exec' and 'path' search_match wrappers. No functional
change now, though more can likely go later, losing the (paritally complete or
incomplete/broken) argument completion bits.
2016-12-01 20:28:19 +00:00
okan
1e51789cc3 Switch ssh menu to search_match_text; like group/window/cmd menus, use only a
substring match. The previous matching is only intended for the exec menus.
2016-12-01 18:44:09 +00:00
okan
5a905031f4 Change 'menu-window' to display all windows; then add 'menu-window-hidden' for
the previous behaviour of 'menu-window'.  'menu-window' becomes the default
binding; use 'bind-mouse "1" menu-window-hidden' to restore old behaviour for
those who prefer.

OK sthen@ (long long time ago on a different version)
2016-12-01 18:17:52 +00:00
okan
58b2eb545f Normalize bind function names, based on a few categories: window, group, menu
and pointer.

Replace 'bind' and 'mousebind' options with 'bind-key' and 'bind-mouse',
respectively, replace special 'unmap' keyword with 'unbind-key' and
'unbind-mouse', and additionally allow unbinding all with 'all' keyword.
2016-12-01 17:17:27 +00:00
okan
5c15bd8953 Use an additional check with lstat(2) when d_type is unknown.
from James McDonald via portable.
2016-11-15 18:43:09 +00:00
okan
c33b352974 revert previous; upcoming changes will hopefully deal with these more
naturally.
2016-11-15 00:22:02 +00:00
okan
706ee11014 Add a wrapper based upon xevent handlers around client move/resize for key and
mouse bindings.
2016-11-15 00:07:03 +00:00
okan
d18539103e Define callbacks, then default bindings. 2016-11-14 21:25:59 +00:00
okan
a78a724512 Reorganize for upcoming changes. 2016-11-14 19:56:05 +00:00
okan
f5f2a608ff Remove the (8) default bindings for pointer move since they conflict with
default bindings for emacs, which wins; the feature remains and can be bound to
whatever users wish with cwmrc(5).

from mpi@
2016-11-14 13:52:33 +00:00
okan
943e3e7534 Make it clear these are flags. 2016-10-24 20:44:08 +00:00
okan
b490184555 Remove duplicate check that strsubmatch() already does; while here, fix a
comment.
2016-10-24 18:57:12 +00:00
okan
6eaec44a4a Sprinkle __func__ in appropriate error messages. 2016-10-24 17:39:38 +00:00
okan
66d541d7ee Get rid of 'matchname'; it's too surprising to have the menu change during
client search as different potential str matches are cycled through. If there's
interest, the only string that doesn't exist in the listing is the window's
class - that can be added of course, but it makes the line too long imho.
2016-10-24 17:16:23 +00:00
okan
9cb17b0e3b clean up search_match_client(); no behaviour change 2016-10-22 19:16:43 +00:00
okan
4811ec0433 Refactor callbacks to take a void * so as to not try and generalize into
client_ctx in keypress and buttonpress event handlers; pass appropriate *ctx's
based on context.

While here, limit some globals, replace defines with appropriate variables and
fix some naming.
2016-10-18 17:03:30 +00:00
okan
9a3b6b7fd4 remove another unused proto 2016-10-12 16:11:15 +00:00
okan
a1a192d258 Rename 2 kbfunc to match closer to what they do 2016-10-06 14:53:52 +00:00
okan
a53fef7b1e Add an argument to the callbacks to pass the xevent context, button or
key press. This allows to remove a few hacks to duplicate functions only
for behaviour changes; now differing behaviours are pushed down to the
callback. Also will allow for previously unavailable actions to be bind-able
down the road.
2016-10-06 14:41:19 +00:00
okan
4e1d180946 Check the ptr bounds in the new client during cycling, since not all
actions do ptrsave, such as restoring client geometry; adapted from a
diff by Vadim Vygonets.
2016-10-06 14:30:05 +00:00
okan
4a70ba0924 More accurate to say 'toggle', rather than 'select', for group[n]/nogroup. 2016-10-05 14:01:23 +00:00
okan
62af7b9761 Add CM-a for 'nogroup' (CM-0 stays for now); update manpage to reflect. 2016-10-05 13:35:17 +00:00
okan
ddbad284c7 Stash wmname into conf. 2016-10-05 13:10:59 +00:00
okan
c42b7d0a28 When removing xrandr regions, ensure clients are within the bounds of
the screen; adapted from an ancient diff from Sviatoslav Chagaev. Things
in this area will likely change, but put this in so it works now and
serves as a reminder.
2016-10-04 20:15:55 +00:00
okan
a7e1d9acfc Calculate client nameqlen in client_setname(), the only place it's
needed/used.
2016-10-04 15:52:32 +00:00
okan
d592dd99f7 Turn CALMWM_NGROUPS define into variable, ngroups. 2016-10-04 15:18:20 +00:00
okan
cdbe6c3bc9 Start simplifying menu code; and in turn, remove a cursor no longer
needed.
2016-10-03 18:43:49 +00:00
okan
6889482fc7 Defaults are split between defines and conf_init(); normalize these, as
well as give 'sticky' groups its own variable.
2016-10-03 14:42:34 +00:00
okan
dcdbf54e85 For both kb and mouse move, it is possible to grab a client and move it
completely off the screen/region; instead, if the pointer is outside of
the client bounds, warp the pointer to the closest edge before moving.
2016-10-03 13:52:17 +00:00
okan
3881d6ad85 client_ptrwarp should not deal with unhiding or raising clients (non ptr
requests); most callers do this already - deal with the few that do not.
client_ptrwarp becomes a simple wrapper (setpos) but it will be expanded.
2016-10-03 13:41:30 +00:00
okan
679d00b4fa remove unused proto 2016-09-30 21:44:51 +00:00
okan
5a1d71fd93 Set the initial ptr position during client init, instead of waiting
until (maybe) a ptrwarp call. Likewise, explicitly ensure an inbounds ptr
position (same as initial) when saving.
2016-09-30 20:55:54 +00:00
okan
54cccf114b Use instinsic X11 functions for key/btn/ptr grab/ungrab/regrab requests;
the one line wrappers provided no value and limited altering calls where
needed; additionally, most of them had but one caller.
2016-09-30 18:28:06 +00:00
okan
e49083a483 Replace mousefunc_sweep_draw() with a generic menu_windraw() using va
lists; use it appropriately for both window dimension and position in
the respective mousefunc calls.

ok bryent@
2016-09-30 15:12:19 +00:00
okan
e30959f62f Switch to XWindowEvent() pulling out events that match the mask *and*
window.
2016-09-30 15:05:02 +00:00
okan
035ba40ddc no need to unmap menu window again 2016-09-29 00:30:40 +00:00
okan
1b369f6063 Mechanical change: move screen menu bits to their own struct. 2016-09-29 00:21:55 +00:00
okan
b46a5b0b56 Inline Xft draw and extents wrappers; too much abstraction. 2016-09-28 17:06:33 +00:00
okan
7c35826ca9 Do not call sweep_draw() too early: don't yet have w/h dimensions; plus
we will get a MotionNotify event right away anyway, setting required
parameters.
2016-09-28 15:54:54 +00:00
okan
374d386034 Continue merging kb and mouse functions: fold
mousefunc_menu_{client,cmd,group} into the respective
kbfunc_menu_{client,cmd,group} functions; simply pass a flag down from
config denoting mouse action behaviour.
2016-09-22 14:36:03 +00:00
okan
c1ac946076 Allow ctrl-[ for abort (esc); from Benjamin Scher Purcell 2016-09-20 19:58:54 +00:00
okan
489250a384 de-static client_inbound() 2016-09-20 19:11:19 +00:00
okan
47ecd2dcf9 remove debug that accidentally snuck in 2016-09-20 18:23:12 +00:00
okan
d9f512008b Get rid of curcc, instead cycle through the queue; removes the need for
client_none().
2016-09-20 18:21:32 +00:00
okan
9b943acf32 During init, query screen for _NET_ACTIVE_WINDOW and set that client as
active; while we already look at what's under the pointer, use this
information first, then look under the pointer (saving that round-trip).
This restores the active state to a client after restart even if the
pointer is not above it (and of course the pointer is not above another
client).
2016-09-16 14:32:02 +00:00
okan
faafc6dd35 Some clients fail to setup hints at all, so initalize for them; fallout
from r1.218 switching to malloc - clearly missed this case.

found the hard way by brynet@
2016-09-14 21:00:24 +00:00
okan
b0ab7f2e87 Fix-up a few simple uses of client_current(): check CLIENT_ACTIVE flag
instead of relying on curcc.
2016-09-14 19:45:33 +00:00
okan
237d1b1cf5 init label 2016-09-13 17:42:58 +00:00
okan
6937dedc0d Limit mouse resize to hints within the client; matches kbd resize
behaviour.
2016-09-13 13:42:28 +00:00
okan
14d946c938 Switch to just malloc since we need initialize most everything anyway. 2016-09-12 13:48:41 +00:00
okan
310ca33ad8 change 'sticky' to 'stick' to toggle client stickiness (seems the
default binding worked for everyone for a long time!); conflict with
group sticky found by Ali Farzanrad - thanks!
2016-09-12 13:47:00 +00:00
okan
79f19b14ff Simplify group_holds_only_hidden(); from Vadim Vygonets. 2016-09-02 16:07:11 +00:00
okan
6c5b694356 Simplify toggling flags; from Vadim Vygonets. 2016-09-02 15:08:44 +00:00
okan
b9b225cb85 Do not draw borders on ignored clients when returning from fullscreen;
from Vadim Vygonets.
2016-09-01 18:38:52 +00:00
okan
0aaaf77e6b Remove redundant minimum client size adjustment (minw and minh are
always positive since r1.214); from Vadim Vygonets.
2016-09-01 18:34:04 +00:00
okan
156bfda805 Enable the use of numpad Enter key on menus; from Henrique N. Lengler.
ok beck phessler
2016-08-28 15:23:24 +00:00
matthieu
29156ec96c add a column to previous commit for consitency. 2016-08-13 09:59:48 +00:00
matthieu
c4dbc0305f conf_screen: report the fontname that can't be opened in case of failure.
ok dcoppa@
2016-08-13 09:58:37 +00:00
okan
dbd50a50c6 If supplied format to menuq_add() is NULL, fill text with an empty
string; found by Christian Neukirchen.
2016-04-28 16:28:38 +00:00
okan
402ba9437e Fix a typo from r1.201; fixes window_grouptoggle binding. 2015-11-17 15:19:19 +00:00
okan
448a04ca44 If a client does not set increment values, use 'moveamount' as a way to
scale keyboard based resizes; extend kbfunc_amount().

Behaviour noted by, tested by, and ok sthen@
2015-11-17 14:32:38 +00:00
okan
5dd7f2f304 Inline the only use of mousefunc_sweep_calc. 2015-11-17 14:31:28 +00:00
okan
403542f5b2 more client vs screen context differences 2015-11-12 21:28:03 +00:00
okan
6e55f9d89b If a client sets hints, honor them for kb resize requests, just like we
do for mouse based resize requests.

Based on a patch from Vadim Vygonets.
2015-11-12 18:33:30 +00:00
okan
db0907a53d Move kb pointer movement out of the kbfunc_client_moveresize since it's
got nothing to do with clients, thus doing flags work causes lots of
waste and almost useless jumpy pointer movements; while here, split out
move and resize since they share almost no code, just like mouse client
move/resize; factor out amount and factor. Still wonder why this is
here, but it works now.
2015-11-12 18:26:41 +00:00
okan
4db32a8463 pledge "stdio rpath proc exec" cwm before main event loop, after
init/setup - mostly for menu building.

ok semarie@ (another cwm user)
2015-11-12 17:56:54 +00:00
okan
a7bbf5197e Partial revert of replacing screen_area() with region_find(); until a
fix for a regression is found; this bug has been around for a long time
it seems, but this change exposed it. Likely need to track clients in to
and out of regions.
2015-11-11 14:22:01 +00:00
okan
72507096a1 Use position on root to figure out region. 2015-11-10 22:06:57 +00:00
okan
0abb5fd0f1 Start cleaning up name vs function differences; replace magic numbers. 2015-11-10 20:05:33 +00:00
okan
3fd7c4d329 Clean up unused defines. 2015-11-09 20:15:23 +00:00
okan
ffc7945b8d Extend region to include both view and work areas; switch to
region_find() which no longer needs to recalculate gap each time
a client (or menu) is created or altered. If no RandR, fall back
to display dimensions while building regions instead of during
execution.
2015-11-09 20:03:29 +00:00
okan
afa59e563a Only when mapping clients from an initial wm start or restart, query the
pointer and if it matches the child window, activate it; new clients
will not need to make this roundtrip to the server.

Based on a patch from Preben Guldberg.
2015-09-23 14:09:40 +00:00
okan
c10cac3b1e On execwm, we should properly release resources before exec'ing into a
new window manager; so allow CWM_EXEC_WM to assign new wm to wm_argv and
pass through cwm_status (now EXECWM) so that x_teardown() gets called
before exec'ing the new window manager.  Removes the need for a separate
x_restart() now, using new wm_argv; and consolidates errno for execvp.
2015-09-16 17:58:25 +00:00
okan
ae8386de40 Lost fix from r1.112; add comment.
Reported (again!) by Peter Kane.
2015-08-28 12:07:28 +00:00
okan
cc66816c13 Mechanical change: group->gc 2015-08-27 18:53:14 +00:00
okan
72c4ff3268 Add consistent checks against NULL. 2015-08-27 18:42:56 +00:00
okan
db9c5cf159 Move client cycle grab/ungrab into a more relevant place; while here,
update comments about why we need to grab/ungrab the keyboard.
2015-08-27 18:40:09 +00:00