summaryrefslogtreecommitdiff
diff options
authorMarco Trevisan (TreviƱo) <mail@3v1n0.net>2013-02-06 02:28:35 +0000
committerTarmac <>2013-02-06 02:28:35 +0000
commitabb495b5c1132418cea0f913cefc9728251d6404 (patch)
tree270e2b31692bed677ca8f39d4d1b07e26c195a63
parent6d5eb571fc134c6e54048b09809a330dfa9ea595 (diff)
parent7bc406faeae089190288a9a691a698a3e18b5757 (diff)
SwitcherController: remove the detail timeout when the detail mode is changed. Fixes: https://bugs.launchpad.net/bugs/1116785.
Approved by Brandon Schaefer. (bzr r3131)
-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());