From f432e6777dbd45c868c411397010d9f315687de3 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Thu, 3 Sep 2009 11:38:31 +0000 Subject: [PATCH] Tweak the default wxApp::GetAppDisplayName() logic. Don't capitalize the app name if it had been explicitly set with SetAppName() as this can result in unexpectedly wrong value. Do capitalize the program name which is used as app name by default and don't store the program name in m_appName to be able to distinguish between the two cases. Closes #11165. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61821 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/app.h | 15 +++++---------- interface/wx/app.h | 14 ++++++++++---- src/common/appbase.cpp | 34 +++++++++++++++++++++++++++++----- 3 files changed, 44 insertions(+), 19 deletions(-) diff --git a/include/wx/app.h b/include/wx/app.h index 87642e3ecb..b5d2ea9a95 100644 --- a/include/wx/app.h +++ b/include/wx/app.h @@ -136,22 +136,17 @@ public: // be argv[0] // set/get the application name - wxString GetAppName() const - { - return m_appName.empty() ? m_className : m_appName; - } + wxString GetAppName() const; void SetAppName(const wxString& name) { m_appName = name; } // set/get the application display name: the display name is the name // shown to the user in titles, reports, etc while the app name is // used for paths, config, and other places the user doesn't see // - // so the app name could be myapp while display name could be "My App" - wxString GetAppDisplayName() const - { - return m_appDisplayName.empty() ? GetAppName().Capitalize() - : m_appDisplayName; - } + // by default the display name is the same as app name or a capitalized + // version of the program if app name was not set neither but it's + // usually better to set it explicitly to something nicer + wxString GetAppDisplayName() const; void SetAppDisplayName(const wxString& name) { m_appDisplayName = name; } diff --git a/interface/wx/app.h b/interface/wx/app.h index 802b6fdbe0..8888f7a7d4 100644 --- a/interface/wx/app.h +++ b/interface/wx/app.h @@ -495,8 +495,13 @@ public: is that this one is meant to be shown to the user and so should be used for the window titles, page headers and so on while the other one should be only used internally, e.g. for the file names or - configuration file keys. By default, returns the application name as - returned by GetAppName() capitalized using wxString::Capitalize(). + configuration file keys. + + If the application name for display had been previously set by + SetAppDisplayName(), it will be returned by this function. Otherwise, + if SetAppName() had been called its value will be returned; also as is. + Finally if none was called, this function returns the program name + capitalized using wxString::Capitalize(). @since 2.9.0 */ @@ -505,8 +510,9 @@ public: /** Returns the application name. - @remarks wxWidgets sets this to a reasonable default before calling - OnInit(), but the application can reset it at will. + If SetAppName() had been called, returns the string passed to it. + Otherwise returns the program name, i.e. the value of @c argv[0] passed + to the @c main() function. @see GetAppDisplayName() */ diff --git a/src/common/appbase.cpp b/src/common/appbase.cpp index c2d019fd25..77820cd5bb 100644 --- a/src/common/appbase.cpp +++ b/src/common/appbase.cpp @@ -161,21 +161,45 @@ wxAppConsoleBase::~wxAppConsoleBase() // initialization/cleanup // ---------------------------------------------------------------------------- -bool wxAppConsoleBase::Initialize(int& WXUNUSED(argc), wxChar **argv) +bool wxAppConsoleBase::Initialize(int& WXUNUSED(argc), wxChar **WXUNUSED(argv)) { #if wxUSE_INTL GetTraits()->SetLocale(); #endif // wxUSE_INTL + return true; +} + +wxString wxAppConsoleBase::GetAppName() const +{ + wxString name = m_appName; #ifndef __WXPALMOS__ - if ( m_appName.empty() && argv && argv[0] ) + if ( name.empty() ) { - // the application name is, by default, the name of its executable file - wxFileName::SplitPath(argv[0], NULL, &m_appName, NULL); + if ( argv ) + { + // the application name is, by default, the name of its executable file + wxFileName::SplitPath(argv[0], NULL, &name, NULL); + } } #endif // !__WXPALMOS__ + return name; +} - return true; +wxString wxAppConsoleBase::GetAppDisplayName() const +{ + // use the explicitly provided display name, if any + if ( !m_appDisplayName.empty() ) + return m_appDisplayName; + + // if the application name was explicitly set, use it as is as capitalizing + // it won't always produce good results + if ( !m_appName.empty() ) + return m_appName; + + // if neither is set, use the capitalized version of the program file as + // it's the most reasonable default + return GetAppName().Capitalize(); } wxEventLoopBase *wxAppConsoleBase::CreateMainLoop() -- 2.45.2