diff --git a/Applications/Terminal/main.cpp b/Applications/Terminal/main.cpp index 64dbb2193d..6a785e346f 100644 --- a/Applications/Terminal/main.cpp +++ b/Applications/Terminal/main.cpp @@ -193,10 +193,28 @@ static RefPtr create_settings_window(TerminalWidget& terminal) auto& sysbell_radio = radio_container.add("Use (Audible) System Bell"); auto& visbell_radio = radio_container.add("Use (Visual) Terminal Bell"); - sysbell_radio.set_checked(terminal.should_beep()); - visbell_radio.set_checked(!terminal.should_beep()); - sysbell_radio.on_checked = [&terminal](const bool checked) { - terminal.set_should_beep(checked); + auto& nobell_radio = radio_container.add("Disable Terminal Bell"); + + switch (terminal.bell_mode()) { + case TerminalWidget::BellMode::Visible: + sysbell_radio.set_checked(true); + break; + case TerminalWidget::BellMode::AudibleBeep: + visbell_radio.set_checked(true); + break; + case TerminalWidget::BellMode::Disabled: + nobell_radio.set_checked(true); + break; + } + + sysbell_radio.on_checked = [&terminal](const bool) { + terminal.set_bell_mode(TerminalWidget::BellMode::AudibleBeep); + }; + visbell_radio.on_checked = [&terminal](const bool) { + terminal.set_bell_mode(TerminalWidget::BellMode::Visible); + }; + nobell_radio.on_checked = [&terminal](const bool) { + terminal.set_bell_mode(TerminalWidget::BellMode::Disabled); }; auto& slider_container = settings.add("Background Opacity"); @@ -316,7 +334,15 @@ int main(int argc, char** argv) terminal.apply_size_increments_to_window(*window); window->show(); window->set_icon(app_icon.bitmap_for_size(16)); - terminal.set_should_beep(config->read_bool_entry("Window", "AudibleBeep", false)); + + auto bell = config->read_entry("Window", "Bell", "Visible"); + if (bell == "AudibleBeep") { + terminal.set_bell_mode(TerminalWidget::BellMode::AudibleBeep); + } else if (bell == "Disabled") { + terminal.set_bell_mode(TerminalWidget::BellMode::Disabled); + } else { + terminal.set_bell_mode(TerminalWidget::BellMode::Visible); + } RefPtr settings_window; diff --git a/Base/home/anon/.config/Terminal.ini b/Base/home/anon/.config/Terminal.ini index 577e2ba08f..a3a736cfce 100644 --- a/Base/home/anon/.config/Terminal.ini +++ b/Base/home/anon/.config/Terminal.ini @@ -2,5 +2,5 @@ Command= [Window] Opacity=255 -AudibleBeep=0 +Bell=Visible ScrollLength=4 diff --git a/Libraries/LibVT/TerminalWidget.cpp b/Libraries/LibVT/TerminalWidget.cpp index 46ce22bc5d..47dbe11067 100644 --- a/Libraries/LibVT/TerminalWidget.cpp +++ b/Libraries/LibVT/TerminalWidget.cpp @@ -812,7 +812,10 @@ void TerminalWidget::terminal_did_resize(u16 columns, u16 rows) void TerminalWidget::beep() { - if (m_should_beep) { + if (m_bell_mode == BellMode::Disabled) { + return; + } + if (m_bell_mode == BellMode::AudibleBeep) { sysbeep(); return; } diff --git a/Libraries/LibVT/TerminalWidget.h b/Libraries/LibVT/TerminalWidget.h index a2793d6acd..d7b4d32c0a 100644 --- a/Libraries/LibVT/TerminalWidget.h +++ b/Libraries/LibVT/TerminalWidget.h @@ -61,8 +61,15 @@ public: void set_opacity(u8); float opacity() { return m_opacity; }; - bool should_beep() { return m_should_beep; } - void set_should_beep(bool sb) { m_should_beep = sb; }; + + enum class BellMode { + Visible, + AudibleBeep, + Disabled + }; + + BellMode bell_mode() { return m_bell_mode; } + void set_bell_mode(BellMode bm) { m_bell_mode = bm; }; RefPtr config() const { return m_config; } @@ -151,7 +158,7 @@ private: // Snapshot of m_hovered_href when opening a context menu for a hyperlink. String m_context_menu_href; - bool m_should_beep { false }; + BellMode m_bell_mode { BellMode::Visible }; bool m_belling { false }; bool m_alt_key_held { false }; bool m_rectangle_selection { false };