From b82a254da0ca3465692e6b6da42ff85f35f94e32 Mon Sep 17 00:00:00 2001 From: Itamar Date: Fri, 18 Sep 2020 14:58:23 +0300 Subject: [PATCH] HackStudio: Only refresh Git widget on save if initialized --- DevTools/HackStudio/Git/GitWidget.cpp | 34 ++++++++++++++++++++++----- DevTools/HackStudio/Git/GitWidget.h | 3 +++ DevTools/HackStudio/main.cpp | 5 +++- 3 files changed, 35 insertions(+), 7 deletions(-) diff --git a/DevTools/HackStudio/Git/GitWidget.cpp b/DevTools/HackStudio/Git/GitWidget.cpp index 448ec755e9..bedba83603 100644 --- a/DevTools/HackStudio/Git/GitWidget.cpp +++ b/DevTools/HackStudio/Git/GitWidget.cpp @@ -95,19 +95,41 @@ GitWidget::GitWidget(const LexicalPath& repo_root) Gfx::Bitmap::load_from_file("/res/icons/16x16/minus.png").release_nonnull()); } -void GitWidget::refresh() +bool GitWidget::initialize() { auto result = GitRepo::try_to_create(m_repo_root); - if (result.type == GitRepo::CreateResult::Type::Success) { + switch (result.type) { + case GitRepo::CreateResult::Type::Success: m_git_repo = result.repo; - } else if (result.type == GitRepo::CreateResult::Type::GitProgramNotFound) { + return true; + case GitRepo::CreateResult::Type::GitProgramNotFound: GUI::MessageBox::show(window(), "Please install the Git port", "Error", GUI::MessageBox::Type::Error); - return; - } else if (result.type == GitRepo::CreateResult::Type::NoGitRepo) { + return false; + case GitRepo::CreateResult::Type::NoGitRepo: { auto decision = GUI::MessageBox::show(window(), "Create git repository?", "Git", GUI::MessageBox::Type::Question, GUI::MessageBox::InputType::YesNo); if (decision != GUI::Dialog::ExecResult::ExecYes) - return; + return false; m_git_repo = GitRepo::initialize_repository(m_repo_root); + return true; + } + default: + ASSERT_NOT_REACHED(); + } +} + +bool GitWidget::initialize_if_needed() +{ + if (initialized()) + return true; + + return initialize(); +} + +void GitWidget::refresh() +{ + if (!initialize_if_needed()) { + dbg() << "GitWidget initialization failed"; + return; } ASSERT(!m_git_repo.is_null()); diff --git a/DevTools/HackStudio/Git/GitWidget.h b/DevTools/HackStudio/Git/GitWidget.h index 6cc8ae8bbd..c0fea89851 100644 --- a/DevTools/HackStudio/Git/GitWidget.h +++ b/DevTools/HackStudio/Git/GitWidget.h @@ -43,10 +43,13 @@ public: void refresh(); void set_view_diff_callback(ViewDiffCallback callback); + bool initialized() const { return !m_git_repo.is_null(); }; private: explicit GitWidget(const LexicalPath& repo_root); + bool initialize(); + bool initialize_if_needed(); void stage_file(const LexicalPath&); void unstage_file(const LexicalPath&); void commit(); diff --git a/DevTools/HackStudio/main.cpp b/DevTools/HackStudio/main.cpp index 974f4ddcf8..ac82cda60e 100644 --- a/DevTools/HackStudio/main.cpp +++ b/DevTools/HackStudio/main.cpp @@ -489,8 +489,11 @@ static int main_impl(int argc, char** argv) auto save_action = GUI::Action::create("Save", { Mod_Ctrl, Key_S }, Gfx::Bitmap::load_from_file("/res/icons/16x16/save.png"), [&](auto&) { if (g_currently_open_file.is_empty()) return; + current_editor().write_to_file(g_currently_open_file); - g_git_widget->refresh(); + + if (g_git_widget->initialized()) + g_git_widget->refresh(); }); toolbar.add_action(new_action);