aboutsummaryrefslogtreecommitdiffstats
path: root/client.c (unfollow)
Commit message (Collapse)AuthorLines
2021-04-27Calculate colors using the client's visual and colormapWynn Wolf Arbor-6/+10
As cwm was using the screen's default visual and colormap to draw all client borders, borders for windows that had a depth of 32 bits were not rendered correctly. The same happened with text in the popup menus which were recently changed to be drawn in the context of the client. This commit introduces a Visual reference for each client, and allocates all potential colors for a client's specific visual and colormap in the client_ctx struct. These colors are then used to draw client borders and popup menus. Additionally, since we touch the drawing code anyway, borders are reintroduced to the popup menus for better contrast.
2021-04-27Remove matching on window title historyWynn Wolf Arbor-31/+0
Obscure feature. Confusing if you don't know about it, mostly useless if you do. Matching on currently visible window titles is enough.
2021-04-27Add BSD compatibility functions and headersWynn Wolf Arbor-1/+1
Original file locations in the OpenBSD tree: - lib/libc/stdlib/reallocarray.c - lib/libc/stdlib/strtonum.c - lib/libc/string/strlcat.c - lib/libc/string/strlcpy.c - sys/sys/queue.h
2021-04-27Keep pointer within window on maximize/fullscreen togglekn@openbsd.org-1/+5
Spawn a window, maximize it in any way, move the cursor to a window border that is not on the screen's edge and unmaximize again: While the window goes back the cursor stays at the screen's edge, i.e. focus is lost to the underlaying window. Moving, resizing, tiling or snapping windows in any way always moves the cursor along iff needed, e.g. using MS-[hjkl] to move a small window from the center to the edge keeps the cursor within window borders -- no matter what you do with the keyboard, focus stays on that window. Make CM-f, CM-m, CM-equal and CMS-equal (default bindings) for toggling full-screen mode, maximization, vertical maximization and horizontal maximization of the current window drag the cursor along if needed as well. OK okan kmos dv
2020-04-18Allow configuring a percentage window size of the master window during ↵okan-3/+5
htile/vtile actions. From Uwe Werler, with a few manpage tweaks.
2020-03-26Instead of using _NET_ACTIVE_WINDOW on restart, use the pointer location to ↵okan-12/+2
determine what client to set active. Reduces a round trip for every window.
2020-03-26Recommit 1.259, but now with TAILQ_FOREACH_SAFE.tim-10/+12
From and OK okan@ Original commit message: Plug two memory leaks. Also get rid of a variable that is no longer necessary. OK okan@
2020-03-18Revert previous. Causes a crash as reported by Tom Murphy.tim-10/+8
2020-03-18Plug two memory leaks. Also get rid of a variable that is no longer necessary.tim-8/+10
OK okan@
2020-03-18Remove ColormaskChange from event-mask since there's no event handler.okan-3/+3
2020-03-18Unrelated style fixes, consistency changes and sorting, appropriate ↵okan-211/+138
dosage/removal of wrappers, simplification of name queue, client cycle joins other kb/mb bound functions.
2020-03-18Allow the 'empty' group clients to be window-{h,v}tile'd.okan-7/+1
Behaviour (or lack there of) noticed by Raf Czlonka.
2019-03-07Teach client_current() to use a screen to find the current client instead ofokan-6/+13
iterating over all (fallback if no screen provided for now). Initially convert trivial uses of client_current().
2019-03-07check cc->gc directlyokan-5/+3
2019-03-07gc clientq inside groups, instead use the better maintained one per-screenokan-8/+13
2019-02-28Selectively hide and show clients based on state; merge client_unhide() andokan-14/+5
client_show().
2019-02-23simplify screen 'area' usage for initial client placementokan-14/+9
2019-02-22restore order from before r1.248 (vtile/vtile containment changes).okan-3/+2
2019-02-22Rename internal functions to delinate between client remove, delete and xprotookan-3/+3
delete; 'window-close' is now the proper action, but 'window-delete' as an alias will remain until more interesting changes require breaking configs.
2019-02-22Limit vtile/htile actions to clients fully within the screen of master client.okan-13/+30
from Charles A Daniels.
2018-11-13Allow 'transientfor' clients to inherit group and bwidth either during init orokan-17/+22
via property notify events. Previously only the flags were set but nothing was in the path to apply said flags and/or bwidth. Required slight of re-orgnaization of client_init.
2018-11-08Use the original client border width to adjust initial placement of clientsokan-1/+8
containing {P,US}Position requests where they are explicitly set to 'ignore' in cwmrc(5); clients are unaware that their border will be altered (removed in this case) when calcuating position and thus end up a factor of their original border width off once mapped by cwm(1). cwm(1) will essentially shift the client to the edge if the original request's position and border match. Window offset noticed by at least Andre Stoebe via bugs@, and others since (and likely before). Thanks!
2018-02-06Use screen's saved view instead of re-querying the server.okan-10/+5
2017-12-29As done for buttonrelease, work specific un-cycling and un-highlighting actionsokan-22/+2
into the keyrelease event, only performing what's actually needed for each; should result in much fewer events against keyreleases. No intended behaviour change. Additionally, like we do for group membership, grab the keyboard only when required for cycling.
2017-12-29add helper function client_show to bring together like actions for unhide/raiseokan-1/+10
2017-12-22Fix a few comments and while here, wrap some long lines.okan-17/+11
2017-12-19Add support for _NET_WM_STATE_SKIP_PAGER and _NET_WM_STATE_SKIP_TASKBAR; eerilyokan-2/+16
close to cwm's 'ignore'. Roughly based on an initial diff from Walter Alejandro Iglesias, but with support for both Atoms and without cwm-based bindings.
2017-05-05Ensure clients stay within the viewable bounds on placement, even with emptyokan-9/+9
borders; based on a patch from Vadim Vygonets.
2017-05-01Clean up, unify and accurately calculate edge distance with client move/resizeokan-1/+19
actions, so as to not lose windows off the edge. inspired by diffs (and feedback) from Vadim Vygonets.
2017-04-26Switch bwidth type; unfortunately X11 is inconsistent.okan-6/+6
2017-04-24sortokan-11/+11
2017-04-24Raise the previously focused window, instead of the previous window in theokan-2/+4
cycle list; seems to match behaviour of other wm's; from Walter Alejandro Iglesias.
2017-04-24For {h,v}tile, instead of keeping the master client's {h,v} geometry, expand itokan-1/+3
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-02-06Call client_resize instead of client_move after client_placecalc since the sizeokan-2/+2
may also change. from Vadim Vygonets
2016-12-19When a window has a user or program specified position, ensure the edge of theokan-12/+14
final position is at least viewable and warp'able by the difference of bwidth; prevents mapping windows completely off the virtual screen.
2016-12-06stray newlinesokan-2/+1
2016-12-06Set dim.{x,y} during client_init and update on resize, instead ofokan-4/+5
(re)calculating only when applying hints.
2016-10-18Refactor callbacks to take a void * so as to not try and generalize intookan-7/+7
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-06Check the ptr bounds in the new client during cycling, since not allokan-1/+5
actions do ptrsave, such as restoring client geometry; adapted from a diff by Vadim Vygonets.
2016-10-04Calculate client nameqlen in client_setname(), the only place it'sokan-7/+8
needed/used.
2016-10-03Defaults are split between defines and conf_init(); normalize these, asokan-2/+2
well as give 'sticky' groups its own variable.
2016-10-03client_ptrwarp should not deal with unhiding or raising clients (non ptrokan-6/+2
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-09-30Set the initial ptr position during client init, instead of waitingokan-13/+8
until (maybe) a ptrwarp call. Likewise, explicitly ensure an inbounds ptr position (same as initial) when saving.
2016-09-20de-static client_inbound()okan-3/+2
2016-09-20Get rid of curcc, instead cycle through the queue; removes the need forokan-21/+13
client_none().
2016-09-16During init, query screen for _NET_ACTIVE_WINDOW and set that client asokan-6/+6
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-14Some clients fail to setup hints at all, so initalize for them; falloutokan-1/+2
from r1.218 switching to malloc - clearly missed this case. found the hard way by brynet@
2016-09-14Fix-up a few simple uses of client_current(): check CLIENT_ACTIVE flagokan-7/+7
instead of relying on curcc.
2016-09-13init labelokan-1/+2
2016-09-12Switch to just malloc since we need initialize most everything anyway.okan-6/+8