summary refs log tree commit diff
path: root/screen.c
Commit message (Collapse)AuthorAgeFilesLines
* cvsimportokan2016-10-241-6/+29
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * refs/heads/master: (34 commits) Make it clear these are flags. Remove duplicate check that strsubmatch() already does; while here, fix a comment. Sprinkle __func__ in appropriate error messages. 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. clean up search_match_client(); no behaviour change 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. remove another unused proto Rename 2 kbfunc to match closer to what they do 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. 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. More accurate to say 'toggle', rather than 'select', for group[n]/nogroup. Add CM-a for 'nogroup' (CM-0 stays for now); update manpage to reflect. Stash wmname into conf. 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. Calculate client nameqlen in client_setname(), the only place it's needed/used. Turn CALMWM_NGROUPS define into variable, ngroups. Start simplifying menu code; and in turn, remove a cursor no longer needed. Defaults are split between defines and conf_init(); normalize these, as well as give 'sticky' groups its own variable. 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. 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. ...
| * Sprinkle __func__ in appropriate error messages.okan2016-10-241-1/+1
| |
| * Refactor callbacks to take a void * so as to not try and generalize intookan2016-10-181-4/+4
| | | | | | | | | | | | | | | | 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.
| * When removing xrandr regions, ensure clients are within the bounds ofokan2016-10-041-0/+23
| | | | | | | | | | | | 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.
| * Turn CALMWM_NGROUPS define into variable, ngroups.okan2016-10-041-1/+1
| |
* | cvsimportokan2016-09-161-2/+3
|\| | | | | | | | | * refs/heads/master: 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).
| * During init, query screen for _NET_ACTIVE_WINDOW and set that client asokan2016-09-161-2/+3
| | | | | | | | | | | | | | | | 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).
* | cvsimportokan2015-11-121-2/+29
|\| | | | | | | | | | | | | | | | | | | | | | | | | * refs/heads/master: more client vs screen context differences If a client sets hints, honor them for kb resize requests, just like we do for mouse based resize requests. 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. pledge "stdio rpath proc exec" cwm before main event loop, after init/setup - mostly for menu building. 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. Use position on root to figure out region. Start cleaning up name vs function differences; replace magic numbers. Clean up unused defines. 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.
| * Partial revert of replacing screen_area() with region_find(); until aokan2015-11-111-0/+22
| | | | | | | | | | | | 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.
| * Extend region to include both view and work areas; switch tookan2015-11-091-15/+20
| | | | | | | | | | | | | | 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.
* | cvsimportokan2015-08-281-4/+4
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * refs/heads/master: (21 commits) Lost fix from r1.112; add comment. Mechanical change: group->gc Add consistent checks against NULL. Move client cycle grab/ungrab into a more relevant place; while here, update comments about why we need to grab/ungrab the keyboard. Re-add lost chunk in group_cycle from r1.113. Further simplify _NET_WM_DESKTOP handling using new group_assign(). oops; remove left over debug print Allowing sending a valid 'nogroup' (0) group_ctx to group_assign() (since we init all groups), though assigning the client's group to NULL for 'sticky'; use this simplification in a few places (others to follow). Split out sticky mode checks and the restoring of a client's group and _NET_WM_DESKTOP from the config-based auto-grouping; no (intentional) behavior changes. Needed for further work in cleaning up this area. Implement _NET_CLIENT_LIST_STACKING (from Thomas Admin), but bottom-to-top order, as per spec (notified Thomas as well). Don't allow freeze operations on fullscreen (consistent with what fullscreen does). Sort _NET_WM_STATE Atoms like the spec. Move CLIENT_STICKY logic from client hide/unhide to group hide/unhide; rationale being that clients should be able to hide/unhide independently of group switching. Add Xkb modifier to ignore mask; from Alexander Polakov. Fix whitespace. Add client freeze extension to _NET_WM_STATE Atom, allowing flag to persist. As usual with new Atoms, requires X restart. _NET_WM_STATE_STICKY implies only sticky at the group/desktop level, not position and size; based on discussion with a few. Instead of special casing the 'term' and 'lock' commands, go back to keeping them hidden; showing them has apparently caused confusion/angst. Leave command list order from .cwmrc alone; remove sort. Bring group and client cycle closer together. ...
| * Fix whitespace.okan2015-08-211-4/+4
| |
* | cvsimportChristian Neukirchen2015-07-011-43/+55
|\|
| * Re-implement XClientMessage handling so that we can feed screen_find andokan2015-06-301-2/+2
| | | | | | | | | | | | | | | | client_find valid resources as needed, relieving the need for screen_find to ungracefully handle invalid root windows. Removes a long standing XXX. Should theoretically allow XClientMessage handling on more than one X screen. Alter callers of screen_find to handle failures.
| * region is a _ctx, so name it sookan2015-06-261-16/+16
| |
| * Mechanical change from xinerama to region backed areas.okan2015-06-261-8/+5
| |
| * collect 'gap' applicationsokan2015-06-261-10/+14
| |
| * Replace screen region info gathering with XRandR equivalent of Xineramaokan2015-06-261-16/+27
| | | | | | | | | | queries (currently act on XRandR events anyway). Fall-back mode without XRandR is still what X provides. This removes -lXinerama.
* | cvsimportChristian Neukirchen2015-01-221-1/+2
|\|
| * Switch to limits.h; replace MAXPATHLEN and MAXHOSTNAMELEN with PATH_MAXokan2015-01-191-1/+2
| | | | | | | | | | | | and HOST_NAME_MAX+1, respectively. ok doug@
* | cvsimportokan2014-10-081-2/+5
|\|
| * no need for calloc(1,.. here, malloc is fine since we initializeokan2014-10-081-1/+2
| |
| * make group_init work like other *_init'sokan2014-10-081-1/+3
| |
* | cvsimportokan2014-09-271-0/+9
|\|
| * Move stuff that doesn't belong in group_init; while here, explicitlyokan2014-09-231-0/+9
| | | | | | | | initialize hideall and cycling.
* | cvsimportokan2014-09-181-8/+8
|\|
| * Remove duplicate client queue (mruq); instead, remove and take theokan2014-09-081-1/+1
| | | | | | | | | | | | global Clientq and place it inside screen_ctx since every client belongs to a screen, then use the same per screen clientq to track stacking order (the sole reason for mruq).
| * more style nitsokan2014-09-071-5/+5
| |
| * screen_fromroot -> screen_findokan2014-09-071-2/+2
| |
* | cvsimportChristian Neukirchen2014-09-071-5/+4
|\|
| * gc->hidden has never consistently kept track of a group's state;okan2014-08-241-1/+0
| | | | | | | | | | | | | | | | | | | | group_show() and group_hide() are not the only ways a group can change state - if all clients in a group are either hidden or unhidden, then that group's state should change, as well as the various EWMH ways. Instead of trying to keep track in a wide variety of places, simply query the clients in a group before needing to take action based on the group's state. Solves long standing confusion of when a group is hidden or not.
| * Purely mechanical; unify 'num', 'no' and 'shortcut'.okan2014-08-201-3/+3
| |
| * whitespaceokan2014-08-201-1/+1
| |
* | cvsimportokan2014-02-081-0/+1
|\|
| * Make sure we cycle through existing client's group membership and setokan2014-02-081-0/+1
| |\ | | | | | | | | | | | | the hidden state on the group; important to know group hidden state after a re-exec or restart of cwm (as easily seen in group menu).
* | | cvsimportokan2014-02-031-45/+41
|\| |
| * | Introduce a region queue and replace screen's XineramaScreenInfo; weokan2014-02-031-22/+26
| | | | | | | | | | | | | | | still use Xinerama to populate the regions per screen, but will switch at a more appropriate time.
| * | make this XQueryTree like the otherokan2014-02-031-12/+10
| | |
| * | Move redundant bits from screen_init (while dealing with existingokan2014-02-031-11/+5
| | | | | | | | | | | | | | | | | | clients) directly into client_init, performing the X roundtrip only once. With the previous change in maprequest, this moves decision making into one place for creating new clients.
* | | cvsimportokan2014-02-021-4/+2
|\| |
| * | No need to store screen colormap and visual; rather just use the Xokan2014-02-021-2/+0
| | | | | | | | | | | | macros in the one place they are needed.
| * | Unlike free(3), XFree(3) can't be passed a NULL pointer.okan2014-02-021-2/+2
| | |
* | | cvsimportokan2014-01-281-5/+3
|\| |
| * | move some init up and shed some blank linesokan2014-01-271-5/+3
| | |
* | | cvsimportokan2014-01-031-2/+2
|\| |
| * | use consistent typesokan2014-01-031-2/+2
| | |
* | | cvsimportokan2013-12-131-5/+11
|\| |
| * | Teach screen_find_xinerama() to apply gap only when told to do so;okan2013-12-131-5/+11
| | | | | | | | | | | | adjust callers. Needed for an upcoming feature.
* | | cvsimportokan2013-06-201-1/+1
|\| |
| * | move Cursors into conf.okan2013-06-171-1/+1
| | |