aboutsummaryrefslogtreecommitdiffstats
path: root/xevents.c (follow)
Commit message (Collapse)AuthorAgeLines
* Have _NET_ACTIVE_WINDOW warp the pointer only on direct user inputWolfgang Müller2022-01-23-0/+11
| | | | | | | | | | | | | | | | | | | | | | | This functionally partly reverts commit db0f56a (Do not warp mouse to windows marked active by EWMH, 2022-01-17) which introduced a bug where the pointer would no longer be warped to windows activated by rofi. Since the window switcher internal to cwm calls client_ptr_warp directly this was not noticed immediately. Thankfully the EWMH spec defines a "source indication" [1] in the _NET_ACTIVE_WINDOW request [2]. This field specifies whether the request came from a normal application or a pager and "other clients that represent direct user actions". Window switchers like rofi should honor this field and therefore it is trivial to fix this bug by checking for the correct source indication value. This means that normal windows are now prohibited from warping the pointer under any circumstance, but the user (through specific applications) may still elect to have the window manager honor _NET_ACTIVE_WINDOW this way. [1] https://specifications.freedesktop.org/wm-spec/wm-spec-1.3.html#sourceindication [2] https://specifications.freedesktop.org/wm-spec/wm-spec-1.3.html#idm45682917892304
* Do not warp mouse to windows marked active by EWMHWolfgang Müller2022-01-17-1/+0
| | | | | | | | | | | | | | | As discussed a couple of times [1] [2] on the openbsd-* mailing lists, modal dialogs that are marked as active through EWMH will have cwm warp the mouse back to them once it leaves the constraints of the window. For us this is particularly a problem with dialogs created by QT (such as the settings dialog in Quassel). Since no real solution was ever posted on the mailing lists, just disable the warping behaviour for now. This should not have any detrimental impact other than for the dialogs that are "misbehaving" right now. [1] https://marc.info/?l=openbsd-misc&m=155542694605428&w=2 [2] https://marc.info/?l=openbsd-ports&m=155508625010715&w=2
* Fix several sign-compare warningsWynn Wolf Arbor2021-04-27-1/+1
|
* Add BSD compatibility functions and headersWynn Wolf Arbor2021-04-27-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
* Instead of using _NET_ACTIVE_WINDOW on restart, use the pointer location to ↵okan2020-03-26-2/+2
| | | | determine what client to set active. Reduces a round trip for every window.
* Unrelated style fixes, consistency changes and sorting, appropriate ↵okan2020-03-18-10/+10
| | | | dosage/removal of wrappers, simplification of name queue, client cycle joins other kb/mb bound functions.
* Map ('5') and allow mod5mask (altgr) as a modifier.okan2020-03-18-2/+2
| | | | From Artturi Alm (though changed from 'm' to '5')
* Handle _NET_WM_NAME changes.tim2019-04-29-2/+3
| | | | | | | This fixes the problem where cwm's window menu wouldn't show Firefox's current window title if it contains non-ASCII characters. OK okan@
* Check the atom type on propertynotify before iterating.okan2019-03-11-4/+6
|
* use screen_find() for xrandr crtc changesokan2019-03-10-12/+9
|
* Find the managed screen from the parent window for client_current().okan2019-03-10-5/+9
|
* Similar to keypress event, fetch the screen from the event root window in theokan2019-03-08-7/+5
| | | | | buttonpress handler; bail if we don't manage the screen. Allows us to find the current client based on the screen/event root.
* extend verbose logging for key/button eventsokan2019-03-08-5/+8
|
* [keypress event] turns out we've been checking the wrong window for a matchingokan2019-03-08-7/+8
| | | | | | | | client thus always falling back to client_current(); while the current client is problaby right in most cases, use event's subwindow (not window) to find the client. Bail early if this event came to us from a screen we don't manage. This is result of us grabing all keybindings off the root window instead of selectively.
* add parans for readibilityokan2019-03-08-5/+5
|
* Teach client_current() to use a screen to find the current client instead ofokan2019-03-07-6/+6
| | | | | iterating over all (fallback if no screen provided for now). Initially convert trivial uses of client_current().
* same thing as screen_find()okan2019-03-06-8/+4
|
* Move the group index (desktop number) check to the only 2 callers that requireokan2019-02-28-3/+7
| | | | checking due to ewmh.
* Rename internal functions to delinate between client remove, delete and xprotookan2019-02-22-4/+4
| | | | | delete; 'window-close' is now the proper action, but 'window-delete' as an alias will remain until more interesting changes require breaking configs.
* Allow 'transientfor' clients to inherit group and bwidth either during init orokan2018-11-13-1/+4
| | | | | | 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.
* Slightly expand and expose verbose debugging.okan2018-02-04-15/+15
|
* add debugging for x eventsokan2018-02-02-1/+29
|
* As done for buttonrelease, work specific un-cycling and un-highlighting actionsokan2017-12-29-2/+13
| | | | | | | | | 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.
* Merge group_toggle_membership_leave into the buttonrelease event and only dookan2017-12-29-3/+5
| | | | border work for a group/ungroup action.
* add helper function client_show to bring together like actions for unhide/raiseokan2017-12-29-5/+2
|
* Use poll and XNextEvent to replace XNextEvent blocking inside the x11 eventokan2017-12-27-6/+8
| | | | handler.
* drop obsolete commentokan2017-05-09-2/+1
|
* Alter callbacks to take a struct instead of a growing number of arguments;okan2017-05-09-7/+9
| | | | greatly simplifies upcoming work.
* Refactor callbacks to take a void * so as to not try and generalize intookan2016-10-18-20/+32
| | | | | | | | 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.
* Add an argument to the callbacks to pass the xevent context, button orokan2016-10-06-3/+3
| | | | | | | 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.
* When removing xrandr regions, ensure clients are within the bounds ofokan2016-10-04-1/+2
| | | | | | 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.
* client_ptrwarp should not deal with unhiding or raising clients (non ptrokan2016-10-03-1/+5
| | | | | 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.
* During init, query screen for _NET_ACTIVE_WINDOW and set that client asokan2016-09-16-2/+2
| | | | | | | | 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).
* Fix-up a few simple uses of client_current(): check CLIENT_ACTIVE flagokan2016-09-14-4/+7
| | | | instead of relying on curcc.
* Start cleaning up name vs function differences; replace magic numbers.okan2015-11-10-3/+3
|
* Add consistent checks against NULL.okan2015-08-27-4/+4
|
* styleokan2015-07-01-2/+2
|
* Re-implement XClientMessage handling so that we can feed screen_find andokan2015-06-30-39/+43
| | | | | | | | 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.
* Switch to limits.h; replace MAXPATHLEN and MAXHOSTNAMELEN with PATH_MAXokan2015-01-19-2/+3
| | | | | | and HOST_NAME_MAX+1, respectively. ok doug@
* these have nothing to do with 'sticky', but rather group membership; rename.okan2014-09-27-2/+2
|
* use similiar style for client flagsokan2014-09-15-2/+2
|
* screen_fromroot -> screen_findokan2014-09-07-5/+5
|
* Rework group names: stash the group name inside the group_ctx as opposedokan2014-09-06-2/+2
| | | | | | to having to manage an array outside in screen_ctx for group names and shortcuts. Simplifies (and moves bits for) reading, and constructing data for, EWMH's _NET_DESKTOP_NAMES.
* Move redundant bits from screen_init (while dealing with existingokan2014-02-03-2/+2
| | | | | | 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.
* Move redundant window attr fetch from maprequest directly intookan2014-02-02-7/+4
| | | | client_init and perform that X roundtrip only once.
* Move cwm_status around to avoid header fu, and remove extraneous signalokan2014-01-30-2/+1
| | | | header from xevents.c; noticed by Christian Neukirchen.
* Merge keybinding and mousebinding queues into using the same mergedokan2014-01-29-6/+6
| | | | | struct, binding; they were essentially the same accept for what was 'pressed', keysym or button.
* The EWMH spec states that if the cardinal returned is 0xFFFFFFFF (-1)okan2014-01-28-3/+12
| | | | | | then the window should appear on all desktops, which in our case is assigned to group 0. Found to fix stalonetray due to the non-ewmh aware range checking in group_movetogroup(); from Thomas Adam.
* Somewhat streamline event loop/restart/quit handling; most notableokan2014-01-22-11/+7
| | | | | | | | change allows a restart to trigger proper teardown first, even though teardown is not (yet) complete. After some discussion with oga@nicotinebsd.org regarding a more complicated version/idea.
* merge KBFLAG_NEEDCLIENT and MOUSEBIND_CTX_*; brings kbfunc and mousefuncokan2014-01-20-4/+4
| | | | bits even closer.