aboutsummaryrefslogtreecommitdiff
path: root/sway/input/keyboard.c
AgeCommit message (Collapse)Author
2018-10-08Remove unneeded variableRyan Dwyer
2018-10-08Reload config using idle eventRyan Dwyer
This patch makes it so when you run reload, the actual reloading is deferred to the next time the event loop becomes idle. This avoids several use-after-frees and removes the workarounds we have to avoid them. When you run reload, we validate the config before creating the idle event. This is so the reload command will still return an error if there are validation errors. To allow this, load_main_config has been adjusted so it doesn't apply the config if validating is true rather than applying it unconditionally. This also fixes a memory leak in the reload command where if the config failed to load, the bar_ids list would not be freed.
2018-10-04Fix #2763Drew DeVault
2018-09-06Fix management of bindings during reloadRyan Dwyer
seat_execute_command needs to check the flags on `binding_copy`, as `binding` will be a dangling pointer after a reload command. handle_keyboard_key needs to set the next_repeat_binding for non-reloads prior to executing the command in case the binding is freed by the reload command.
2018-09-04Deny repeating reload by holding keyRyan Dwyer
Fixes #2568 The binding that gets stored in the keyboard's `repeat_binding` would get freed on reload, leaving a dangling pointer. Rather than attempt to unset the keyboard's `repeat_binding` along with the other bindings, I opted to just not set it for the reload command because there's no point in reloading repeatedly by holding the binding. This disables repeat bindings for the reload command. As we now need to detect whether it's a reload command in two places, I've added a binding flag to track whether it's a reload or not.
2018-07-29Bindings use advised keyboard repeat parametersfrsfnrrg
Now 'repeat_delay' and 'repeat_rate' control the initial delay and rate (per second) of repeated binding invocations. If the repeat delay is zero, binding repetition is disabled. When the repeat rate is zero, the binding is repeated exactly once, assuming no other key events intervene.
2018-07-29Implement key repeat for pressed key bindingsfrsfnrrg
Each sway_keyboard is provided with a wayland timer event source. When a valid keypress binding has been found, a callback to handle_keyboard_repeat is set. Any key event will either clear the callback or (if the new key event is a valid keypress binding) delay the callback again.
2018-07-28Don't enable numlock by default. This fixes an annoying issue where laptop ↵Geoff Greer
keyboards would have 'numlock mode' enabled, remapping parts of the alphabet to numbers.
2018-07-25Fix LEDs for configured modifier statesProgAndy
2018-07-25Implement setting NumLock and CapsLock statusProgAndy
After setting the keymap, try to enable NumLock and disable CapsLock. This only works if sway has the xkb master state and controls the keyboard. Prepare configuration settings for later use as well.
2018-07-23Invoke mouse bindingsfrsfnrrg
The mouse binding logic is inspired/copied from the keyboard binding logic; we store a sorted list of the currently pressed buttons, and trigger a binding when the currently pressed (or just recently pressed, in the case of a release binding) buttons, as well as modifiers/container region, match those of a given binding. As the code to execute a binding is not very keyboard specific, keyboard_execute_command is renamed to seat_execute_command and moved to where the other binding handling functions are. The call to transaction_commit_dirty has been lifted out.
2018-07-23Parse mouse binding optionsfrsfnrrg
First, the existing sway_binding structure is given an enumerated type code. As all flags to bindsym/bindcode are boolean, a single uint32 is used to hold all flags. The _BORDER, _CONTENTS, _TITLEBAR flags, when active, indicate in which part of a container the binding can trigger; to localize complexity, they do not overlap with the command line arguments, which center around _TITLEBAR being set by default. The keyboard handling code is adjusted for this change, as is binding_key_compare; note that BINDING_LOCKED is *not* part of the key portion of the binding. Next, list of mouse bindings is introduced and cleaned up. Finally, the binding command parsing code is extended to handle the case where bindsym is used to describe a mouse binding rather than a keysym binding; the difference between the two may be detected as late as when the first key/button is parsed, or as early as the first flag. As bindings can have multiple keycodes/keysyms/buttons, mixed keysym/button sequences are prohibited.
2018-07-15Make focus part of transactionsRyan Dwyer
Rather than maintain copies of the entire focus stack, this PR transactionises the focus by introducing two new properties to the container state and using those when rendering. * `bool focused` means this container has actual focus. Only one container should have this equalling true in its current state. * `struct sway_container *focus_inactive_child` points to the immediate child that was most recently focused (eg. for tabbed and stacked containers).
2018-07-09Update for swaywm/wlroots#1126emersion
2018-07-05keyboard: free xkb keymap on destroyDominique Martinet
2018-06-28fix handling key modifiers if not pressed at firstArmin Preiml
fixes #2169
2018-06-12Fix keyboard shortcut handling inconsistenciesfrsfnrrg
* Ensure that modifier keys are identified even when the next key does not produce a keysym. This requires that modifier change tracking be done for each sway_shortcut_state. * Permit regular and --release shortcuts on the same key combination. Distinct bindings are identified for press and release cases; note that the release binding needs to be identified for both key press and key release events. * Maintain ascending sort order for the shortcut state list, and keep track of the number of pressed key ids, for simpler (and hence faster) searching of the list of key bindings. * Move binding duplicate detection into get_active_binding to avoid duplicating error messages.
2018-06-02Make command block implementation genericBrian Ashworth
2018-06-01Style fix, redundant entry removal, fix extra keysym deletefrsfnrrg
2018-06-01Rename update_shortcut_model to update_shortcut_statefrsfnrrg
2018-06-01Rename check_shortcut_model to get_active_bindingfrsfnrrg
2018-06-01Style fixed for keyboard.cfrsfnrrg
2018-06-01Remove almost-always redundant loop in key handlingfrsfnrrg
2018-06-01Rewrite shortcut handling code to avoid hardcoded valuesfrsfnrrg
The same shortcut algorithm is now used for keycodes, raw keysyms, and translated keysyms. Pressed keysyms are now stored in association with the keycodes that generated them. Modifier keycodes (and associated keysyms) are identified retroactively by the subsequent change to the modifier flags.
2018-05-27Implement bindsym/bindcode --lockedfrsfnrrg
Adds the --locked flag to bindsym and bindcode commands. When a keyboard's associated seat has an exclusive client (i.e, a screenlocker), then bindings are only executed if they have the locked flag. When there is no such client, this restriction is lifted.
2018-05-13Idle handling for dpms/lockscreen et alMattias Eriksson
Swayidle handles idle events and allows for dpms and lockscreen handling. It also handles systemd sleep events, and can raise a lockscreen on sleep Fixes #541
2018-04-18Make key repeat configurableRyan Dwyer
This creates two input commands for configuring the repeat delay and rate. Example config: input "myidentifier" { repeat_delay 250 repeat_rate 25 }
2018-04-02Merge branch 'wlroots' into seat-fixesTony Crisci
2018-04-02dont copy input configTony Crisci
2018-04-02Partially implement move commandDrew DeVault
Works: - move [container|window] to workspace <name> - Note, this should be able to move C_CONTAINER but this is untested - move [workspace] to output [left|right|up|down|<name>] Not implemented yet: - move [left|right|up|down] - move scratchpad - move position
2018-02-24take seat param for handle_command and renameTony Crisci
2018-01-20add kill commandTony Crisci
2018-01-17update for new wlr-keyboard modifiersTony Crisci
2018-01-05sway: change all sway_log to wlr_logDominique Martinet
2018-01-04cleanup bindingsTony Crisci
2018-01-04binding releaseTony Crisci
2017-12-29fix nitpicksTony Crisci
2017-12-28overwrite old bindingsTony Crisci
2017-12-28fix keyboard_execute_bindcodeTony Crisci
2017-12-28bindcodeTony Crisci
2017-12-27run compositor bindings lastTony Crisci
2017-12-27run binding commandTony Crisci
2017-12-27match user bindsymTony Crisci
2017-12-27compositor bindingsTony Crisci
2017-12-27keyboard translate keysymsTony Crisci
2017-12-19handle keymap not foundTony Crisci
2017-12-18remove assumption of one device per identifierTony Crisci
2017-12-16fix keyboard hotpluggingTony Crisci
2017-12-16keyboard cleanupTony Crisci
2017-12-15xkb configTony Crisci