removed src/gtk/eggtrayicon.h
[wxWidgets.git] / src / xrc / xmlres.cpp
index d988aed649ce97fbf3d80e61a667cdb4db6ea889..cbefc9fc06578c9849173d25a5a1ca08dd20bfe2 100644 (file)
@@ -19,6 +19,8 @@
     #pragma hdrstop
 #endif
 
     #pragma hdrstop
 #endif
 
+#if wxUSE_XRC
+
 #include "wx/dialog.h"
 #include "wx/panel.h"
 #include "wx/frame.h"
 #include "wx/dialog.h"
 #include "wx/panel.h"
 #include "wx/frame.h"
@@ -35,7 +37,7 @@
 #include "wx/fontmap.h"
 #include "wx/artprov.h"
 
 #include "wx/fontmap.h"
 #include "wx/artprov.h"
 
-#include "wx/xrc/xml.h"
+#include "wx/xml/xml.h"
 #include "wx/xrc/xmlres.h"
 
 #include "wx/arrimpl.cpp"
 #include "wx/xrc/xmlres.h"
 
 #include "wx/arrimpl.cpp"
@@ -60,7 +62,6 @@ wxXmlResource *wxXmlResource::ms_instance = NULL;
 
 wxXmlResource::wxXmlResource(int flags)
 {
 
 wxXmlResource::wxXmlResource(int flags)
 {
-    m_handlers.DeleteContents(TRUE);
     m_flags = flags;
     m_version = -1;
 }
     m_flags = flags;
     m_version = -1;
 }
@@ -69,7 +70,6 @@ wxXmlResource::wxXmlResource(const wxString& filemask, int flags)
 {
     m_flags = flags;
     m_version = -1;
 {
     m_flags = flags;
     m_version = -1;
-    m_handlers.DeleteContents(TRUE);
     Load(filemask);
 }
 
     Load(filemask);
 }
 
@@ -84,7 +84,7 @@ bool wxXmlResource::Load(const wxString& filemask)
     wxString fnd;
     wxXmlResourceDataRecord *drec;
     bool iswild = wxIsWild(filemask);
     wxString fnd;
     wxXmlResourceDataRecord *drec;
     bool iswild = wxIsWild(filemask);
-    bool rt = TRUE;
+    bool rt = true;
 
 #if wxUSE_FILESYSTEM
     wxFileSystem fsys;
 
 #if wxUSE_FILESYSTEM
     wxFileSystem fsys;
@@ -107,7 +107,7 @@ bool wxXmlResource::Load(const wxString& filemask)
         //     filename and not URL:
         if (wxFileName::FileExists(fnd))
         {
         //     filename and not URL:
         if (wxFileName::FileExists(fnd))
         {
-            // Make the name absolute filename, because the app may 
+            // Make the name absolute filename, because the app may
             // change working directory later:
             wxFileName fn(fnd);
             if (fn.IsRelative())
             // change working directory later:
             wxFileName fn(fnd);
             if (fn.IsRelative())
@@ -115,14 +115,16 @@ bool wxXmlResource::Load(const wxString& filemask)
                 fn.MakeAbsolute();
                 fnd = fn.GetFullPath();
             }
                 fn.MakeAbsolute();
                 fnd = fn.GetFullPath();
             }
+#if wxUSE_FILESYSTEM
+            fnd = wxFileSystem::FileNameToURL(fnd);
+#endif
         }
         }
-        
+
 #if wxUSE_FILESYSTEM
         if (fnd.Lower().Matches(wxT("*.zip")) ||
             fnd.Lower().Matches(wxT("*.xrs")))
         {
 #if wxUSE_FILESYSTEM
         if (fnd.Lower().Matches(wxT("*.zip")) ||
             fnd.Lower().Matches(wxT("*.xrs")))
         {
-            wxString url(wxFileSystem::FileNameToURL(fnd));
-            rt = rt && Load(url + wxT("#zip:*.xrc"));
+            rt = rt && Load(fnd + wxT("#zip:*.xrc"));
         }
         else
 #endif
         }
         else
 #endif
@@ -139,7 +141,7 @@ bool wxXmlResource::Load(const wxString& filemask)
     }
 #   undef wxXmlFindFirst
 #   undef wxXmlFindNext
     }
 #   undef wxXmlFindFirst
 #   undef wxXmlFindNext
-    return rt;
+    return rt && UpdateResources();
 }
 
 
 }
 
 
@@ -161,7 +163,7 @@ void wxXmlResource::InsertHandler(wxXmlResourceHandler *handler)
 
 void wxXmlResource::ClearHandlers()
 {
 
 void wxXmlResource::ClearHandlers()
 {
-    m_handlers.Clear();
+    WX_CLEAR_LIST(wxList, m_handlers);
 }
 
 
 }
 
 
@@ -260,7 +262,7 @@ bool wxXmlResource::AttachUnknownControl(const wxString& name,
     if (!container)
     {
         wxLogError(_("Cannot find container for unknown control '%s'."), name.c_str());
     if (!container)
     {
         wxLogError(_("Cannot find container for unknown control '%s'."), name.c_str());
-        return FALSE;
+        return false;
     }
     return control->Reparent(container);
 }
     }
     return control->Reparent(container);
 }
@@ -274,9 +276,9 @@ static void ProcessPlatformProperty(wxXmlNode *node)
     wxXmlNode *c = node->GetChildren();
     while (c)
     {
     wxXmlNode *c = node->GetChildren();
     while (c)
     {
-        isok = FALSE;
+        isok = false;
         if (!c->GetPropVal(wxT("platform"), &s))
         if (!c->GetPropVal(wxT("platform"), &s))
-            isok = TRUE;
+            isok = true;
         else
         {
             wxStringTokenizer tkn(s, wxT(" |"));
         else
         {
             wxStringTokenizer tkn(s, wxT(" |"));
@@ -284,14 +286,13 @@ static void ProcessPlatformProperty(wxXmlNode *node)
             while (tkn.HasMoreTokens())
             {
                 s = tkn.GetNextToken();
             while (tkn.HasMoreTokens())
             {
                 s = tkn.GetNextToken();
-#ifdef __WXMSW__
+#ifdef __WINDOWS__
                 if (s == wxT("win")) isok = true;
 #endif
                 if (s == wxT("win")) isok = true;
 #endif
-#ifdef __UNIX__
-                if (s == wxT("unix")) isok = true;
-#endif
-#ifdef __MAC__
+#if defined(__MAC__) || defined(__APPLE__)
                 if (s == wxT("mac")) isok = true;
                 if (s == wxT("mac")) isok = true;
+#elif defined(__UNIX__)
+                if (s == wxT("unix")) isok = true;
 #endif
 #ifdef __OS2__
                 if (s == wxT("os2")) isok = true;
 #endif
 #ifdef __OS2__
                 if (s == wxT("os2")) isok = true;
@@ -319,11 +320,13 @@ static void ProcessPlatformProperty(wxXmlNode *node)
 
 
 
 
 
 
-void wxXmlResource::UpdateResources()
+bool wxXmlResource::UpdateResources()
 {
 {
+    bool rt = true;
     bool modif;
 #   if wxUSE_FILESYSTEM
     wxFSFile *file = NULL;
     bool modif;
 #   if wxUSE_FILESYSTEM
     wxFSFile *file = NULL;
+    wxUnusedVar(file);
     wxFileSystem fsys;
 #   endif
 
     wxFileSystem fsys;
 #   endif
 
@@ -331,9 +334,9 @@ void wxXmlResource::UpdateResources()
 #if !wxUSE_UNICODE && wxUSE_INTL
     if ( (GetFlags() & wxXRC_USE_LOCALE) == 0 )
     {
 #if !wxUSE_UNICODE && wxUSE_INTL
     if ( (GetFlags() & wxXRC_USE_LOCALE) == 0 )
     {
-        // In case we are not using wxLocale to translate strings, convert the strings
-        // GUI's charset. This must not be done when wxXRC_USE_LOCALE is on, because
-        // it could break wxGetTranslation lookup.
+        // In case we are not using wxLocale to translate strings, convert the
+        // strings GUI's charset. This must not be done when wxXRC_USE_LOCALE
+        // is on, because it could break wxGetTranslation lookup.
         encoding = wxLocale::GetSystemEncodingName();
     }
 #endif
         encoding = wxLocale::GetSystemEncodingName();
     }
 #endif
@@ -342,14 +345,18 @@ void wxXmlResource::UpdateResources()
     {
         modif = (m_data[i].Doc == NULL);
 
     {
         modif = (m_data[i].Doc == NULL);
 
-        if (!modif)
+        if (!modif && !(m_flags & wxXRC_NO_RELOADING))
         {
 #           if wxUSE_FILESYSTEM
             file = fsys.OpenFile(m_data[i].File);
             modif = file && file->GetModificationTime() > m_data[i].Time;
             if (!file)
         {
 #           if wxUSE_FILESYSTEM
             file = fsys.OpenFile(m_data[i].File);
             modif = file && file->GetModificationTime() > m_data[i].Time;
             if (!file)
+            {
                 wxLogError(_("Cannot open file '%s'."), m_data[i].File.c_str());
                 wxLogError(_("Cannot open file '%s'."), m_data[i].File.c_str());
+                rt = false;
+            }
             wxDELETE(file);
             wxDELETE(file);
+            wxUnusedVar(file);
 #           else
             modif = wxDateTime(wxFileModificationTime(m_data[i].File)) > m_data[i].Time;
 #           endif
 #           else
             modif = wxDateTime(wxFileModificationTime(m_data[i].File)) > m_data[i].Time;
 #           endif
@@ -357,12 +364,15 @@ void wxXmlResource::UpdateResources()
 
         if (modif)
         {
 
         if (modif)
         {
+            wxLogTrace(_T("xrc"),
+                       _T("opening file '%s'"), m_data[i].File.c_str());
+
             wxInputStream *stream = NULL;
 
 #           if wxUSE_FILESYSTEM
             file = fsys.OpenFile(m_data[i].File);
             wxInputStream *stream = NULL;
 
 #           if wxUSE_FILESYSTEM
             file = fsys.OpenFile(m_data[i].File);
-                       if (file)
-                               stream = file->GetStream();
+            if (file)
+                stream = file->GetStream();
 #           else
             stream = new wxFileInputStream(m_data[i].File);
 #           endif
 #           else
             stream = new wxFileInputStream(m_data[i].File);
 #           endif
@@ -377,14 +387,16 @@ void wxXmlResource::UpdateResources()
                 wxLogError(_("Cannot load resources from file '%s'."),
                            m_data[i].File.c_str());
                 wxDELETE(m_data[i].Doc);
                 wxLogError(_("Cannot load resources from file '%s'."),
                            m_data[i].File.c_str());
                 wxDELETE(m_data[i].Doc);
+                rt = false;
             }
             else if (m_data[i].Doc->GetRoot()->GetName() != wxT("resource"))
             {
                 wxLogError(_("Invalid XRC resource '%s': doesn't have root node 'resource'."), m_data[i].File.c_str());
                 wxDELETE(m_data[i].Doc);
             }
             else if (m_data[i].Doc->GetRoot()->GetName() != wxT("resource"))
             {
                 wxLogError(_("Invalid XRC resource '%s': doesn't have root node 'resource'."), m_data[i].File.c_str());
                 wxDELETE(m_data[i].Doc);
+                rt = false;
             }
             else
             }
             else
-                       {
+            {
                 long version;
                 int v1, v2, v3, v4;
                 wxString verstr = m_data[i].Doc->GetRoot()->GetPropVal(
                 long version;
                 int v1, v2, v3, v4;
                 wxString verstr = m_data[i].Doc->GetRoot()->GetPropVal(
@@ -397,19 +409,29 @@ void wxXmlResource::UpdateResources()
                 if (m_version == -1)
                     m_version = version;
                 if (m_version != version)
                 if (m_version == -1)
                     m_version = version;
                 if (m_version != version)
+                {
                     wxLogError(_("Resource files must have same version number!"));
                     wxLogError(_("Resource files must have same version number!"));
+                    rt = false;
+                }
 
                 ProcessPlatformProperty(m_data[i].Doc->GetRoot());
 
                 ProcessPlatformProperty(m_data[i].Doc->GetRoot());
-                               m_data[i].Time = file->GetModificationTime();
-                       }
+#if wxUSE_FILESYSTEM
+                m_data[i].Time = file->GetModificationTime();
+#else
+                m_data[i].Time = wxDateTime(wxFileModificationTime(m_data[i].File));
+#endif
+            }
 
 #           if wxUSE_FILESYSTEM
 
 #           if wxUSE_FILESYSTEM
-                               wxDELETE(file);
+                wxDELETE(file);
+                wxUnusedVar(file);
 #           else
 #           else
-                               wxDELETE(stream);
+                wxDELETE(stream);
 #           endif
         }
     }
 #           endif
         }
     }
+
+    return rt;
 }
 
 
 }
 
 
@@ -439,7 +461,7 @@ wxXmlNode *wxXmlResource::DoFindResource(wxXmlNode *parent,
                 wxString refName = node->GetPropVal(wxT("ref"), wxEmptyString);
                 if (refName.empty())
                     continue;
                 wxString refName = node->GetPropVal(wxT("ref"), wxEmptyString);
                 if (refName.empty())
                     continue;
-                wxXmlNode* refNode = FindResource(refName, wxEmptyString, TRUE);
+                wxXmlNode* refNode = FindResource(refName, wxEmptyString, true);
                 if (refNode &&
                     refNode->GetPropVal(wxT("class"), wxEmptyString) == classname)
                 {
                 if (refNode &&
                     refNode->GetPropVal(wxT("class"), wxEmptyString) == classname)
                 {
@@ -456,7 +478,7 @@ wxXmlNode *wxXmlResource::DoFindResource(wxXmlNode *parent,
                  (node->GetName() == wxT("object") ||
                   node->GetName() == wxT("object_ref")) )
             {
                  (node->GetName() == wxT("object") ||
                   node->GetName() == wxT("object_ref")) )
             {
-                wxXmlNode* found = DoFindResource(node, name, classname, TRUE);
+                wxXmlNode* found = DoFindResource(node, name, classname, true);
                 if ( found )
                     return found;
             }
                 if ( found )
                     return found;
             }
@@ -548,7 +570,7 @@ wxObject *wxXmlResource::CreateResFromNode(wxXmlNode *node, wxObject *parent,
     if ( node->GetName() == wxT("object_ref") )
     {
         wxString refName = node->GetPropVal(wxT("ref"), wxEmptyString);
     if ( node->GetName() == wxT("object_ref") )
     {
         wxString refName = node->GetPropVal(wxT("ref"), wxEmptyString);
-        wxXmlNode* refNode = FindResource(refName, wxEmptyString, TRUE);
+        wxXmlNode* refNode = FindResource(refName, wxEmptyString, true);
 
         if ( !refNode )
         {
 
         if ( !refNode )
         {
@@ -566,15 +588,15 @@ wxObject *wxXmlResource::CreateResFromNode(wxXmlNode *node, wxObject *parent,
     wxXmlResourceHandler *handler;
 
     if (handlerToUse)
     wxXmlResourceHandler *handler;
 
     if (handlerToUse)
-    {        
+    {
         if (handlerToUse->CanHandle(node))
         {
             return handlerToUse->CreateResource(node, parent, instance);
         }
     }
     else if (node->GetName() == wxT("object"))
         if (handlerToUse->CanHandle(node))
         {
             return handlerToUse->CreateResource(node, parent, instance);
         }
     }
     else if (node->GetName() == wxT("object"))
-    {    
-        wxNode *ND = m_handlers.GetFirst();
+    {
+        wxList::compatibility_iterator ND = m_handlers.GetFirst();
         while (ND)
         {
             handler = (wxXmlResourceHandler*)ND->GetData();
         while (ND)
         {
             handler = (wxXmlResourceHandler*)ND->GetData();
@@ -604,7 +626,6 @@ wxXmlSubclassFactoriesList *wxXmlResource::ms_subclassFactories = NULL;
     if (!ms_subclassFactories)
     {
         ms_subclassFactories = new wxXmlSubclassFactoriesList;
     if (!ms_subclassFactories)
     {
         ms_subclassFactories = new wxXmlSubclassFactoriesList;
-        ms_subclassFactories->DeleteContents(TRUE);
     }
     ms_subclassFactories->Append(factory);
 }
     }
     ms_subclassFactories->Append(factory);
 }
@@ -631,7 +652,7 @@ public:
 
 wxXmlResourceHandler::wxXmlResourceHandler()
         : m_node(NULL), m_parent(NULL), m_instance(NULL),
 
 wxXmlResourceHandler::wxXmlResourceHandler()
         : m_node(NULL), m_parent(NULL), m_instance(NULL),
-          m_parentAsWindow(NULL), m_instanceAsWindow(NULL)
+          m_parentAsWindow(NULL)
 {}
 
 
 {}
 
 
@@ -641,7 +662,7 @@ wxObject *wxXmlResourceHandler::CreateResource(wxXmlNode *node, wxObject *parent
     wxXmlNode *myNode = m_node;
     wxString myClass = m_class;
     wxObject *myParent = m_parent, *myInstance = m_instance;
     wxXmlNode *myNode = m_node;
     wxString myClass = m_class;
     wxObject *myParent = m_parent, *myInstance = m_instance;
-    wxWindow *myParentAW = m_parentAsWindow, *myInstanceAW = m_instanceAsWindow;
+    wxWindow *myParentAW = m_parentAsWindow;
 
     m_instance = instance;
     if (!m_instance && node->HasProp(wxT("subclass")) &&
 
     m_instance = instance;
     if (!m_instance && node->HasProp(wxT("subclass")) &&
@@ -650,7 +671,7 @@ wxObject *wxXmlResourceHandler::CreateResource(wxXmlNode *node, wxObject *parent
         wxString subclass = node->GetPropVal(wxT("subclass"), wxEmptyString);
         if (!subclass.empty())
         {
         wxString subclass = node->GetPropVal(wxT("subclass"), wxEmptyString);
         if (!subclass.empty())
         {
-            for (wxXmlSubclassFactoriesList::Node *i = wxXmlResource::ms_subclassFactories->GetFirst();
+            for (wxXmlSubclassFactoriesList::compatibility_iterator i = wxXmlResource::ms_subclassFactories->GetFirst();
                  i; i = i->GetNext())
             {
                 m_instance = i->GetData()->Create(subclass);
                  i; i = i->GetNext())
             {
                 m_instance = i->GetData()->Create(subclass);
@@ -671,14 +692,13 @@ wxObject *wxXmlResourceHandler::CreateResource(wxXmlNode *node, wxObject *parent
     m_class = node->GetPropVal(wxT("class"), wxEmptyString);
     m_parent = parent;
     m_parentAsWindow = wxDynamicCast(m_parent, wxWindow);
     m_class = node->GetPropVal(wxT("class"), wxEmptyString);
     m_parent = parent;
     m_parentAsWindow = wxDynamicCast(m_parent, wxWindow);
-    m_instanceAsWindow = wxDynamicCast(m_instance, wxWindow);
 
     wxObject *returned = DoCreateResource();
 
     m_node = myNode;
     m_class = myClass;
     m_parent = myParent; m_parentAsWindow = myParentAW;
 
     wxObject *returned = DoCreateResource();
 
     m_node = myNode;
     m_class = myClass;
     m_parent = myParent; m_parentAsWindow = myParentAW;
-    m_instance = myInstance; m_instanceAsWindow = myInstanceAW;
+    m_instance = myInstance;
 
     return returned;
 }
 
     return returned;
 }
@@ -694,6 +714,7 @@ void wxXmlResourceHandler::AddStyle(const wxString& name, int value)
 
 void wxXmlResourceHandler::AddWindowStyles()
 {
 
 void wxXmlResourceHandler::AddWindowStyles()
 {
+    XRC_ADD_STYLE(wxCLIP_CHILDREN);
     XRC_ADD_STYLE(wxSIMPLE_BORDER);
     XRC_ADD_STYLE(wxSUNKEN_BORDER);
     XRC_ADD_STYLE(wxDOUBLE_BORDER);
     XRC_ADD_STYLE(wxSIMPLE_BORDER);
     XRC_ADD_STYLE(wxSUNKEN_BORDER);
     XRC_ADD_STYLE(wxDOUBLE_BORDER);
@@ -703,6 +724,8 @@ void wxXmlResourceHandler::AddWindowStyles()
     XRC_ADD_STYLE(wxTRANSPARENT_WINDOW);
     XRC_ADD_STYLE(wxWANTS_CHARS);
     XRC_ADD_STYLE(wxNO_FULL_REPAINT_ON_RESIZE);
     XRC_ADD_STYLE(wxTRANSPARENT_WINDOW);
     XRC_ADD_STYLE(wxWANTS_CHARS);
     XRC_ADD_STYLE(wxNO_FULL_REPAINT_ON_RESIZE);
+    XRC_ADD_STYLE(wxFULL_REPAINT_ON_RESIZE);
+    XRC_ADD_STYLE(wxWS_EX_BLOCK_EVENTS);
 }
 
 
 }
 
 
@@ -739,7 +762,8 @@ int wxXmlResourceHandler::GetStyle(const wxString& param, int defaults)
 
 wxString wxXmlResourceHandler::GetText(const wxString& param, bool translate)
 {
 
 wxString wxXmlResourceHandler::GetText(const wxString& param, bool translate)
 {
-    wxString str1(GetParamValue(param));
+    wxXmlNode *parNode = GetParamNode(param);
+    wxString str1(GetNodeContent(parNode));
     wxString str2;
     const wxChar *dt;
     wxChar amp_char;
     wxString str2;
     const wxChar *dt;
     wxChar amp_char;
@@ -763,23 +787,63 @@ wxString wxXmlResourceHandler::GetText(const wxString& param, bool translate)
             else
                 str2 << wxT('&') << *dt;
         }
             else
                 str2 << wxT('&') << *dt;
         }
-        // Remap \n to CR, \r to LF, \t to TAB:
+        // Remap \n to CR, \r to LF, \t to TAB, \\ to \:
         else if (*dt == wxT('\\'))
             switch (*(++dt))
             {
         else if (*dt == wxT('\\'))
             switch (*(++dt))
             {
-                case wxT('n') : str2 << wxT('\n'); break;
-                case wxT('t') : str2 << wxT('\t'); break;
-                case wxT('r') : str2 << wxT('\r'); break;
-                default       : str2 << wxT('\\') << *dt; break;
+                case wxT('n'):
+                    str2 << wxT('\n');
+                    break;
+                    
+                case wxT('t'):
+                    str2 << wxT('\t');
+                    break;
+                    
+                case wxT('r'):
+                    str2 << wxT('\r');
+                    break;
+
+                case wxT('\\') :
+                    // "\\" wasn't translated to "\" prior to 2.5.3.0:
+                    if (m_resource->CompareVersion(2,5,3,0) >= 0)
+                    {
+                        str2 << wxT('\\');
+                        break;
+                    }
+                    // else fall-through to default: branch below
+    
+                default:
+                    str2 << wxT('\\') << *dt;
+                    break;
             }
         else str2 << *dt;
     }
 
             }
         else str2 << *dt;
     }
 
-    if (translate && m_resource->GetFlags() & wxXRC_USE_LOCALE)
-        return wxGetTranslation(str2);
+    if (m_resource->GetFlags() & wxXRC_USE_LOCALE)
+    {
+        if (translate && parNode &&
+            parNode->GetPropVal(wxT("translate"), wxEmptyString) != wxT("0"))
+        {
+            return wxGetTranslation(str2);
+        }
+        else
+        {
+#if wxUSE_UNICODE
+            return str2;
+#else
+            // The string is internally stored as UTF-8, we have to convert
+            // it into system's default encoding so that it can be displayed:
+            return wxString(str2.mb_str(wxConvUTF8), wxConvLocal);
+#endif
+        }
+    }
     else
     else
+    {
+        // If wxXRC_USE_LOCALE is not set, then the string is already in
+        // system's default encoding in ANSI build, so we don't have to
+        // do anything special here.
         return str2;
         return str2;
-
+    }
 }
 
 
 }
 
 
@@ -852,11 +916,15 @@ wxBitmap wxXmlResourceHandler::GetBitmap(const wxString& param,
         wxString sid = bmpNode->GetPropVal(wxT("stock_id"), wxEmptyString);
         if ( !sid.empty() )
         {
         wxString sid = bmpNode->GetPropVal(wxT("stock_id"), wxEmptyString);
         if ( !sid.empty() )
         {
-            wxString scl = bmpNode->GetPropVal(wxT("stock_client"), defaultArtClient);
+            wxString scl = bmpNode->GetPropVal(wxT("stock_client"), wxEmptyString);
+            if (scl.empty())
+                scl = defaultArtClient;
+            else
+                scl = wxART_MAKE_CLIENT_ID_FROM_STR(scl);
+            
             wxBitmap stockArt =
                 wxArtProvider::GetBitmap(wxART_MAKE_ART_ID_FROM_STR(sid),
             wxBitmap stockArt =
                 wxArtProvider::GetBitmap(wxART_MAKE_ART_ID_FROM_STR(sid),
-                                         wxART_MAKE_CLIENT_ID_FROM_STR(scl),
-                                         size);
+                                         scl, size);
             if ( stockArt.Ok() )
                 return stockArt;
         }
             if ( stockArt.Ok() )
                 return stockArt;
         }
@@ -951,7 +1019,7 @@ wxSize wxXmlResourceHandler::GetSize(const wxString& param)
     wxString s = GetParamValue(param);
     if (s.IsEmpty()) s = wxT("-1,-1");
     bool is_dlg;
     wxString s = GetParamValue(param);
     if (s.IsEmpty()) s = wxT("-1,-1");
     bool is_dlg;
-    long sx, sy;
+    long sx, sy = 0;
 
     is_dlg = s[s.Length()-1] == wxT('d');
     if (is_dlg) s.RemoveLast();
 
     is_dlg = s[s.Length()-1] == wxT('d');
     if (is_dlg) s.RemoveLast();
@@ -965,9 +1033,7 @@ wxSize wxXmlResourceHandler::GetSize(const wxString& param)
 
     if (is_dlg)
     {
 
     if (is_dlg)
     {
-        if (m_instanceAsWindow)
-            return wxDLG_UNIT(m_instanceAsWindow, wxSize(sx, sy));
-        else if (m_parentAsWindow)
+        if (m_parentAsWindow)
             return wxDLG_UNIT(m_parentAsWindow, wxSize(sx, sy));
         else
         {
             return wxDLG_UNIT(m_parentAsWindow, wxSize(sx, sy));
         else
         {
@@ -1006,9 +1072,7 @@ wxCoord wxXmlResourceHandler::GetDimension(const wxString& param, wxCoord defaul
 
     if (is_dlg)
     {
 
     if (is_dlg)
     {
-        if (m_instanceAsWindow)
-            return wxDLG_UNIT(m_instanceAsWindow, wxSize(sx, 0)).x;
-        else if (m_parentAsWindow)
+        if (m_parentAsWindow)
             return wxDLG_UNIT(m_parentAsWindow, wxSize(sx, 0)).x;
         else
         {
             return wxDLG_UNIT(m_parentAsWindow, wxSize(sx, 0)).x;
         else
         {
@@ -1051,7 +1115,7 @@ wxFont wxXmlResourceHandler::GetFont(const wxString& param)
     else if (family == wxT("swiss")) ifamily = wxSWISS;
     else if (family == wxT("modern")) ifamily = wxMODERN;
 
     else if (family == wxT("swiss")) ifamily = wxSWISS;
     else if (family == wxT("modern")) ifamily = wxMODERN;
 
-    bool underlined = GetBool(wxT("underlined"), FALSE);
+    bool underlined = GetBool(wxT("underlined"), false);
 
     wxString encoding = GetParamValue(wxT("encoding"));
     wxFontMapper mapper;
 
     wxString encoding = GetParamValue(wxT("encoding"));
     wxFontMapper mapper;
@@ -1068,7 +1132,7 @@ wxFont wxXmlResourceHandler::GetFont(const wxString& param)
     wxStringTokenizer tk(faces, wxT(","));
     while (tk.HasMoreTokens())
     {
     wxStringTokenizer tk(faces, wxT(","));
     while (tk.HasMoreTokens())
     {
-        int index = enu.GetFacenames()->Index(tk.GetNextToken(), FALSE);
+        int index = enu.GetFacenames()->Index(tk.GetNextToken(), false);
         if (index != wxNOT_FOUND)
         {
             facename = (*enu.GetFacenames())[index];
         if (index != wxNOT_FOUND)
         {
             facename = (*enu.GetFacenames())[index];
@@ -1088,17 +1152,20 @@ void wxXmlResourceHandler::SetupWindow(wxWindow *wnd)
     //FIXME : add cursor
 
     if (HasParam(wxT("exstyle")))
     //FIXME : add cursor
 
     if (HasParam(wxT("exstyle")))
-        wnd->SetExtraStyle(GetStyle(wxT("exstyle")));
+        // Have to OR it with existing style, since
+        // some implementations (e.g. wxGTK) use the extra style
+        // during creation
+        wnd->SetExtraStyle(wnd->GetExtraStyle() | GetStyle(wxT("exstyle")));
     if (HasParam(wxT("bg")))
         wnd->SetBackgroundColour(GetColour(wxT("bg")));
     if (HasParam(wxT("fg")))
         wnd->SetForegroundColour(GetColour(wxT("fg")));
     if (GetBool(wxT("enabled"), 1) == 0)
     if (HasParam(wxT("bg")))
         wnd->SetBackgroundColour(GetColour(wxT("bg")));
     if (HasParam(wxT("fg")))
         wnd->SetForegroundColour(GetColour(wxT("fg")));
     if (GetBool(wxT("enabled"), 1) == 0)
-        wnd->Enable(FALSE);
+        wnd->Enable(false);
     if (GetBool(wxT("focused"), 0) == 1)
         wnd->SetFocus();
     if (GetBool(wxT("hidden"), 0) == 1)
     if (GetBool(wxT("focused"), 0) == 1)
         wnd->SetFocus();
     if (GetBool(wxT("hidden"), 0) == 1)
-        wnd->Show(FALSE);
+        wnd->Show(false);
 #if wxUSE_TOOLTIPS
     if (HasParam(wxT("tooltip")))
         wnd->SetToolTip(GetText(wxT("tooltip")));
 #if wxUSE_TOOLTIPS
     if (HasParam(wxT("tooltip")))
         wnd->SetToolTip(GetText(wxT("tooltip")));
@@ -1171,14 +1238,12 @@ static int XRCID_Lookup(const wxChar *str_id, int value_if_not_found = -2)
     index %= XRCID_TABLE_SIZE;
 
     XRCID_record *oldrec = NULL;
     index %= XRCID_TABLE_SIZE;
 
     XRCID_record *oldrec = NULL;
-    int matchcnt = 0;
     for (XRCID_record *rec = XRCID_Records[index]; rec; rec = rec->next)
     {
         if (wxStrcmp(rec->key, str_id) == 0)
         {
             return rec->id;
         }
     for (XRCID_record *rec = XRCID_Records[index]; rec; rec = rec->next)
     {
         if (wxStrcmp(rec->key, str_id) == 0)
         {
             return rec->id;
         }
-        matchcnt++;
         oldrec = rec;
     }
 
         oldrec = rec;
     }
 
@@ -1237,20 +1302,107 @@ static void AddStdXRCID_Records()
 {
 #define stdID(id) XRCID_Lookup(wxT(#id), id)
     stdID(-1);
 {
 #define stdID(id) XRCID_Lookup(wxT(#id), id)
     stdID(-1);
-    stdID(wxID_OPEN); stdID(wxID_CLOSE); stdID(wxID_NEW);
-    stdID(wxID_SAVE); stdID(wxID_SAVEAS); stdID(wxID_REVERT);
-    stdID(wxID_EXIT); stdID(wxID_UNDO); stdID(wxID_REDO);
-    stdID(wxID_HELP); stdID(wxID_PRINT); stdID(wxID_PRINT_SETUP);
-    stdID(wxID_PREVIEW); stdID(wxID_ABOUT); stdID(wxID_HELP_CONTENTS);
-    stdID(wxID_HELP_COMMANDS); stdID(wxID_HELP_PROCEDURES);
-    stdID(wxID_CUT); stdID(wxID_COPY); stdID(wxID_PASTE);
-    stdID(wxID_CLEAR); stdID(wxID_FIND); stdID(wxID_DUPLICATE);
-    stdID(wxID_SELECTALL); stdID(wxID_OK); stdID(wxID_CANCEL);
-    stdID(wxID_APPLY); stdID(wxID_YES); stdID(wxID_NO);
-    stdID(wxID_STATIC); stdID(wxID_FORWARD); stdID(wxID_BACKWARD);
-    stdID(wxID_DEFAULT); stdID(wxID_MORE); stdID(wxID_SETUP);
-    stdID(wxID_RESET); stdID(wxID_HELP_CONTEXT);
+
+    stdID(wxID_ANY);
+    stdID(wxID_SEPARATOR);
+    
+    stdID(wxID_OPEN);
+    stdID(wxID_CLOSE);
+    stdID(wxID_NEW);
+    stdID(wxID_SAVE);
+    stdID(wxID_SAVEAS);
+    stdID(wxID_REVERT);
+    stdID(wxID_EXIT);
+    stdID(wxID_UNDO);
+    stdID(wxID_REDO);
+    stdID(wxID_HELP);
+    stdID(wxID_PRINT);
+    stdID(wxID_PRINT_SETUP);
+    stdID(wxID_PREVIEW);
+    stdID(wxID_ABOUT);
+    stdID(wxID_HELP_CONTENTS);
+    stdID(wxID_HELP_COMMANDS);
+    stdID(wxID_HELP_PROCEDURES);
+    stdID(wxID_HELP_CONTEXT);
     stdID(wxID_CLOSE_ALL);
     stdID(wxID_CLOSE_ALL);
+    stdID(wxID_PREFERENCES);
+    stdID(wxID_CUT);
+    stdID(wxID_COPY);
+    stdID(wxID_PASTE);
+    stdID(wxID_CLEAR);
+    stdID(wxID_FIND);
+    stdID(wxID_DUPLICATE);
+    stdID(wxID_SELECTALL);
+    stdID(wxID_DELETE);
+    stdID(wxID_REPLACE);
+    stdID(wxID_REPLACE_ALL);
+    stdID(wxID_PROPERTIES);
+    stdID(wxID_VIEW_DETAILS);
+    stdID(wxID_VIEW_LARGEICONS);
+    stdID(wxID_VIEW_SMALLICONS);
+    stdID(wxID_VIEW_LIST);
+    stdID(wxID_VIEW_SORTDATE);
+    stdID(wxID_VIEW_SORTNAME);
+    stdID(wxID_VIEW_SORTSIZE);
+    stdID(wxID_VIEW_SORTTYPE);
+    stdID(wxID_FILE1);
+    stdID(wxID_FILE2);
+    stdID(wxID_FILE3);
+    stdID(wxID_FILE4);
+    stdID(wxID_FILE5);
+    stdID(wxID_FILE6);
+    stdID(wxID_FILE7);
+    stdID(wxID_FILE8);
+    stdID(wxID_FILE9);
+    stdID(wxID_OK);
+    stdID(wxID_CANCEL);
+    stdID(wxID_APPLY);
+    stdID(wxID_YES);
+    stdID(wxID_NO);
+    stdID(wxID_STATIC);
+    stdID(wxID_FORWARD);
+    stdID(wxID_BACKWARD);
+    stdID(wxID_DEFAULT);
+    stdID(wxID_MORE);
+    stdID(wxID_SETUP);
+    stdID(wxID_RESET);
+    stdID(wxID_CONTEXT_HELP);
+    stdID(wxID_YESTOALL);
+    stdID(wxID_NOTOALL);
+    stdID(wxID_ABORT);
+    stdID(wxID_RETRY);
+    stdID(wxID_IGNORE);
+    stdID(wxID_ADD);
+    stdID(wxID_REMOVE);
+    stdID(wxID_UP);
+    stdID(wxID_DOWN);
+    stdID(wxID_HOME);
+    stdID(wxID_REFRESH);
+    stdID(wxID_STOP);
+    stdID(wxID_INDEX);
+    stdID(wxID_BOLD);
+    stdID(wxID_ITALIC);
+    stdID(wxID_JUSTIFY_CENTER);
+    stdID(wxID_JUSTIFY_FILL);
+    stdID(wxID_JUSTIFY_RIGHT);
+    stdID(wxID_JUSTIFY_LEFT);
+    stdID(wxID_UNDERLINE);
+    stdID(wxID_INDENT);
+    stdID(wxID_UNINDENT);
+    stdID(wxID_ZOOM_100);
+    stdID(wxID_ZOOM_FIT);
+    stdID(wxID_ZOOM_IN);
+    stdID(wxID_ZOOM_OUT);
+    stdID(wxID_UNDELETE);
+    stdID(wxID_REVERT_TO_SAVED);
+    stdID(wxID_SYSTEM_MENU);
+    stdID(wxID_CLOSE_FRAME);
+    stdID(wxID_MOVE_FRAME);
+    stdID(wxID_RESIZE_FRAME);
+    stdID(wxID_MAXIMIZE_FRAME);
+    stdID(wxID_ICONIZE_FRAME);
+    stdID(wxID_RESTORE_FRAME);
+
 #undef stdID
 }
 
 #undef stdID
 }
 
@@ -1269,11 +1421,13 @@ public:
     {
         AddStdXRCID_Records();
         wxXmlResource::AddSubclassFactory(new wxXmlSubclassFactoryCXX);
     {
         AddStdXRCID_Records();
         wxXmlResource::AddSubclassFactory(new wxXmlSubclassFactoryCXX);
-        return TRUE;
+        return true;
     }
     void OnExit()
     {
         delete wxXmlResource::Set(NULL);
     }
     void OnExit()
     {
         delete wxXmlResource::Set(NULL);
+        if(wxXmlResource::ms_subclassFactories)
+            WX_CLEAR_LIST(wxXmlSubclassFactoriesList, *wxXmlResource::ms_subclassFactories);
         wxDELETE(wxXmlResource::ms_subclassFactories);
         CleanXRCID_Records();
     }
         wxDELETE(wxXmlResource::ms_subclassFactories);
         CleanXRCID_Records();
     }
@@ -1290,3 +1444,5 @@ void wxXmlInitResourceModule()
     module->Init();
     wxModule::RegisterModule(module);
 }
     module->Init();
     wxModule::RegisterModule(module);
 }
+
+#endif // wxUSE_XRC