Commit Graph

1027 Commits

Author SHA1 Message Date
Vadim Zeitlin
8571cfed2f Remove unnecessary RECT initialization in WM_NCCALCSIZE handler
No real changes, just make RECT (lack of) initialization before calling
GetThemeBackgroundContentRect() consistent between WM_NCCALCSIZE and
WM_NCPAINT handlers.

See https://github.com/wxWidgets/wxWidgets/pull/1141
2019-01-16 22:11:15 +01:00
Vadim Zeitlin
712e3652ff Deal with themes not implementing GetThemeBackgroundContentRect()
Some custom themes apparently don't implement this function at all and
just return failure error code from it, but our code either assumed that
it never failed (when handling WM_NCPAINT) or didn't handle its failure
correctly (when handle WM_NCCALCSIZE the client rect wasn't returned at
all to the system in this case).

Fix this by just falling back to the initial rectangle in case of
failure.
2019-01-16 01:52:37 +01:00
Vadim Zeitlin
d47dbe9faa Take into account enabled state when drawing themed borders
Pass ETS_DISABLED instead of ETS_NORMAL when the window is disabled.
2019-01-16 01:52:10 +01:00
Vadim Zeitlin
78072514e9 Simplify setting nState in WM_NCPAINT handler
No real changes, this is just a trivial simplification removing some
unnecessary and unused commented out code.
2019-01-16 01:46:34 +01:00
Vadim Zeitlin
22c18a107e Invalidate wxDisplay cache under MSW when the displays change
The cache added in 990c8bfd73 was not
invalidated properly, meaning that wrong information was returned when
displays were [dis]connected after the application startup.

Fix this at least for MSW by invalidating the cache on receiving
WM_DISPLAYCHANGE (which means that sometimes we will do it
unnecessarily, as the change in resolution of an existing display
doesn't require cache invalidation, but this shouldn't be a big problem
in practice as the speed with which the user can change the display
resolution is not very high).

Closes https://github.com/wxWidgets/wxWidgets/pull/1090
2019-01-04 14:09:56 +01:00
Vadim Zeitlin
dfec7aa0c0 Make disabling the window before creating it actually work
Disabling a window before actually creating it ought to work, similarly
to hiding a window before creating it which can be used to avoid showing
the window on screen at all, even briefly. However it didn't under MSW
where the window was disabled from wxWidgets point of view, but not at
the MSW level.

Fix this by accounting for the enabled state in MSWGetStyle().

Closes #16385.
2018-12-09 19:20:50 +01:00
Maarten Bent
eb23d4735c Fix unannotated fall-through warnings 2018-11-25 21:29:37 +01:00
Vadim Zeitlin
56c4191168 Reimplement wxPopupWindow as a WS_POPUP window under MSW
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.
2018-10-20 22:50:46 +02:00
Vadim Zeitlin
a02ed536e6 Add support for more than 4 joystick buttons under MSW
Use polling thread instead of relying on MM_JOYXXX events to allow
receiving events from all the supported buttons.

See https://github.com/wxWidgets/wxWidgets/pull/942

Closes #1142.
2018-09-25 01:03:58 +02:00
Vadim Zeitlin
cc931612ee Fix a bug with layout of grandchildren in wxMSW wxScrolledWindow
Apparently changing the window scrollbars in the middle of a window
deferred repositioning operation is not allowed and confuses
EndDeferWindowPos() which doesn't update the position of _grand_
children correctly in this case.

This bug notably manifested itself when loading a wxScrolledWindow
containing wxStaticBox from XRC, as the parent window was initially
created with the default small size and then relaid out when it was
resized to its real size on first wxEVT_SIZE event which also updated
the scrollbars. As a result, the children of the wxStaticBox were
shifted downwards.

The fix simply flushes the current repositioning operation and starts
one anew in wxWindow::SetScrollbar().
2018-06-26 00:58:20 +02:00
Vadim Zeitlin
0fa00b5159 Don't do anything when ScrollWindow(0, 0) is called in wxMSW
This doesn't really change anything, but just skips executing some code
uselessly if we know in advance we are not going to do anything, which
is nice as ScrollWindow() actually ends up being called with 0 arguments
surprisingly often from wxScrollHelperBase::SetScrollRate().

This is also consistent with what wxGTK does.
2018-06-25 15:49:50 +02:00
Vadim Zeitlin
d1175c00e1 Revert "Allow WM_SYSKEYDOWN to still be processed by MSWDefWindowProc, even if"
This reverts commit e771b7e4ac.

Don't always pass WM_SYSKEYDOWN to the system for processing as this can
be undesirable: e.g. inside a dialog, any Alt-X key presses with X not
being a mnemonic character result in a beep from IsDialogMessage().
Handle events for the system keys in the same way as for the normal
ones, i.e. let the system process them only if they're not handled by
the application.

This is incompatible with the previous wxMSW behaviour, but compatible
with the other ports and makes more sense, so it seems to be worth it,
on balance.
2018-06-23 23:46:10 +02:00
Vadim Zeitlin
4d1145787b Fix wxKeyboardHook() callback signature in Win64 build
The callback must return LRESULT, which is 64 bits under Win64, not
int, which is still 32 bits.

This fixes a gcc8 -Wcast-function-type warning and might fix a real bug
in Win64 build too.
2018-06-03 22:47:04 +02:00
Vadim Zeitlin
4230cb24de Add WXWNDPROC typedef and use it in wxMSW instead of WXFARPROC
WNDPROC and FARPROC are not the same thing in MSW and it's wrong to use
WXFARPROC as the type of different window procedures we use.

Introduce WXWNDPROC which is more clear and correct and use it instead.

Also get rid of a few casts which are not necessary any longer.
2018-06-03 22:47:04 +02:00
Vadim Zeitlin
7624e31a95 Stop passing WNDPROC argument to wxCheckWindowWndProc()
This parameter wasn't used anyhow and casting wxWndProc or m_oldWndProc
to WXFARPROC just resulted in gcc8 -Wcast-function-type warnings.

Get rid of them by not passing the window proc to this function at all.
2018-06-03 22:47:04 +02:00
Cătălin Răceanu
578474526f fix window position under MSW when limited by short range 2018-04-18 20:19:45 +03:00
Cătălin Răceanu
f751f15b9f Shuffle code a bit to make it easier to skip deferring window position 2018-04-12 05:22:55 +03:00
Trylz
79170994fc Fix handling of second auxiliary mouse button events in wxMSW
The test for AUX2 mouse button was wrong and checked whether the button
was pressed, instead of checking whether the event was generated by it.

Check the event source correctly by comparing wParam with XBUTTON2 and
not MK_XBUTTON2.

Closes https://github.com/wxWidgets/wxWidgets/pull/753
2018-03-25 13:58:36 +02:00
Vadim Zeitlin
e87544ae70 Fix possible hang after clearing wxTAB_TRAVERSAL style in wxMSW
Clearing this style by calling SetWindowStyleFlag() could reset
WS_EX_CONTROLPARENT extended flags bit, breaking the invariant that the
parent of any window with this bit set has it as well and resulting in
hangs due to infinite loops inside Windows own code iterating over the
controls.

Prevent this from happening by always preserving this style bit if it
was previously set in MSWUpdateStyle(). This is a bit ugly, but there
doesn't seem to be any obviously better way to do it.

Closes #18091.
2018-02-28 16:58:27 +01:00
Vadim Zeitlin
d7b88827b8 Avoid spurious focus events for composite windows in wxMSW
Composite windows, i.e. wxWindows composed of several HWNDs at MSW
level, didn't handle focus events correctly and, for example, generated
wxEVT_KILL_FOCUS event when the focus simply switched from wxComboBox
itself to the EDIT control inside it, which broke using non-readonly
wxComboBox as in-place editor inside wxDataViewCtrl.

Check if the focus event notifies about the focus switching to, or from,
another HWND belonging to the same window, and suppress wx event
generation in this case as they don't make sense because the focus
doesn't change at wx level.

See #17034.
2018-02-04 00:14:31 +01:00
Tobias Taschner
2d064ea3b9 Move UXTheme symbol definitions for Vista+ to msw/uxtheme.h
Remove various definitions and symbol declarations from
numerous files using msw/uxtheme.h to a single file.
When possible vssym32.h is included from the Windows SDK.
For older SDKs tmschema.h is included and missing symbols
are defined in msw/uxtheme.h.
2018-01-22 00:53:21 +01:00
Tobias Taschner
ddceaab001 Remove MSW wxUxThemeEngine class
This undocumented "private" class was used for various windows UxTheme
functions which are available since WinXP. As wxWidgets 3.1 is XP+ it
does not make sense anymore to load the theme functions dynamically.
2018-01-22 00:51:11 +01:00
Vadim Zeitlin
9b4759d7b6 Don't rely on getting WM_NULL messages in wxIdleWakeUpModule
Since the switch to using an event object for idle handling wakeup,
WM_NULLs are not being sent any longer, so wxIdleWakeUpModule didn't do
anything, resulting in pending event dispatching being paused while our
event loop was not running, as it happened, for example, while the
window was resized.

See #17579.
2018-01-13 17:33:09 +01:00
Vadim Zeitlin
17105cfd07 Simplify changing window styles in wxMSW code
Add wxMSWWinStyleUpdater and wxMSWWinExStyleUpdater helper classes which
allow writing code changing GWL_STYLE and GWL_EXSTYLE bits,
respectively, in a shorter and more clear way.

There should be no real changes in behaviour.
2017-12-10 17:47:16 +01:00
Vadim Zeitlin
3e0adbf541 Merge branch 'gesture-events'
Integrate GSoC 2017 work by Prashant Kumar implementing support for
gesture events.

Closes https://github.com/wxWidgets/wxWidgets/pull/551

Closes https://github.com/wxWidgets/wxWidgets/pull/565
2017-12-02 18:46:53 +01:00
Maarten Bent
afc02a34ee More use of wxFALLTHROUGH in MSW code and samples 2017-11-25 17:52:08 +01:00
Vadim Zeitlin
a8dfaa569b Allow enabling individual touch gesture events
Implement support for enabling just some gesture events instead of
having to choose between getting none or all of them.

Also make wxTOUCH_NONE really disable the gestures events generation
instead of just doing nothing as before.
2017-11-22 03:05:02 +01:00
Vadim Zeitlin
842dd1cfd9 Add wxWindow::EnableTouchEvents()
Don't request touch event generation for all windows by default, this
has an inherent overhead and is not needed for 99% of the application
windows, so require calling EnableTouchEvents() explicitly to do it
instead.

Note that this requires properly initializing gesture recognizers in
wxOSX now that they're not always allocated, otherwise releasing them
when destroying the window would crash.
2017-11-22 02:24:24 +01:00
Vadim Zeitlin
bb2887930f Use wxPoint instead of (x,y) pair in wxPanGestureEvent
Using higher level objects makes the code generating and using this
event shorter and more clear.
2017-11-21 17:45:34 +01:00
Vadim Zeitlin
db71a10b29 Set rotation angle for the initial rotate gesture event in MSW
According to MSDN, for the initial rotation even the angle is just
passed directly, so use it.
2017-11-21 17:27:42 +01:00
Vadim Zeitlin
b3e726faed Refactor MSW gesture events initialization
Don't repeat the same code for initializing events in several different
functions but put it in a helper InitGestureEvent() function and just
call it from the event-specific handlers.
2017-11-21 17:25:55 +01:00
Vadim Zeitlin
989dd36405 Style fixes in the MSW gestures code
No real changes, just reformat code and comments to fit in 80 column
lines.
2017-11-21 16:12:37 +01:00
Vadim Zeitlin
daf19c652c Use WinStruct<> to initialize GESTUREINFO
This is more concise and clear than initializing it manually.
2017-11-21 16:12:35 +01:00
Vadim Zeitlin
7ffb897810 Remove unnecessary assignments in WM_GESTURE handler code
The "processed" flag is false by default, no need to explicitly reset
it, this was just confusing.
2017-11-21 16:12:32 +01:00
Vadim Zeitlin
59f428d25e Slightly simplify GestureFuncs code
Document that the users of this class always must call IsOk() first, as
they already do, and remove the checks for ms_gestureSymbolsLoaded and
calls to LoadGestureSymbols() from all the other methods, which are
unnecessary in this case.
2017-11-21 16:12:30 +01:00
Vadim Zeitlin
bf929f9868 Use wxLoadedDLL for loading user32.dll dynamically
This avoids unnecessarily loading and unloading (except that it's not
really unloaded) a DLL which is always available anyhow.
2017-11-21 16:05:33 +01:00
prashantkn94
261b04b5a3 Merge multi-touch gestures event branch
This is a squashed commit of the SOC2017_GESTURES branch from
https://github.com/prashantkn94/wxWidgets.git

Closes https://github.com/wxWidgets/wxWidgets/pull/551
2017-11-17 18:06:06 +01:00
Vadim Zeitlin
677051b6e7 Remove hack with TLW focus reset from wxWindowMSW dtor
This shouldn't be needed any more, after the previous commit which
replaces the raw pointer to the focused child in wxTopLevelWindowMSW
with a safe weak reference.
2017-10-27 18:20:09 +02:00
Artur Wieczorek
2c69d27c0d Directly generate EVT_CONTEXT_MENU when Applications (Menu) key is pressed
WM_CONTEXTMENU message is generated directly by the system when the user presses and releases the VK_APPS key so there is no need to do this by emulating right mouse button click.

Closes #17969.
2017-10-09 16:14:50 +02:00
Artur Wieczorek
52d6b0ae85 Don't discard all current input processing flags in response to WM_GETDLGCODE
Some current input processing flags, like DLGC_HASSETSEL, should be retained because they are in use (in wxWindowMSW::SetFocusFromKbd() for instance).

Closes #17945.
2017-09-06 12:34:20 +02:00
sbrowne
66c5762ab9 Fix check for unchanged size in MSW wxWindow::DoSetSize()
Adjust the size and position we're about to set before comparing them
with the current ones, otherwise the result of the comparison could be
wrong when width and/or height are -1.

See #17075.
2017-07-16 02:22:46 +02:00
Catalin
e118c918ce Redefine MAPVK_VK_TO_CHAR, missing from XP 64-bit and tdm32-gcc-5.1.0 2017-03-27 18:39:20 +02:00
Catalin
511ec44743 Remove old checks
AW_XXX <https://msdn.microsoft.com/en-us/library/windows/desktop/ms632669(v=vs.85).aspx>
MAPVK_VK_TO_CHAR <https://msdn.microsoft.com/en-us/library/windows/desktop/ms646307(v=vs.85).aspx>
TME_LEAVE <https://msdn.microsoft.com/en-us/library/windows/desktop/ms645604(v=vs.85).aspx>
WM_MOUSELEAVE <https://msdn.microsoft.com/en-us/library/windows/desktop/ms645615(v=vs.85).aspx>
2017-03-05 15:39:31 +02:00
Catalin
8d387fafe5 Remove checks for MM_JOY1MOVE, VK_APPS, ENDSESSION_LOGOFF, PBT_APMRESUMEAUTOMATIC, JOY_BUTTON1, SM_SWAPBUTTON.
<https://msdn.microsoft.com/en-us/library/dd757352(v=vs.85).aspx>
<https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx>
<https://msdn.microsoft.com/en-us/library/windows/desktop/aa376890(v=vs.85).aspx>
<https://msdn.microsoft.com/en-us/library/windows/desktop/aa372718(v=vs.85).aspx>
<https://msdn.microsoft.com/en-us/library/dd757110(v=vs.85).aspx>
2017-03-05 03:12:14 +02:00
Cătălin Răceanu
3a02672de8 Use MIIM_FTYPE rather than MIIM_TYPE in wxMSW
There is no need to use the old symbol any more now that we don't support
Windows 9x any longer.
2017-02-24 15:36:46 +01:00
Cătălin Răceanu
933e3e6fc5 Remove compile-time checks for always defined WM_XXX in wxMSW
The symbols in question are present at least since XP, and most of them since
Windows 2000, so remove preprocessor checks for them, they shouldn't be needed
when any remotely current compiler/SDK.
2017-02-22 23:17:56 +01:00
Cătălin Răceanu
1a1519bd68 Don't check if WM_XBUTTONxxx are defined in wxMSW code
This is not necessary any longer, we don't support Windows CE any more and
these constants are available since Windows 2000 in the desktop Windows SDKs.
2017-02-21 14:55:27 +01:00
Vadim Zeitlin
d15bbcacd2 Merge branch 'rmv_symbols_3' of https://github.com/catalinr/wxWidgets
Remove obsolete mentions of Windows 9x, Windows CE and OS/2.
2017-02-20 17:46:45 +01:00
Václav Slavík
e99abe513a Fix wxFULL_REPAINT_ON_RESIZE handling in wxMSW
Fix regression introduced in d4e595adb0
where the wxFULL_REPAINT_ON_RESIZE flag was accidentally ignored in most cases.
2017-01-06 14:33:24 +01:00
Paul Cornett
42b2675806 Fix build error with wxUSE_DRAG_AND_DROP==0 2016-12-22 22:12:45 -08:00