Ver código fonte

LibVT: Use NNOP<KString> to store window titles in the Kernel

This will allow us to eventually propagate allocation failure.
Idan Horowitz 3 anos atrás
pai
commit
5b572393a9

+ 4 - 1
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 {

+ 14 - 1
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:

+ 6 - 1
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 };