diff options
| -rw-r--r-- | launcher/SwitcherController.cpp | 1 | ||||
| -rw-r--r-- | tests/test_switcher_controller.cpp | 24 |
2 files changed, 24 insertions, 1 deletions
diff --git a/launcher/SwitcherController.cpp b/launcher/SwitcherController.cpp index fc9cd6807..844871cb9 100644 --- a/launcher/SwitcherController.cpp +++ b/launcher/SwitcherController.cpp @@ -261,6 +261,7 @@ void Controller::Impl::Show(ShowMode show, SortMode sort, std::vector<AbstractLa model_ = std::make_shared<SwitcherModel>(results); obj_->AddChild(model_.get()); model_->selection_changed.connect(sigc::mem_fun(this, &Controller::Impl::OnModelSelectionChanged)); + model_->detail_selection.changed.connect([this] (bool) { sources_.Remove(DETAIL_TIMEOUT); }); model_->only_detail_on_viewport = (show == ShowMode::CURRENT_VIEWPORT); SelectFirstItem(); diff --git a/tests/test_switcher_controller.cpp b/tests/test_switcher_controller.cpp index 45dd8cff4..246d40af1 100644 --- a/tests/test_switcher_controller.cpp +++ b/tests/test_switcher_controller.cpp @@ -158,6 +158,7 @@ TEST_F(TestSwitcherController, InitialDetailTimeout) static const int initial_details_timeout = 500; static const int details_timeout = 10 * initial_details_timeout; + controller_->detail_on_timeout = true; controller_->initial_detail_timeout_length = initial_details_timeout; controller_->detail_timeout_length = details_timeout; @@ -177,12 +178,13 @@ TEST_F(TestSwitcherController, InitialDetailTimeout) EXPECT_TRUE(time_diff < details_timeout); } -TEST_F(TestSwitcherController, DetailTimeout) +TEST_F(TestSwitcherController, DetailTimeoutRemoval) { Clock::time_point start_time = Clock::now(); static const int details_timeout = 500; static const int initial_details_timeout = 10 * details_timeout; + controller_->detail_on_timeout = true; controller_->detail_timeout_length = details_timeout; controller_->initial_detail_timeout_length = initial_details_timeout; @@ -213,6 +215,26 @@ TEST_F(TestSwitcherController, DetailTimeout) EXPECT_TRUE(time_diff < initial_details_timeout); } +TEST_F(TestSwitcherController, DetailTimeoutOnDetailActivate) +{ + static const int initial_details_timeout = 500; + static const int details_timeout = 10 * initial_details_timeout; + + controller_->detail_on_timeout = true; + controller_->initial_detail_timeout_length = initial_details_timeout; + controller_->detail_timeout_length = details_timeout; + + controller_->Show(ShowMode::ALL, SortMode::LAUNCHER_ORDER, icons_); + EXPECT_EQ(controller_->GetCurrentSelection().window_, 0); + + // Manually open-close the detail mode before that the timeout has occurred + controller_->SetDetail(true); + controller_->SetDetail(false); + + Utils::WaitForTimeoutMSec(initial_details_timeout * 1.1); + EXPECT_EQ(controller_->GetCurrentSelection().window_, 0); +} + TEST_F(TestSwitcherController, ShowSwitcher) { EXPECT_FALSE(controller_->Visible()); |
