#if wxUSE_ABOUTDLG && defined(__WXGTK26__)
#ifndef WX_PRECOMP
+ #include "wx/utils.h" // for wxLaunchDefaultBrowser()
#endif //WX_PRECOMP
#include "wx/aboutdlg.h"
{
public:
GtkStr(const wxString& s)
- : wxGtkString(wx_const_cast(char *, wxGTK_CONV_SYS(s).data()))
+ : wxGtkString(wx_const_cast(char *, wxGTK_CONV_SYS(s).release()))
{
}
};
// implementation
// ============================================================================
+extern "C" void
+wxGtkAboutDialogOnClose(GtkAboutDialog *about)
+{
+ gtk_widget_destroy(GTK_WIDGET(about));
+}
+
+extern "C" void
+wxGtkAboutDialogOnLink(GtkAboutDialog * WXUNUSED(about),
+ const gchar *link,
+ gpointer WXUNUSED(data))
+{
+ wxLaunchDefaultBrowser(wxGTK_CONV_BACK(link));
+}
+
void wxAboutBox(const wxAboutDialogInfo& info)
{
if ( !gtk_check_version(2,6,0) )
if ( info.HasWebSite() )
{
+ // 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);
+
gtk_about_dialog_set_website(dlg, GtkStr(info.GetWebSiteURL()));
gtk_about_dialog_set_website_label
(
gtk_about_dialog_set_documenters(dlg, GtkArray(info.GetDocWriters()));
if ( info.HasArtists() )
gtk_about_dialog_set_artists(dlg, GtkArray(info.GetArtists()));
+
+ wxString transCredits;
if ( info.HasTranslators() )
{
- gtk_about_dialog_set_translator_credits
- (
- dlg,
- GtkStr(_("translator-credits"))
- );
+ const wxArrayString& translators = info.GetTranslators();
+ const size_t count = translators.size();
+ for ( size_t n = 0; n < count; n++ )
+ {
+ transCredits << translators[n] << _T('\n');
+ }
}
+ else // no translators explicitely specified
+ {
+ // maybe we have translator credits in the message catalog?
+ transCredits = _("translator-credits");
+ }
+
+ gtk_about_dialog_set_translator_credits(dlg, GtkStr(transCredits));
+
+ g_signal_connect(dlg, "response",
+ G_CALLBACK(wxGtkAboutDialogOnClose), NULL);
gtk_widget_show(GTK_WIDGET(dlg));
return;