[Git][wxwidgets/wxwidgets][master] 17 commits: Revert "Restore the use of WS_EX_COMPOSITED by default"

2 views
Skip to first unread message

Vadim Zeitlin (@_VZ_)

unread,
Sep 23, 2025, 10:17:28 AMSep 23
to wx-commi...@googlegroups.com

Vadim Zeitlin pushed to branch master at wxWidgets / wxWidgets

Commits:

  • 4a8a4f56
    by Vadim Zeitlin at 2025-09-18T01:17:53+02:00
    Revert "Restore the use of WS_EX_COMPOSITED by default"
    
    This reverts commit ccaf5728f66ac0710c2deaa0ce0def14bf1b11cb.
    
  • 2d487423
    by Vadim Zeitlin at 2025-09-18T01:18:04+02:00
    Revert "Disable use of composition for top most windows"
    
    This reverts commit b4dd25ee3f6033126030821d7e8d30d4076d23ac.
    
  • 3152ac4e
    by Vadim Zeitlin at 2025-09-18T13:53:04+02:00
    Revert "Fix wxStaticBox drawing after disabling composition for parent"
    
    This reverts commit 6f5703a885067464e1d4f5649f9b8eaf0e465304.
    
  • 166133d4
    by Vadim Zeitlin at 2025-09-18T13:53:05+02:00
    Revert "Force wxFULL_REPAINT_ON_RESIZE for windows using WS_EX_COMPOSITED"
    
    This reverts commit a4ebfbb7739dfee8cf4d3d90c64417afd4de8720.
    
  • 5d63c764
    by Vadim Zeitlin at 2025-09-18T13:53:05+02:00
    Revert "Don't try to clear WS_EX_COMPOSITED for TLWs"
    
    This reverts commit 3259d1e2d949e4d155fe4adeba834bd73458f048.
    
  • 4f994199
    by Vadim Zeitlin at 2025-09-18T13:53:05+02:00
    Revert "Add msw.window.no-composited system option"
    
    This reverts commit d9734baed562794858228bedf2df4e91aa2f9ca3.
    
  • 08f62de2
    by Vadim Zeitlin at 2025-09-18T13:53:05+02:00
    Revert "Document WS_EX_COMPOSITED impact on wxClientDC"
    
    This reverts commit b0ed71658dd4ec39094e1ff2990d0e6bc88311b6.
    
  • b21df122
    by Vadim Zeitlin at 2025-09-18T13:53:05+02:00
    Revert "Disable use of composition in forty demo under MSW"
    
    This reverts commit 3a7394fe088dc65e244355a17406aea93c74017d.
    
  • 6073ac7d
    by Vadim Zeitlin at 2025-09-18T13:53:05+02:00
    Revert "Disable compositing when using wxDragImage"
    
    This reverts commit 9261816febbbaf089842578bc4f6f2c81c472c31.
    
  • 56bd4a62
    by Vadim Zeitlin at 2025-09-18T13:53:05+02:00
    Revert "Enable double buffering for all generic windows in wxMSW"
    
    This reverts commit cd15602378a83f1c05deb930c7a4243a0ace289e.
    
  • 9ee71a7c
    by Vadim Zeitlin at 2025-09-18T13:53:05+02:00
    Revert "samples/mfc:  disable composition to allow wxClientDC to work"
    
    This reverts commit 6ab144f9bf2c329e8d105e7461f8d2d48c6cb7a6.
    
  • c128e881
    by Vadim Zeitlin at 2025-09-18T13:53:05+02:00
    Remove now unnecessary calls to MSWDisableComposited()
    
    Still keep the function itself for compatibility and because it might
    conceivably be still helpful e.g. after calling SetDoubleBuffered().
    
  • bd668fd0
    by Vadim Zeitlin at 2025-09-18T13:53:05+02:00
    Reset wxALWAYS_NATIVE_DOUBLE_BUFFER to 0 for wxMSW
    
    This reverts fcc7430610ca202b744df75dc3d7e471a1e8b8a4.
    
  • ad90b172
    by Vadim Zeitlin at 2025-09-18T13:53:05+02:00
    Revert "Fix wxDateTimePickerCtrl arrows redrawing with WS_EX_COMPOSITED"
    
    This reverts commit ed7f5a671cd055f63e310daa5e76efb07ac63e7c.
    
  • f2a068d9
    by Vadim Zeitlin at 2025-09-18T13:53:05+02:00
    Don't draw wxSpinButton manually in light mode
    
    This was only necessary when using WS_EX_COMPOSITED which is not used
    any more.
    
    This reverts 79567c83f4263df2860b0c4da38d91da834c1aab.
    
  • cc6fed97
    by Vadim Zeitlin at 2025-09-23T15:36:38+02:00
    Fix compilation error in non-wxQt ports in wxSlider tests
    
    Fix error in the last commit and also emit a warning when using Qt 6.8.
    
  • b5a9fa38
    by Vadim Zeitlin at 2025-09-23T15:38:11+02:00
    Merge branch 'msw-drop-compositing'
    
    Don't enable WS_EX_COMPOSITED by default in wxMSW any longer.
    
    Closes #25025.
    
    Closes #25797.
    
    See #25808.
    

21 changed files:

Changes:

  • demos/forty/canvas.cpp
    ... ... @@ -34,15 +34,6 @@ FortyCanvas::FortyCanvas(wxWindow* parent, const wxPoint& pos, const wxSize& siz
    34 34
                  m_playerDialog(0),
    
    35 35
                  m_leftBtnDown(false)
    
    36 36
     {
    
    37
    -#ifdef __WXMSW__
    
    38
    -    // Unfortunately the redraw logic here is incompatible with double
    
    39
    -    // buffering under MSW, so we have to disable it. The proper solution would
    
    40
    -    // be to rewrite this logic, as this is also required to make it work under
    
    41
    -    // GTK/Wayland and macOS, where the game currently doesn't update its
    
    42
    -    // display at all.
    
    43
    -    MSWDisableComposited();
    
    44
    -#endif
    
    45
    -
    
    46 37
         SetScrollbars(0, 0, 0, 0);
    
    47 38
     
    
    48 39
     #ifdef __WXGTK__
    

  • docs/changes.txt
    ... ... @@ -11,19 +11,6 @@ INCOMPATIBLE CHANGES SINCE 3.2.x:
    11 11
     Changes in behaviour not resulting in compilation errors
    
    12 12
     --------------------------------------------------------
    
    13 13
     
    
    14
    -- wxMSW now uses double buffering by default, meaning that updating the
    
    15
    -  windows using wxClientDC doesn't work any longer, which is consistent with
    
    16
    -  the behaviour of wxGTK with Wayland backend and of wxOSX, but not with the
    
    17
    -  traditional historic behaviour of wxMSW (or wxGTK/X11). You may call
    
    18
    -  MSWDisableComposited() to restore the previous behaviour, however it is
    
    19
    -  strongly recommended to change your redrawing logic to avoid using wxClientDC
    
    20
    -  instead, as the code using it still won't work with wxGTK/wxOSX.
    
    21
    -
    
    22
    -  You may also choose to globally set the new msw.window.no-composited system
    
    23
    -  option to disable the use of double buffering, but please consider doing it
    
    24
    -  only as a last resort and/or temporary solution, as this _will_ result in
    
    25
    -  flicker and won't be supported at all in the future wxWidgets versions.
    
    26
    -
    
    27 14
     - wxMSW doesn't support versions of Microsoft Windows before Windows 7. If you
    
    28 15
       need Windows XP or Vista support, please use wxWidgets 3.2.
    
    29 16
     
    

  • include/wx/dcbuffer.h
    ... ... @@ -15,9 +15,12 @@
    15 15
     #include "wx/dcclient.h"
    
    16 16
     #include "wx/window.h"
    
    17 17
     
    
    18
    -// All current ports use double buffering.
    
    19
    -#define wxALWAYS_NATIVE_DOUBLE_BUFFER       1
    
    20
    -
    
    18
    +// Only wxMSW doesn't use double buffering.
    
    19
    +#ifdef __WXMSW__
    
    20
    +    #define wxALWAYS_NATIVE_DOUBLE_BUFFER       0
    
    21
    +#else
    
    22
    +    #define wxALWAYS_NATIVE_DOUBLE_BUFFER       1
    
    23
    +#endif
    
    21 24
     
    
    22 25
     // ----------------------------------------------------------------------------
    
    23 26
     // Double buffering helper.
    

  • include/wx/msw/statbox.h
    ... ... @@ -69,8 +69,6 @@ public:
    69 69
         // returns true if the platform should explicitly apply a theme border
    
    70 70
         virtual bool CanApplyThemeBorder() const override { return false; }
    
    71 71
     
    
    72
    -    virtual void MSWOnDisabledComposited() override;
    
    73
    -
    
    74 72
     protected:
    
    75 73
         virtual wxSize DoGetBestSize() const override;
    
    76 74
     
    

  • include/wx/msw/window.h
    ... ... @@ -554,14 +554,10 @@ public:
    554 554
         virtual bool IsDoubleBuffered() const override;
    
    555 555
     
    
    556 556
         // Ensure that neither this window itself nor any of its parents use
    
    557
    -    // WS_EX_COMPOSITED: this is used by the native wxListCtrl which is
    
    558
    -    // incompatible with this style.
    
    557
    +    // WS_EX_COMPOSITED: this may only be necessary after calling
    
    558
    +    // SetDoubleBuffered() which sets this style.
    
    559 559
         void MSWDisableComposited();
    
    560 560
     
    
    561
    -    // This function is called for all child windows when compositing is
    
    562
    -    // disabled for their parent.
    
    563
    -    virtual void MSWOnDisabledComposited() { }
    
    564
    -
    
    565 561
         // synthesize a wxEVT_LEAVE_WINDOW event and set m_mouseInWindow to false
    
    566 562
         void GenerateMouseLeave();
    
    567 563
     
    

  • interface/wx/dcclient.h
    ... ... @@ -47,11 +47,11 @@ public:
    47 47
     
    
    48 48
         @note While wxClientDC may also be used for drawing on the client area of a
    
    49 49
         window from outside an EVT_PAINT() handler in some ports, this does @em not
    
    50
    -    work on most of the platforms: neither wxOSX nor wxGTK with GTK 3 Wayland
    
    51
    -    backend support this at all, so drawing using wxClientDC simply doesn't
    
    52
    -    have any effect there. CanBeUsedForDrawing() can be used to determine
    
    53
    -    whether wxClientDC can be used for drawing in the current environment, but
    
    54
    -    it is recommended to only draw on the window using wxPaintDC, as this is
    
    50
    +    work on all platforms: neither wxOSX nor wxGTK with GTK 3 Wayland backend
    
    51
    +    support this at all, so drawing using wxClientDC simply doesn't have any
    
    52
    +    effect there. CanBeUsedForDrawing() can be used to determine whether
    
    53
    +    wxClientDC can be used for drawing in the current environment, but it is
    
    54
    +    recommended to only draw on the window using wxPaintDC, as this is
    
    55 55
         guaranteed to work everywhere. To redraw a small part of the window, use
    
    56 56
         wxWindow::RefreshRect() to invalidate just this part and check
    
    57 57
         wxWindow::GetUpdateRegion() in the paint event handler to redraw this part
    

  • interface/wx/statbox.h
    ... ... @@ -20,13 +20,8 @@
    20 20
         wxWidgets 2.9.1 it is strongly recommended to create them as children of
    
    21 21
         wxStaticBox itself, as doing this avoids problems with repainting that
    
    22 22
         could happen when creating the other windows as siblings of the box.
    
    23
    -    Notably, in wxMSW, siblings of the static box are not drawn at all inside
    
    24
    -    it when compositing is used, which is the case by default, and
    
    25
    -    wxWindow::MSWDisableComposited() must be explicitly called to fix this.
    
    26
    -    Creating windows located inside the static box as its children avoids this
    
    27
    -    problem and works well whether compositing is used or not.
    
    28 23
     
    
    29
    -    To summarize, the correct way to create static box and the controls inside
    
    24
    +    To be clear, the correct way to create static box and the controls inside
    
    30 25
         it is:
    
    31 26
         @code
    
    32 27
             void MyFrame::CreateControls()
    

  • interface/wx/sysopt.h
    ... ... @@ -82,10 +82,6 @@
    82 82
             appearance but not all fonts are available in this quality,
    
    83 83
             e.g. the Terminal font in small sizes is not and this option may be
    
    84 84
             used if wider fonts selection is more important than higher quality.
    
    85
    -    @flag{msw.window.no-composited}
    
    86
    -        If set to 1, disables the use of composited, i.e. double-buffered,
    
    87
    -        windows by default in wxMSW. This is not recommended, but can be useful
    
    88
    -        for debugging or working around redraw problems in the existing code.
    
    89 85
         @flag{msw.dark-mode}
    
    90 86
             If set to 1, enable experimental support of dark mode if the system is
    
    91 87
             using it, i.e. this has the same effect as calling
    

  • interface/wx/window.h
    ... ... @@ -4330,39 +4330,6 @@ public:
    4330 4330
         ///@}
    
    4331 4331
     
    
    4332 4332
     
    
    4333
    -    /**
    
    4334
    -        Disable the use native double buffering in wxMSW.
    
    4335
    -
    
    4336
    -        This MSW-specific function can be used to disable the use of
    
    4337
    -        `WS_EX_COMPOSITED` for this window and all of its parents and so allow
    
    4338
    -        using wxClientDC with it.
    
    4339
    -
    
    4340
    -        `WS_EX_COMPOSITED` style is turned on by default when creating the
    
    4341
    -        windows and it is strongly recommended @e not to use this functions to
    
    4342
    -        remove it, but to instead change the drawing code to avoid using
    
    4343
    -        wxClientDC.
    
    4344
    -
    
    4345
    -        If you do need to use it, please note that this function doesn't exist
    
    4346
    -        in the other ports and has to be explicitly bracketed by the checks for
    
    4347
    -        wxMSW, e.g.
    
    4348
    -        @code
    
    4349
    -        MyFrame::MyFrame(...)
    
    4350
    -        {
    
    4351
    -            auto p = new wxPanel(this);
    
    4352
    -        #ifdef __WXMSW__
    
    4353
    -            p->MSWDisableComposited();
    
    4354
    -        #endif
    
    4355
    -
    
    4356
    -            // Using wxClientDC will work now with this panel in wxMSW --
    
    4357
    -            // although it still won't with wxOSX nor wxGTK under Wayland.
    
    4358
    -        }
    
    4359
    -        @endcode
    
    4360
    -
    
    4361
    -        @see wxClientDC
    
    4362
    -
    
    4363
    -        @since 3.3.0
    
    4364
    -     */
    
    4365
    -    void MSWDisableComposited();
    
    4366 4333
     
    
    4367 4334
     protected:
    
    4368 4335
     
    

  • samples/mfc/mfctest.cpp
    ... ... @@ -297,7 +297,6 @@ wxEND_EVENT_TABLE()
    297 297
     MyCanvas::MyCanvas(wxWindow *parent, const wxPoint& pos, const wxSize& size)
    
    298 298
             : wxScrolledWindow(parent, -1, pos, size)
    
    299 299
     {
    
    300
    -    MSWDisableComposited();
    
    301 300
     }
    
    302 301
     
    
    303 302
     // Define the repainting behaviour
    

  • src/common/sizer.cpp
    ... ... @@ -2757,17 +2757,6 @@ bool wxStaticBoxSizer::CheckIfNonBoxChild(wxWindow* win) const
    2757 2757
                    wxDumpWindow(win),
    
    2758 2758
                    wxDumpWindow(win->GetParent()));
    
    2759 2759
     
    
    2760
    -#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
    
    2761
    -    // Additionally, under MSW the windows inside a static box are not
    
    2762
    -    // drawn at all when compositing is used, so we have to disable it.
    
    2763
    -    //
    
    2764
    -    // An alternative could be to Reparent() the window to the static
    
    2765
    -    // box, but it might break the existing code and as we only allow
    
    2766
    -    // this for compatibility in the first place, it seems better not
    
    2767
    -    // to risk it.
    
    2768
    -    win->MSWDisableComposited();
    
    2769
    -#endif // __WXMSW__ && !__WXUNIVERSAL__
    
    2770
    -
    
    2771 2760
         return true;
    
    2772 2761
     }
    
    2773 2762
     
    

  • src/common/webview_chromium.cpp
    ... ... @@ -810,10 +810,6 @@ bool wxWebViewChromium::Create(wxWindow* parent,
    810 810
         if ( !InitCEF(m_implData->m_config) )
    
    811 811
             return false;
    
    812 812
     
    
    813
    -#ifdef __WXMSW__
    
    814
    -    MSWDisableComposited();
    
    815
    -#endif // __WXMSW__
    
    816
    -
    
    817 813
         m_clientHandler = new ClientHandler{*this};
    
    818 814
         m_clientHandler->AddRef();
    
    819 815
     
    

  • src/msw/datetimectrl.cpp
    ... ... @@ -51,40 +51,6 @@
    51 51
     // wxDateTimePickerCtrl implementation
    
    52 52
     // ============================================================================
    
    53 53
     
    
    54
    -namespace wxMSWImpl
    
    55
    -{
    
    56
    -
    
    57
    -LRESULT CALLBACK
    
    58
    -DateTimeUDProc(HWND hwnd, UINT nMsg, WPARAM wParam, LPARAM lParam,
    
    59
    -               UINT_PTR uIdSubclass, DWORD_PTR WXUNUSED(dwRefData))
    
    60
    -{
    
    61
    -    switch ( nMsg )
    
    62
    -    {
    
    63
    -        case WM_PAINT:
    
    64
    -            // This is a bit ridiculous, but we have to explicitly paint the
    
    65
    -            // control here, even if all we do is to let it draw itself,
    
    66
    -            // because without this it may not draw the lower arrow at all when
    
    67
    -            // using WS_EX_COMPOSITED (it probably optimizes redraw by assuming
    
    68
    -            // that previously drawn part doesn't change, but this is not the
    
    69
    -            // case when compositing it used).
    
    70
    -            {
    
    71
    -                PAINTSTRUCT ps;
    
    72
    -                ::BeginPaint(hwnd, &ps);
    
    73
    -                ::DefSubclassProc(hwnd, WM_PAINT, (WPARAM)ps.hdc, 0);
    
    74
    -                ::EndPaint(hwnd, &ps);
    
    75
    -            }
    
    76
    -            return 0;
    
    77
    -
    
    78
    -        case WM_NCDESTROY:
    
    79
    -            ::RemoveWindowSubclass(hwnd, DateTimeUDProc, uIdSubclass);
    
    80
    -            break;
    
    81
    -    }
    
    82
    -
    
    83
    -    return ::DefSubclassProc(hwnd, nMsg, wParam, lParam);
    
    84
    -}
    
    85
    -
    
    86
    -} // namespace wxMSWImpl
    
    87
    -
    
    88 54
     bool
    
    89 55
     wxDateTimePickerCtrl::MSWCreateDateTimePicker(wxWindow *parent,
    
    90 56
                                                   wxWindowID id,
    
    ... ... @@ -111,15 +77,6 @@ wxDateTimePickerCtrl::MSWCreateDateTimePicker(wxWindow *parent,
    111 77
         else
    
    112 78
             SetValue(wxDateTime::Now());
    
    113 79
     
    
    114
    -    // If have an up-down control, we must explicitly paint it ourselves
    
    115
    -    // because otherwise it may be not redrawn at all with WS_EX_COMPOSITED.
    
    116
    -    WinStruct<DATETIMEPICKERINFO> info;
    
    117
    -    ::SendMessage(GetHwnd(), DTM_GETDATETIMEPICKERINFO, 0, (LPARAM)&info);
    
    118
    -    if ( info.hwndUD )
    
    119
    -    {
    
    120
    -        ::SetWindowSubclass(info.hwndUD, wxMSWImpl::DateTimeUDProc, 0, 0);
    
    121
    -    }
    
    122
    -
    
    123 80
         return true;
    
    124 81
     }
    
    125 82
     
    

  • src/msw/dragimag.cpp
    ... ... @@ -271,10 +271,6 @@ bool wxDragImage::BeginDrag(const wxPoint& hotspot, wxWindow* window, bool fullS
    271 271
         wxASSERT_MSG( (m_hImageList != 0), wxT("Image list must not be null in BeginDrag."));
    
    272 272
         wxASSERT_MSG( (window != 0), wxT("Window must not be null in BeginDrag."));
    
    273 273
     
    
    274
    -    // Using ImageList_BeginDrag() doesn't work with composited windows,
    
    275
    -    // nothing gets shown, so reset WS_EX_COMPOSITED to make it work.
    
    276
    -    window->MSWDisableComposited();
    
    277
    -
    
    278 274
         m_fullScreen = fullScreen;
    
    279 275
         if (rect)
    
    280 276
             m_boundingRect = * rect;
    

  • src/msw/glcanvas.cpp
    ... ... @@ -735,8 +735,6 @@ bool wxGLCanvas::Create(wxWindow *parent,
    735 735
         if ( !CreateWindow(parent, id, pos, size, style, name) )
    
    736 736
             return false;
    
    737 737
     
    
    738
    -    MSWDisableComposited();
    
    739
    -
    
    740 738
         // Choose a matching pixel format.
    
    741 739
         // Need a PIXELFORMATDESCRIPTOR for SetPixelFormat()
    
    742 740
         PIXELFORMATDESCRIPTOR pfd;
    

  • src/msw/listctrl.cpp
    ... ... @@ -257,11 +257,6 @@ bool wxListCtrl::Create(wxWindow *parent,
    257 257
         if ( !MSWCreateControl(WC_LISTVIEW, wxEmptyString, pos, size) )
    
    258 258
             return false;
    
    259 259
     
    
    260
    -    // LISTVIEW generates and endless stream of LVN_ODCACHEHINT event for a
    
    261
    -    // virtual wxListCtrl, so disable WS_EX_COMPOSITED.
    
    262
    -    if ( IsVirtual() )
    
    263
    -        MSWDisableComposited();
    
    264
    -
    
    265 260
         const wxVisualAttributes& defAttrs = GetDefaultAttributes();
    
    266 261
     
    
    267 262
         if ( wxMSWDarkMode::IsActive() )
    

  • src/msw/spinbutt.cpp
    ... ... @@ -22,7 +22,6 @@
    22 22
     #ifndef WX_PRECOMP
    
    23 23
         #include "wx/msw/wrapcctl.h" // include <commctrl.h> "properly"
    
    24 24
         #include "wx/app.h"
    
    25
    -    #include "wx/dcclient.h"
    
    26 25
         #include "wx/dcmemory.h"
    
    27 26
     #endif
    
    28 27
     
    
    ... ... @@ -253,13 +252,7 @@ void wxSpinButton::OnPaint(wxPaintEvent& event)
    253 252
         }
    
    254 253
         else
    
    255 254
         {
    
    256
    -        // We need to always paint this control explicitly instead of letting
    
    257
    -        // DefWndProc() do it, as this avoids whichever optimization the latter
    
    258
    -        // function does when WS_EX_COMPOSITED is on that result in not drawing
    
    259
    -        // parts of the control at all (see #23656).
    
    260
    -        wxPaintDC dc(this);
    
    261
    -
    
    262
    -        wxSpinButtonBase::OnPaint(event);
    
    255
    +        event.Skip();
    
    263 256
         }
    
    264 257
     }
    
    265 258
     
    

  • src/msw/statbox.cpp
    ... ... @@ -122,8 +122,6 @@ void wxStaticBox::UseCustomPaint()
    122 122
         // means we don't need to do anything.
    
    123 123
         if ( GetBackgroundStyle() != wxBG_STYLE_PAINT )
    
    124 124
         {
    
    125
    -        wxMSWWinExStyleUpdater(GetHwnd()).TurnOff(WS_EX_TRANSPARENT);
    
    126
    -
    
    127 125
             Bind(wxEVT_PAINT, &wxStaticBox::OnPaint, this);
    
    128 126
     
    
    129 127
             // Our OnPaint() completely erases our background, so don't do it in
    
    ... ... @@ -132,14 +130,6 @@ void wxStaticBox::UseCustomPaint()
    132 130
         }
    
    133 131
     }
    
    134 132
     
    
    135
    -void wxStaticBox::MSWOnDisabledComposited()
    
    136
    -{
    
    137
    -    // We need to enable custom painting if we're not using compositing any
    
    138
    -    // longer, as otherwise the window is not drawn correctly due to it using
    
    139
    -    // WS_EX_TRANSPARENT and thus not redrawing its background.
    
    140
    -    UseCustomPaint();
    
    141
    -}
    
    142
    -
    
    143 133
     bool wxStaticBox::Create(wxWindow* parent,
    
    144 134
                              wxWindowID id,
    
    145 135
                              wxWindow* labelWin,
    

  • src/msw/webview_edge.cpp
    ... ... @@ -1078,8 +1078,6 @@ bool wxWebViewEdge::Create(wxWindow* parent,
    1078 1078
             return false;
    
    1079 1079
         }
    
    1080 1080
     
    
    1081
    -    MSWDisableComposited();
    
    1082
    -
    
    1083 1081
         if (!m_impl->Create())
    
    1084 1082
             return false;
    
    1085 1083
         Bind(wxEVT_SIZE, &wxWebViewEdge::OnSize, this);
    

  • src/msw/window.cpp
    ... ... @@ -472,47 +472,6 @@ bool wxWindowMSW::CreateUsingMSWClass(const wxChar* classname,
    472 472
         msflags &= ~WS_BORDER;
    
    473 473
     #endif // wxUniversal
    
    474 474
     
    
    475
    -    // Enable double buffering by default for all our own, i.e. not the ones
    
    476
    -    // using native controls, classes.
    
    477
    -    //
    
    478
    -    // The loop here is a bogus one just to create a block that we can break
    
    479
    -    // from, it never executes more than once.
    
    480
    -    while ( !classname )
    
    481
    -    {
    
    482
    -        // WS_EX_COMPOSITED seems to be incompatible with WS_EX_TOPMOST, so
    
    483
    -        // don't use it for:
    
    484
    -
    
    485
    -        // Popup windows that get created with this style themselves: this
    
    486
    -        // seems to work under Windows 10, but doesn't under Windows 7 and
    
    487
    -        // using WS_EX_COMPOSITED for these windows that are temporarily
    
    488
    -        // doesn't seem to be very useful anyhow, so don't bother testing for
    
    489
    -        // the OS version and just always disable it for them.
    
    490
    -        if ( exstyle & WS_EX_TOPMOST )
    
    491
    -            break;
    
    492
    -
    
    493
    -        // Children of such windows as this doesn't work either (see #23078).
    
    494
    -        wxWindow* const tlw = wxGetTopLevelParent(this);
    
    495
    -        if ( tlw && tlw->HasFlag(wxSTAY_ON_TOP) )
    
    496
    -            break;
    
    497
    -
    
    498
    -        // We also allow disabling the use of this style globally by setting
    
    499
    -        // a system option if nothing else (i.e. turning it off for individual
    
    500
    -        // windows) works.
    
    501
    -        if ( wxSystemOptions::GetOptionInt("msw.window.no-composited") )
    
    502
    -            break;
    
    503
    -
    
    504
    -        // Do enable composition for this window.
    
    505
    -
    
    506
    -        exstyle |= WS_EX_COMPOSITED;
    
    507
    -
    
    508
    -        // We have to use the class including CS_[HV]REDRAW bits, as
    
    509
    -        // WS_EX_COMPOSITED doesn't work correctly if the entire window is
    
    510
    -        // not redrawn every time it's drawn.
    
    511
    -        style |= wxFULL_REPAINT_ON_RESIZE;
    
    512
    -
    
    513
    -        break;
    
    514
    -    }
    
    515
    -
    
    516 475
         if ( IsShown() )
    
    517 476
         {
    
    518 477
             msflags |= WS_VISIBLE;
    
    ... ... @@ -1678,15 +1637,10 @@ void wxWindowMSW::MSWDisableComposited()
    1678 1637
     {
    
    1679 1638
         for ( auto win = this; win; win = win->GetParent() )
    
    1680 1639
         {
    
    1681
    -        // We never set WS_EX_COMPOSITED on TLWs, and we shouldn't recurse into
    
    1682
    -        // different windows, so we can stop here.
    
    1640
    +        wxMSWWinExStyleUpdater(GetHwndOf(win)).TurnOff(WS_EX_COMPOSITED);
    
    1641
    +
    
    1683 1642
             if ( win->IsTopLevel() )
    
    1684 1643
                 break;
    
    1685
    -
    
    1686
    -        wxMSWWinExStyleUpdater updater(GetHwndOf(win));
    
    1687
    -        updater.TurnOff(WS_EX_COMPOSITED);
    
    1688
    -        if ( updater.Apply() )
    
    1689
    -            win->CallForEachChild([](wxWindow* w) { w->MSWOnDisabledComposited(); });
    
    1690 1644
         }
    
    1691 1645
     }
    
    1692 1646
     
    

  • tests/controls/slidertest.cpp
    ... ... @@ -229,8 +229,14 @@ void SliderTestCase::Thumb()
    229 229
     
    
    230 230
         CPPUNIT_ASSERT(track.GetCount() != 0);
    
    231 231
         CPPUNIT_ASSERT_EQUAL(1, release.GetCount());
    
    232
    -#if defined(__WXMSW__) || defined(__WXGTK__) || \
    
    233
    -    (defined(__WXQT__) && QT_VERSION < QT_VERSION_CHECK(6, 8, 0))
    
    232
    +
    
    233
    +#ifdef __WXQT__
    
    234
    +    #if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
    
    235
    +        WARN("wxEVT_SCROLL_CHANGED is generated twice with Qt 6.8, skipping test");
    
    236
    +        return;
    
    237
    +    #endif
    
    238
    +#endif
    
    239
    +#if defined(__WXMSW__) || defined(__WXGTK__) || defined(__WXQT__)
    
    234 240
         CPPUNIT_ASSERT_EQUAL(1, changed.GetCount());
    
    235 241
     #endif
    
    236 242
     #endif
    

Reply all
Reply to author
Forward
0 new messages