Reimplement wxPopupWindow using WS_POPUP instead of WS_CHILD window in
wxMSW as the new approach allows using the controls inside the popup
normally, unlike the old one.
See https://github.com/wxWidgets/wxWidgets/pull/986Closes#18243.
This will just hide the window immediately, so prefer to ignore the
"focus" argument of Popup() but show the popup instead.
Update the documentation to mention that setting focus outside of popup
is not supported under all platforms.
This fixes another bug from 3518f1a7d8
(after the one fixed in 5766280311): if a
window was maximized by user and then hidden, its IsMaximized() returned
false because it examined m_showCmd which didn't have SW_MAXIMIZE value
in this case.
The same was true for IsMinimised() as well.
Fix both problems by updating the value of m_showCmd when hiding the
window.
Calling Set() resets the existing items order, which makes sense from
the implementation point of view, but not necessarily expected by the
users.
See #18262.
This allows to keep the existing makefiles or configure scripts for
building wxWidgets applications using wx-config unchanged to keep them
working with the existing wxWidgets releases without adding an
unnecessary dependency on the "adv" library when using the latest Git or
3.1.2, when it's released.
Don't use the child window of the desktop window for popup windows under
MSW, while this worked in simplest cases, it didn't allow having
functional controls inside a wxPopupWindow as e.g. wxTextCtrl didn't
accept input it at all if created as a child of such window.
Instead, switch to using a top-level window, with WS_POPUP style, and
fix the problem with the loss of activation by explicitly pretending to
still be active in the owner window when losing activation to our own
popup (thanks to Barmak Shemirani for providing this solution).
Also use an MSW-specific and much simpler implementation of detecting
when the popup should be dismissed in wxPopupTransientWindow: instead of
capturing mouse or tracking focus, just react to activation loss
directly.
Add a wxTextCtrl to the popup in samples/popup to show that editing it
works now.
IsTopLevel() returns true for wxPopupWindow, even if it's not a subclass
of wxTopLevelWindow, so GetTLWParentIfNotBeingDeleted() asserted when
called with a button inside a wxPopupWindow.
Just return null from it instead for now. A better solution could be to
return wxNonOwnedWindow from GetTLWParentIfNotBeingDeleted() (which
would need to be renamed to something more suitable) and move the
{Get,Set}TmpDefaultItem() methods into it.
wxString is not implicitly convertible to const char* in that configuration.
Also, stock IDs work fine with GTK+3 despite being deprecated, so only avoid
them for GTK+4.
Now that wxSound class, which can optionally use SDL, is in wxCore, we
need to link it with the SDL libraries to fix link errors in this case.
Closes#18251.
Using font height to determine required height of wxStaticText control used to display a title is not sufficient because this doesn't take into account internal margins, borders etc. around displayed text within the control. Because this internal positioning depends on the port it's better to delegate calculation of the required height to the control itself.
Closes#17662.
Currently all properties within client area are processed for drawing whether they lie inside the update region or not. Processing for drawing is an expensive operation so doing this only for properties being actually repainted should improve performance.