From a0cf013112f5fd2f9bd4f462c4f3b8c480c11179 Mon Sep 17 00:00:00 2001 From: Milan Burda Date: Mon, 8 Aug 2016 00:22:32 +0200 Subject: [PATCH] Report app.setUserTasks success/failure --- atom/browser/browser.h | 2 +- atom/browser/browser_win.cc | 20 ++++++++++---------- docs/api/app.md | 2 ++ 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/atom/browser/browser.h b/atom/browser/browser.h index 96fad18fc7f..a3494fb8a08 100644 --- a/atom/browser/browser.h +++ b/atom/browser/browser.h @@ -156,7 +156,7 @@ class Browser : public WindowListObserver { }; // Add a custom task to jump list. - void SetUserTasks(const std::vector& tasks); + bool SetUserTasks(const std::vector& tasks); // Returns the application user model ID, if there isn't one, then create // one from app's name. diff --git a/atom/browser/browser_win.cc b/atom/browser/browser_win.cc index 059b2890942..8f4ad27ff04 100644 --- a/atom/browser/browser_win.cc +++ b/atom/browser/browser_win.cc @@ -79,22 +79,22 @@ void Browser::SetAppUserModelID(const base::string16& name) { SetCurrentProcessExplicitAppUserModelID(app_user_model_id_.c_str()); } -void Browser::SetUserTasks(const std::vector& tasks) { +bool Browser::SetUserTasks(const std::vector& tasks) { CComPtr destinations; if (FAILED(destinations.CoCreateInstance(CLSID_DestinationList))) - return; + return false; if (FAILED(destinations->SetAppID(GetAppUserModelID()))) - return; + return false; // Start a transaction that updates the JumpList of this application. UINT max_slots; CComPtr removed; if (FAILED(destinations->BeginList(&max_slots, IID_PPV_ARGS(&removed)))) - return; + return false; CComPtr collection; if (FAILED(collection.CoCreateInstance(CLSID_EnumerableObjectCollection))) - return; + return false; for (auto& task : tasks) { CComPtr link; @@ -102,27 +102,27 @@ void Browser::SetUserTasks(const std::vector& tasks) { FAILED(link->SetPath(task.program.value().c_str())) || FAILED(link->SetArguments(task.arguments.c_str())) || FAILED(link->SetDescription(task.description.c_str()))) - return; + return false; if (!task.icon_path.empty() && FAILED(link->SetIconLocation(task.icon_path.value().c_str(), task.icon_index))) - return; + return false; CComQIPtr property_store = link; if (!base::win::SetStringValueForPropertyStore(property_store, PKEY_Title, task.title.c_str())) - return; + return false; if (FAILED(collection->AddObject(link))) - return; + return false; } // When the list is empty "AddUserTasks" could fail, so we don't check return // value for it. CComQIPtr task_array = collection; destinations->AddUserTasks(task_array); - destinations->CommitList(); + return SUCCEEDED(destinations->CommitList()); } bool Browser::RemoveAsDefaultProtocolClient(const std::string& protocol) { diff --git a/docs/api/app.md b/docs/api/app.md index ca1a36c9f98..ccf0eb0dbe4 100644 --- a/docs/api/app.md +++ b/docs/api/app.md @@ -512,6 +512,8 @@ Adds `tasks` to the [Tasks][tasks] category of the JumpList on Windows. consists of two or more icons, set this value to identify the icon. If an icon file consists of one icon, this value is 0. +Returns `true` when the call succeeded, otherwise returns `false`. + ### `app.makeSingleInstance(callback)` * `callback` Function