summaryrefslogtreecommitdiff
path: root/Applications/Terminal/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Applications/Terminal/main.cpp')
-rw-r--r--Applications/Terminal/main.cpp102
1 files changed, 64 insertions, 38 deletions
diff --git a/Applications/Terminal/main.cpp b/Applications/Terminal/main.cpp
index f10b6304a3..8e89227a7c 100644
--- a/Applications/Terminal/main.cpp
+++ b/Applications/Terminal/main.cpp
@@ -11,6 +11,8 @@
#include "Terminal.h"
#include <Kernel/KeyCode.h>
#include <LibGUI/GApplication.h>
+#include <LibGUI/GBoxLayout.h>
+#include <LibGUI/GRadioButton.h>
#include <LibGUI/GWidget.h>
#include <LibGUI/GWindow.h>
#include <LibGUI/GMenuBar.h>
@@ -78,6 +80,50 @@ static void make_shell(int ptm_fd)
}
}
+GWindow* create_opacity_settings_window(Terminal& terminal, RetainPtr<CConfigFile> config)
+{
+ auto* opacity_adjustment_window = new GWindow;
+ opacity_adjustment_window->set_title("Adjust opacity");
+ opacity_adjustment_window->set_rect(50, 50, 200, 100);
+
+ auto* slider = new GSlider(nullptr);
+ opacity_adjustment_window->set_main_widget(slider);
+ slider->set_fill_with_background_color(true);
+ slider->set_background_color(Color::LightGray);
+
+ slider->on_value_changed = [&terminal, &config] (int value) {
+ float opacity = value / 100.0;
+ terminal.set_opacity(opacity);
+ };
+
+ slider->set_range(0, 100);
+ slider->set_value(terminal.opacity() * 100.0);
+
+ return opacity_adjustment_window;
+}
+
+GWindow* create_beep_choice_window(Terminal& terminal, RetainPtr<CConfigFile> config)
+{
+ auto* beep_choice_window = new GWindow;
+ beep_choice_window->set_title("Terminal beep settings");
+ beep_choice_window->set_rect(50, 50, 200, 100);
+
+ auto* radio_buttons = new GWidget;
+ beep_choice_window->set_main_widget(radio_buttons);
+ radio_buttons->set_fill_with_background_color(true);
+ radio_buttons->set_layout(make<GBoxLayout>(Orientation::Vertical));
+ radio_buttons->layout()->set_margins({ 4, 4, 4, 4 });
+
+ auto* sysbell_radio = new GRadioButton("Use (Audible) System Bell", radio_buttons);
+ auto* visbell_radio = new GRadioButton("Use (Visual) Terminal Bell", radio_buttons);
+ sysbell_radio->set_checked(terminal.should_beep());
+ visbell_radio->set_checked(!terminal.should_beep());
+ sysbell_radio->on_checked = [&terminal] (const bool res) {
+ terminal.set_should_beep(res);
+ };
+ return beep_choice_window;
+}
+
int main(int argc, char** argv)
{
GApplication app(argc, argv);
@@ -108,39 +154,11 @@ int main(int argc, char** argv)
window->set_icon_path("/res/icons/16x16/app-terminal.png");
terminal.set_should_beep(config->read_num_entry("Window", "AudibleBeep", 1) == 1);
- auto* opacity_adjustment_window = new GWindow;
- opacity_adjustment_window->set_title("Adjust opacity");
- opacity_adjustment_window->set_rect(50, 50, 200, 100);
-
- auto* slider = new GSlider(nullptr);
- opacity_adjustment_window->set_main_widget(slider);
- slider->set_fill_with_background_color(true);
- slider->set_background_color(Color::LightGray);
-
- slider->on_value_changed = [&terminal, &config] (int value) {
- float opacity = value / 100.0;
- terminal.set_opacity(opacity);
- };
-
- slider->set_range(0, 100);
- slider->set_value(100);
+ WeakPtr<GWindow> opacity_adjustment_window =
+ create_opacity_settings_window(terminal, config)->make_weak_ptr();
- auto* beep_choice_window = new GWindow;
- beep_choice_window->set_title("Terminal beep settings");
- beep_choice_window->set_rect(50, 50, 200, 100);
-
- auto* radio_buttons = new GWidget;
- beep_choice_window->set_main_widget(radio_buttons);
- radio_buttons->set_fill_with_background_color(true);
- radio_buttons->set_layout(make<GBoxLayout>(Orientation::Vertical));
- radio_buttons->layout()->set_margins({ 4, 4, 4, 4 });
-
- auto* sysbell_radio = new GRadioButton("Use (Audible) System Bell", radio_buttons);
- auto* visbell_radio = new GRadioButton("Use (Visual) Terminal Bell", radio_buttons);
- sysbell_radio->set_checked(terminal.should_beep());
- sysbell_radio->on_checked = [&terminal] (const bool res) {
- terminal.set_should_beep(res);
- };
+ WeakPtr<GWindow> beep_choice_window =
+ create_beep_choice_window(terminal, config)->make_weak_ptr();
auto new_opacity = config->read_num_entry("Window", "Opacity", 255);
terminal.set_opacity((float)new_opacity / 255.0);
@@ -148,12 +166,20 @@ int main(int argc, char** argv)
auto menubar = make<GMenuBar>();
auto app_menu = make<GMenu>("Terminal");
- app_menu->add_action(GAction::create("Adjust opacity...", [opacity_adjustment_window] (const GAction&) {
- opacity_adjustment_window->show();
- }));
- app_menu->add_action(GAction::create("Change audio output...", [beep_choice_window] (const GAction&) {
- beep_choice_window->show();
- }));
+ app_menu->add_action(GAction::create("Adjust opacity...",
+ [&opacity_adjustment_window, &terminal, &config] (const GAction&) {
+ if (!opacity_adjustment_window)
+ opacity_adjustment_window =
+ create_opacity_settings_window(terminal, config)->make_weak_ptr();
+ opacity_adjustment_window->show();
+ }));
+ app_menu->add_action(GAction::create("Change audio output...",
+ [&beep_choice_window, &terminal, &config] (const GAction&) {
+ if (!beep_choice_window)
+ beep_choice_window =
+ create_beep_choice_window(terminal, config)->make_weak_ptr();
+ beep_choice_window->show();
+ }));
app_menu->add_action(GAction::create("Quit", { Mod_Alt, Key_F4 }, [] (const GAction&) {
dbgprintf("Terminal: Quit menu activated!\n");
GApplication::the().quit(0);