531 Commits

Author SHA1 Message Date
Mitchell Hashimoto
5baab8f4f3 Merge pull request #1075 from rockorager/keypad
fix: keypad key encoding on GTK
2023-12-13 18:48:15 -08:00
Mitchell Hashimoto
c905b08b1e apprt/gtk: slight stylistic change 2023-12-13 18:40:12 -08:00
Mitchell Hashimoto
b021d76edf core: quit-after-last-window-closed works properly with "exit"
Fixes #1085

This moves the logic of exiting when there are no surfaces left fully to
apprt and away from the core.
2023-12-13 16:35:14 -08:00
Mitchell Hashimoto
cfc4889572 Merge pull request #1077 from meatcar/gtk-tab-middleclick-close
gtk: close tabs with middle-click
2023-12-13 11:59:41 -08:00
Mitchell Hashimoto
08e0d0b836 apprt/gtk: do not encode control characters into utf8 event field 2023-12-13 10:45:47 -08:00
Denys Pavlov
fc7013fc2e gtk: close tabs with middle-click
Follow the behaviour of other tabbed interfaces like browsers, editors,
and file-managers.

GTK code is based on `/src/apprt/gtk/ImguiWidget.zig`
2023-12-13 11:14:35 -05:00
Tim Culverhouse
4bd9b1365a key: add TODO's for media keys
Add TODO comments in places where we need to add media keys.
2023-12-13 06:57:15 -06:00
Tim Culverhouse
a0880bcfed key: add additional keypad keys
Add additional keypad keys to the encoding scheme. This allows Ghostty
to report KP_HOME and it's relatives. We also always check for a keyval
first, so we can report KP_7, etc as opposed to ASCII '7'.
2023-12-13 06:55:22 -06:00
Tim Culverhouse
eb8fc910e0 gtk: get num_lock state for key events
GTK doesn't expose the num_lock state via the key press event, this must
be obtained directly from the device. Set the num_lock state in the
modifier mask. This also will never show up as a `consumed_mod`, so we
don't bother setting it there.

Signed-off-by: Tim Culverhouse <tim@timculverhouse.com>
2023-12-13 06:55:22 -06:00
Thorsten Ball
47b0592c73 gtk: use f64 everywhere instead of i16/f16/c_int 2023-12-13 05:38:34 +01:00
Thorsten Ball
e67fa7abe0 gtk: implement equalize_splits
This adds support for the equalize_splits feature that's already
implemented for macOS.

It's essentially a port of the Swift implementation, using the same
weights-mechanism to equalize split sizes.
2023-12-12 19:30:29 +01:00
Mitchell Hashimoto
08f2e91ff5 apprt/gtk: use map_keycode to get the proper unshifted key for a layout
Fixes #1014

There were a couple overlapping issues here:

  1. To determine the "unshifted" key, we were using `keyval_to_lower`.
     This only works if the key is uppercase and not all layouts are
     uppercase for the unshifted value.

  2. If we couldn't case the unicode value of a key or unshifted key to
     ASCII, we'd say the key was the same as the physical key. This is
     incorrect because the physical key is always the layout of the
     physical keyboard so for example with the Turkish layout on a US
     keyboard, you'd get US letters when a key may only correspond to
     non-US letters.

To fix the first issue, we are using map_keycode to map the hardware
keycode to all possible keyvals from it. We then use the currently
active layout to find the unshifted value.

To fix the scond issue, we no longer fallback to the physical key if
there was IM text or non-ASCII unicode values for the key.

I tested Turkish with #1014 and I tested Dvorak to make sure those
basics still work.
2023-12-08 20:41:09 -08:00
Mitchell Hashimoto
9de5d991a2 core: detect inputs that result in surface close and avoid segfault
Fixes #965

When processing keybindings that closed the surface (`close_surface`,
`close_window`), the surface and associated runtime structures would be
freed so we could segfault.

This PR introduces a new enum result for input events (only key for now)
that returns whether an event resulted in a close. In this case, callers
can properly return immediately and avoid writing to deallocated memory.
2023-12-07 10:24:39 -08:00
Mitchell Hashimoto
3c4bd47de3 apprt/gtk: stylistic changes 2023-12-06 20:53:32 -08:00
Thorsten Ball
40e239bf7a gtk: add support for resizing splits via keybinds
This adds support for resizing splits via keybinds to the GTK runtime.

Code is straightforward. I couldn't see a way to do it without keeping
track of the orientation of the splits, but I think that's fine.
2023-12-06 06:25:34 +01:00
Mitchell Hashimoto
bd49947f98 apprt/gtk: fix next split issue 2023-12-01 13:45:56 -08:00
Mitchell Hashimoto
d311fb93ed apprt/gtk: gotoSplit gets proper previous/next direction 2023-12-01 13:21:31 -08:00
Mitchell Hashimoto
f811ac6b18 apprt/gtk: gotoSplit, has some bugs 2023-12-01 09:58:57 -08:00
Mitchell Hashimoto
dc2cee1c78 apprt/gtk: rename parentSurface 2023-12-01 09:15:30 -08:00
Mitchell Hashimoto
967e091e2c apprt/gtk: just heap allocate the title text 2023-12-01 09:14:08 -08:00
Mitchell Hashimoto
c2c8f78cf8 apprt/gtk: comments 2023-12-01 09:11:14 -08:00
Mitchell Hashimoto
14ef6fb2f9 apprt/gtk: add comments, rename some funcs 2023-12-01 09:07:37 -08:00
Mitchell Hashimoto
e40b79906e apprt/gtk: do not deinit tab in closeTab 2023-12-01 09:07:09 -08:00
Mitchell Hashimoto
dd39b29f30 apprt/gtk: we don't need to keep track of Tabs 2023-12-01 08:52:08 -08:00
Mitchell Hashimoto
c7eeda1f00 apprt/gtk: code aesthetic changes 2023-12-01 08:08:06 -08:00
Mitchell Hashimoto
89f4cf11c7 apprt/gtk: rename parent2 to parent 2023-11-30 21:46:43 -08:00
Thorsten Ball
7e9dce054f gtk: remove unneeded method setContainer on Surface
We don't need to update the titles, etc. since that's done by
`grabFocus` and that then makes the method not that useful. Removing for
now.
2023-11-30 21:44:52 -08:00
Thorsten Ball
1b4fc83f43 gtk: switch to long-held reference for GtkPaned 2023-11-30 21:44:52 -08:00
Thorsten Ball
e2a58b340c gtk: (temp) fix splitting top_left side in split
Before this change, it would crash when you had the following surfaces

             split1
               / \
              /   \
            surf1  \
                  split2
                   / \
               surf2  surf3

and you'd want to split `surf1` again. Splitting `surf2` or `surf3`
would be fine, but surf1 would break things.
2023-11-30 21:44:52 -08:00
Thorsten Ball
ba65b61fa9 gtk: restore detachable-tabs feature after adding splits 2023-11-30 21:44:52 -08:00
Thorsten Ball
3fef4fce56 gtk: move surface destroy through deref 2023-11-30 21:44:52 -08:00
Thorsten Ball
236e57a1f4 gtk: restore focus-grabbing after closing one side in split 2023-11-30 21:44:52 -08:00
Thorsten Ball
a18fb4a661 gtk: fix closing of windows that contains splits 2023-11-30 21:44:52 -08:00
Thorsten Ball
0065bae0d4 gtk: get closing of tabs working again (closing windows still broken) 2023-11-30 21:44:52 -08:00
Thorsten Ball
8cf9d97ac3 gtk: fix replacing of splits, remove dead code 2023-11-30 21:44:52 -08:00
Thorsten Ball
ecbe910714 gtk: fix closing of surfaces by releasing the ref to gl_area 2023-11-30 21:44:52 -08:00
Thorsten Ball
956fcf7349 gtk: fix compilation error after rebase 2023-11-30 21:44:52 -08:00
Mitchell Hashimoto
ec2aa8e322 apprt/gtk: maintain container pointers 2023-11-30 21:44:52 -08:00
Mitchell Hashimoto
06b40a8b89 apprt/gtk: closing tabs works again 2023-11-30 21:44:52 -08:00
Mitchell Hashimoto
cdd76a3b0b apprt/gtk: alternate approach to setting pane children 2023-11-30 21:44:52 -08:00
Mitchell Hashimoto
17445a7d87 apprt/gtk: nested splits are good 2023-11-30 21:44:51 -08:00
Mitchell Hashimoto
4c1300ab69 apprt/gkt: a lot of things are broken 2023-11-30 21:44:51 -08:00
Mitchell Hashimoto
79a9d417d1 apprt/gtk: working on new Split 2023-11-30 21:44:51 -08:00
Mitchell Hashimoto
83b0096dfc apprt/gtk: get rid of one newsurface call 2023-11-30 21:44:51 -08:00
Mitchell Hashimoto
f1547465cc apprt/gtk: new surface options down to just a couple 2023-11-30 21:44:51 -08:00
Mitchell Hashimoto
97b9708dd1 apprt/gtk: remove tab option from surface 2023-11-30 21:44:16 -08:00
Mitchell Hashimoto
14570b8a6c apprt/gtk: get rid of title label option, we can infer it on container 2023-11-30 21:44:16 -08:00
Mitchell Hashimoto
00c02e88d2 apprt/gtk: remove Window from Surface, use container only 2023-11-30 21:44:16 -08:00
Mitchell Hashimoto
d65a804edd apprt/gtk: working on some reorg 2023-11-30 21:44:16 -08:00
Thorsten Ball
8cfa9297bf gtk: rework surface title buffer handling 2023-11-30 21:44:16 -08:00