Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add about panel customization on linux #15658

Merged
merged 1 commit into from Nov 13, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
10 changes: 5 additions & 5 deletions atom/browser/api/atom_api_app.cc
Expand Up @@ -1290,6 +1290,11 @@ void App::BuildPrototype(v8::Isolate* isolate,
base::Bind(&Browser::InvalidateCurrentActivity, browser))
.SetMethod("updateCurrentActivity",
base::Bind(&Browser::UpdateCurrentActivity, browser))
// TODO(juturu): Remove in 2.0, deprecate before then with warnings
.SetMethod("moveToApplicationsFolder", &App::MoveToApplicationsFolder)
.SetMethod("isInApplicationsFolder", &App::IsInApplicationsFolder)
#endif
#if defined(OS_MACOSX) || defined(OS_LINUX)
.SetMethod("setAboutPanelOptions",
base::Bind(&Browser::SetAboutPanelOptions, browser))
.SetMethod("showAboutPanel",
Expand Down Expand Up @@ -1329,11 +1334,6 @@ void App::BuildPrototype(v8::Isolate* isolate,
.SetMethod("getAppMetrics", &App::GetAppMetrics)
.SetMethod("getGPUFeatureStatus", &App::GetGPUFeatureStatus)
.SetMethod("getGPUInfo", &App::GetGPUInfo)
// TODO(juturu): Remove in 2.0, deprecate before then with warnings
#if defined(OS_MACOSX)
.SetMethod("moveToApplicationsFolder", &App::MoveToApplicationsFolder)
.SetMethod("isInApplicationsFolder", &App::IsInApplicationsFolder)
#endif
#if defined(MAS_BUILD)
.SetMethod("startAccessingSecurityScopedResource",
&App::StartAccessingSecurityScopedResource)
Expand Down
7 changes: 5 additions & 2 deletions atom/browser/browser.h
Expand Up @@ -180,9 +180,12 @@ class Browser : public WindowListObserver {
// Set docks' icon.
void DockSetIcon(const gfx::Image& image);

#endif // defined(OS_MACOSX)

#if defined(OS_MACOSX) || defined(OS_LINUX)
void ShowAboutPanel();
void SetAboutPanelOptions(const base::DictionaryValue& options);
#endif // defined(OS_MACOSX)
#endif

#if defined(OS_WIN)
struct UserTask {
Expand Down Expand Up @@ -288,7 +291,7 @@ class Browser : public WindowListObserver {

util::Promise* ready_promise_ = nullptr;

#if defined(OS_MACOSX)
#if defined(OS_LINUX) || defined(OS_MACOSX)
base::DictionaryValue about_panel_options_;
#endif

Expand Down
40 changes: 40 additions & 0 deletions atom/browser/browser_linux.cc
Expand Up @@ -142,4 +142,44 @@ bool Browser::IsUnityRunning() {
return unity::IsRunning();
}

void Browser::ShowAboutPanel() {
std::string app_name, version, copyright, icon_path, website;
codebytere marked this conversation as resolved.
Show resolved Hide resolved

GtkAboutDialog* dialog = GTK_ABOUT_DIALOG(gtk_about_dialog_new());

if (about_panel_options_.GetString("applicationName", &app_name))
gtk_about_dialog_set_program_name(dialog, app_name.c_str());
if (about_panel_options_.GetString("applicationVersion", &version))
gtk_about_dialog_set_version(dialog, version.c_str());
if (about_panel_options_.GetString("copyright", &copyright))
gtk_about_dialog_set_copyright(dialog, copyright.c_str());
if (about_panel_options_.GetString("website", &website))
gtk_about_dialog_set_website(dialog, website.c_str());
if (about_panel_options_.GetString("iconPath", &icon_path)) {
GError* error = nullptr;
GdkPixbuf* icon = gdk_pixbuf_new_from_file(icon_path.c_str(), &error);
if (error != nullptr) {
g_warning("%s", error->message);
g_clear_error(&error);
} else {
gtk_about_dialog_set_logo(dialog, icon);
g_clear_object(&icon);
}
}

gtk_dialog_run(GTK_DIALOG(dialog));
g_clear_object(&dialog);
}

void Browser::SetAboutPanelOptions(const base::DictionaryValue& options) {
about_panel_options_.Clear();

for (const auto& pair : options) {
const std::string& key = pair.first;
const auto& val = pair.second;
if (!key.empty() && val->is_string())
about_panel_options_.SetString(key, val->GetString());
}
}

} // namespace atom
11 changes: 5 additions & 6 deletions atom/browser/browser_mac.mm
Expand Up @@ -392,13 +392,12 @@ void RemoveFromLoginItems() {
void Browser::SetAboutPanelOptions(const base::DictionaryValue& options) {
about_panel_options_.Clear();

// Upper case option keys for orderFrontStandardAboutPanelWithOptions format
for (base::DictionaryValue::Iterator iter(options); !iter.IsAtEnd();
iter.Advance()) {
std::string key = iter.key();
if (!key.empty() && iter.value().is_string()) {
for (const auto& pair : options) {
std::string key = pair.first;
const auto& val = pair.second;
if (!key.empty() && val->is_string()) {
key[0] = base::ToUpperASCII(key[0]);
about_panel_options_.SetString(key, iter.value().GetString());
about_panel_options_.SetString(key, val->GetString());
}
}
}
Expand Down
15 changes: 8 additions & 7 deletions docs/api/app.md
Expand Up @@ -1064,22 +1064,23 @@ details. Disabled by default.

**Note:** Rendering accessibility tree can significantly affect the performance of your app. It should not be enabled by default.

### `app.showAboutPanel()` _macOS_
### `app.showAboutPanel` _macOS_ _Linux_

Show the about panel with the values defined in the app's
`.plist` file or with the options set via `app.setAboutPanelOptions(options)`.
Show the app's about panel options. These options can be overridden with `app.setAboutPanelOptions(options)`.

### `app.setAboutPanelOptions(options)` _macOS_
### `app.setAboutPanelOptions(options)` _macOS_ _Linux_

* `options` Object
* `applicationName` String (optional) - The app's name.
* `applicationVersion` String (optional) - The app's version.
* `copyright` String (optional) - Copyright information.
* `credits` String (optional) - Credit information.
* `version` String (optional) - The app's build version number.
* `version` String (optional) - The app's build version number. _macOS_
* `credits` String (optional) - Credit information. _macOS_
* `website` String (optional) - The app's website. _Linux_
* `iconPath` String (optional) - Path to the app's icon. _Linux_

Set the about panel options. This will override the values defined in the app's
`.plist` file. See the [Apple docs][about-panel-options] for more details.
`.plist` file on MacOS. See the [Apple docs][about-panel-options] for more details. On Linux, values must be set in order to be shown; there are no defaults.

### `app.startAccessingSecurityScopedResource(bookmarkData)` _macOS (mas)_

Expand Down