From cd9d30486ae7583d68d874b5d40d525a24d9a180 Mon Sep 17 00:00:00 2001 From: rymdbar Date: Mon, 8 Sep 2025 15:42:25 -0400 Subject: [PATCH] patch 9.1.1743: Haiku: no full-screen support Problem: Haiku: no full-screen support Solution: Add support for toggling full-screen using the keyboard (rymdbar) Makes toggling using keyboard possible. This change does not add any `:fullscreen` command (Which currently only macVim has). See https://www.haiku-os.org/docs/userguide/en/keyboard-shortcuts.html for motivation on key combination used, as well as terminology choice. With vim being inconsistent (`:help intro` suggests and , while is used at a dozen other places) following Haiku nomenclature seems most appropriate. closes: #18235 Signed-off-by: rymdbar Signed-off-by: Christian Brabandt --- runtime/doc/os_haiku.txt | 9 ++++++-- runtime/doc/version9.txt | 4 +++- runtime/doc/vi_diff.txt | 6 ++--- src/gui_haiku.cc | 47 +++++++++++++++++++++++++++++++++++++++- src/version.c | 2 ++ 5 files changed, 61 insertions(+), 7 deletions(-) diff --git a/runtime/doc/os_haiku.txt b/runtime/doc/os_haiku.txt index 8fe8c9f56c..01785507ee 100644 --- a/runtime/doc/os_haiku.txt +++ b/runtime/doc/os_haiku.txt @@ -1,4 +1,4 @@ -*os_haiku.txt* For Vim version 9.1. Last change: 2020 May 13 +*os_haiku.txt* For Vim version 9.1. Last change: 2025 Sep 08 VIM REFERENCE MANUAL by Bram Moolenaar @@ -76,6 +76,9 @@ version with GUI tries to determine if it was started from the Tracker instead of the Terminal, and if so, uses the GUI anyway. However, the current detection scheme is fooled if you use the command "vim - . + Stuff that does not work yet: - Mouse up events are not generated when outside the window. You can notice @@ -86,7 +89,9 @@ Stuff that does not work yet: in when the window is activated or deactivated (so it works best with focus- follows-mouse turned on). - The cursor does not flash. - +- Switching windows using and in Twitcher does not + work. This is due to each gvim window being managed by a separate instance + completely unaware of other vim processes. 4. The $VIM directory *haiku-vimdir* diff --git a/runtime/doc/version9.txt b/runtime/doc/version9.txt index e7c7183fdf..e95405269e 100644 --- a/runtime/doc/version9.txt +++ b/runtime/doc/version9.txt @@ -1,4 +1,4 @@ -*version9.txt* For Vim version 9.1. Last change: 2025 Sep 02 +*version9.txt* For Vim version 9.1. Last change: 2025 Sep 08 VIM REFERENCE MANUAL by Bram Moolenaar @@ -41619,6 +41619,8 @@ Platform specific~ - Python3 support in OpenVMS is now available. - The Win32 GUI comes with better toolbar icons. + +- Better fullscreen support for Haiku |os_haiku.txt|. *new-other-9.2* Other new features ~ ------------------ diff --git a/runtime/doc/vi_diff.txt b/runtime/doc/vi_diff.txt index 1c5d7245b9..cf977380cc 100644 --- a/runtime/doc/vi_diff.txt +++ b/runtime/doc/vi_diff.txt @@ -1,4 +1,4 @@ -*vi_diff.txt* For Vim version 9.1. Last change: 2025 Sep 04 +*vi_diff.txt* For Vim version 9.1. Last change: 2025 Sep 08 VIM REFERENCE MANUAL by Bram Moolenaar @@ -1379,13 +1379,13 @@ support is verified as part of the CI test suite. System | Status:~ --------------------------------+----------------------------------------- Amiga (OS4, AROS & MorphOS): | still supported (?) -Haiku: | still supported (?) +Haiku: | supported Linux: | fully supported (on maintained versions) Mac OS: | fully supported up until v10.6 (?) MS-Windows 7, 8, 10, 11: | fully supported -UNIX: | supported (on maintained versions) OpenVMS: | supported QNX: | still supported (?) +UNIX: | supported (on maintained versions) zOS/OS390: | still supported (?) The following operating systems are no longer supported: diff --git a/src/gui_haiku.cc b/src/gui_haiku.cc index 3865a4f4df..5d32607aa4 100644 --- a/src/gui_haiku.cc +++ b/src/gui_haiku.cc @@ -175,7 +175,7 @@ class VimWindow: public BWindow VimWindow(); ~VimWindow(); - // virtual void DispatchMessage(BMessage *m, BHandler *h); + virtual void DispatchMessage(BMessage *m, BHandler *h); virtual void WindowActivated(bool active); virtual bool QuitRequested(); @@ -184,6 +184,9 @@ class VimWindow: public BWindow private: void init(); + bool is_fullscreen = false; + BRect saved_frame; + window_look saved_look; }; class VimFormView: public BView @@ -971,6 +974,48 @@ VimWindow::QuitRequested() write_port(gui.vdcmp, VimMsg::Key, &km, sizeof(km)); return false; } + void +VimWindow::DispatchMessage(BMessage *m, BHandler *h) +{ + bool should_propagate = true; + + switch (m->what) + { + case B_KEY_DOWN: + { + int32 scancode = 0; + int32 beModifiers = 0; + m->FindInt32("raw_char", &scancode); + m->FindInt32("modifiers", &beModifiers); + + if (scancode == B_ENTER && (beModifiers & B_LEFT_COMMAND_KEY)) + { + should_propagate = false; + if (this->is_fullscreen) + { + this->is_fullscreen = false; + ResizeTo(this->saved_frame.Width(), this->saved_frame.Height()); + MoveTo(this->saved_frame.left, this->saved_frame.top); + SetLook(this->saved_look); + SetFlags(Flags() & ~(B_NOT_RESIZABLE | B_NOT_MOVABLE)); + } else { + this->saved_frame = Frame(); + this->saved_look = Look(); + this->is_fullscreen = true; + BScreen s(this); + SetLook(B_NO_BORDER_WINDOW_LOOK); + ResizeTo(s.Frame().Width() + 1, s.Frame().Height() + 1); + MoveTo(s.Frame().left, s.Frame().top); + SetFlags(Flags() | (B_NOT_RESIZABLE | B_NOT_MOVABLE)); + } + } + } + } + + if (should_propagate) + Inherited::DispatchMessage(m, h); +} + // ---------------- VimFormView ---------------- diff --git a/src/version.c b/src/version.c index d6431471ef..20ee00095b 100644 --- a/src/version.c +++ b/src/version.c @@ -724,6 +724,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1743, /**/ 1742, /**/