Commit graph

5037 commits

Author SHA1 Message Date
Daniel Eklöf
4e34fb8fb7
input: kitty: add support for “report all keys as escape codes” 2021-12-08 18:05:33 +01:00
Daniel Eklöf
8b260568fb
term: ensure cell dimensions are non-zero
Closes #830
2021-12-08 18:05:20 +01:00
Daniel Eklöf
46cd5dfafc
changelog: move entry to ‘unreleased’ 2021-12-08 18:05:04 +01:00
Daniel Eklöf
85b1067514
input: kitty: merge handling of plain-text and composed characters
All plain-text and composed characters are now printed as-is, in a
single place.

Also fix handling of “generic” keys when emitted as escapes; don’t use
the raw XKB symbol as key in the escape, convert it to a unicode code
point first. For many symbols, these are the same. But not
all.

For now, we fallback to using the symbol as is if XKB fails to convert
it to a codepoint. Not sure if we should simply drop the key press
instead.

Composed characters also need special treatment; we can’t use the
symbol as is, since it typically refers to the last key
pressed (i.e. not the composed character). And, that key is
also (usually) a special “dead” key, which cannot be converted to a
unicode codepoint.

So, what we do is convert the generated utf8 string, and (try to)
convert it to a wchar. If it succeeds, use that. If not, fallback to
using the XKB symbol (as above).
2021-12-08 18:03:52 +01:00
Daniel Eklöf
149e978bc4
input: reset compose state on key *releases*, not presses 2021-12-08 18:03:51 +01:00
Daniel Eklöf
5d94b02a03
input: kitty: treat repeating == pressed when report-events is off 2021-12-08 18:03:48 +01:00
Daniel Eklöf
a242ba3f97
changelog: kitty: report events 2021-12-08 18:03:44 +01:00
Daniel Eklöf
30f60259cc
input: kitty: add support for the “report event” mode (0b10) 2021-12-08 18:03:42 +01:00
Daniel Eklöf
71606009fd
input: don’t ignore key release events
Before this, key release events stopped the repeat timer, and then
returned.

Now, we run through the entire function. Most things are still only
done on key press events. But, the goal here is to get to the keyboard
protocol functions (and the kitty protocol in particular), and call
them on release events too.

This is in preparation for the kitty protocol mode 0b10, report event
types.
2021-12-08 18:03:39 +01:00
Daniel Eklöf
6f6af910a5
install: add UTF-8 locate to runtime deps 2021-12-08 18:03:18 +01:00
Daniel Eklöf
d73c683ab1
install: update instructions on how to manually compile the terminfo 2021-12-08 18:03:15 +01:00
Daniel Eklöf
1a5a0952d5
changelog: add new ‘unreleased’ section 2021-12-08 18:02:57 +01:00
Daniel Eklöf
46994a3e25
meson: bump version to 1.10.2 2021-12-02 20:26:59 +01:00
Daniel Eklöf
5a59bbdb71
changelog: prepare for 1.10.2 2021-12-02 20:26:42 +01:00
Daniel Eklöf
f9da959aa9
Merge branch 'master' into releases/1.10 2021-12-02 20:25:19 +01:00
Daniel Eklöf
758b0205db
Merge branch 'osc4-dont-modify-rgb-colors'
Closes #678
2021-12-01 20:08:23 +01:00
Daniel Eklöf
a3016a6cc9
osc-4: don’t update the color of cells with RGB fg/bg colors
OSC 4/104 changes the 256-color palette. We also run a pass over the
visible cells, and update their colors.

This was previously done by comparing the actual color of the cell,
with the “old” color in the palette. If they matched, the cell was
updated.

This meant that cells with an RGB color (i.e. not a palette based
color) was also updated, _if_ its color matched the palette color.

Now that each cell tracks its color *source*, we can ignore all
non-palette based cells.

Note that this still isn’t perfect: if the palette contains multiple
entries with the same color, we’ll end up updating the “wrong” cells.

Closes #678
2021-12-01 20:07:53 +01:00
Daniel Eklöf
1619e83c13
input: always update the xcursor shape in pointer enter/motion events
Now that term_xcursor_update_for_seat() takes the current surface into
account (i.e. doesn’t assume the cursor is over the main grid),
there’s no longer any need to call render_xcursor_set() directly.

Thus, we can simply call term_xcursor_update_for_seat() on **all**
pointer enter and motion events. As long as we take care to update the
internal state to reflect the, possibly new, current surface before
doing so.

Also make sure to **always** reset the seat’s “current” xcursor
pointer on pointer leave events. This is done without actually sending
anything to the compositor, but is necessary to ensure that we *do*
send a request to update the xcursor on the next pointer enter event.
2021-12-01 20:04:01 +01:00
Daniel Eklöf
63e8b1b292
input: fix debug log format specifier; ‘count’ is a size_t 2021-12-01 20:03:18 +01:00
Daniel Eklöf
1752745fcf
pgo: add stub for xcursor_for_csd_border() 2021-11-30 22:43:41 +01:00
Daniel Eklöf
b3029234af
term: xcursor_update_for_seat(): BUG on xcursor == NULL 2021-11-30 22:25:32 +01:00
Daniel Eklöf
fce13c4106
input: make csd_data variable ‘const’ 2021-11-30 22:15:13 +01:00
Daniel Eklöf
59e6285037
term: xcursor_update_for_seat(): remove duplicate check for term->is_searching 2021-11-30 22:14:05 +01:00
Daniel Eklöf
bfbb4b0830
term: xcursor_update_for_seat(): remove switch default case
Let the compiler catch missing enum values
2021-11-30 22:12:56 +01:00
Daniel Eklöf
fd82fb81fa
changelog: window-menu 2021-11-30 22:12:17 +01:00
Daniel Eklöf
90cfdcf1a5
Merge branch 'window-menu' 2021-11-30 22:10:27 +01:00
Daniel Eklöf
55f592b210
Merge branch 'csd-border-render-glitch'
Closes #823
2021-11-29 21:09:15 +01:00
Daniel Eklöf
3afe317e46
render: fix csd border rendering glitch when width > 5px
CSD borders are always *at least* 5px. If url.border-width=0, those
5px are all fully transparent (and act as interactive resize handles).

As csd.border-width increases, the number of transparent pixels
decrease. Once csd.border-width >= 5, the border is fully opaque.

When csd.border-width > 5, then width of the border is (obviously)
more than 5px. But, when rendering the opaque part of the border, we
still used 5px for the invisible part, which caused some pixman
rectangles to have negative x/y coordinates.

This resulted in rendering glitches due to overflows in pixman when
rendering the borders.

The fix is to ensure the total border size is always at least, but
not *always* 5px. That is, set it to max(5, csd.border-width).

This patch also fixes an issue where the CSD borders were not
dimmed (like the titlebar) when the window looses input focus.

Closes #823
2021-11-29 19:32:49 +01:00
Daniel Eklöf
73a048f9d3
input: regression: reset view (and cancel selection) on “handled” input
This fixes a regression, where the view (and selection) was only reset
if the keyboard input resulted in plain text. That is, key presses
like enter, arrows etc did not.
2021-11-29 19:31:48 +01:00
Jonas Ådahl
38741baf9a input: Add support for xdg_toplevl.show_window_menu()
This makes, if the compositor supports it, the window menu appear when
right clicking on the title bar.
2021-11-29 16:26:40 +01:00
Jonas Ådahl
c0ce131f1a input: Update mouse x/y coordinates on wl_pointer_enter
Otherwise if you don't receive motion event before e.g. button pressed,
the coordinates will be incorrect. This happens when e.g. you get
alt-tabbed so that the mouse cursor ends up on top of the terminal
window, but the mouse never actually moved.
2021-11-29 16:26:40 +01:00
Jonas Ådahl
5c2557b421 terminal: Make seat xcursor update focus aware
When term_xcursor_update_for_seat() was called on e.g. keyboard focus
loss, it'd update the curret xcursor to 'text' even if it was e.g. on
top of the window title, or resize areas. This makes the function a bit
more focus aware, and will not be so eager to set the text xcursor.
2021-11-29 16:26:40 +01:00
Daniel Eklöf
a55a3daae7
input: regression: special keys don’t reset view and cancel selection
This fixes an issue where e.g. holding down ctrl would cancel the
selection, thus making it impossible to copy text to the clipboard.
2021-11-28 16:48:30 +01:00
Daniel Eklöf
4334259c70
Merge branch 'kitty-kbd'
Part of #319
2021-11-28 15:15:24 +01:00
Daniel Eklöf
1f19dd6694
changelog: kitty keyboard protocol - disambiguate escape codes 2021-11-28 15:14:56 +01:00
Daniel Eklöf
8f41a8dc94
input: kitty: use XKB_CONSUMED_MODE_GTK when retrieving consumed mods 2021-11-28 15:14:56 +01:00
Daniel Eklöf
913dd8b4a6
input: get_current_modifiers(): use xkb_state_key_get_consumed_mods2()
Explicitly request consumed modifiers using the `XKB` mode.
2021-11-28 15:14:56 +01:00
Daniel Eklöf
8f38cd486f
term: rename: KITTY_KBD_MASK -> KITTY_KBD_SUPPORTED 2021-11-28 15:14:55 +01:00
Daniel Eklöf
546bcd66b7
input: legacy: use ALEN(mod_param_map) 2021-11-28 15:14:55 +01:00
Daniel Eklöf
42d1fcb484
input: grammar: “an UTF-8” -> “a UTF-8” 2021-11-28 15:14:55 +01:00
Daniel Eklöf
ce8ea2db66
input: legacy: reduce size of reply buffer
Its maximum size is known; the only two variables are two integers. We
know the maximum length of an integer converted to a string.
2021-11-28 15:14:55 +01:00
Daniel Eklöf
28ad0ca602
csi: kitty: remove unneeded xasserts
‘idx’ is calculated just above, and the logic is simple enough that we
don’t really need to assert it.
2021-11-28 15:14:55 +01:00
Daniel Eklöf
07068165ec
input: only report modifiers when “Report all keys as escape codes” is enabled 2021-11-28 15:14:55 +01:00
Daniel Eklöf
6930abe945
input: kitty: add shift/alt/ctrl/super/hyper/meta keys 2021-11-28 15:14:54 +01:00
Daniel Eklöf
9933284ab1
input: kitty: add ‘media’ keys 2021-11-28 15:14:54 +01:00
Daniel Eklöf
1ec218c3ac
input: kitty: map ISO_Left_Tab to Tab 2021-11-28 15:14:54 +01:00
Daniel Eklöf
66171f1045
input: rename ‘meta’ to ‘super’ 2021-11-28 15:14:54 +01:00
Daniel Eklöf
a08494a766
input: kitty: only emit CSIs for Caps- and Num-Lock when they aren’t modifiers 2021-11-28 15:14:54 +01:00
Daniel Eklöf
8fb641a7ed
input: handle “invalid” XKB modifiers
A modifier may not exist in a specific layout. This is indicated by
XKB returning XKB_MOD_INVALID from xkb_keymap_mod_get_index().
2021-11-28 15:14:54 +01:00
Daniel Eklöf
ebad4bba28
input: kitty: disable CSI for Caps- and Num-Lock
Not sure why these keys have CSIs in the kitty spec; they don’t emit
anything.

Could it be that they are used if the keys are *not* modifiers in the
current layout?
2021-11-28 15:14:53 +01:00