From 007126ed6f2a8db5d668eb353074cbe341b99854 Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Wed, 5 Feb 2025 17:35:06 -0500 Subject: [PATCH] Keymap: Change GetModifiedCharacters API to return BStringList. Simplifies the API and makes ownership semantics clearer. Change-Id: I59d2e3ef8055253e85943500fb65356762055c54 Reviewed-on: https://review.haiku-os.org/c/haiku/+/8914 Reviewed-by: waddlesplash --- headers/private/shared/Keymap.h | 4 ++-- src/apps/terminal/TermWindow.cpp | 8 ++++---- src/apps/webpositive/BrowserWindow.cpp | 8 ++++---- src/kits/shared/Keymap.cpp | 12 +++--------- src/kits/tracker/ContainerWindow.cpp | 8 ++++---- 5 files changed, 17 insertions(+), 23 deletions(-) diff --git a/headers/private/shared/Keymap.h b/headers/private/shared/Keymap.h index 3a8c75028e..218c6620c2 100644 --- a/headers/private/shared/Keymap.h +++ b/headers/private/shared/Keymap.h @@ -12,7 +12,7 @@ #include #include -#include +#include class BKeymap { @@ -41,7 +41,7 @@ public: int32* numBytes) const; status_t GetModifiedCharacters(const char* in, int32 inModifiers, int32 outModifiers, - BObjectList* _outList); + BStringList& _outList); const key_map& Map() const { return fKeys; } diff --git a/src/apps/terminal/TermWindow.cpp b/src/apps/terminal/TermWindow.cpp index 29a74e404a..f402ea24a1 100644 --- a/src/apps/terminal/TermWindow.cpp +++ b/src/apps/terminal/TermWindow.cpp @@ -561,12 +561,12 @@ TermWindow::_SetupMenu() BKeymap keymap; keymap.SetToCurrent(); - BObjectList unmodified(3, true); - if (keymap.GetModifiedCharacters("+", B_SHIFT_KEY, 0, &unmodified) + BStringList unmodified(3); + if (keymap.GetModifiedCharacters("+", B_SHIFT_KEY, 0, unmodified) == B_OK) { - int32 count = unmodified.CountItems(); + int32 count = unmodified.CountStrings(); for (int32 i = 0; i < count; i++) { - uint32 key = BUnicodeChar::FromUTF8(unmodified.ItemAt(i)); + uint32 key = BUnicodeChar::FromUTF8(unmodified.StringAt(i)); if (!HasShortcut(key, 0)) { // Add semantic + shortcut, bug #7428 AddShortcut(key, B_COMMAND_KEY, diff --git a/src/apps/webpositive/BrowserWindow.cpp b/src/apps/webpositive/BrowserWindow.cpp index 8e0828ab41..a0c370640b 100644 --- a/src/apps/webpositive/BrowserWindow.cpp +++ b/src/apps/webpositive/BrowserWindow.cpp @@ -687,12 +687,12 @@ BrowserWindow::BrowserWindow(BRect frame, SettingsMessage* appSettings, BKeymap keymap; keymap.SetToCurrent(); - BObjectList unmodified(3, true); - if (keymap.GetModifiedCharacters("+", B_SHIFT_KEY, 0, &unmodified) + BStringList unmodified(3); + if (keymap.GetModifiedCharacters("+", B_SHIFT_KEY, 0, unmodified) == B_OK) { - int32 count = unmodified.CountItems(); + int32 count = unmodified.CountStrings(); for (int32 i = 0; i < count; i++) { - uint32 key = BUnicodeChar::FromUTF8(unmodified.ItemAt(i)); + uint32 key = BUnicodeChar::FromUTF8(unmodified.StringAt(i)); if (!HasShortcut(key, 0)) { // Add semantic zoom in shortcut, bug #7428 AddShortcut(key, B_COMMAND_KEY, diff --git a/src/kits/shared/Keymap.cpp b/src/kits/shared/Keymap.cpp index 9a77e6f602..4f77e949b0 100644 --- a/src/kits/shared/Keymap.cpp +++ b/src/kits/shared/Keymap.cpp @@ -455,9 +455,9 @@ BKeymap::GetChars(uint32 keyCode, uint32 modifiers, uint8 activeDeadKey, */ status_t BKeymap::GetModifiedCharacters(const char* in, int32 inModifiers, - int32 outModifiers, BObjectList* _outList) + int32 outModifiers, BStringList& _outList) { - if (in == NULL || *in == '\0' || _outList == NULL) + if (in == NULL || *in == '\0') return B_BAD_VALUE; for(uint32 i = 0; i < 128; i++) { @@ -470,14 +470,8 @@ BKeymap::GetModifiedCharacters(const char* in, int32 inModifiers, int32 outOffset = Offset(i, outModifiers); size_t sizeOut = fChars[outOffset++]; - char* out = (char*)malloc(sizeOut + 1); - if (out == NULL) + if (!_outList.Add(BString(fChars + outOffset, sizeOut))) return B_NO_MEMORY; - - memcpy(out, fChars + outOffset, sizeOut); - out[sizeOut] = '\0'; - - _outList->AddItem((const char*)out); } return B_OK; diff --git a/src/kits/tracker/ContainerWindow.cpp b/src/kits/tracker/ContainerWindow.cpp index 59b8a5194e..eeb3ebbf44 100644 --- a/src/kits/tracker/ContainerWindow.cpp +++ b/src/kits/tracker/ContainerWindow.cpp @@ -792,12 +792,12 @@ BContainerWindow::Init(const BMessage* message) BKeymap keymap; if (keymap.SetToCurrent() == B_OK) { - BObjectList unmodified(3, true); - if (keymap.GetModifiedCharacters("+", B_SHIFT_KEY, 0, &unmodified) + BStringList unmodified(3); + if (keymap.GetModifiedCharacters("+", B_SHIFT_KEY, 0, unmodified) == B_OK) { - int32 count = unmodified.CountItems(); + int32 count = unmodified.CountStrings(); for (int32 i = 0; i < count; i++) { - uint32 key = BUnicodeChar::FromUTF8(unmodified.ItemAt(i)); + uint32 key = BUnicodeChar::FromUTF8(unmodified.StringAt(i)); if (!HasShortcut(key, 0)) { // Add semantic zoom in shortcut, bug #6692 BMessage* increaseSize = new BMessage(kIconMode);