From 10b160c0969be3c87bc90ef869ab8dcf8e7f10f0 Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Mon, 12 Nov 2018 09:55:06 -0800 Subject: [PATCH] feat: add about panel on linux --- atom/browser/api/atom_api_app.cc | 10 ++++----- atom/browser/browser.h | 7 ++++-- atom/browser/browser_linux.cc | 38 ++++++++++++++++++++++++++++++++ docs/api/app.md | 12 +++++----- 4 files changed, 54 insertions(+), 13 deletions(-) diff --git a/atom/browser/api/atom_api_app.cc b/atom/browser/api/atom_api_app.cc index 0c577d55345cf..a19192baa1bcb 100644 --- a/atom/browser/api/atom_api_app.cc +++ b/atom/browser/api/atom_api_app.cc @@ -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", @@ -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) diff --git a/atom/browser/browser.h b/atom/browser/browser.h index 8246a83f16fd9..98fba93fc5138 100644 --- a/atom/browser/browser.h +++ b/atom/browser/browser.h @@ -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 { @@ -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 diff --git a/atom/browser/browser_linux.cc b/atom/browser/browser_linux.cc index 06f8ee47105e6..f7c5987af93d1 100644 --- a/atom/browser/browser_linux.cc +++ b/atom/browser/browser_linux.cc @@ -142,4 +142,42 @@ bool Browser::IsUnityRunning() { return unity::IsRunning(); } +void Browser::ShowAboutPanel() { + std::string app_name, version, copyright, icon_path, credits, website; + + GtkWidget* dialog = gtk_about_dialog_new(); + + if (about_panel_options_.GetString("applicationName", &app_name)) + gtk_about_dialog_set_program_name(GTK_ABOUT_DIALOG(dialog), + app_name.c_str()); + if (about_panel_options_.GetString("applicationVersion", &version)) + gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(dialog), version.c_str()); + if (about_panel_options_.GetString("copyright", ©right)) + gtk_about_dialog_set_copyright(GTK_ABOUT_DIALOG(dialog), copyright.c_str()); + if (about_panel_options_.GetString("credits", &credits)) + gtk_about_dialog_set_authors(GTK_ABOUT_DIALOG(dialog), credits.c_str()); + if (about_panel_options_.GetString("website", &website)) + gtk_about_dialog_set_website(GTK_ABOUT_DIALOG(dialog), website.c_str()); + if (about_panel_options_.GetString("iconPath", &icon_path)) { + GdkPixbuf* icon = gdk_pixbuf_new_from_file(icon_path.c_str(), NULL); + gtk_about_dialog_set_logo(GTK_ABOUT_DIALOG(dialog), icon); + } + + g_object_unref(icon), icon = NULL; + + gtk_dialog_run(GTK_DIALOG(dialog)); + gtk_widget_destroy(dialog); +} + +void Browser::SetAboutPanelOptions(const base::DictionaryValue& options) { + about_panel_options_.Clear(); + + for (base::DictionaryValue::Iterator iter(options); !iter.IsAtEnd(); + iter.Advance()) { + std::string key = iter.key(); + if (!key.empty() && iter.value().is_string()) + about_panel_options_.SetString(key, iter.value().GetString()); + } +} + } // namespace atom diff --git a/docs/api/app.md b/docs/api/app.md index 7b685ef1cd5f3..f4d9335c6080d 100644 --- a/docs/api/app.md +++ b/docs/api/app.md @@ -1064,22 +1064,22 @@ 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. + * `website` String (optional) - The app's website. _Linux_ + * `version` String (optional) - The app's build version number. _macOS_ 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)_