Commit Graph

73 Commits

Author SHA1 Message Date
Vadim Zeitlin
8004002e5e Fix handling keys also used as accelerators in wxMSW wxComboBox
wxComboBox::MSWShouldPreProcessMessage() didn't take into account many
keys that must be handled in wxComboBox even if they're used as
accelerators, including plain (i.e. without Ctrl modifier) Delete, Home
and End that are used by the embedded text control, if there is one.

Fix this by reusing wxTextCtrl::MSWShouldPreProcessMessage() which
already handled these keys correctly, by moving it to wxTextEntry, which
can be used from both classes.

Also add a check for wxCB_READONLY to prevent overriding the
accelerators using the keys that the combobox doesn't need when there is
no text control in it.

Closes #19227.
2021-07-24 12:41:49 +01:00
Vadim Zeitlin
1007259504 Add wxTextEntry::MSWUsesStandardAutoComplete()
Implementation is a hack, using a magic pointer value because just
storing this in wxTextAutoCompleteData is not simple, as any flag added
to it would need to be reset in several different places.

This is not used yet, but will be in the upcoming commits.
2021-04-07 22:27:24 +01:00
Vadim Zeitlin
a6e4cc7eb0 Refactor wxTextEntry to use MSWEnsureHasAutoCompleteData()
The new function has more clear semantics than GetOrCreateCompleter()
which both returned the completer value and set m_autoCompleteData to it
as a side effect. MSWEnsureHasAutoCompleteData() still does the latter,
but returns just a boolean indicating whether it succeeded or failed,
making using it more straightforward.

No real changes.
2021-04-07 22:20:05 +01:00
PB
f57f214122 Remove BCC-specific hdrstop pragma from everywhere 2020-10-12 21:58:37 +02:00
PB
9ff095a852 Use wxCoTaskMemPtr
Use RAII class wxCoTaskMemPtr to manage pointers that must
be freed with ::CoTaskMemFree().
2020-06-09 20:17:25 +02:00
Vadim Zeitlin
8a27b2e6bf Fix Backspace in wxTextCtrl with custom autocompleter in wxMSW
Pressing Backspace in controls with custom autocompleter previously
didn't do anything at all, as it didn't work correctly after backspacing
over the just inserted autocompletion, but this was clearly wrong, as it
didn't update the list of available completions even after erasing some
non-autocompleted characters.

Fix this by handling Backspace as any other key and just avoiding
refreshing the control contents needlessly if the completion prefix
didn't change.

Closes #18503.
2019-09-15 23:07:42 +02:00
Vadim Zeitlin
0146c47a7f Generate wxEVT_TEXT_ENTER for Enter key on Numpad too in wxMSW
Handle WXK_NUMPAD_ENTER in the same way as we already handle WXK_RETURN.

Closes #18504.
2019-09-15 14:31:42 +02:00
Vadim Zeitlin
8746da90fe Add wxTextEntry::ClickDefaultButtonIfPossible() to wxMSW
Factor out this function from wxTextCtrl to allow its reuse in
wxComboBox in the upcoming commit.

No real changes, this is a pure refactoring.
2019-07-14 01:37:32 +02:00
Vadim Zeitlin
5488a1438f Globally replace vadim@wxwindows.org with vadim@wxwidgets.org
The old email address is invalid since many years and shouldn't be used
any longer.

No real changes.
2019-04-22 14:12:05 +02: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
c697b62d46 Compilation fix for PCH-less build after last commit
Include the headers required by the new code in src/msw/textentry.cpp.

See #12613.
2017-12-26 04:24:23 +01:00
Vadim Zeitlin
5a949efc5c Fix sending wxEVT_TEXT_ENTER when using auto-completion in wxMSW
We need to explicitly generate this event from the char hook handler as
we don't get the normal WM_CHAR for it, it is apparently intercepted by
the window proc installed by the auto-completing code, so check if
wxTE_PROCESS_ENTER is used for the text entry and call a special new
MSWProcessSpecialKey() method to do the right thing if it is.

Similarly, handle Tab presses correctly if wxTE_PROCESS_TAB is used.

Closes #12613.
2017-12-25 19:29:25 +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
Catalin
b8ced83a6c Keep SHACF_FILESYS_XXX checks and definitions.
Apparently some gcc flavors (like g++ (GCC) 5.3.0 from AppVeyor) do not define these symbols. FWIW tdm-gcc-5.1.0 does not need them.

This partially reverts commit 2f5f5caf99.
2017-03-05 22:25:34 +02:00
Catalin
e81c460808 Keep defining ACDD_VISIBLE because shobjidl.h header is not included since it is missing from MinGW and Cygwin. 2017-03-05 15:49:14 +02:00
Catalin
2f5f5caf99 Remove checks for ACO_UPDOWNKEYDROPSLIST, SHACF_FILESYS_XXX, ACDD_VISIBLE.
<https://msdn.microsoft.com/en-us/library/windows/desktop/bb762479(v=vs.85).aspx>
<https://msdn.microsoft.com/en-us/library/windows/desktop/bb759862(v=vs.85).aspx>
<https://msdn.microsoft.com/en-us/library/windows/desktop/bb776285(v=vs.85).aspx>
2017-03-05 15:34:03 +02:00
Paul Cornett
9b19a6e529 use wxOVERRIDE in wxMSW sources 2016-09-23 07:59:11 -07:00
Vadim Zeitlin
4475fe36a5 Don't define interfaces inside anonymous namespace in wxMSW
Some interfaces, notably IAutoCompleteDropDown, but also several other ones in
taskbarbutton.cpp, were defined inside anonymous namespace to avoid clashing
with the interfaces possibly (but not necessarily) declared in the standard
headers.

However gcc 4.9 is smart enough to realize that no classes deriving from a
class in an anonymous namespace can exist and so it devirtualizes the calls to
virtual methods of the objects of this type when compiling with optimizations
enabled. And it does it even if it means replacing the call to a virtual
method with just a call to __cxa_pure_virtual(), i.e. crashing during
run-time.

Prevent it from doing this by moving class declarations outside of the
anonymous namespace and fix the crash when using wxTextEntry::AutoComplete()
in the code compiled with g++ 4.9.
2016-02-11 23:39:44 +01:00
Vadim Zeitlin
69b66e9e2e Add wxTextEntry::ForceUpper()
Allow automatically converting lower-case letters entered into wxTextCtrl to
upper-case equivalents. Provide generic fallback and implement the method
natively for all the major platforms.

Also update the text sample to show it in action.
2015-12-08 03:02:46 +01:00
Vadim Zeitlin
332dc81167 Fix case of <shlwapi.h> includes
Don't use upper-case file names, while MSW itself is case-insensitive, wxMSW
can be also cross-compiled and then the wrong case results in compilation
errors.

Closes #17279.
2015-12-06 03:43:28 +01:00
Tobias Taschner
615b932f72 Remove dynamic loading of SHAutoComplete.
Available since Win2k.
2015-09-27 19:08:15 +02:00
Tobias Taschner
8282c1be0f Remove Windows CE support
Windows CE doesn't seem to be supported by Microsoft any longer. Last CE
release was in early 2013 and the PocketPC and Smartphone targets supported by
wxWidgets are long gone.

The build files where already removed in an earlier cleanup this commit
removes all files, every #ifdef and all documentation regarding the Windows CE
support.

Closes https://github.com/wxWidgets/wxWidgets/pull/81
2015-09-23 00:52:30 +02:00
Vadim Zeitlin
49b8d79c87 Remove (Open)Watcom support.
This compiler is not being developed since several years and almost certainly
can't be used to build the current wxWidgets sources anyhow, so remove all
support for it, including a lot of extremely ugly workarounds for its bugs
with template functions.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@76546 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2014-05-16 13:01:06 +00:00
Vadim Zeitlin
f4b80e5337 Remove MSVC6 support.
Don't support this compiler any more, this allows to get rid of tons of
MSVC6-specific workarounds, in particular we can now use Bind() and natural
template functions calls in the library code.

Also remove MSVC6 project and solution files and don't generate them when
bakefile_gen is ran any more (removing the remaining occurrences of msvc6prj
from the bakefiles results in weird bake-time errors, so it's simpler to just
leave them there).

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@76532 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2014-05-15 22:32:17 +00:00
Vadim Zeitlin
59bdee5558 Fix handling of Esc while an auto-complete drop down is open in wxMSW.
Just close the drop down instead of closing the dialog the text control using
this auto-complete drop down is in, as this was completely unexpected and
counter-intuitive.

Closes #13945.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@76097 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2014-03-08 13:39:58 +00:00
Václav Slavík
59efb1cf1c Don't use native cue banners in wxTextEntry::SetHint() on XP.
The code apparently expected EM_SETCUEBANNER to return false on
pre-Vista systems (where the cue banners don't work).  This isn't the
case in practice, so check for Vista explicitly and use the generic
implementation on XP.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@75334 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-12-02 17:46:23 +00:00
Vadim Zeitlin
3f66f6a5b3 Remove all lines containing cvs/svn "$Id$" keyword.
This keyword is not expanded by Git which means it's not replaced with the
correct revision value in the releases made using git-based scripts and it's
confusing to have lines with unexpanded "$Id$" in the released files. As
expanding them with Git is not that simple (it could be done with git archive
and export-subst attribute) and there are not many benefits in having them in
the first place, just remove all these lines.

If nothing else, this will make an eventual transition to Git simpler.

Closes #14487.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74602 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-07-26 16:02:46 +00:00
Vadim Zeitlin
609a42decf Fix duplicate symbol link errors in wxMSW wxTextEntry code.
Don't include <initguid.h> too soon, as this affects the headers included
after it instead of just our own uses of DEFINE_GUID() as intended.

This resulted in link errors because of duplicate definitions of the many
standard GUIDs when using MinGW for which we include, for whatever reason,
shlguid.h.

This fixes the change of r67573.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74600 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-07-26 10:38:39 +00:00
Vadim Zeitlin
ce7fe42e84 Provide shorter synonyms for wxEVT_XXX constants.
Use the same short names as are used by the event table macros for the event
type constants themselves. This makes them much more comfortable to use, e.g.
Bind(wxEVT_BUTTON) compared to Bind(wxEVT_COMMAND_BUTTON_CLICKED).

The old long names are still kept for backwards compatibility and shouldn't be
removed as it doesn't really cost anything to continue providing them, but all
new event types should only use the short versions.

Closes #10661.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73850 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-04-25 10:11:03 +00:00
Vadim Zeitlin
0b97da9986 Set both left and right wxTextEntry margins in wxMSW.
Use the horizontal margin argument of SetMargins() to set both left and right
margins in wxMSW and not just the left one.

See #14958.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73390 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-01-20 02:08:55 +00:00
Vadim Zeitlin
4e3eeddebd Fix wxMSW wxTextEntry compilation in wxUSE_DYNLIB_CLASS==0 case.
Simply don't define DoAutoCompleteFileNames() as it needs wxDynamicLibrary to
compile and work.

Closes #14510.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72183 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-07-23 15:03:57 +00:00
Vadim Zeitlin
017dc06b50 Use wxString::t_str() in calls to Windows API functions in wxMSW.
Use t_str() instead of wx_str() to make the code work correctly in UTF-8 build
in which wx_str() returns a pointer to UTF-8 buffer while we need a wchar_t
pointer for Windows.

Closes #14371.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71640 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-06-03 19:16:59 +00:00
Vadim Zeitlin
03dede4dc1 Add wxTextEntry::AutoCompleteDirectories().
As we already had MSW-specific AutoCompleteFileNames(), we can just as well
also add the also useful AutoCompleteDirectories() to be used with the text
controls used for path entry.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68918 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-08-27 14:11:13 +00:00
Václav Slavík
b4f70f7706 Compilation fix for DEFINE_GUID uses.
DEFINE_GUID doesn't define the value, only declares an external
variable, unless initguid.h was included. This leads to linker errors.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67573 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-04-22 14:50:20 +00:00
Vadim Zeitlin
0f0c5856e0 Define ACO_AUTOAPPEND for MinGW/Cygwin.
Apparently this symbol is not defined in MinGW headers neither, so do it
ourselves as well.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67570 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-04-21 23:43:27 +00:00
Vadim Zeitlin
c621269778 Use "wx" prefix for the GUIDs we (re)define in wxMSW code.
CLSID_AutoComplete became ambiguous with MinGW because it does define it in
its shlguid.h header (although MSVC/Platform SDK does not define this one) so
use a "wx" prefix for it to avoid ambiguity. Also use the same prefix for the
IID_IAutoCompleteDropDown value we define for consistency.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67569 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-04-21 23:43:23 +00:00
Vadim Zeitlin
78f250a46d Redefine IAutoCompleteDropDown in our code as it's not always available.
MinGW doesn't have shobjidl.h header file which is normally part of the
Platform SDK and doesn't have IAutoCompleteDropDown interface definition in
any of its headers at all, so define this interface and its IID ourselves to
make the code compile with it.

Notice that MinGW-64 does have the interface declaration but still doesn't
define IID_IAutoCompleteDropDown.

So to be on the safe side just always define everything ourselves, as long as
we need to do it for one of the compilers, it's not more difficult to do it
for all of them.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67567 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-04-21 15:47:37 +00:00
Vadim Zeitlin
8d43e8c68f Correct a typo in DoAutoCompleteCustom() stub in wxMSW.
Fix a compilation error introduced by r67518.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67532 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-04-18 13:47:51 +00:00
Vadim Zeitlin
ed7dda9251 Refactor: extract wxTextCompleterFixed from wxMSW to a header.
This class will be used in other ports too so don't make it private to wxMSW
(although it still remains private to wxWidgets for now as it doesn't make
much sense to use it in user code).

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67525 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-04-17 23:14:11 +00:00
Vadim Zeitlin
32bd17fcb5 Define wxTextEntry::DoAutoCompleteStrings() stub in wxMSW code too.
Forgot to define this function in !HAS_AUTOCOMPLETE case. This fixes linking
problems with old compilers/headers such as VC6 with its original SDK.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67518 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-04-16 23:17:44 +00:00
Vadim Zeitlin
85047589a9 Split wxTextCompleter into a base class and wxTextCompleterSimple.
Allow overriding either the iterator-like methods of the base class or the
single and possibly more convenient, albeit slightly less efficient, method of
the derived wxTextCompleterSimple class.

This makes it possible to completely delegate to wxTextCompleter from wxMSW
IEnumString implementation and actually makes the code there easier, even if
it it still not quite trivial because of multi-threading concerns.

It also would make it possible to show the completions progressively, as they
are retrieved, in a future generic implementation of auto-completion (MSW
native implementation doesn't do this unfortunately and waits until all of the
completions become available before showing them).

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67515 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-04-16 17:27:34 +00:00
Vadim Zeitlin
e71e4c932a Don't block the main UI thread while generating completions in wxMSW.
The native IAutoComplete implementation takes care to retrieve the completions
from a background thread to prevent the UI from freezing while they're being
generated, but we worked against it by always generating all the completions
from the main thread and just enumerating them from the background one.

Change this now and call wxTextCompleter::GetCompletions() method from the
background thread itself to never block the main one.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67514 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-04-16 17:27:30 +00:00
Vadim Zeitlin
b9a46ea5a2 Use ACO_AUTOAPPEND option for text completion in wxMSW.
This option appends the first candidate completion value to the text control
itself making it more user-friendly as it reduces the amount of typing needed
to enter it.

See #11465.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67513 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-04-16 17:27:26 +00:00
Vadim Zeitlin
ea98f11c2f Add support for dynamic auto-completion in wxTextEntry.
Add wxTextCompleter class which allows to return the possible completions
dynamically and wxTextCompleter::AutoComplete() overload using it. So far this
is only implemented for wxMSW.

Also fix calling wxTextEntry::AutoComplete(wxArrayString) multiple times under
MSW, this didn't correctly update the list of shown completions before.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67511 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-04-16 17:27:16 +00:00
Vadim Zeitlin
6b30ffedb1 No changes, just simplify preprocessor checks in wxMSW wxTextEntry.
Separate !HAS_AUTOCOMPLETE stub versions from the real one as the code was
too difficult to read otherwise and would become even more so after the
addition of the upcoming custom auto-completer support.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67510 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-04-16 17:27:11 +00:00
Vadim Zeitlin
574479e8db Refactor wxTextEntry::AutoComplete() to simply call DoAutoCompleteXXX().
No real changes, just make the public AutoComplete() non-virtual and add
virtual DoAutoCompleteXXX() methods to make it easier to add new public
AutoComplete() overloads in the upcoming commits.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67509 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-04-16 17:27:04 +00:00
Vadim Zeitlin
715e4f7e3e Fix Cygwin 1.7 build.
Avoid using Cygwin sockets as our code assumes that we use WinSock API under
Windows currently (this might change in the future) by defining
__USE_W32_SOCKETS.

Use new, safer and more efficient cygwin_conv_path() function.

Use t_str() instead of fn_str() with Windows API taking file names, under
Cygwin they are different and using fn_str() is incorrect.

A few other minor fixes.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65057 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2010-07-23 23:32:46 +00:00
Vadim Zeitlin
7591b0bb53 Always show hint in text entries, even when they have focus.
It was impossible to show the hint for the initially focused child of a dialog
before, as the hint was hidden from the very beginning. By showing it always
we avoid this problem.

We may want to add an option/flag for SetHint() to make this configurable
later if somebody really needs to show hints only for as long as the control
doesn't have focus.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62986 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-12-25 11:36:54 +00:00
Jaakko Salli
0847e36eff wxTextEntry::SetMargins(), GetMargins() - implemented on wxMSW and wxGTK (GTK+ 2.10+); also added similar functions into wxComboCtrl, deprecated old indent-functions; wxPropertyGrid modified to use the new functionality
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61834 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-09-05 12:39:12 +00:00
Vadim Zeitlin
9a83f86094 Globally replace _T() with wxT().
Standardize on using a single macro across all wxWidgets sources and solve the name clash with Sun CC standard headers (see #10660).

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61508 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-07-23 20:30:22 +00:00