feat: allow setting working directory in app.setUserTasks() / app.setJumpList() (#18148)
This commit is contained in:
parent
326215e1f1
commit
3a5e6f2551
8 changed files with 20 additions and 3 deletions
|
@ -85,6 +85,7 @@ struct Converter<Browser::UserTask> {
|
||||||
return false;
|
return false;
|
||||||
dict.Get("arguments", &(out->arguments));
|
dict.Get("arguments", &(out->arguments));
|
||||||
dict.Get("description", &(out->description));
|
dict.Get("description", &(out->description));
|
||||||
|
dict.Get("workingDirectory", &(out->working_dir));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -158,6 +159,7 @@ struct Converter<JumpListItem> {
|
||||||
|
|
||||||
dict.Get("args", &(out->arguments));
|
dict.Get("args", &(out->arguments));
|
||||||
dict.Get("description", &(out->description));
|
dict.Get("description", &(out->description));
|
||||||
|
dict.Get("workingDirectory", &(out->working_dir));
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case JumpListItem::Type::SEPARATOR:
|
case JumpListItem::Type::SEPARATOR:
|
||||||
|
@ -184,6 +186,7 @@ struct Converter<JumpListItem> {
|
||||||
dict.Set("iconPath", val.icon_path);
|
dict.Set("iconPath", val.icon_path);
|
||||||
dict.Set("iconIndex", val.icon_index);
|
dict.Set("iconIndex", val.icon_index);
|
||||||
dict.Set("description", val.description);
|
dict.Set("description", val.description);
|
||||||
|
dict.Set("workingDirectory", val.working_dir);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case JumpListItem::Type::SEPARATOR:
|
case JumpListItem::Type::SEPARATOR:
|
||||||
|
|
|
@ -197,6 +197,7 @@ class Browser : public WindowListObserver {
|
||||||
base::string16 arguments;
|
base::string16 arguments;
|
||||||
base::string16 title;
|
base::string16 title;
|
||||||
base::string16 description;
|
base::string16 description;
|
||||||
|
base::FilePath working_dir;
|
||||||
base::FilePath icon_path;
|
base::FilePath icon_path;
|
||||||
int icon_index;
|
int icon_index;
|
||||||
|
|
||||||
|
|
|
@ -141,6 +141,7 @@ bool Browser::SetUserTasks(const std::vector<UserTask>& tasks) {
|
||||||
item.icon_path = task.icon_path;
|
item.icon_path = task.icon_path;
|
||||||
item.icon_index = task.icon_index;
|
item.icon_index = task.icon_index;
|
||||||
item.description = task.description;
|
item.description = task.description;
|
||||||
|
item.working_dir = task.working_dir;
|
||||||
category.items.push_back(item);
|
category.items.push_back(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,7 @@ bool AppendTask(const JumpListItem& item, IObjectCollection* collection) {
|
||||||
if (FAILED(link.CoCreateInstance(CLSID_ShellLink)) ||
|
if (FAILED(link.CoCreateInstance(CLSID_ShellLink)) ||
|
||||||
FAILED(link->SetPath(item.path.value().c_str())) ||
|
FAILED(link->SetPath(item.path.value().c_str())) ||
|
||||||
FAILED(link->SetArguments(item.arguments.c_str())) ||
|
FAILED(link->SetArguments(item.arguments.c_str())) ||
|
||||||
|
FAILED(link->SetWorkingDirectory(item.working_dir.value().c_str())) ||
|
||||||
FAILED(link->SetDescription(item.description.c_str())))
|
FAILED(link->SetDescription(item.description.c_str())))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -86,6 +87,8 @@ bool ConvertShellLinkToJumpListItem(IShellLink* shell_link,
|
||||||
if (FAILED(shell_link->GetPath(path, base::size(path), nullptr, 0)))
|
if (FAILED(shell_link->GetPath(path, base::size(path), nullptr, 0)))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
item->path = base::FilePath(path);
|
||||||
|
|
||||||
CComQIPtr<IPropertyStore> property_store = shell_link;
|
CComQIPtr<IPropertyStore> property_store = shell_link;
|
||||||
base::win::ScopedPropVariant prop;
|
base::win::ScopedPropVariant prop;
|
||||||
if (SUCCEEDED(
|
if (SUCCEEDED(
|
||||||
|
@ -99,6 +102,9 @@ bool ConvertShellLinkToJumpListItem(IShellLink* shell_link,
|
||||||
item->title = prop.get().pwszVal;
|
item->title = prop.get().pwszVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (SUCCEEDED(shell_link->GetWorkingDirectory(path, base::size(path))))
|
||||||
|
item->working_dir = base::FilePath(path);
|
||||||
|
|
||||||
int icon_index;
|
int icon_index;
|
||||||
if (SUCCEEDED(
|
if (SUCCEEDED(
|
||||||
shell_link->GetIconLocation(path, base::size(path), &icon_index))) {
|
shell_link->GetIconLocation(path, base::size(path), &icon_index))) {
|
||||||
|
|
|
@ -49,6 +49,7 @@ struct JumpListItem {
|
||||||
base::string16 arguments;
|
base::string16 arguments;
|
||||||
base::string16 title;
|
base::string16 title;
|
||||||
base::string16 description;
|
base::string16 description;
|
||||||
|
base::FilePath working_dir;
|
||||||
base::FilePath icon_path;
|
base::FilePath icon_path;
|
||||||
int icon_index = 0;
|
int icon_index = 0;
|
||||||
|
|
||||||
|
|
|
@ -26,3 +26,4 @@
|
||||||
resource file contains multiple icons this value can be used to specify the
|
resource file contains multiple icons this value can be used to specify the
|
||||||
zero-based index of the icon that should be displayed for this task. If a
|
zero-based index of the icon that should be displayed for this task. If a
|
||||||
resource file contains only one icon, this property should be set to zero.
|
resource file contains only one icon, this property should be set to zero.
|
||||||
|
* `workingDirectory` String (optional) - The working directory. Default is empty.
|
||||||
|
|
|
@ -12,3 +12,4 @@
|
||||||
* `iconIndex` Number - The icon index in the icon file. If an icon file
|
* `iconIndex` Number - The icon index in the icon file. If an icon file
|
||||||
consists of two or more icons, set this value to identify the icon. If an
|
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.
|
icon file consists of one icon, this value is 0.
|
||||||
|
* `workingDirectory` String (optional) - The working directory. Default is empty.
|
||||||
|
|
|
@ -241,7 +241,8 @@ app.setUserTasks([
|
||||||
iconPath: process.execPath,
|
iconPath: process.execPath,
|
||||||
iconIndex: 0,
|
iconIndex: 0,
|
||||||
title: 'New Window',
|
title: 'New Window',
|
||||||
description: 'Create a new window'
|
description: 'Create a new window',
|
||||||
|
workingDirectory: path.dirname(process.execPath)
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
app.setUserTasks([])
|
app.setUserTasks([])
|
||||||
|
@ -265,7 +266,8 @@ app.setJumpList([
|
||||||
args: '--run-tool-a',
|
args: '--run-tool-a',
|
||||||
iconPath: process.execPath,
|
iconPath: process.execPath,
|
||||||
iconIndex: 0,
|
iconIndex: 0,
|
||||||
description: 'Runs Tool A'
|
description: 'Runs Tool A',
|
||||||
|
workingDirectory: path.dirname(process.execPath)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'task',
|
type: 'task',
|
||||||
|
@ -274,7 +276,8 @@ app.setJumpList([
|
||||||
args: '--run-tool-b',
|
args: '--run-tool-b',
|
||||||
iconPath: process.execPath,
|
iconPath: process.execPath,
|
||||||
iconIndex: 0,
|
iconIndex: 0,
|
||||||
description: 'Runs Tool B'
|
description: 'Runs Tool B',
|
||||||
|
workingDirectory: path.dirname(process.execPath)
|
||||||
}]
|
}]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue