Commit Graph

17624 Commits

Author SHA1 Message Date
Kovid Goyal
bd2a5cccfb More work on dnd protocol 2026-03-21 17:13:19 +05:30
Kovid Goyal
6a71687942 Apply same correction for mid_lines() based chars as well
Also update changelog
2026-03-21 12:09:05 +05:30
copilot-swe-agent[bot]
b7d18d512e Fix diagonal line visual thickness in cross_line and half_cross_line
Fixes #9719
Fixes #9721
2026-03-21 12:04:43 +05:30
Kovid Goyal
b4005d0e97 Fix drop on clients. data should be requested only after the client actually requests it not on return from drop event callback 2026-03-21 09:06:24 +05:30
Kovid Goyal
59117ff5fd ... 2026-03-21 08:41:48 +05:30
Kovid Goyal
59cb8eb201 Fix offered mimes only being sent once 2026-03-21 08:41:48 +05:30
Kovid Goyal
bdd35ba84f Only send the i client id key when needed 2026-03-21 08:41:48 +05:30
Kovid Goyal
32d0d23f24 ... 2026-03-21 08:41:48 +05:30
Kovid Goyal
27ad4bc070 Fix some more misc bugs in the DnD code 2026-03-21 08:41:48 +05:30
Kovid Goyal
78d474fee3 Dont have empty m key when no payload is present 2026-03-21 08:41:47 +05:30
Kovid Goyal
1704d27004 ... 2026-03-21 08:41:47 +05:30
Kovid Goyal
eddaaed3e3 Modernize Go code 2026-03-21 08:41:47 +05:30
copilot-swe-agent[bot]
3d13cf1ca5 Fix three bugs in mouse demo kitten DnD drop handling
Fixes #9631
2026-03-21 08:41:47 +05:30
Kovid Goyal
3b17bf0b1a ... 2026-03-21 08:41:47 +05:30
copilot-swe-agent[bot]
e55c4468e5 Fix Too many timers bug and snprintf format string bug in DnD protocol
Fixes #9628
2026-03-21 08:41:47 +05:30
copilot-swe-agent[bot]
9ee058eaf9 Initial implementation of drop client in mouse_demo
Fixes #9623
2026-03-21 08:41:47 +05:30
Kovid Goyal
67b706ff71 Make DND code constant available to kittens 2026-03-21 08:41:47 +05:30
Kovid Goyal
b4d57525ea Only base64 encode payload when needed 2026-03-21 08:41:47 +05:30
Kovid Goyal
17e941a180 Implement finishing of drops 2026-03-21 08:41:47 +05:30
Kovid Goyal
5ad55ec936 Implement drop data transmission 2026-03-21 08:41:47 +05:30
Kovid Goyal
4f404f8c85 Send dropped message 2026-03-21 08:41:47 +05:30
Kovid Goyal
3a30c47942 Get drop status updates working 2026-03-21 08:41:47 +05:30
Kovid Goyal
111b35b6a7 Implement drop leaving window 2026-03-21 08:41:47 +05:30
Kovid Goyal
fba67322d6 Some docs 2026-03-21 08:41:47 +05:30
Kovid Goyal
b0e57b4dce Send drop move events to child 2026-03-21 08:41:46 +05:30
Kovid Goyal
8d069d3bcd More dnd protocol docs 2026-03-21 08:41:46 +05:30
Kovid Goyal
5a8132d241 Start and stop accepting drops 2026-03-21 08:41:46 +05:30
Kovid Goyal
2898324047 Start work on DnD protocol 2026-03-21 08:41:46 +05:30
Kovid Goyal
4483a6c110 version 0.46.2 v0.46.2 2026-03-21 06:36:04 +05:30
mcrmck
b8da1d285f Add '+' tab indicator when dragging a window over empty tab bar space
Appends a synthetic TabBarData(tab_id=-1, title='+') to tab_bar_data
while a window drag is active. The existing tab highlight machinery
(_set_drag_target_tab / mark_tab_bar_dirty) handles hover highlighting
with no extra state. Dropping on it falls through the existing new-tab
branch in on_window_drop (tab_for_id(-1) returns None). Mark tab bar
dirty at drag start so the indicator appears immediately, and again
after set_window_being_dragged() on drop so it clears right away.
2026-03-20 20:48:10 -04:00
mcrmck
8dd4aaf111 Remove debug logging; clean up on_window_drop clear ordering 2026-03-20 01:37:19 -04:00
mcrmck
5c0a4accb3 Fix two bugs: splits layout corruption and overlay stuck on early drop exit
splits.py: insert_window_next_to called split_and_add on self.pairs_root
instead of on the pair found by pair_for_window. split_and_add only handles
direct children, so nested dest windows fell to 'else: self.two = pair',
silently replacing an entire subtree. Lost windows were re-added by
do_layout, producing phantom panes.

tabs.py: on_window_drop returned early (window not found) before calling
_clear_force_show_title_bars, leaving the drag overlay stuck on screen.
2026-03-20 01:34:01 -04:00
mcrmck
940b8bf1d3 Fix drag overlay: separate title bar highlight from body hover overlay
quadrant=5: title bar hover — full window overlay + title bar highlight
quadrant=6: body hover (non-Splits) — full window overlay only
quadrant=1-4: Splits body hover — directional half-window overlay

Previously quadrant=5 was used for all full-window cases, causing
is_drag_target=True to fire on body hover which incorrectly lit up
the title bar highlight whenever hovering any window body.
2026-03-20 01:23:23 -04:00
mcrmck
2bf4da9724 Fix: full-window overlay for title bar hover in Splits layout 2026-03-20 01:16:59 -04:00
Kovid Goyal
c57305addc Ignore dependency CVEs against unreleased versions of deps 2026-03-20 10:45:08 +05:30
Kovid Goyal
81c3fa71a0 Update changelog 2026-03-20 08:32:26 +05:30
copilot-swe-agent[bot]
7c79e2fc9e Fix text selection via click-and-drag in unfocused splits
The regression was introduced by commit b277a016b which added an early
`return` in handle_button_event that prevented kitty's internal text
selection from starting on focus-transfer clicks to unfocused splits.

Changes:
- In handle_button_event: replace the early return with a local
  suppress_child_forwarding flag that prevents PRESS from being forwarded
  to child processes in mouse-tracking mode, while still allowing
  dispatch_mouse_event to run (which starts text selection)
- In mouse_event's active_drag_in_window release path: clear
  suppress_left_mouse_release to prevent stale flags after drags

Fixes #9713
Fixes #9715
2026-03-20 08:30:53 +05:30
copilot-swe-agent[bot]
ef7b456ce7 Fix scroll valuator reset when mouse leaves window without focus change
Fixes #9716
2026-03-20 08:13:45 +05:30
Kovid Goyal
98bf76ab52 Merge branch 'master' of https://github.com/kdnk/kitty 2026-03-19 19:59:54 +05:30
Kodai Nakamura
7e62808fb7 fix: Use strict modifier check for Ctrl+H IME unmarking
Refine the check to mods == GLFW_MOD_CONTROL to ensure that
combinations like Ctrl+Shift+H do not trigger unmarkText, following
code review feedback.
2026-03-19 23:21:34 +09:00
Kodai Nakamura
2c4b6d6d8e cocoa: Unmark IME pre-edit text on Ctrl+H
This ensures that Ctrl+H behaves like Backspace and correctly clears
the pre-edit state, preventing uncommitted characters from remaining
on the screen when using IMEs like the Japanese one on macOS.
2026-03-19 23:06:09 +09:00
Kovid Goyal
4eaf380c30 Update changelog 2026-03-19 15:36:02 +05:30
copilot-swe-agent[bot]
d37a9fd48a Fix marker highlighting for CJK/wide chars not at position 0
Fixes #9705
Fixes #9706
2026-03-19 15:35:14 +05:30
Kovid Goyal
0051b7b046 Update changelog 2026-03-19 15:33:03 +05:30
copilot-swe-agent[bot]
36be8be951 Fix massive scroll on focus return by resetting X11 scroll valuators on focus loss
When kitty loses focus and the user scrolls in another
application, X11 XI scroll valuators accumulate position values. When the
user returns to kitty and scrolls, delta (value - v->value) uses the stale
pre-focus-loss value, causing a massive unexpected scroll jump.

Fix: reset scroll valuators (mark them uninitialized) on FocusOut so the
first scroll event after focus is regained sets the baseline without firing
a scroll event.

Fixes #9703
Fixes #9707
2026-03-19 15:31:22 +05:30
Kovid Goyal
7c8e797985 Merge branch 'numtabs-i586-pr' of https://github.com/Blarse/kitty 2026-03-19 14:35:57 +05:30
Egor Ignatov
35acfb79c5 Fix signed/unsigned comparison error on i586 in pyreorder_tabs
On 32-bit platforms Py_ssize_t is int (signed 32-bit), while
os_window->num_tabs is unsigned int. Direct comparison triggers
-Werror=sign-compare. Cast the unsigned side to Py_ssize_t to
silence the warning. The value can never overflow Py_ssize_t
since num_tabs is bounded by the number of open tabs.
2026-03-19 09:20:40 +03:00
mcrmck
2c81a69aad Add drag-and-drop quadrant preview overlay
During a window title-bar drag, render a semi-transparent tint over
the destination window to preview the drop outcome:

- Full-window tint (quadrant=5) when hovering any window in swap-based
  layouts (Tall, Stack, Fat, etc.) or over a title bar — swap is the
  result so the whole window is highlighted.
- Half-window directional tint (quadrant 1-4) when hovering in the
  Splits layout — a real directional insert happens so only the target
  half is highlighted.
- 150ms fade-in; clears immediately on drop or drag exit.

Implementation follows the visual_bell TINT_PROGRAM infrastructure:
two new Screen fields (start_drag_overlay_at, drag_overlay_quadrant),
draw_drag_preview_overlay() in shaders.c called from draw_cells() after
both render paths, set_window_drag_overlay() C→Python bridge in state.c,
and the same child-monitor.c needs_render + set_maximum_wait hooks that
visual_bell uses to keep frames firing during animation.

Layout detection uses hasattr(layout, 'insert_window_next_to') — the
same guard _insert_window_in_direction uses internally — so the overlay
always matches the actual drop behavior.
2026-03-18 00:30:37 -04:00
mcrmck
39820e79ff Fix mypy error: remove invalid 'none' check on window_title_bar option 2026-03-17 23:36:03 -04:00
mcrmck
49f6c926e0 Fix window drag-drop: force-show title bars and add new-tab drop target
- start_window_drag now force-shows title bars on all tabs during a drag
  so the user can actually drop onto them to trigger a swap. The cleanup
  code to clear force_show_title_bars already existed but the corresponding
  set was never written.

- on_window_drop_move now only highlights a destination window's title bar
  when the cursor is actually within the title bar row, so the visual
  feedback accurately reflects what will happen on drop (swap vs split).

- Dropping a window onto the empty space in the tab bar (past the last tab)
  now creates a new tab and moves the window into it.
2026-03-17 23:26:55 -04:00