Merge lp:~3v1n0/unity/bfb-quicklist-does-not-close-dash into lp:unity

Proposed by Marco Trevisan (Treviño)
Status: Merged
Approved by: Marco Trevisan (Treviño)
Approved revision: no longer in the source branch.
Merged at revision: 2561
Proposed branch: lp:~3v1n0/unity/bfb-quicklist-does-not-close-dash
Merge into: lp:unity
Prerequisite: lp:~3v1n0/unity/quicklist-menuitem-clanup
Diff against target: 298 lines (+154/-8)
7 files modified
launcher/BFBLauncherIcon.cpp (+2/-0)
launcher/BamfLauncherIcon.cpp (+2/-2)
launcher/QuicklistMenuItem.cpp (+20/-5)
launcher/QuicklistMenuItem.h (+4/-0)
tests/CMakeLists.txt (+1/-0)
tests/test_bfb_launcher_icon.cpp (+54/-0)
tests/test_quicklist_menu_item.cpp (+71/-1)
To merge this branch: bzr merge lp:~3v1n0/unity/bfb-quicklist-does-not-close-dash
Reviewer Review Type Date Requested Status
Tim Penhey (community) Approve
Review via email: mp+119378@code.launchpad.net

Commit message

QuicklistMenuitem, BFBLauncherIcon: don't close the Dash when clicking on BFB quicklist items

Description of the change

Add a new property to the quicklist menu items to define if it should close or not the overlay when clicked.

Added unit tests.

To post a comment you must log in.
Revision history for this message
Tim Penhey (thumper) wrote :

looks good

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'launcher/BFBLauncherIcon.cpp'
--- launcher/BFBLauncherIcon.cpp 2012-08-02 11:30:02 +0000
+++ launcher/BFBLauncherIcon.cpp 2012-08-13 16:20:26 +0000
@@ -119,6 +119,7 @@
119 dbusmenu_menuitem_property_set(menu_item, DBUSMENU_MENUITEM_PROP_LABEL, _("Dash Home"));119 dbusmenu_menuitem_property_set(menu_item, DBUSMENU_MENUITEM_PROP_LABEL, _("Dash Home"));
120 dbusmenu_menuitem_property_set_bool(menu_item, DBUSMENU_MENUITEM_PROP_ENABLED, true);120 dbusmenu_menuitem_property_set_bool(menu_item, DBUSMENU_MENUITEM_PROP_ENABLED, true);
121 dbusmenu_menuitem_property_set_bool(menu_item, DBUSMENU_MENUITEM_PROP_VISIBLE, true);121 dbusmenu_menuitem_property_set_bool(menu_item, DBUSMENU_MENUITEM_PROP_VISIBLE, true);
122 dbusmenu_menuitem_property_set_bool(menu_item, QuicklistMenuItem::OVERLAY_MENU_ITEM_PROPERTY, true);
122123
123 g_signal_connect(menu_item,124 g_signal_connect(menu_item,
124 DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED,125 DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED,
@@ -138,6 +139,7 @@
138 dbusmenu_menuitem_property_set(menu_item, DBUSMENU_MENUITEM_PROP_LABEL, lens->name);139 dbusmenu_menuitem_property_set(menu_item, DBUSMENU_MENUITEM_PROP_LABEL, lens->name);
139 dbusmenu_menuitem_property_set_bool(menu_item, DBUSMENU_MENUITEM_PROP_ENABLED, true);140 dbusmenu_menuitem_property_set_bool(menu_item, DBUSMENU_MENUITEM_PROP_ENABLED, true);
140 dbusmenu_menuitem_property_set_bool(menu_item, DBUSMENU_MENUITEM_PROP_VISIBLE, true);141 dbusmenu_menuitem_property_set_bool(menu_item, DBUSMENU_MENUITEM_PROP_VISIBLE, true);
142 dbusmenu_menuitem_property_set_bool(menu_item, QuicklistMenuItem::OVERLAY_MENU_ITEM_PROPERTY, true);
141143
142 g_signal_connect(menu_item,144 g_signal_connect(menu_item,
143 DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED,145 DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED,
144146
=== modified file 'launcher/BamfLauncherIcon.cpp'
--- launcher/BamfLauncherIcon.cpp 2012-08-02 11:30:02 +0000
+++ launcher/BamfLauncherIcon.cpp 2012-08-13 16:20:26 +0000
@@ -977,7 +977,7 @@
977 if (dbusmenu_menuitem_property_get_bool(item, DBUSMENU_MENUITEM_PROP_VISIBLE))977 if (dbusmenu_menuitem_property_get_bool(item, DBUSMENU_MENUITEM_PROP_VISIBLE))
978 {978 {
979 first_separator_needed = true;979 first_separator_needed = true;
980 dbusmenu_menuitem_property_set_bool(item, "unity-use-markup", FALSE);980 dbusmenu_menuitem_property_set_bool(item, QuicklistMenuItem::MARKUP_ENABLED_PROPERTY, FALSE);
981981
982 result.push_back(item);982 result.push_back(item);
983 }983 }
@@ -1039,7 +1039,7 @@
1039 DBUSMENU_MENUITEM_PROP_ENABLED,1039 DBUSMENU_MENUITEM_PROP_ENABLED,
1040 true);1040 true);
1041 dbusmenu_menuitem_property_set_bool(item,1041 dbusmenu_menuitem_property_set_bool(item,
1042 "unity-use-markup",1042 QuicklistMenuItem::MARKUP_ENABLED_PROPERTY,
1043 true);1043 true);
10441044
1045 _gsignals.Add(new glib::Signal<void, DbusmenuMenuitem*, int>(item, DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED,1045 _gsignals.Add(new glib::Signal<void, DbusmenuMenuitem*, int>(item, DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED,
10461046
=== modified file 'launcher/QuicklistMenuItem.cpp'
--- launcher/QuicklistMenuItem.cpp 2012-08-13 16:20:26 +0000
+++ launcher/QuicklistMenuItem.cpp 2012-08-13 16:20:26 +0000
@@ -28,6 +28,8 @@
2828
29namespace unity29namespace unity
30{30{
31const char* QuicklistMenuItem::MARKUP_ENABLED_PROPERTY = "unity-use-markup";
32const char* QuicklistMenuItem::OVERLAY_MENU_ITEM_PROPERTY = "unity-overlay-item";
3133
32NUX_IMPLEMENT_OBJECT_TYPE(QuicklistMenuItem);34NUX_IMPLEMENT_OBJECT_TYPE(QuicklistMenuItem);
3335
@@ -127,12 +129,16 @@
127129
128void QuicklistMenuItem::Activate() const130void QuicklistMenuItem::Activate() const
129{131{
130 if (!_menu_item)132 if (!_menu_item || !GetSelectable())
131 return;133 return;
132134
133 dbusmenu_menuitem_handle_event(_menu_item, "clicked", nullptr, 0);135 dbusmenu_menuitem_handle_event(_menu_item, "clicked", nullptr, 0);
134 UBusManager manager;136
135 manager.SendMessage(UBUS_PLACE_VIEW_CLOSE_REQUEST);137 if (!IsOverlayQuicklist())
138 {
139 UBusManager manager;
140 manager.SendMessage(UBUS_PLACE_VIEW_CLOSE_REQUEST);
141 }
136}142}
137143
138void QuicklistMenuItem::Select(bool select)144void QuicklistMenuItem::Select(bool select)
@@ -333,7 +339,7 @@
333{339{
334 if (IsMarkupEnabled() != enabled)340 if (IsMarkupEnabled() != enabled)
335 {341 {
336 dbusmenu_menuitem_property_set_bool(_menu_item, "unity-use-markup", enabled);342 dbusmenu_menuitem_property_set_bool(_menu_item, MARKUP_ENABLED_PROPERTY, enabled);
337343
338 _text = "";344 _text = "";
339 InitializeText();345 InitializeText();
@@ -345,10 +351,19 @@
345 if (!_menu_item)351 if (!_menu_item)
346 return false;352 return false;
347353
348 gboolean markup = dbusmenu_menuitem_property_get_bool(_menu_item, "unity-use-markup");354 gboolean markup = dbusmenu_menuitem_property_get_bool(_menu_item, MARKUP_ENABLED_PROPERTY);
349 return (markup != FALSE);355 return (markup != FALSE);
350}356}
351357
358bool QuicklistMenuItem::IsOverlayQuicklist() const
359{
360 if (!_menu_item)
361 return false;
362
363 gboolean overlay = dbusmenu_menuitem_property_get_bool(_menu_item, OVERLAY_MENU_ITEM_PROPERTY);
364 return (overlay != FALSE);
365}
366
352unsigned QuicklistMenuItem::GetCairoSurfaceWidth() const367unsigned QuicklistMenuItem::GetCairoSurfaceWidth() const
353{368{
354 if (!_normalTexture[0])369 if (!_normalTexture[0])
355370
=== modified file 'launcher/QuicklistMenuItem.h'
--- launcher/QuicklistMenuItem.h 2012-08-13 16:20:26 +0000
+++ launcher/QuicklistMenuItem.h 2012-08-13 16:20:26 +0000
@@ -61,6 +61,7 @@
6161
62 void EnableLabelMarkup(bool enabled);62 void EnableLabelMarkup(bool enabled);
63 bool IsMarkupEnabled() const;63 bool IsMarkupEnabled() const;
64 bool IsOverlayQuicklist() const;
6465
65 void Activate() const;66 void Activate() const;
6667
@@ -79,6 +80,9 @@
79 sigc::signal<void, QuicklistMenuItem*, int, int> sigMouseClick;80 sigc::signal<void, QuicklistMenuItem*, int, int> sigMouseClick;
80 sigc::signal<void, QuicklistMenuItem*, int, int> sigMouseDrag;81 sigc::signal<void, QuicklistMenuItem*, int, int> sigMouseDrag;
8182
83 static const char* MARKUP_ENABLED_PROPERTY;
84 static const char* OVERLAY_MENU_ITEM_PROPERTY;
85
82protected:86protected:
83 // Introspection87 // Introspection
84 std::string GetName() const;88 std::string GetName() const;
8589
=== modified file 'tests/CMakeLists.txt'
--- tests/CMakeLists.txt 2012-08-13 16:20:26 +0000
+++ tests/CMakeLists.txt 2012-08-13 16:20:26 +0000
@@ -200,6 +200,7 @@
200 add_executable(test-gtest200 add_executable(test-gtest
201 test_main.cpp201 test_main.cpp
202 test_bamflaunchericon.cpp202 test_bamflaunchericon.cpp
203 test_bfb_launcher_icon.cpp
203 test_dashview_impl.cpp204 test_dashview_impl.cpp
204 test_edge_barrier_controller.cpp205 test_edge_barrier_controller.cpp
205 test_launcher.cpp206 test_launcher.cpp
206207
=== added file 'tests/test_bfb_launcher_icon.cpp'
--- tests/test_bfb_launcher_icon.cpp 1970-01-01 00:00:00 +0000
+++ tests/test_bfb_launcher_icon.cpp 2012-08-13 16:20:26 +0000
@@ -0,0 +1,54 @@
1/*
2 * Copyright 2012 Canonical Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License version 3, as published
6 * by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranties of
10 * MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR
11 * PURPOSE. See the GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * version 3 along with this program. If not, see
15 * <http://www.gnu.org/licenses/>
16 *
17 * Authored by: Marco Trevisan (Treviño) <marco.trevisan@canonical.com>
18 */
19
20#include <gmock/gmock.h>
21
22#include "BFBLauncherIcon.h"
23
24using namespace unity;
25using namespace unity::launcher;
26
27namespace
28{
29
30class MockBFBLauncherIcon : public BFBLauncherIcon
31{
32public:
33 MockBFBLauncherIcon()
34 : BFBLauncherIcon(LauncherHideMode::LAUNCHER_HIDE_NEVER)
35 {}
36
37 std::list<DbusmenuMenuitem*> GetMenus()
38 {
39 return BFBLauncherIcon::GetMenus();
40 }
41};
42
43TEST(TestBFBLauncherIcon, OverlayMenus)
44{
45 MockBFBLauncherIcon bfb;
46
47 for (auto menu_item : bfb.GetMenus())
48 {
49 bool overlay_item = dbusmenu_menuitem_property_get_bool(menu_item, QuicklistMenuItem::OVERLAY_MENU_ITEM_PROPERTY);
50 ASSERT_TRUE(overlay_item);
51 }
52}
53
54}
055
=== modified file 'tests/test_quicklist_menu_item.cpp'
--- tests/test_quicklist_menu_item.cpp 2012-08-13 16:20:26 +0000
+++ tests/test_quicklist_menu_item.cpp 2012-08-13 16:20:26 +0000
@@ -20,12 +20,16 @@
2020
21#include <gmock/gmock.h>21#include <gmock/gmock.h>
22#include <libdbusmenu-glib/client.h>22#include <libdbusmenu-glib/client.h>
23#include <UnityCore/GLibSignal.h>
2324
24#include "QuicklistMenuItem.h"25#include "QuicklistMenuItem.h"
25#include "QuicklistMenuItemCheckmark.h"26#include "QuicklistMenuItemCheckmark.h"
26#include "QuicklistMenuItemLabel.h"27#include "QuicklistMenuItemLabel.h"
27#include "QuicklistMenuItemRadio.h"28#include "QuicklistMenuItemRadio.h"
28#include "QuicklistMenuItemSeparator.h"29#include "QuicklistMenuItemSeparator.h"
30#include "unity-shared/UBusWrapper.h"
31#include "unity-shared/UBusMessages.h"
32#include "test_utils.h"
2933
30using namespace unity;34using namespace unity;
31using namespace testing;35using namespace testing;
@@ -64,7 +68,7 @@
64{68{
65 dbusmenu_menuitem_property_set(item, DBUSMENU_MENUITEM_PROP_LABEL, "A Label");69 dbusmenu_menuitem_property_set(item, DBUSMENU_MENUITEM_PROP_LABEL, "A Label");
66 dbusmenu_menuitem_property_set_bool(item, DBUSMENU_MENUITEM_PROP_ENABLED, true);70 dbusmenu_menuitem_property_set_bool(item, DBUSMENU_MENUITEM_PROP_ENABLED, true);
67 dbusmenu_menuitem_property_set_bool(item, "unity-use-markup", true);71 dbusmenu_menuitem_property_set_bool(item, QuicklistMenuItem::MARKUP_ENABLED_PROPERTY, true);
6872
69 nux::ObjectPtr<QuicklistMenuItemLabel> qlitem(new QuicklistMenuItemLabel(item));73 nux::ObjectPtr<QuicklistMenuItemLabel> qlitem(new QuicklistMenuItemLabel(item));
7074
@@ -104,4 +108,70 @@
104 EXPECT_FALSE(qlitem->GetSelectable());108 EXPECT_FALSE(qlitem->GetSelectable());
105}109}
106110
111TEST_F(TestQuicklistMenuItem, OverlayMenuitem)
112{
113 dbusmenu_menuitem_property_set(item, DBUSMENU_MENUITEM_PROP_LABEL, "Label");
114 dbusmenu_menuitem_property_set_bool(item, DBUSMENU_MENUITEM_PROP_ENABLED, true);
115
116 nux::ObjectPtr<QuicklistMenuItemLabel> qlitem(new QuicklistMenuItemLabel(item));
117
118 EXPECT_FALSE(qlitem->IsOverlayQuicklist());
119
120 dbusmenu_menuitem_property_set_bool(item, QuicklistMenuItem::OVERLAY_MENU_ITEM_PROPERTY, true);
121 EXPECT_TRUE(qlitem->IsOverlayQuicklist());
122}
123
124TEST_F(TestQuicklistMenuItem, ItemActivate)
125{
126 dbusmenu_menuitem_property_set(item, DBUSMENU_MENUITEM_PROP_LABEL, "Label");
127 dbusmenu_menuitem_property_set_bool(item, DBUSMENU_MENUITEM_PROP_ENABLED, true);
128
129 nux::ObjectPtr<QuicklistMenuItemLabel> qlitem(new QuicklistMenuItemLabel(item));
130
131 bool item_activated = false;
132 glib::Signal<void, DbusmenuMenuitem*, int> signal(item, DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED,
133 [&] (DbusmenuMenuitem* menu_item, int time) {
134 EXPECT_EQ(menu_item, item);
135 item_activated = true;
136 });
137
138 qlitem->Activate();
139 EXPECT_TRUE(item_activated);
140}
141
142TEST_F(TestQuicklistMenuItem, ItemActivateClosesDash)
143{
144 dbusmenu_menuitem_property_set(item, DBUSMENU_MENUITEM_PROP_LABEL, "Label");
145 dbusmenu_menuitem_property_set_bool(item, DBUSMENU_MENUITEM_PROP_ENABLED, true);
146
147 nux::ObjectPtr<QuicklistMenuItemLabel> qlitem(new QuicklistMenuItemLabel(item));
148
149 bool closes_dash = false;
150 UBusManager manager;
151 manager.RegisterInterest(UBUS_PLACE_VIEW_CLOSE_REQUEST, [&] (GVariant*) { closes_dash = true; });
152
153 qlitem->Activate();
154 Utils::WaitUntil(closes_dash);
155
156 EXPECT_TRUE(closes_dash);
157}
158
159TEST_F(TestQuicklistMenuItem, OverlayItemActivateDoesNotCloseDash)
160{
161 dbusmenu_menuitem_property_set(item, DBUSMENU_MENUITEM_PROP_LABEL, "Label");
162 dbusmenu_menuitem_property_set_bool(item, DBUSMENU_MENUITEM_PROP_ENABLED, true);
163 dbusmenu_menuitem_property_set_bool(item, QuicklistMenuItem::OVERLAY_MENU_ITEM_PROPERTY, true);
164
165 nux::ObjectPtr<QuicklistMenuItemLabel> qlitem(new QuicklistMenuItemLabel(item));
166
167 bool closes_dash = false;
168 UBusManager manager;
169 manager.RegisterInterest(UBUS_PLACE_VIEW_CLOSE_REQUEST, [&] (GVariant*) { closes_dash = true; });
170
171 qlitem->Activate();
172 Utils::WaitForTimeoutMSec(100);
173
174 EXPECT_FALSE(closes_dash);
175}
176
107}177}