]> git.saurik.com Git - wxWidgets.git/commitdiff
add SetNativeTheme() (slightly modified patch 1884553)
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 27 Feb 2008 17:46:14 +0000 (17:46 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 27 Feb 2008 17:46:14 +0000 (17:46 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@52149 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
docs/latex/wx/app.tex
include/wx/app.h
include/wx/gtk/app.h
src/gtk/app.cpp

index 4f12f8d4dc1f72340620fb41aaef38e10d08e924..fa3672d775bcb2e02896418afe134965b9188f70 100644 (file)
@@ -279,7 +279,8 @@ All (GUI):
 - Made wxSizer::Fit() set the client size of the target window
 - Add support for wxDatePickerCtrl in wxGenericValidator (Herry Ayen Yang)
 - Added wxWindow::HasFocus().
-- Added wxGLCanvas::IsDisplaySupported()
+- Added wxGLCanvas::IsDisplaySupported().
+- Added wxApp::SetNativeTheme() (Stefan H.).
 
 wxGTK:
 
index adefdadd83d865eb066364b4572ae4f9a711c34c..3c2a3a25fa3b31cd8de5ec7fc5b4151239a173ac 100644 (file)
@@ -734,6 +734,19 @@ know what you're doing if you call it.
 \helpref{wxApp::GetInstance}{wxappgetinstance}
 
 
+\membersection{wxApp::SetNativeTheme}\label{wxappsetnativetheme}
+
+\func{bool}{SetNativeTheme}{\param{const}{wxString\&}{theme}}
+
+Allows runtime switching of the UI environment theme. Currently implemented for wxGTK2-only.
+
+Return \true if theme was successfully changed.
+
+\wxheading{Parameters}
+
+\docparam{theme}{The name of the new theme or an absolute path to a gtkrc-theme-file}
+
+
 \membersection{wxApp::SetTopWindow}\label{wxappsettopwindow}
 
 \func{void}{SetTopWindow}{\param{wxWindow* }{window}}
index d01c877acf5fb64fe24acd6067e5eca756c19c4a..553a29aa5c2cb2b98ad429f4a57811b5c04b4545 100644 (file)
@@ -509,6 +509,9 @@ public:
     // if it's unknown
     virtual wxLayoutDirection GetLayoutDirection() const;
 
+    // Change the theme used by the application, return true on success.
+    virtual bool SetNativeTheme(const wxString& WXUNUSED(theme)) { return false; }
+
 
     // command line parsing (GUI-specific)
     // ------------------------------------------------------------------------
index b258ea5a9969000994fc50ed33a4d33180ca778b..ce6da5421e6b319d73a229f42cfb608a4dae6aa6 100644 (file)
@@ -36,6 +36,7 @@ public:
      * (palette/visual/colorcube). under wxMSW, OnInitGui() does nothing by
      * default. when overriding this method, the code in it is likely to be
      * platform dependent, otherwise use OnInit(). */
+    virtual bool SetNativeTheme(const wxString& theme);
     virtual bool OnInitGui();
 
     // override base class (pure) virtuals
index 138f2eac56d6fb0bace87a7def1709c80f6acd92..d16741238b99ae806f35c5aa54a5cf9352cc19ea 100644 (file)
@@ -251,6 +251,30 @@ wxApp::~wxApp()
 {
 }
 
+bool wxApp::SetNativeTheme(const wxString& theme)
+{
+    wxString path;
+    path = gtk_rc_get_theme_dir();
+    path += "/";
+    path += theme.utf8_str();
+    path += "/gtk-2.0/gtkrc";
+
+    if ( wxFileExists(path.utf8_str()) )
+        gtk_rc_add_default_file(path.utf8_str());
+    else if ( wxFileExists(theme.utf8_str()) )
+        gtk_rc_add_default_file(theme.utf8_str());
+    else
+    {
+        wxLogWarning("Theme \"%s\" not available.", theme);
+
+        return false;
+    }
+
+    gtk_rc_reparse_all_for_settings(gtk_settings_get_default(), TRUE);
+
+    return true;
+}
+
 bool wxApp::OnInitGui()
 {
     if ( !wxAppBase::OnInitGui() )