Merge lp:~azzar1/unity/gs-integration into lp:unity
- gs-integration
- Merge into trunk
| Status: | Superseded |
|---|---|
| Proposed branch: | lp:~azzar1/unity/gs-integration |
| Merge into: | lp:unity |
| Diff against target: |
1121 lines (+290/-339) 23 files modified
CMakeLists.txt (+1/-0) com.canonical.Unity.gschema.xml (+1/-1) debian/control (+1/-0) launcher/LauncherController.cpp (+18/-57) launcher/LauncherControllerPrivate.h (+2/-3) launcher/LauncherIcon.cpp (+14/-0) launcher/LauncherIcon.h (+2/-0) launcher/SimpleLauncherIcon.cpp (+27/-8) launcher/SimpleLauncherIcon.h (+2/-0) launcher/SoftwareCenterLauncherIcon.cpp (+4/-108) launcher/SoftwareCenterLauncherIcon.h (+1/-7) tests/data/applications/org.gnome.Software.desktop (+3/-4) tests/test_application_launcher_icon.cpp (+7/-7) tests/test_desktop_utilities.cpp (+3/-3) tests/test_favorite_store.cpp (+1/-1) tests/test_favorite_store_gsettings.cpp (+1/-1) tests/test_launcher_controller.cpp (+1/-33) tests/test_software_center_launcher_icon.cpp (+31/-105) unity-shared/AppStreamApplication.cpp (+104/-0) unity-shared/AppStreamApplication.h (+61/-0) unity-shared/ApplicationManager.h (+3/-0) unity-shared/CMakeLists.txt (+1/-0) unity-shared/DesktopApplicationManager.h (+1/-1) |
| To merge this branch: | bzr merge lp:~azzar1/unity/gs-integration |
| Related bugs: |
| Reviewer | Review Type | Date Requested | Status |
|---|---|---|---|
| Marco Trevisan (Treviño) | 2016-02-19 | Approve on 2016-02-23 | |
| PS Jenkins bot | continuous-integration | Needs Fixing on 2016-02-19 | |
|
Review via email:
|
|||
This proposal has been superseded by a proposal from 2016-02-23.
Commit Message
Gnome-software launcher integration.
Description of the Change
Gnome-software launcher integration.
| Marco Trevisan (Treviño) (3v1n0) wrote : | # |
Add libappstream-
Also, please, ensure that this merges with lp:~robert-ancell/unity/gnome-software
See comments, there might be some room for future optimization.
- 4071. By Andrea Azzarone on 2016-02-23
-
Forward declar GdkPixbuf.
- 4072. By Andrea Azzarone on 2016-02-23
-
Use glib::gchar_
to_string. - 4073. By Andrea Azzarone on 2016-02-23
-
Use lambda functions.
- 4074. By Andrea Azzarone on 2016-02-23
-
Remove unneeded "Remove()"
- 4075. By Andrea Azzarone on 2016-02-23
-
Add libappstream-
glib-dev in debian/control - 4076. By Andrea Azzarone on 2016-02-23
-
Merge with Robert's branch.
| Andrea Azzarone (azzar1) wrote : | # |
Done. We can talk more about the icon stuff later on.
| Marco Trevisan (Treviño) (3v1n0) wrote : | # |
Ok, looks good...
It would be nice if we might also get the application icon path instead of the pixbuf, so please keep looking at this for next improvements.
Unmerged revisions
Preview Diff
| 1 | === modified file 'CMakeLists.txt' |
| 2 | --- CMakeLists.txt 2016-02-09 01:57:51 +0000 |
| 3 | +++ CMakeLists.txt 2016-02-23 15:49:50 +0000 |
| 4 | @@ -228,6 +228,7 @@ |
| 5 | set(UNITY_PROTOCOL_PRIVATE_DEPS unity-protocol-private>=7.1.0) |
| 6 | set(UNITY_PLUGIN_SHARED_DEPS |
| 7 | ${UNITY_PROTOCOL_PRIVATE_DEPS} |
| 8 | + appstream-glib |
| 9 | atk |
| 10 | atk-bridge-2.0 |
| 11 | cairo>=1.13.1 |
| 12 | |
| 13 | === modified file 'com.canonical.Unity.gschema.xml' |
| 14 | --- com.canonical.Unity.gschema.xml 2015-11-23 09:24:10 +0000 |
| 15 | +++ com.canonical.Unity.gschema.xml 2016-02-23 15:49:50 +0000 |
| 16 | @@ -117,7 +117,7 @@ |
| 17 | 'application://libreoffice-writer.desktop', |
| 18 | 'application://libreoffice-calc.desktop', |
| 19 | 'application://libreoffice-impress.desktop', |
| 20 | - 'application://ubuntu-software-center.desktop', |
| 21 | + 'application://org.gnome.Software.desktop', |
| 22 | 'application://ubuntu-amazon-default.desktop', |
| 23 | 'application://unity-control-center.desktop', |
| 24 | 'unity://running-apps', |
| 25 | |
| 26 | === modified file 'debian/control' |
| 27 | --- debian/control 2016-02-09 12:20:47 +0000 |
| 28 | +++ debian/control 2016-02-23 15:49:50 +0000 |
| 29 | @@ -13,6 +13,7 @@ |
| 30 | gsettings-desktop-schemas-dev, |
| 31 | gsettings-ubuntu-schemas (>= 0.0.1+14.04.20140219), |
| 32 | intltool (>= 0.35.0), |
| 33 | + libappstream-glib-dev, |
| 34 | libatk1.0-dev, |
| 35 | libbamf3-dev (>= 0.5.2~bzr0), |
| 36 | libboost-dev, |
| 37 | |
| 38 | === modified file 'launcher/LauncherController.cpp' |
| 39 | --- launcher/LauncherController.cpp 2015-12-17 22:32:37 +0000 |
| 40 | +++ launcher/LauncherController.cpp 2016-02-23 15:49:50 +0000 |
| 41 | @@ -41,6 +41,7 @@ |
| 42 | #include "ExpoLauncherIcon.h" |
| 43 | #include "TrashLauncherIcon.h" |
| 44 | #include "BFBLauncherIcon.h" |
| 45 | +#include "unity-shared/AppStreamApplication.h" |
| 46 | #include "unity-shared/IconRenderer.h" |
| 47 | #include "unity-shared/UScreen.h" |
| 48 | #include "unity-shared/UBusMessages.h" |
| 49 | @@ -61,13 +62,8 @@ |
| 50 | "<node>" |
| 51 | " <interface name='com.canonical.Unity.Launcher'>" |
| 52 | "" |
| 53 | - " <method name='AddLauncherItemFromPosition'>" |
| 54 | - " <arg type='s' name='title' direction='in'/>" |
| 55 | - " <arg type='s' name='icon' direction='in'/>" |
| 56 | - " <arg type='i' name='icon_x' direction='in'/>" |
| 57 | - " <arg type='i' name='icon_y' direction='in'/>" |
| 58 | - " <arg type='i' name='icon_size' direction='in'/>" |
| 59 | - " <arg type='s' name='desktop_file' direction='in'/>" |
| 60 | + " <method name='AddLauncherItem'>" |
| 61 | + " <arg type='s' name='appstream_app_id' direction='in'/>" |
| 62 | " <arg type='s' name='aptdaemon_task' direction='in'/>" |
| 63 | " </method>" |
| 64 | "" |
| 65 | @@ -506,44 +502,25 @@ |
| 66 | } |
| 67 | |
| 68 | void |
| 69 | -Controller::Impl::OnLauncherAddRequestSpecial(std::string const& path, |
| 70 | - std::string const& aptdaemon_trans_id, |
| 71 | - std::string const& icon_path, |
| 72 | - int icon_x, |
| 73 | - int icon_y, |
| 74 | - int icon_size) |
| 75 | +Controller::Impl::OnLauncherAddRequestSpecial(std::string const& appstream_app_id, |
| 76 | + std::string const& aptdaemon_trans_id) |
| 77 | { |
| 78 | - // Check if desktop file was supplied, or if it's set to SC's agent |
| 79 | - // See https://bugs.launchpad.net/unity/+bug/1002440 |
| 80 | - if (path.empty() || path == local::SOFTWARE_CENTER_AGENT) |
| 81 | + // Check if desktop file was supplied |
| 82 | + if (appstream_app_id.empty()) |
| 83 | return; |
| 84 | |
| 85 | auto const& icon = std::find_if(model_->begin(), model_->end(), |
| 86 | - [&path](AbstractLauncherIcon::Ptr const& i) { return (i->DesktopFile() == path); }); |
| 87 | + [&appstream_app_id](AbstractLauncherIcon::Ptr const& i) { return (i->DesktopFile() == appstream_app_id); }); |
| 88 | |
| 89 | if (icon != model_->end()) |
| 90 | return; |
| 91 | |
| 92 | - auto const& result = CreateSCLauncherIcon(path, aptdaemon_trans_id, icon_path); |
| 93 | + auto const& result = CreateSCLauncherIcon(appstream_app_id, aptdaemon_trans_id); |
| 94 | |
| 95 | if (result) |
| 96 | { |
| 97 | - // Setting the icon position and adding it to the model, makes the launcher |
| 98 | - // to compute its center |
| 99 | RegisterIcon(result, GetLastIconPriority<ApplicationLauncherIcon>("", true)); |
| 100 | - |
| 101 | - if (icon_x > 0 || icon_y > 0) |
| 102 | - { |
| 103 | - // This will ensure that the center of the new icon is set, so that |
| 104 | - // the animation could be done properly. |
| 105 | - sources_.AddIdle([this, icon_x, icon_y, result] { |
| 106 | - return !result->Animate(CurrentLauncher(), icon_x, icon_y); |
| 107 | - }); |
| 108 | - } |
| 109 | - else |
| 110 | - { |
| 111 | - result->SetQuirk(AbstractLauncherIcon::Quirk::VISIBLE, true); |
| 112 | - } |
| 113 | + result->SetQuirk(AbstractLauncherIcon::Quirk::VISIBLE, true); |
| 114 | } |
| 115 | } |
| 116 | |
| 117 | @@ -944,22 +921,11 @@ |
| 118 | return AbstractLauncherIcon::Ptr(); |
| 119 | } |
| 120 | |
| 121 | -SoftwareCenterLauncherIcon::Ptr Controller::Impl::CreateSCLauncherIcon(std::string const& file_path, |
| 122 | - std::string const& aptdaemon_trans_id, |
| 123 | - std::string const& icon_path) |
| 124 | +SoftwareCenterLauncherIcon::Ptr Controller::Impl::CreateSCLauncherIcon(std::string const& appstream_app_id, |
| 125 | + std::string const& aptdaemon_trans_id) |
| 126 | { |
| 127 | - SoftwareCenterLauncherIcon::Ptr result; |
| 128 | - |
| 129 | - ApplicationPtr app = ApplicationManager::Default().GetApplicationForDesktopFile(file_path); |
| 130 | - if (!app) |
| 131 | - return result; |
| 132 | - |
| 133 | - if (app->seen) |
| 134 | - return result; |
| 135 | - |
| 136 | - result = new SoftwareCenterLauncherIcon(app, aptdaemon_trans_id, icon_path); |
| 137 | - |
| 138 | - return result; |
| 139 | + ApplicationPtr app = std::make_shared<appstream::Application>(appstream_app_id); |
| 140 | + return SoftwareCenterLauncherIcon::Ptr(new SoftwareCenterLauncherIcon(app, aptdaemon_trans_id)); |
| 141 | } |
| 142 | |
| 143 | void Controller::Impl::AddRunningApps() |
| 144 | @@ -1548,16 +1514,11 @@ |
| 145 | |
| 146 | GVariant* Controller::Impl::OnDBusMethodCall(std::string const& method, GVariant *parameters) |
| 147 | { |
| 148 | - if (method == "AddLauncherItemFromPosition") |
| 149 | + if (method == "AddLauncherItem") |
| 150 | { |
| 151 | - glib::String icon, icon_title, desktop_file, aptdaemon_task; |
| 152 | - gint icon_x, icon_y, icon_size; |
| 153 | - |
| 154 | - g_variant_get(parameters, "(ssiiiss)", &icon_title, &icon, &icon_x, &icon_y, |
| 155 | - &icon_size, &desktop_file, &aptdaemon_task); |
| 156 | - |
| 157 | - OnLauncherAddRequestSpecial(desktop_file.Str(), aptdaemon_task.Str(), |
| 158 | - icon.Str(), icon_x, icon_y, icon_size); |
| 159 | + glib::String appstream_app_id, aptdaemon_trans_id; |
| 160 | + g_variant_get(parameters, "(ss)", &appstream_app_id, &aptdaemon_trans_id); |
| 161 | + OnLauncherAddRequestSpecial(appstream_app_id.Str(), aptdaemon_trans_id.Str()); |
| 162 | } |
| 163 | else if (method == "UpdateLauncherIconFavoriteState") |
| 164 | { |
| 165 | |
| 166 | === modified file 'launcher/LauncherControllerPrivate.h' |
| 167 | --- launcher/LauncherControllerPrivate.h 2015-12-07 18:34:41 +0000 |
| 168 | +++ launcher/LauncherControllerPrivate.h 2016-02-23 15:49:50 +0000 |
| 169 | @@ -69,8 +69,7 @@ |
| 170 | void OnDeviceIconAdded(AbstractLauncherIcon::Ptr const& icon); |
| 171 | |
| 172 | void OnLauncherAddRequest(std::string const& icon_uri, AbstractLauncherIcon::Ptr const& before); |
| 173 | - void OnLauncherAddRequestSpecial(std::string const& path, std::string const& aptdaemon_trans_id, |
| 174 | - std::string const& icon_path, int icon_x, int icon_y, int icon_size); |
| 175 | + void OnLauncherAddRequestSpecial(std::string const& appstream_app_id, std::string const& aptdaemon_trans_id); |
| 176 | void OnLauncherUpdateIconStickyState(std::string const& desktop_file, bool sticky); |
| 177 | void OnLauncherRemoveRequest(AbstractLauncherIcon::Ptr const& icon); |
| 178 | |
| 179 | @@ -90,7 +89,7 @@ |
| 180 | ApplicationLauncherIcon* CreateAppLauncherIcon(ApplicationPtr const&); |
| 181 | AbstractLauncherIcon::Ptr CreateFavoriteIcon(std::string const& icon_uri, bool emit_signal = false); |
| 182 | AbstractLauncherIcon::Ptr GetIconByUri(std::string const& icon_uri); |
| 183 | - SoftwareCenterLauncherIcon::Ptr CreateSCLauncherIcon(std::string const& file_path, std::string const& aptdaemon_trans_id, std::string const& icon_path); |
| 184 | + SoftwareCenterLauncherIcon::Ptr CreateSCLauncherIcon(std::string const& appstream_app_id, std::string const& aptdaemon_trans_id); |
| 185 | |
| 186 | void SetupIcons(); |
| 187 | void MigrateFavorites(); |
| 188 | |
| 189 | === modified file 'launcher/LauncherIcon.cpp' |
| 190 | --- launcher/LauncherIcon.cpp 2015-11-25 23:16:11 +0000 |
| 191 | +++ launcher/LauncherIcon.cpp 2016-02-23 15:49:50 +0000 |
| 192 | @@ -365,6 +365,20 @@ |
| 193 | return _unity_theme; |
| 194 | } |
| 195 | |
| 196 | +BaseTexturePtr LauncherIcon::TextureFromPixbuf(GdkPixbuf* pixbuf, int size, bool update_glow_colors) |
| 197 | +{ |
| 198 | + g_return_val_if_fail(GDK_IS_PIXBUF(pixbuf), BaseTexturePtr()); |
| 199 | + |
| 200 | + glib::Object<GdkPixbuf> scaled_pixbuf(gdk_pixbuf_scale_simple(pixbuf, size, size, GDK_INTERP_BILINEAR)); |
| 201 | + |
| 202 | + if (update_glow_colors) |
| 203 | + ColorForIcon(scaled_pixbuf, _background_color, _glow_color); |
| 204 | + |
| 205 | + BaseTexturePtr result; |
| 206 | + result.Adopt(nux::CreateTexture2DFromPixbuf(scaled_pixbuf, true)); |
| 207 | + return result; |
| 208 | +} |
| 209 | + |
| 210 | BaseTexturePtr LauncherIcon::TextureFromGtkTheme(std::string icon_name, int size, bool update_glow_colors) |
| 211 | { |
| 212 | GtkIconTheme* default_theme; |
| 213 | |
| 214 | === modified file 'launcher/LauncherIcon.h' |
| 215 | --- launcher/LauncherIcon.h 2015-11-25 23:16:11 +0000 |
| 216 | +++ launcher/LauncherIcon.h 2016-02-23 15:49:50 +0000 |
| 217 | @@ -269,6 +269,8 @@ |
| 218 | |
| 219 | virtual bool HandlesSpread () { return false; } |
| 220 | |
| 221 | + BaseTexturePtr TextureFromPixbuf(GdkPixbuf *pixbuf, int size, bool update_glow_colors = true); |
| 222 | + |
| 223 | BaseTexturePtr TextureFromGtkTheme(std::string name, int size, bool update_glow_colors = true); |
| 224 | |
| 225 | BaseTexturePtr TextureFromSpecificGtkTheme(GtkIconTheme* theme, std::string const& name, int size, bool update_glow_colors = true, bool is_default_theme = false); |
| 226 | |
| 227 | === modified file 'launcher/SimpleLauncherIcon.cpp' |
| 228 | --- launcher/SimpleLauncherIcon.cpp 2014-07-30 00:49:35 +0000 |
| 229 | +++ launcher/SimpleLauncherIcon.cpp 2016-02-23 15:49:50 +0000 |
| 230 | @@ -34,6 +34,7 @@ |
| 231 | SimpleLauncherIcon::SimpleLauncherIcon(IconType type) |
| 232 | : LauncherIcon(type) |
| 233 | , icon_name("", sigc::mem_fun(this, &SimpleLauncherIcon::SetIconName)) |
| 234 | + , icon_pixbuf(glib::Object<GdkPixbuf>(), sigc::mem_fun(this, &SimpleLauncherIcon::SetIconPixbuf)) |
| 235 | { |
| 236 | auto* theme = gtk_icon_theme_get_default(); |
| 237 | theme_changed_signal_.Connect(theme, "changed", [this] (GtkIconTheme *) { |
| 238 | @@ -53,17 +54,24 @@ |
| 239 | if (it != texture_map_.end()) |
| 240 | return it->second.GetPointer(); |
| 241 | |
| 242 | - std::string const& icon_string = icon_name(); |
| 243 | - |
| 244 | - if (icon_string.empty()) |
| 245 | - return nullptr; |
| 246 | - |
| 247 | BaseTexturePtr texture; |
| 248 | |
| 249 | - if (icon_string[0] == '/') |
| 250 | - texture = TextureFromPath(icon_string, size); |
| 251 | + if (icon_pixbuf()) |
| 252 | + { |
| 253 | + texture = TextureFromPixbuf(icon_pixbuf(), size); |
| 254 | + } |
| 255 | else |
| 256 | - texture = TextureFromGtkTheme(icon_string, size); |
| 257 | + { |
| 258 | + std::string const& icon_string = icon_name(); |
| 259 | + |
| 260 | + if (icon_string.empty()) |
| 261 | + return nullptr; |
| 262 | + |
| 263 | + if (icon_string[0] == '/') |
| 264 | + texture = TextureFromPath(icon_string, size); |
| 265 | + else |
| 266 | + texture = TextureFromGtkTheme(icon_string, size); |
| 267 | + } |
| 268 | |
| 269 | if (!texture) |
| 270 | return nullptr; |
| 271 | @@ -83,6 +91,17 @@ |
| 272 | return true; |
| 273 | } |
| 274 | |
| 275 | +bool SimpleLauncherIcon::SetIconPixbuf(glib::Object<GdkPixbuf>& target, glib::Object<GdkPixbuf> const& value) |
| 276 | +{ |
| 277 | + if (target == value) |
| 278 | + return false; |
| 279 | + |
| 280 | + target = value; |
| 281 | + ReloadIcon(); |
| 282 | + |
| 283 | + return true; |
| 284 | +} |
| 285 | + |
| 286 | void SimpleLauncherIcon::ReloadIcon() |
| 287 | { |
| 288 | texture_map_.clear(); |
| 289 | |
| 290 | === modified file 'launcher/SimpleLauncherIcon.h' |
| 291 | --- launcher/SimpleLauncherIcon.h 2013-09-19 16:44:03 +0000 |
| 292 | +++ launcher/SimpleLauncherIcon.h 2016-02-23 15:49:50 +0000 |
| 293 | @@ -38,6 +38,7 @@ |
| 294 | |
| 295 | // Properties |
| 296 | nux::Property<std::string> icon_name; |
| 297 | + nux::Property<glib::Object<GdkPixbuf>> icon_pixbuf; |
| 298 | |
| 299 | protected: |
| 300 | std::string GetName() const; |
| 301 | @@ -49,6 +50,7 @@ |
| 302 | private: |
| 303 | void ReloadIcon(); |
| 304 | bool SetIconName(std::string& target, std::string const& value); |
| 305 | + bool SetIconPixbuf(glib::Object<GdkPixbuf>& target, glib::Object<GdkPixbuf> const& value); |
| 306 | |
| 307 | private: |
| 308 | std::unordered_map<int, BaseTexturePtr> texture_map_; |
| 309 | |
| 310 | === modified file 'launcher/SoftwareCenterLauncherIcon.cpp' |
| 311 | --- launcher/SoftwareCenterLauncherIcon.cpp 2015-12-07 16:13:42 +0000 |
| 312 | +++ launcher/SoftwareCenterLauncherIcon.cpp 2016-02-23 15:49:50 +0000 |
| 313 | @@ -44,8 +44,7 @@ |
| 314 | |
| 315 | NUX_IMPLEMENT_OBJECT_TYPE(SoftwareCenterLauncherIcon); |
| 316 | SoftwareCenterLauncherIcon::SoftwareCenterLauncherIcon(ApplicationPtr const& app, |
| 317 | - std::string const& aptdaemon_trans_id, |
| 318 | - std::string const& icon_path) |
| 319 | + std::string const& aptdaemon_trans_id) |
| 320 | : WindowedLauncherIcon(IconType::APPLICATION) |
| 321 | , ApplicationLauncherIcon(app) |
| 322 | , aptdaemon_trans_(std::make_shared<glib::DBusProxy>("org.debian.apt", |
| 323 | @@ -69,61 +68,13 @@ |
| 324 | SetQuirk(Quirk::PROGRESS, (progress > 0)); |
| 325 | }); |
| 326 | |
| 327 | - if (!icon_path.empty()) |
| 328 | - icon_name = icon_path; |
| 329 | + if (app->icon_pixbuf()) |
| 330 | + icon_pixbuf = app->icon_pixbuf(); |
| 331 | |
| 332 | if (!aptdaemon_trans_id_.empty()) // Application is being installed, or hasn't been installed yet |
| 333 | tooltip_text = _("Waiting to install"); |
| 334 | } |
| 335 | |
| 336 | -bool SoftwareCenterLauncherIcon::Animate(nux::ObjectPtr<Launcher> const& launcher, int start_x, int start_y) |
| 337 | -{ |
| 338 | - using namespace std::placeholders; |
| 339 | - |
| 340 | - if (start_x <= 0 && start_y <= 0) |
| 341 | - { |
| 342 | - SetQuirk(Quirk::VISIBLE, true); |
| 343 | - return true; |
| 344 | - } |
| 345 | - |
| 346 | - int monitor = launcher->monitor(); |
| 347 | - auto const& icon_center = GetCenter(monitor); |
| 348 | - |
| 349 | - if (icon_center.x == 0 && icon_center.y == 0) |
| 350 | - return false; |
| 351 | - |
| 352 | - auto* floating_icon = new SimpleLauncherIcon(GetIconType()); |
| 353 | - AbstractLauncherIcon::Ptr floating_icon_ptr(floating_icon); |
| 354 | - floating_icon->icon_name = icon_name(); |
| 355 | - |
| 356 | - // Transform this in a spacer-icon and make it visible only on launcher's monitor |
| 357 | - icon_name = ""; |
| 358 | - SetQuirk(Quirk::VISIBLE, true, monitor); |
| 359 | - |
| 360 | - auto rcb = std::bind(&Launcher::RenderIconToTexture, launcher.GetPointer(), _1, _2, floating_icon_ptr); |
| 361 | - drag_window_ = new LauncherDragWindow(launcher->GetWidth(), rcb); |
| 362 | - drag_window_->SetBaseXY(start_x, start_y); |
| 363 | - drag_window_->SetAnimationTarget(icon_center.x, icon_center.y + (launcher->GetIconSize() / 2)); |
| 364 | - |
| 365 | - launcher->ForceReveal(true); |
| 366 | - drag_window_->ShowWindow(true); |
| 367 | - |
| 368 | - auto cb = sigc::bind(sigc::mem_fun(this, &SoftwareCenterLauncherIcon::OnDragAnimationFinished), launcher, floating_icon->icon_name()); |
| 369 | - drag_window_->anim_completed.connect(cb); |
| 370 | - drag_window_->StartSlowAnimation(); |
| 371 | - |
| 372 | - return true; |
| 373 | -} |
| 374 | - |
| 375 | -void SoftwareCenterLauncherIcon::OnDragAnimationFinished(nux::ObjectPtr<Launcher> const& launcher, std::string const& final_icon) |
| 376 | -{ |
| 377 | - icon_name = final_icon; |
| 378 | - drag_window_->ShowWindow(false); |
| 379 | - drag_window_.Release(); |
| 380 | - launcher->ForceReveal(false); |
| 381 | - SetQuirk(Quirk::VISIBLE, true); |
| 382 | -} |
| 383 | - |
| 384 | void SoftwareCenterLauncherIcon::ActivateLauncherIcon(ActionArg arg) |
| 385 | { |
| 386 | if (finished_) |
| 387 | @@ -144,62 +95,7 @@ |
| 388 | |
| 389 | std::string SoftwareCenterLauncherIcon::GetActualDesktopFileAfterInstall() |
| 390 | { |
| 391 | - // Fixup the _desktop_file because the one we get from software-center |
| 392 | - // is not the final one, e.g. the s-c-agent does send a temp one and |
| 393 | - // app-install-data points to the "wrong" one in /usr/share/app-install |
| 394 | - // |
| 395 | - // So: |
| 396 | - // - if there is a desktop file already and it startswith |
| 397 | - // /usr/share/app-install/desktop, then transform to |
| 398 | - // /usr/share/application |
| 399 | - // - if there is a desktop file with prefix /tmp/software-center-agent: |
| 400 | - // transform to /usr/share/application |
| 401 | - // (its using "/tmp/software-center-agent:$random:$pkgname.desktop") |
| 402 | - // maybe: |
| 403 | - // - and search in /var/lib/apt/lists/$pkgname.list |
| 404 | - // for a desktop file that roughly matches what we want |
| 405 | - auto const& desktop_file = DesktopFile(); |
| 406 | - |
| 407 | - // take /usr/share/app-install/desktop/foo:subdir__bar.desktop |
| 408 | - // and tranform it |
| 409 | - if (desktop_file.find("/share/app-install/desktop/") != std::string::npos) |
| 410 | - { |
| 411 | - auto colon_pos = desktop_file.rfind(":"); |
| 412 | - auto filename = desktop_file.substr(colon_pos + 1, desktop_file.length() - colon_pos); |
| 413 | - // the app-install-data package encodes subdirs in a funny way, once |
| 414 | - // that is fixed, this code can be dropped |
| 415 | - if (filename.find("__") != std::string::npos) |
| 416 | - { |
| 417 | - int pos = filename.find("__"); |
| 418 | - filename = filename.replace(pos, 2, "-"); |
| 419 | - } |
| 420 | - filename = DesktopUtilities::GetDesktopPathById(filename); |
| 421 | - return filename; |
| 422 | - } |
| 423 | - else if (desktop_file.find("/tmp/software-center-agent:") == 0) |
| 424 | - { |
| 425 | - // by convention the software-center-agent uses |
| 426 | - // /usr/share/applications/$pkgname.desktop |
| 427 | - // or |
| 428 | - // /usr/share/applications/extras-$pkgname.desktop |
| 429 | - auto colon_pos = desktop_file.rfind(":"); |
| 430 | - auto desktopf = desktop_file.substr(colon_pos + 1, desktop_file.length() - colon_pos); |
| 431 | - |
| 432 | - auto filename = DesktopUtilities::GetDesktopPathById(desktopf); |
| 433 | - |
| 434 | - if (!filename.empty()) |
| 435 | - return filename; |
| 436 | - |
| 437 | - // now try extras-$pkgname.desktop |
| 438 | - filename = DesktopUtilities::GetDesktopPathById("extras-" + desktopf); |
| 439 | - if (!filename.empty()) |
| 440 | - return filename; |
| 441 | - |
| 442 | - // FIXME: test if there is a file now and if not, search |
| 443 | - // /var/lib/dpkg/info/$pkgname.list for a desktop file |
| 444 | - } |
| 445 | - |
| 446 | - return desktop_file; |
| 447 | + return DesktopUtilities::GetDesktopPathById(DesktopFile()); |
| 448 | } |
| 449 | |
| 450 | void SoftwareCenterLauncherIcon::OnFinished(GVariant *params) |
| 451 | |
| 452 | === modified file 'launcher/SoftwareCenterLauncherIcon.h' |
| 453 | --- launcher/SoftwareCenterLauncherIcon.h 2013-08-28 16:41:20 +0000 |
| 454 | +++ launcher/SoftwareCenterLauncherIcon.h 2016-02-23 15:49:50 +0000 |
| 455 | @@ -24,7 +24,6 @@ |
| 456 | #include <string> |
| 457 | #include <UnityCore/GLibDBusProxy.h> |
| 458 | #include "ApplicationLauncherIcon.h" |
| 459 | -#include "LauncherDragWindow.h" |
| 460 | |
| 461 | namespace unity |
| 462 | { |
| 463 | @@ -39,10 +38,7 @@ |
| 464 | typedef nux::ObjectPtr<SoftwareCenterLauncherIcon> Ptr; |
| 465 | |
| 466 | SoftwareCenterLauncherIcon(ApplicationPtr const& app, |
| 467 | - std::string const& aptdaemon_trans_id, |
| 468 | - std::string const& icon_path); |
| 469 | - |
| 470 | - bool Animate(nux::ObjectPtr<Launcher> const& launcher, int start_x, int start_y); |
| 471 | + std::string const& aptdaemon_trans_id); |
| 472 | |
| 473 | protected: |
| 474 | std::string GetName() const; |
| 475 | @@ -52,10 +48,8 @@ |
| 476 | std::string GetActualDesktopFileAfterInstall(); |
| 477 | void OnFinished(GVariant *params); |
| 478 | void OnPropertyChanged(GVariant* params); |
| 479 | - void OnDragAnimationFinished(nux::ObjectPtr<Launcher> const&, std::string const&); |
| 480 | |
| 481 | glib::DBusProxy::Ptr aptdaemon_trans_; |
| 482 | - LauncherDragWindow::Ptr drag_window_; |
| 483 | bool finished_; |
| 484 | bool needs_urgent_; |
| 485 | std::string aptdaemon_trans_id_; |
| 486 | |
| 487 | === renamed file 'tests/data/applications/ubuntu-software-center.desktop' => 'tests/data/applications/org.gnome.Software.desktop' |
| 488 | --- tests/data/applications/ubuntu-software-center.desktop 2013-06-28 12:52:58 +0000 |
| 489 | +++ tests/data/applications/org.gnome.Software.desktop 2016-02-23 15:49:50 +0000 |
| 490 | @@ -1,9 +1,8 @@ |
| 491 | [Desktop Entry] |
| 492 | -Name=Ubuntu Software Center |
| 493 | -GenericName=Software Center |
| 494 | -Comment=Lets you choose from thousands of applications available for Ubuntu |
| 495 | +Name=Software |
| 496 | +Comment=Add, remove or update software on this computer |
| 497 | Exec=/bin/true |
| 498 | -Icon=softwarecenter |
| 499 | +Icon=org.gnome.Software |
| 500 | Terminal=false |
| 501 | Type=Application |
| 502 | Categories=PackageManager;GTK;System;Settings; |
| 503 | |
| 504 | === modified file 'tests/test_application_launcher_icon.cpp' |
| 505 | --- tests/test_application_launcher_icon.cpp 2015-12-08 14:34:55 +0000 |
| 506 | +++ tests/test_application_launcher_icon.cpp 2016-02-23 15:49:50 +0000 |
| 507 | @@ -41,7 +41,7 @@ |
| 508 | namespace |
| 509 | { |
| 510 | const std::string DEFAULT_EMPTY_ICON = "application-default-icon"; |
| 511 | -const std::string USC_DESKTOP = BUILDDIR"/tests/data/applications/ubuntu-software-center.desktop"; |
| 512 | +const std::string GS_DESKTOP = BUILDDIR"/tests/data/applications/org.gnome.Software.desktop"; |
| 513 | const std::string UM_DESKTOP = BUILDDIR"/tests/data/applications/update-manager.desktop"; |
| 514 | const std::string NO_ICON_DESKTOP = BUILDDIR"/tests/data/applications/no-icon.desktop"; |
| 515 | |
| 516 | @@ -93,9 +93,9 @@ |
| 517 | |
| 518 | virtual void SetUp() override |
| 519 | { |
| 520 | - usc_app = std::make_shared<MockApplication::Nice>(USC_DESKTOP, "softwarecenter"); |
| 521 | + usc_app = std::make_shared<MockApplication::Nice>(GS_DESKTOP, "org.gnome.Software"); |
| 522 | usc_icon = new MockApplicationLauncherIcon(usc_app); |
| 523 | - ASSERT_EQ(usc_icon->DesktopFile(), USC_DESKTOP); |
| 524 | + ASSERT_EQ(usc_icon->DesktopFile(), GS_DESKTOP); |
| 525 | |
| 526 | empty_app = std::make_shared<MockApplication::Nice>(NO_ICON_DESKTOP); |
| 527 | empty_icon = new MockApplicationLauncherIcon(empty_app); |
| 528 | @@ -175,7 +175,7 @@ |
| 529 | |
| 530 | TEST_F(TestApplicationLauncherIcon, ApplicationSignalDisconnection) |
| 531 | { |
| 532 | - std::shared_ptr<MockApplication> app = std::make_shared<MockApplication::Nice>(USC_DESKTOP); |
| 533 | + std::shared_ptr<MockApplication> app = std::make_shared<MockApplication::Nice>(GS_DESKTOP); |
| 534 | { |
| 535 | MockApplicationLauncherIcon::Ptr icon(new MockApplicationLauncherIcon(app)); |
| 536 | EXPECT_FALSE(app->closed.empty()); |
| 537 | @@ -201,7 +201,7 @@ |
| 538 | |
| 539 | TEST_F(TestApplicationLauncherIcon, TestDefaultIcon) |
| 540 | { |
| 541 | - EXPECT_EQ(usc_icon->icon_name(), "softwarecenter"); |
| 542 | + EXPECT_EQ(usc_icon->icon_name(), "org.gnome.Software"); |
| 543 | EXPECT_EQ(empty_icon->icon_name(), DEFAULT_EMPTY_ICON); |
| 544 | EXPECT_EQ(mock_icon->icon_name(), DEFAULT_EMPTY_ICON); |
| 545 | } |
| 546 | @@ -267,7 +267,7 @@ |
| 547 | |
| 548 | TEST_F(TestApplicationLauncherIcon, StickStickedDesktopApp) |
| 549 | { |
| 550 | - auto app = std::make_shared<MockApplication::Nice>(USC_DESKTOP); |
| 551 | + auto app = std::make_shared<MockApplication::Nice>(GS_DESKTOP); |
| 552 | app->sticky = true; |
| 553 | app->desktop_file_ = UM_DESKTOP; |
| 554 | MockApplicationLauncherIcon::Ptr icon(new MockApplicationLauncherIcon(app)); |
| 555 | @@ -542,7 +542,7 @@ |
| 556 | |
| 557 | TEST_F(TestApplicationLauncherIcon, RemoteUri) |
| 558 | { |
| 559 | - EXPECT_EQ(usc_icon->RemoteUri(), FavoriteStore::URI_PREFIX_APP + USC_DESKTOP); |
| 560 | + EXPECT_EQ(usc_icon->RemoteUri(), FavoriteStore::URI_PREFIX_APP + GS_DESKTOP); |
| 561 | EXPECT_TRUE(mock_icon->RemoteUri().empty()); |
| 562 | } |
| 563 | |
| 564 | |
| 565 | === modified file 'tests/test_desktop_utilities.cpp' |
| 566 | --- tests/test_desktop_utilities.cpp 2013-03-21 14:01:06 +0000 |
| 567 | +++ tests/test_desktop_utilities.cpp 2016-02-23 15:49:50 +0000 |
| 568 | @@ -184,17 +184,17 @@ |
| 569 | g_setenv("XDG_DATA_DIRS", LOCAL_DATA_DIR.c_str(), TRUE); |
| 570 | g_setenv("XDG_DATA_HOME", "UnityUserConfig", TRUE); |
| 571 | |
| 572 | - std::string const& file = DesktopUtilities::GetDesktopPathById("ubuntu-software-center.desktop"); |
| 573 | + std::string const& file = DesktopUtilities::GetDesktopPathById("org.gnome.Software.desktop"); |
| 574 | |
| 575 | g_setenv("XDG_DATA_DIRS", old_dirs.c_str(), TRUE); |
| 576 | g_setenv("XDG_DATA_HOME", old_dirs.c_str(), TRUE); |
| 577 | |
| 578 | - EXPECT_EQ(file, LOCAL_DATA_DIR + "/applications/ubuntu-software-center.desktop"); |
| 579 | + EXPECT_EQ(file, LOCAL_DATA_DIR + "/applications/org.gnome.Software.desktop"); |
| 580 | } |
| 581 | |
| 582 | TEST(TestDesktopUtilities, TestGetBackgroundColor) |
| 583 | { |
| 584 | - std::string const& color = DesktopUtilities::GetBackgroundColor(LOCAL_DATA_DIR+"/applications/ubuntu-software-center.desktop"); |
| 585 | + std::string const& color = DesktopUtilities::GetBackgroundColor(LOCAL_DATA_DIR+"/applications/org.gnome.Software.desktop"); |
| 586 | |
| 587 | EXPECT_EQ(color, "#aabbcc"); |
| 588 | } |
| 589 | |
| 590 | === modified file 'tests/test_favorite_store.cpp' |
| 591 | --- tests/test_favorite_store.cpp 2012-09-18 15:47:49 +0000 |
| 592 | +++ tests/test_favorite_store.cpp 2016-02-23 15:49:50 +0000 |
| 593 | @@ -87,7 +87,7 @@ |
| 594 | |
| 595 | TEST_F(TestFavoriteStore, ParseFavoriteFromUri) |
| 596 | { |
| 597 | - const std::string VALID_DESKTOP_PATH = BUILDDIR"/tests/data/applications/ubuntu-software-center.desktop"; |
| 598 | + const std::string VALID_DESKTOP_PATH = BUILDDIR"/tests/data/applications/org.gnome.Software.desktop"; |
| 599 | EXPECT_EQ(favorite_store.ParseFavoriteFromUri("file.desktop"), "application://file.desktop"); |
| 600 | EXPECT_EQ(favorite_store.ParseFavoriteFromUri(VALID_DESKTOP_PATH), "application://"+VALID_DESKTOP_PATH); |
| 601 | |
| 602 | |
| 603 | === modified file 'tests/test_favorite_store_gsettings.cpp' |
| 604 | --- tests/test_favorite_store_gsettings.cpp 2014-03-21 03:42:28 +0000 |
| 605 | +++ tests/test_favorite_store_gsettings.cpp 2016-02-23 15:49:50 +0000 |
| 606 | @@ -38,7 +38,7 @@ |
| 607 | const gchar* SETTINGS_KEY = "favorites"; |
| 608 | |
| 609 | const char* base_store_favs[] = { BUILDDIR"/tests/data/applications/ubuntuone-installer.desktop", |
| 610 | - "file://" BUILDDIR "/tests/data/applications/ubuntu-software-center.desktop", |
| 611 | + "file://" BUILDDIR "/tests/data/applications/org.gnome.Software.desktop", |
| 612 | "application://" BUILDDIR "/tests/data/applications/update-manager.desktop", |
| 613 | "unity://test-icon", |
| 614 | "device://uuid", |
| 615 | |
| 616 | === modified file 'tests/test_launcher_controller.cpp' |
| 617 | --- tests/test_launcher_controller.cpp 2015-12-08 14:34:55 +0000 |
| 618 | +++ tests/test_launcher_controller.cpp 2016-02-23 15:49:50 +0000 |
| 619 | @@ -61,7 +61,7 @@ |
| 620 | namespace app |
| 621 | { |
| 622 | const std::string UBUNTU_ONE = BUILDDIR "/tests/data/applications/ubuntuone-installer.desktop"; |
| 623 | - const std::string SW_CENTER = BUILDDIR "/tests/data/applications/ubuntu-software-center.desktop"; |
| 624 | + const std::string SW_CENTER = BUILDDIR "/tests/data/applications/org.gnome.Software.desktop"; |
| 625 | const std::string UPDATE_MANAGER = BUILDDIR "/tests/data/applications/update-manager.desktop"; |
| 626 | const std::string BZR_HANDLE_PATCH = BUILDDIR "/tests/data/applications/bzr-handle-patch.desktop"; |
| 627 | const std::string NO_ICON = BUILDDIR "/tests/data/applications/no-icon.desktop"; |
| 628 | @@ -1321,38 +1321,6 @@ |
| 629 | lc.launcher().remove_request.emit(device_icon); |
| 630 | } |
| 631 | |
| 632 | -TEST_F(TestLauncherController, LauncherAddRequestSpecial) |
| 633 | -{ |
| 634 | - std::string desktop = app::BZR_HANDLE_PATCH; |
| 635 | - std::string icon_uri = FavoriteStore::URI_PREFIX_APP + desktop; |
| 636 | - ASSERT_FALSE(lc.Impl()->GetIconByUri(icon_uri).IsValid()); |
| 637 | - EXPECT_CALL(*unity_app_, LogEvent(_, _)).Times(0); |
| 638 | - |
| 639 | - lc.Impl()->OnLauncherAddRequestSpecial(desktop, "", "", 0, 0, 32); |
| 640 | - |
| 641 | - auto const& sw_center_icon = lc.Impl()->GetIconByUri(icon_uri); |
| 642 | - ASSERT_TRUE(sw_center_icon.IsValid()); |
| 643 | - EXPECT_TRUE(sw_center_icon->IsSticky()); |
| 644 | - EXPECT_NE(dynamic_cast<SoftwareCenterLauncherIcon*>(sw_center_icon.GetPointer()), nullptr); |
| 645 | -} |
| 646 | - |
| 647 | -TEST_F(TestLauncherController, LauncherAddRequestSpecialIgnored) |
| 648 | -{ |
| 649 | - std::string desktop = app::BZR_HANDLE_PATCH; |
| 650 | - std::string icon_uri = FavoriteStore::URI_PREFIX_APP + desktop; |
| 651 | - |
| 652 | - MockApplicationLauncherIcon::Ptr bamf_icon(new MockApplicationLauncherIcon::Nice(desktop)); |
| 653 | - lc.Impl()->RegisterIcon(bamf_icon, std::numeric_limits<int>::max()); |
| 654 | - ASSERT_TRUE(lc.Impl()->GetIconByUri(icon_uri).IsValid()); |
| 655 | - |
| 656 | - EXPECT_CALL(*bamf_icon, Stick(false)).Times(0); |
| 657 | - |
| 658 | - int previous_model_size = lc.Impl()->model_->Size(); |
| 659 | - lc.Impl()->OnLauncherAddRequestSpecial(desktop, "", "", 0, 0, 32); |
| 660 | - |
| 661 | - EXPECT_EQ(previous_model_size, lc.Impl()->model_->Size()); |
| 662 | -} |
| 663 | - |
| 664 | TEST_F(TestLauncherController, SaveIconsOrder) |
| 665 | { |
| 666 | favorite_store.ClearFavorites(); |
| 667 | |
| 668 | === modified file 'tests/test_software_center_launcher_icon.cpp' |
| 669 | --- tests/test_software_center_launcher_icon.cpp 2015-12-08 14:34:55 +0000 |
| 670 | +++ tests/test_software_center_launcher_icon.cpp 2016-02-23 15:49:50 +0000 |
| 671 | @@ -42,28 +42,26 @@ |
| 672 | { |
| 673 | namespace |
| 674 | { |
| 675 | -const std::string PRE_INSTALL_ICON = "sw-center-launcher-icon"; |
| 676 | -const std::string FINAL_ICON = "softwarecenter"; |
| 677 | -const std::string APP_NAME = "Ubuntu Software Center"; |
| 678 | +const std::string FINAL_ICON = "org.gnome.Software"; |
| 679 | +const std::string APP_NAME = "Software"; |
| 680 | const std::string LOCAL_DATA_DIR = BUILDDIR"/tests/data"; |
| 681 | -const std::string USC_DESKTOP = LOCAL_DATA_DIR+"/applications/ubuntu-software-center.desktop"; |
| 682 | -const std::string USC_APP_INSTALL_DESKTOP = "/usr/share/app-install/desktop/software-center:ubuntu-software-center.desktop"; |
| 683 | +const std::string GS_DESKTOP = LOCAL_DATA_DIR+"/applications/org.gnome.Software.desktop"; |
| 684 | +const std::string GS_APP_INSTALL_DESKTOP = "org.gnome.Software.desktop"; |
| 685 | } |
| 686 | |
| 687 | struct TestSoftwareCenterLauncherIcon : testmocks::TestUnityAppBase |
| 688 | { |
| 689 | TestSoftwareCenterLauncherIcon() |
| 690 | - : usc(std::make_shared<MockApplication::Nice>(USC_APP_INSTALL_DESKTOP, FINAL_ICON, APP_NAME)) |
| 691 | - , icon(usc, "/com/canonical/unity/test/object/path", PRE_INSTALL_ICON) |
| 692 | + : gs(std::make_shared<MockApplication::Nice>(GS_APP_INSTALL_DESKTOP, FINAL_ICON, APP_NAME)) |
| 693 | + , icon(gs, "/com/canonical/unity/test/object/path") |
| 694 | {} |
| 695 | |
| 696 | struct MockSoftwareCenterLauncherIcon : SoftwareCenterLauncherIcon |
| 697 | { |
| 698 | MockSoftwareCenterLauncherIcon(ApplicationPtr const& app, |
| 699 | - std::string const& aptdaemon_trans_id, |
| 700 | - std::string const& icon_path) |
| 701 | + std::string const& aptdaemon_trans_id) |
| 702 | : WindowedLauncherIcon(IconType::APPLICATION) |
| 703 | - , SoftwareCenterLauncherIcon(app, aptdaemon_trans_id, icon_path) |
| 704 | + , SoftwareCenterLauncherIcon(app, aptdaemon_trans_id) |
| 705 | {} |
| 706 | |
| 707 | void LauncherIconUnstick() { LauncherIcon::UnStick(); } |
| 708 | @@ -71,7 +69,6 @@ |
| 709 | using SoftwareCenterLauncherIcon::GetActualDesktopFileAfterInstall; |
| 710 | using SoftwareCenterLauncherIcon::OnFinished; |
| 711 | using SoftwareCenterLauncherIcon::OnPropertyChanged; |
| 712 | - using SoftwareCenterLauncherIcon::drag_window_; |
| 713 | using LauncherIcon::GetRemoteUri; |
| 714 | }; |
| 715 | |
| 716 | @@ -86,7 +83,7 @@ |
| 717 | |
| 718 | panel::Style panel; |
| 719 | nux::ObjectPtr<MockableBaseWindow> launcher_win; |
| 720 | - MockApplication::Ptr usc; |
| 721 | + MockApplication::Ptr gs; |
| 722 | MockSoftwareCenterLauncherIcon icon; |
| 723 | }; |
| 724 | |
| 725 | @@ -94,75 +91,54 @@ |
| 726 | { |
| 727 | EXPECT_FALSE(icon.IsVisible()); |
| 728 | EXPECT_TRUE(icon.IsSticky()); |
| 729 | - EXPECT_EQ(AbstractLauncherIcon::Position::FLOATING, icon.position()); |
| 730 | EXPECT_EQ("Waiting to install", icon.tooltip_text()); |
| 731 | - EXPECT_EQ(PRE_INSTALL_ICON, icon.icon_name()); |
| 732 | } |
| 733 | |
| 734 | TEST_F(TestSoftwareCenterLauncherIcon, DesktopFileTransformTrivial) |
| 735 | { |
| 736 | // no transformation needed |
| 737 | - usc->desktop_file_ = USC_DESKTOP; |
| 738 | - EXPECT_EQ(icon.GetActualDesktopFileAfterInstall(), USC_DESKTOP); |
| 739 | -} |
| 740 | - |
| 741 | -TEST_F(TestSoftwareCenterLauncherIcon, DesktopFileTransformAppInstall) |
| 742 | -{ |
| 743 | - // ensure that tranformation from app-install data desktop files works |
| 744 | - usc->desktop_file_ = "/usr/share/app-install/desktop/pkgname:kde4__afile.desktop"; |
| 745 | - EXPECT_EQ(icon.GetActualDesktopFileAfterInstall(), |
| 746 | - LOCAL_DATA_DIR+"/applications/kde4/afile.desktop"); |
| 747 | -} |
| 748 | - |
| 749 | -TEST_F(TestSoftwareCenterLauncherIcon, DesktopFileTransformSCAgent) |
| 750 | -{ |
| 751 | - // now simualte data coming from the sc-agent |
| 752 | - usc->desktop_file_ = "/tmp/software-center-agent:VP2W9M:ubuntu-software-center.desktop"; |
| 753 | - EXPECT_EQ(icon.GetActualDesktopFileAfterInstall(), USC_DESKTOP); |
| 754 | -} |
| 755 | - |
| 756 | -// simulate a OnFinished signal from a /usr/share/app-install location |
| 757 | -// and ensure that the remote uri is updated from temp location to |
| 758 | -// the real location |
| 759 | + gs->desktop_file_ = GS_DESKTOP; |
| 760 | + EXPECT_EQ(icon.GetActualDesktopFileAfterInstall(), GS_DESKTOP); |
| 761 | +} |
| 762 | + |
| 763 | TEST_F(TestSoftwareCenterLauncherIcon, OnFinishedReplacesDesktopFile) |
| 764 | { |
| 765 | icon.OnFinished(glib::Variant(g_variant_new("(s)", "exit-success"))); |
| 766 | - |
| 767 | - EXPECT_EQ(USC_DESKTOP, icon.DesktopFile()); |
| 768 | + EXPECT_EQ(GS_DESKTOP, icon.DesktopFile()); |
| 769 | } |
| 770 | |
| 771 | TEST_F(TestSoftwareCenterLauncherIcon, OnFinishedUpdatesRemoteURI) |
| 772 | { |
| 773 | icon.OnFinished(glib::Variant(g_variant_new("(s)", "exit-success"))); |
| 774 | |
| 775 | - ASSERT_EQ(USC_DESKTOP, icon.DesktopFile()); |
| 776 | - EXPECT_EQ(FavoriteStore::URI_PREFIX_APP + USC_DESKTOP, icon.GetRemoteUri()); |
| 777 | + ASSERT_EQ(GS_DESKTOP, icon.DesktopFile()); |
| 778 | + EXPECT_EQ(FavoriteStore::URI_PREFIX_APP + GS_DESKTOP, icon.GetRemoteUri()); |
| 779 | } |
| 780 | |
| 781 | TEST_F(TestSoftwareCenterLauncherIcon, DisconnectsOldAppSignals) |
| 782 | { |
| 783 | - ASSERT_FALSE(usc->closed.empty()); |
| 784 | + ASSERT_FALSE(gs->closed.empty()); |
| 785 | |
| 786 | icon.OnFinished(glib::Variant(g_variant_new("(s)", "exit-success"))); |
| 787 | |
| 788 | - EXPECT_TRUE(usc->closed.empty()); |
| 789 | - EXPECT_TRUE(usc->window_opened.empty()); |
| 790 | - EXPECT_TRUE(usc->window_moved.empty()); |
| 791 | - EXPECT_TRUE(usc->window_closed.empty()); |
| 792 | - EXPECT_TRUE(usc->visible.changed.empty()); |
| 793 | - EXPECT_TRUE(usc->active.changed.empty()); |
| 794 | - EXPECT_TRUE(usc->running.changed.empty()); |
| 795 | - EXPECT_TRUE(usc->urgent.changed.empty()); |
| 796 | - EXPECT_TRUE(usc->desktop_file.changed.empty()); |
| 797 | - EXPECT_TRUE(usc->title.changed.empty()); |
| 798 | - EXPECT_TRUE(usc->icon.changed.empty()); |
| 799 | + EXPECT_TRUE(gs->closed.empty()); |
| 800 | + EXPECT_TRUE(gs->window_opened.empty()); |
| 801 | + EXPECT_TRUE(gs->window_moved.empty()); |
| 802 | + EXPECT_TRUE(gs->window_closed.empty()); |
| 803 | + EXPECT_TRUE(gs->visible.changed.empty()); |
| 804 | + EXPECT_TRUE(gs->active.changed.empty()); |
| 805 | + EXPECT_TRUE(gs->running.changed.empty()); |
| 806 | + EXPECT_TRUE(gs->urgent.changed.empty()); |
| 807 | + EXPECT_TRUE(gs->desktop_file.changed.empty()); |
| 808 | + EXPECT_TRUE(gs->title.changed.empty()); |
| 809 | + EXPECT_TRUE(gs->icon.changed.empty()); |
| 810 | } |
| 811 | |
| 812 | TEST_F(TestSoftwareCenterLauncherIcon, OnFinishedRemoveInvalidNewAppIcon) |
| 813 | { |
| 814 | // Using an icon ptr, to get the removed signal to be properly emitted |
| 815 | nux::ObjectPtr<MockSoftwareCenterLauncherIcon> icon_ptr( |
| 816 | - new MockSoftwareCenterLauncherIcon(usc, "/com/canonical/unity/test/object/path", PRE_INSTALL_ICON)); |
| 817 | + new MockSoftwareCenterLauncherIcon(gs, "/com/canonical/unity/test/object/path")); |
| 818 | |
| 819 | bool removed = false; |
| 820 | auto& app_manager = unity::ApplicationManager::Default(); |
| 821 | @@ -201,7 +177,7 @@ |
| 822 | icon.LauncherIconUnstick(); |
| 823 | |
| 824 | bool saved = false; |
| 825 | - usc->sticky = true; |
| 826 | + gs->sticky = true; |
| 827 | icon.position_saved.connect([&saved] {saved = true;}); |
| 828 | ASSERT_FALSE(icon.IsSticky()); |
| 829 | |
| 830 | @@ -214,14 +190,7 @@ |
| 831 | { |
| 832 | icon.tooltip_text = "FooText"; |
| 833 | icon.OnFinished(glib::Variant(g_variant_new("(s)", "exit-success"))); |
| 834 | - EXPECT_EQ(icon.tooltip_text(), usc->title()); |
| 835 | -} |
| 836 | - |
| 837 | -TEST_F(TestSoftwareCenterLauncherIcon, OnFinishedUpdatesIcon) |
| 838 | -{ |
| 839 | - icon.icon_name = "foo-icon"; |
| 840 | - icon.OnFinished(glib::Variant(g_variant_new("(s)", "exit-success"))); |
| 841 | - EXPECT_EQ(icon.icon_name(), usc->icon()); |
| 842 | + EXPECT_EQ(icon.tooltip_text(), gs->title()); |
| 843 | } |
| 844 | |
| 845 | TEST_F(TestSoftwareCenterLauncherIcon, OnFinishedLogsEvent) |
| 846 | @@ -230,52 +199,9 @@ |
| 847 | icon.OnFinished(glib::Variant(g_variant_new("(s)", "exit-success"))); |
| 848 | } |
| 849 | |
| 850 | -TEST_F(TestSoftwareCenterLauncherIcon, AnimateToInvalidPosition) |
| 851 | -{ |
| 852 | - EXPECT_FALSE(icon.Animate(CreateLauncher(), 1, 2)); |
| 853 | - EXPECT_FALSE(icon.IsVisible()); |
| 854 | - EXPECT_EQ(PRE_INSTALL_ICON, icon.icon_name()); |
| 855 | -} |
| 856 | - |
| 857 | -TEST_F(TestSoftwareCenterLauncherIcon, AnimateFromInvalidPosition) |
| 858 | -{ |
| 859 | - EXPECT_TRUE(icon.Animate(CreateLauncher(), 0, 0)); |
| 860 | - EXPECT_TRUE(icon.IsVisible()); |
| 861 | - EXPECT_EQ(PRE_INSTALL_ICON, icon.icon_name()); |
| 862 | -} |
| 863 | - |
| 864 | #pragma GCC diagnostic push |
| 865 | #pragma GCC diagnostic ignored "-Wunused-variable" |
| 866 | |
| 867 | -struct MultiMonitor : TestSoftwareCenterLauncherIcon, WithParamInterface<unsigned> {}; |
| 868 | -INSTANTIATE_TEST_CASE_P(TestSoftwareCenterLauncherIcon, MultiMonitor, Range<unsigned>(0, monitors::MAX, 1)); |
| 869 | - |
| 870 | -TEST_P(/*TestSoftwareCenterLauncherIcon*/MultiMonitor, Animate) |
| 871 | -{ |
| 872 | - auto launcher = CreateLauncher(); |
| 873 | - launcher->monitor = GetParam(); |
| 874 | - icon.SetCenter({1, 1, 0}, launcher->monitor()); |
| 875 | - ASSERT_TRUE(icon.Animate(launcher, 2, 2)); |
| 876 | - EXPECT_FALSE(icon.IsVisible()); |
| 877 | - EXPECT_TRUE(icon.icon_name().empty()); |
| 878 | - |
| 879 | - for (unsigned i = 0; i < monitors::MAX; ++i) |
| 880 | - ASSERT_EQ(static_cast<int>(i) == launcher->monitor(), icon.IsVisibleOnMonitor(i)); |
| 881 | - |
| 882 | - bool animated = false; |
| 883 | - ASSERT_TRUE(icon.drag_window_); |
| 884 | - icon.drag_window_->anim_completed.connect([&animated] { animated = true; }); |
| 885 | - Utils::WaitUntilMSec(animated); |
| 886 | - ASSERT_TRUE(animated); |
| 887 | - |
| 888 | - EXPECT_EQ(PRE_INSTALL_ICON, icon.icon_name()); |
| 889 | - EXPECT_FALSE(icon.drag_window_); |
| 890 | - |
| 891 | - for (unsigned i = 0; i < monitors::MAX; ++i) |
| 892 | - ASSERT_TRUE(icon.IsVisibleOnMonitor(i)); |
| 893 | - |
| 894 | - EXPECT_TRUE(icon.IsVisible()); |
| 895 | -} |
| 896 | |
| 897 | struct InstallProgress : TestSoftwareCenterLauncherIcon, WithParamInterface<int> {}; |
| 898 | INSTANTIATE_TEST_CASE_P(TestSoftwareCenterLauncherIcon, InstallProgress, Range<int>(0, 99, 10)); |
| 899 | |
| 900 | === added file 'unity-shared/AppStreamApplication.cpp' |
| 901 | --- unity-shared/AppStreamApplication.cpp 1970-01-01 00:00:00 +0000 |
| 902 | +++ unity-shared/AppStreamApplication.cpp 2016-02-23 15:49:50 +0000 |
| 903 | @@ -0,0 +1,104 @@ |
| 904 | +// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*- |
| 905 | +/* |
| 906 | + * Copyright (C) 2016 Canonical Ltd |
| 907 | + * |
| 908 | + * This program is free software: you can redistribute it and/or modify |
| 909 | + * it under the terms of the GNU General Public License version 3 as |
| 910 | + * published by the Free Software Foundation. |
| 911 | + * |
| 912 | + * This program is distributed in the hope that it will be useful, |
| 913 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 914 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 915 | + * GNU General Public License for more details. |
| 916 | + * |
| 917 | + * You should have received a copy of the GNU General Public License |
| 918 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 919 | + * |
| 920 | + * Authored by: Andrea Azzarone <andrea.azzarone@canonical.com> |
| 921 | + */ |
| 922 | + |
| 923 | +#include "AppStreamApplication.h" |
| 924 | + |
| 925 | +#include <appstream-glib.h> |
| 926 | + |
| 927 | +#include <iostream> |
| 928 | + |
| 929 | +namespace unity |
| 930 | +{ |
| 931 | +namespace appstream |
| 932 | +{ |
| 933 | + |
| 934 | +Application::Application(std::string const& appstream_id) |
| 935 | + : appstream_id_(appstream_id) |
| 936 | +{ |
| 937 | + desktop_file.SetGetterFunction([this](){ return appstream_id_; }); |
| 938 | + title.SetGetterFunction([this](){ return title_; }); |
| 939 | + icon_pixbuf.SetGetterFunction([this](){ return icon_pixbuf_; }); |
| 940 | + |
| 941 | + glib::Object<AsStore> as_store(as_store_new()); |
| 942 | + g_return_if_fail(as_store); |
| 943 | + |
| 944 | + as_store_load(as_store, AS_STORE_LOAD_FLAG_APP_INFO_SYSTEM, nullptr, nullptr); |
| 945 | + |
| 946 | + AsApp *as_app = as_store_get_app_by_id(as_store, appstream_id_.c_str()); |
| 947 | + g_return_if_fail(as_app); |
| 948 | + |
| 949 | + title_ = glib::gchar_to_string(as_app_get_name(as_app, nullptr)); |
| 950 | + |
| 951 | + AsIcon *as_icon = as_app_get_icon_default(as_app); |
| 952 | + g_return_if_fail(as_icon); |
| 953 | + |
| 954 | + as_icon_load(as_icon, AS_ICON_LOAD_FLAG_SEARCH_SIZE, nullptr); |
| 955 | + icon_pixbuf_ = glib::Object<GdkPixbuf>(as_icon_get_pixbuf(as_icon), glib::AddRef()); |
| 956 | +} |
| 957 | + |
| 958 | +AppType Application::type() const |
| 959 | +{ |
| 960 | + return AppType::NORMAL; |
| 961 | +} |
| 962 | + |
| 963 | +std::string Application::repr() const |
| 964 | +{ |
| 965 | + std::ostringstream sout; |
| 966 | + sout << "<AppStream::Application " << appstream_id_ << " >"; |
| 967 | + return sout.str(); |
| 968 | +} |
| 969 | + |
| 970 | +WindowList const& Application::GetWindows() const |
| 971 | +{ |
| 972 | + return window_list_; |
| 973 | +} |
| 974 | + |
| 975 | +bool Application::OwnsWindow(Window window_id) const |
| 976 | +{ |
| 977 | + return false; |
| 978 | +} |
| 979 | + |
| 980 | +std::vector<std::string> Application::GetSupportedMimeTypes() const |
| 981 | +{ |
| 982 | + return std::vector<std::string>(); |
| 983 | +} |
| 984 | + |
| 985 | +ApplicationWindowPtr Application::GetFocusableWindow() const |
| 986 | +{ |
| 987 | + return nullptr; |
| 988 | +} |
| 989 | + |
| 990 | +void Application::Focus(bool show_on_visible, int monitor) const |
| 991 | +{} |
| 992 | + |
| 993 | +void Application::Quit() const |
| 994 | +{} |
| 995 | + |
| 996 | +bool Application::CreateLocalDesktopFile() const |
| 997 | +{ |
| 998 | + return false; |
| 999 | +} |
| 1000 | + |
| 1001 | +std::string Application::desktop_id() const |
| 1002 | +{ |
| 1003 | + return ""; |
| 1004 | +} |
| 1005 | + |
| 1006 | +} |
| 1007 | +} |
| 1008 | |
| 1009 | === added file 'unity-shared/AppStreamApplication.h' |
| 1010 | --- unity-shared/AppStreamApplication.h 1970-01-01 00:00:00 +0000 |
| 1011 | +++ unity-shared/AppStreamApplication.h 2016-02-23 15:49:50 +0000 |
| 1012 | @@ -0,0 +1,61 @@ |
| 1013 | +// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*- |
| 1014 | +/* |
| 1015 | + * Copyright (C) 2016 Canonical Ltd |
| 1016 | + * |
| 1017 | + * This program is free software: you can redistribute it and/or modify |
| 1018 | + * it under the terms of the GNU General Public License version 3 as |
| 1019 | + * published by the Free Software Foundation. |
| 1020 | + * |
| 1021 | + * This program is distributed in the hope that it will be useful, |
| 1022 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 1023 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 1024 | + * GNU General Public License for more details. |
| 1025 | + * |
| 1026 | + * You should have received a copy of the GNU General Public License |
| 1027 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 1028 | + * |
| 1029 | + * Authored by: Andrea Azzarone <andrea.azzarone@canonical.com> |
| 1030 | + */ |
| 1031 | + |
| 1032 | +#ifndef UNITYSHARED_APPSTREAM_APPLICATION_H |
| 1033 | +#define UNITYSHARED_APPSTREAM_APPLICATION_H |
| 1034 | + |
| 1035 | +#include "DesktopApplicationManager.h" |
| 1036 | + |
| 1037 | +namespace unity |
| 1038 | +{ |
| 1039 | +namespace appstream |
| 1040 | +{ |
| 1041 | + |
| 1042 | +class Application : public desktop::Application |
| 1043 | +{ |
| 1044 | +public: |
| 1045 | + Application(std::string const& appstream_id); |
| 1046 | + |
| 1047 | + AppType type() const override; |
| 1048 | + std::string repr() const override; |
| 1049 | + |
| 1050 | + WindowList const& GetWindows() const override; |
| 1051 | + bool OwnsWindow(Window window_id) const override; |
| 1052 | + |
| 1053 | + std::vector<std::string> GetSupportedMimeTypes() const override; |
| 1054 | + |
| 1055 | + ApplicationWindowPtr GetFocusableWindow() const override; |
| 1056 | + void Focus(bool show_on_visible, int monitor) const override; |
| 1057 | + void Quit() const override; |
| 1058 | + |
| 1059 | + bool CreateLocalDesktopFile() const override; |
| 1060 | + |
| 1061 | + std::string desktop_id() const override; |
| 1062 | + |
| 1063 | +private: |
| 1064 | + std::string appstream_id_; |
| 1065 | + std::string title_; |
| 1066 | + glib::Object<_GdkPixbuf> icon_pixbuf_; |
| 1067 | + WindowList window_list_; |
| 1068 | +}; |
| 1069 | + |
| 1070 | +} |
| 1071 | +} |
| 1072 | + |
| 1073 | +#endif |
| 1074 | |
| 1075 | === modified file 'unity-shared/ApplicationManager.h' |
| 1076 | --- unity-shared/ApplicationManager.h 2015-11-26 00:20:23 +0000 |
| 1077 | +++ unity-shared/ApplicationManager.h 2016-02-23 15:49:50 +0000 |
| 1078 | @@ -25,8 +25,10 @@ |
| 1079 | |
| 1080 | #include <sigc++/signal.h> |
| 1081 | #include <NuxCore/Property.h> |
| 1082 | +#include <UnityCore/GLibWrapper.h> |
| 1083 | #include <unity-shared/WindowManager.h> |
| 1084 | |
| 1085 | +struct _GdkPixbuf; |
| 1086 | |
| 1087 | namespace unity |
| 1088 | { |
| 1089 | @@ -153,6 +155,7 @@ |
| 1090 | nux::ROProperty<std::string> desktop_file; |
| 1091 | nux::ROProperty<std::string> title; |
| 1092 | nux::ROProperty<std::string> icon; |
| 1093 | + nux::ROProperty<glib::Object<_GdkPixbuf>> icon_pixbuf; |
| 1094 | |
| 1095 | // Considering using a property for the "unity-seen" quark |
| 1096 | nux::RWProperty<bool> seen; |
| 1097 | |
| 1098 | === modified file 'unity-shared/CMakeLists.txt' |
| 1099 | --- unity-shared/CMakeLists.txt 2015-11-06 18:05:38 +0000 |
| 1100 | +++ unity-shared/CMakeLists.txt 2016-02-23 15:49:50 +0000 |
| 1101 | @@ -18,6 +18,7 @@ |
| 1102 | # |
| 1103 | set (UNITY_SHARED_SOURCES |
| 1104 | ApplicationManager.cpp |
| 1105 | + AppStreamApplication.cpp |
| 1106 | BGHash.cpp |
| 1107 | CoverArt.cpp |
| 1108 | BackgroundEffectHelper.cpp |
| 1109 | |
| 1110 | === modified file 'unity-shared/DesktopApplicationManager.h' |
| 1111 | --- unity-shared/DesktopApplicationManager.h 2014-01-15 14:51:10 +0000 |
| 1112 | +++ unity-shared/DesktopApplicationManager.h 2016-02-23 15:49:50 +0000 |
| 1113 | @@ -24,7 +24,7 @@ |
| 1114 | #include <UnityCore/GLibWrapper.h> |
| 1115 | #include <UnityCore/GLibSignal.h> |
| 1116 | |
| 1117 | -#include "unity-shared/ApplicationManager.h" |
| 1118 | +#include "ApplicationManager.h" |
| 1119 | |
| 1120 | namespace unity |
| 1121 | { |


FAILED: Continuous integration, rev:4070 jenkins. qa.ubuntu. com/job/ unity-ci/ 1409/ jenkins. qa.ubuntu. com/job/ unity-xenial- amd64-ci/ 59/console jenkins. qa.ubuntu. com/job/ unity-xenial- armhf-ci/ 59/console jenkins. qa.ubuntu. com/job/ unity-xenial- i386-ci/ 59/console
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild: s-jenkins. ubuntu- ci:8080/ job/unity- ci/1409/ rebuild
http://