diff options
author | Idan Horowitz <idan.horowitz@gmail.com> | 2022-02-15 22:46:49 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2022-02-16 22:21:37 +0100 |
commit | 5b572393a96e0ad1a916a422c47a257cd6da635b (patch) | |
tree | 7937634e532730ad1bd77c6e02fd58e656994149 | |
parent | c8db8d61527830bad820b568c0f76169abaf1709 (diff) | |
download | serenity-5b572393a96e0ad1a916a422c47a257cd6da635b.zip |
LibVT: Use NNOP<KString> to store window titles in the Kernel
This will allow us to eventually propagate allocation failure.
-rw-r--r-- | Userland/Libraries/LibVT/Attribute.h | 5 | ||||
-rw-r--r-- | Userland/Libraries/LibVT/Terminal.cpp | 15 | ||||
-rw-r--r-- | Userland/Libraries/LibVT/Terminal.h | 7 |
3 files changed, 24 insertions, 3 deletions
diff --git a/Userland/Libraries/LibVT/Attribute.h b/Userland/Libraries/LibVT/Attribute.h index 1bc2c8c51e..5bc71531fe 100644 --- a/Userland/Libraries/LibVT/Attribute.h +++ b/Userland/Libraries/LibVT/Attribute.h @@ -7,11 +7,14 @@ #pragma once #include <AK/Noncopyable.h> -#include <AK/String.h> #include <AK/Vector.h> #include <LibVT/Color.h> #include <LibVT/XtermColors.h> +#ifndef KERNEL +# include <AK/String.h> +#endif + namespace VT { struct Attribute { diff --git a/Userland/Libraries/LibVT/Terminal.cpp b/Userland/Libraries/LibVT/Terminal.cpp index 7454fdc6fa..d7e216c6ee 100644 --- a/Userland/Libraries/LibVT/Terminal.cpp +++ b/Userland/Libraries/LibVT/Terminal.cpp @@ -383,7 +383,11 @@ void Terminal::XTERM_WM(Parameters params) return; } dbgln_if(TERMINAL_DEBUG, "Title stack push: {}", m_current_window_title); - [[maybe_unused]] auto rc = m_title_stack.try_append(move(m_current_window_title)); +#ifdef KERNEL + (void)m_title_stack.try_append(m_current_window_title.release_nonnull()); // FIXME: Propagate Error +#else + (void)m_title_stack.try_append(move(m_current_window_title)); +#endif break; } case 23: { @@ -395,7 +399,11 @@ void Terminal::XTERM_WM(Parameters params) } m_current_window_title = m_title_stack.take_last(); dbgln_if(TERMINAL_DEBUG, "Title stack pop: {}", m_current_window_title); +#ifdef KERNEL + m_client.set_window_title(m_current_window_title->view()); +#else m_client.set_window_title(m_current_window_title); +#endif break; } default: @@ -1280,8 +1288,13 @@ void Terminal::execute_osc_sequence(OscParameters parameters, u8 last_byte) } else { // FIXME: the split breaks titles containing semicolons. // Should we expose the raw OSC string from the parser? Or join by semicolon? +#ifdef KERNEL + m_current_window_title = Kernel::KString::try_create(stringview_ify(1)).release_value_but_fixme_should_propagate_errors(); + m_client.set_window_title(m_current_window_title->view()); +#else m_current_window_title = stringview_ify(1).to_string(); m_client.set_window_title(m_current_window_title); +#endif } break; case 8: diff --git a/Userland/Libraries/LibVT/Terminal.h b/Userland/Libraries/LibVT/Terminal.h index 7146317bc8..f7b0693c5e 100644 --- a/Userland/Libraries/LibVT/Terminal.h +++ b/Userland/Libraries/LibVT/Terminal.h @@ -9,7 +9,6 @@ #include <AK/Noncopyable.h> #include <AK/NonnullOwnPtrVector.h> -#include <AK/String.h> #include <AK/Vector.h> #include <Kernel/API/KeyCode.h> #include <LibVT/CharacterSet.h> @@ -17,6 +16,7 @@ #include <LibVT/Position.h> #ifndef KERNEL +# include <AK/String.h> # include <LibVT/Attribute.h> # include <LibVT/Line.h> #else @@ -435,8 +435,13 @@ protected: Attribute m_current_attribute; Attribute m_saved_attribute; +#ifdef KERNEL + OwnPtr<Kernel::KString> m_current_window_title; + NonnullOwnPtrVector<Kernel::KString> m_title_stack; +#else String m_current_window_title; Vector<String> m_title_stack; +#endif #ifndef KERNEL u32 m_next_href_id { 0 }; |