]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/toplevel.cpp
docking hint bug fix
[wxWidgets.git] / src / msw / toplevel.cpp
index 17ba69beda27d031f450760417b65a01f9eb379f..97fec59a6a216a314abd1029e0696ce7a56d3382 100644 (file)
@@ -27,6 +27,7 @@
 #include "wx/toplevel.h"
 
 #ifndef WX_PRECOMP
+    #include "wx/msw/missing.h"
     #include "wx/app.h"
     #include "wx/dialog.h"
     #include "wx/string.h"
     #include "wx/intl.h"
     #include "wx/frame.h"
     #include "wx/containr.h"        // wxSetFocusToChild()
+    #include "wx/module.h"
 #endif //WX_PRECOMP
 
-#include "wx/module.h"
 #include "wx/dynlib.h"
 
 #include "wx/msw/private.h"
 #if defined(__WXWINCE__) && !defined(__HANDHELDPC__)
-  #include <ole2.h>
-  #include <shellapi.h>
-  // Standard SDK doesn't have aygshell.dll: see include/wx/msw/wince/libraries.h
-  #if _WIN32_WCE < 400 || !defined(__WINCE_STANDARDSDK__)
-    #include <aygshell.h>
-  #endif
-#include "wx/msw/wince/missing.h"
+    #include <ole2.h>
+    #include <shellapi.h>
+    // Standard SDK doesn't have aygshell.dll: see include/wx/msw/wince/libraries.h
+    #if _WIN32_WCE < 400 || !defined(__WINCE_STANDARDSDK__)
+        #include <aygshell.h>
+    #endif
+    #include "wx/msw/wince/missing.h"
 #endif
 
-#include "wx/msw/missing.h"
 #include "wx/msw/winundef.h"
 
 #include "wx/display.h"
@@ -503,6 +503,11 @@ bool wxTopLevelWindowMSW::CreateFrame(const wxString& title,
 
     const wxSize sz = IsAlwaysMaximized() ? wxDefaultSize : size;
 
+#ifndef __WXWINCE__
+    if ( wxTheApp->GetLayoutDirection() == wxLayout_RightToLeft )
+        exflags |= WS_EX_LAYOUTRTL;
+#endif
+
     return MSWCreate(wxCanvasClassName, title, pos, sz, flags, exflags);
 }
 
@@ -563,6 +568,11 @@ bool wxTopLevelWindowMSW::Create(wxWindow *parent,
         dlgTemplate->style |= WS_POPUP;
 
 #ifndef __WXWINCE__
+        if ( wxTheApp->GetLayoutDirection() == wxLayout_RightToLeft )
+        {
+            dlgTemplate->dwExtendedStyle |= WS_EX_LAYOUTRTL;
+        }
+
         // force 3D-look if necessary, it looks impossibly ugly otherwise
         if ( style & (wxRESIZE_BORDER | wxCAPTION) )
             dlgTemplate->style |= DS_MODALFRAME;
@@ -761,6 +771,15 @@ void wxTopLevelWindowMSW::Restore()
     DoShowWindow(SW_RESTORE);
 }
 
+void wxTopLevelWindowMSW::SetLayoutDirection(wxLayoutDirection dir)
+{
+    if ( dir == wxLayout_Default )
+        dir = wxTheApp->GetLayoutDirection();
+
+    if ( dir != wxLayout_Default )
+        wxTopLevelWindowBase::SetLayoutDirection(dir);
+}
+
 // ----------------------------------------------------------------------------
 // wxTopLevelWindowMSW fullscreen
 // ----------------------------------------------------------------------------
@@ -1073,20 +1092,20 @@ bool wxTopLevelWindowMSW::SetTransparent(wxByte alpha)
     if ((exstyle & WS_EX_LAYERED) == 0 )
         SetWindowLong(GetHwnd(), GWL_EXSTYLE, exstyle | WS_EX_LAYERED);
 
-    return pSetLayeredWindowAttributes(GetHwnd(), 0, (BYTE)alpha, LWA_ALPHA) != 0;   
+    return pSetLayeredWindowAttributes(GetHwnd(), 0, (BYTE)alpha, LWA_ALPHA) != 0;
 }
 
 bool wxTopLevelWindowMSW::CanSetTransparent()
 {
     // The API is available on win2k and above
-    
+
     static int os_type = -1;
     static int ver_major = -1;
 
     if (os_type == -1)
         os_type = ::wxGetOsVersion(&ver_major);
 
-    return (os_type == wxWINDOWS_NT && ver_major >= 5);
+    return (os_type == wxOS_WINDOWS_NT && ver_major >= 5);
 }
 
 // ----------------------------------------------------------------------------