summaryrefslogtreecommitdiff
diff options
-rw-r--r--launcher/SwitcherController.cpp1
-rw-r--r--tests/test_switcher_controller.cpp24
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());