diff --git a/Games/Minesweeper/Field.cpp b/Games/Minesweeper/Field.cpp index 8e21badaeb..47ca0ec41e 100644 --- a/Games/Minesweeper/Field.cpp +++ b/Games/Minesweeper/Field.cpp @@ -43,8 +43,9 @@ public: virtual void mousedown_event(GMouseEvent& event) override { - if (event.buttons() == (GMouseButton::Right | GMouseButton::Left)) { - if (event.button() == GMouseButton::Left || event.button() == GMouseButton::Right) { + if (event.button() == GMouseButton::Right || event.button() == GMouseButton::Left) { + if (event.buttons() == (GMouseButton::Right | GMouseButton::Left) || + m_square.field->is_single_chording()) { m_chord = true; m_square.field->set_chord_preview(m_square, true); } @@ -461,6 +462,12 @@ void Field::set_field_size(int rows, int columns, int mine_count) on_size_changed(); } +void Field::set_single_chording(bool enabled) { + auto config = CConfigFile::get_for_app("Minesweeper"); + m_single_chording = enabled; + config->write_bool_entry("Minesweeper", "SingleChording", m_single_chording); +} + Square::~Square() { delete label; diff --git a/Games/Minesweeper/Field.h b/Games/Minesweeper/Field.h index cd557a2d97..75ab1334ce 100644 --- a/Games/Minesweeper/Field.h +++ b/Games/Minesweeper/Field.h @@ -43,8 +43,10 @@ public: int columns() const { return m_columns; } int mine_count() const { return m_mine_count; } int square_size() const { return 15; } + bool is_single_chording() const { return m_single_chording; } void set_field_size(int rows, int columns, int mine_count); + void set_single_chording(bool new_val); void reset(); @@ -100,4 +102,5 @@ private: Face m_face { Face::Default }; bool m_chord_preview { false }; bool m_first_click { true }; + bool m_single_chording { true }; }; diff --git a/Games/Minesweeper/main.cpp b/Games/Minesweeper/main.cpp index 113117399c..81a6926537 100644 --- a/Games/Minesweeper/main.cpp +++ b/Games/Minesweeper/main.cpp @@ -49,15 +49,29 @@ int main(int argc, char** argv) { auto config = CConfigFile::get_for_app("Minesweeper"); + bool single_chording = config->read_num_entry("Minesweeper", "SingleChording", false); int mine_count = config->read_num_entry("Game", "MineCount", 10); int rows = config->read_num_entry("Game", "Rows", 9); int columns = config->read_num_entry("Game", "Columns", 9); field->set_field_size(rows, columns, mine_count); + field->set_single_chording(single_chording); } auto menubar = make(); auto app_menu = make("Minesweeper"); + + RefPtr chord_toggler_action; + chord_toggler_action = GAction::create("Single-click chording", [&](const GAction&) { + bool toggled = !field->is_single_chording(); + field->set_single_chording(toggled); + chord_toggler_action->set_checked(toggled); + }); + chord_toggler_action->set_checkable(true); + chord_toggler_action->set_checked(field->is_single_chording()); + app_menu->add_action(*chord_toggler_action); + app_menu->add_separator(); + app_menu->add_action(GAction::create("Quit", { Mod_Alt, Key_F4 }, [](const GAction&) { GApplication::the().quit(0); return;