- GtkAboutDialog * const dlg = GTK_ABOUT_DIALOG(gtk_about_dialog_new());
- gtk_about_dialog_set_name(dlg, GtkStr(info.GetName()));
- if ( info.HasVersion() )
- gtk_about_dialog_set_version(dlg, GtkStr(info.GetVersion()));
- if ( info.HasCopyright() )
- gtk_about_dialog_set_copyright(dlg, GtkStr(info.GetCopyright()));
- if ( info.HasDescription() )
- gtk_about_dialog_set_comments(dlg, GtkStr(info.GetDescription()));
- if ( info.HasLicence() )
- gtk_about_dialog_set_license(dlg, GtkStr(info.GetLicence()));
-
- wxIcon icon = info.GetIcon();
- if ( icon.Ok() )
- gtk_about_dialog_set_logo(dlg, info.GetIcon().GetPixbuf());
-
- if ( info.HasWebSite() )
- {
- gtk_about_dialog_set_website(dlg, GtkStr(info.GetWebSiteURL()));
- gtk_about_dialog_set_website_label
- (
- dlg,
- GtkStr(info.GetWebSiteDescription())
- );
- }
+ wxLaunchDefaultBrowser(wxGTK_CONV_BACK_SYS(link));
+ return true;
+ }
+ return false;
+}
+}
+#else
+extern "C" {
+static void wxGtkAboutDialogOnLink(GtkAboutDialog*, const char* link, void*)
+{
+ wxLaunchDefaultBrowser(wxGTK_CONV_BACK_SYS(link));
+}
+}
+#endif
+
+void wxAboutBox(const wxAboutDialogInfo& info, wxWindow* WXUNUSED(parent))
+{
+ // don't create another dialog if one is already present
+ if ( !gs_aboutDialog )
+ gs_aboutDialog = GTK_ABOUT_DIALOG(gtk_about_dialog_new());
+
+ GtkAboutDialog * const dlg = gs_aboutDialog;
+ gtk_about_dialog_set_program_name(dlg, wxGTK_CONV_SYS(info.GetName()));
+ if ( info.HasVersion() )
+ gtk_about_dialog_set_version(dlg, wxGTK_CONV_SYS(info.GetVersion()));
+ else
+ gtk_about_dialog_set_version(dlg, NULL);
+ if ( info.HasCopyright() )
+ gtk_about_dialog_set_copyright(dlg, wxGTK_CONV_SYS(info.GetCopyrightToDisplay()));
+ else
+ gtk_about_dialog_set_copyright(dlg, NULL);
+ if ( info.HasDescription() )
+ gtk_about_dialog_set_comments(dlg, wxGTK_CONV_SYS(info.GetDescription()));
+ else
+ gtk_about_dialog_set_comments(dlg, NULL);
+ if ( info.HasLicence() )
+ gtk_about_dialog_set_license(dlg, wxGTK_CONV_SYS(info.GetLicence()));
+ else
+ gtk_about_dialog_set_license(dlg, NULL);
+
+ wxIcon icon = info.GetIcon();
+ if ( icon.IsOk() )
+ gtk_about_dialog_set_logo(dlg, info.GetIcon().GetPixbuf());
+
+ if ( info.HasWebSite() )
+ {
+#ifdef __WXGTK3__
+ g_signal_connect(dlg, "activate-link", G_CALLBACK(activate_link), dlg);
+#else
+ // NB: must be called before gtk_about_dialog_set_website() as
+ // otherwise it has no effect (although GTK+ docs don't mention
+ // this...)
+ gtk_about_dialog_set_url_hook(wxGtkAboutDialogOnLink, NULL, NULL);
+#endif
+
+ gtk_about_dialog_set_website(dlg, wxGTK_CONV_SYS(info.GetWebSiteURL()));
+ gtk_about_dialog_set_website_label
+ (
+ dlg,
+ wxGTK_CONV_SYS(info.GetWebSiteDescription())
+ );
+ }
+ else
+ {
+ gtk_about_dialog_set_website(dlg, NULL);
+ gtk_about_dialog_set_website_label(dlg, NULL);
+#ifdef __WXGTK3__
+ g_signal_connect(dlg, "activate-link", G_CALLBACK(activate_link), NULL);
+#else
+ gtk_about_dialog_set_url_hook(NULL, NULL, NULL);
+#endif
+ }