Vadim Zeitlin [Sat, 9 Jan 2010 17:57:52 +0000 (17:57 +0000)]
Restore default WM_ERASEBKGND handling for wxMDIParentFrame.
We pretended that we erased the background ourselves but actually we did not.
Just let DefWindowProc() do whatever it does by default to fix the problem
with wrong toolbar background colour since r62971.
Also removed the unused and unneeded WM_SIZE handler as well.
Vadim Zeitlin [Thu, 7 Jan 2010 13:16:01 +0000 (13:16 +0000)]
Improve hit detection in wxMSW wxTreeCtrl with wxTR_FULL_ROW_HIGHLIGHT style.
When wxTR_FULL_ROW_HIGHLIGHT is used, the item visually takes up the entire
breadth of the window so clicking both to the left or to the right of the item
should have the same effect as clicking on it.
So add a MSWIsOnItem() helper which tests for whether a point is above the
item correctly and use it in order to:
1. In multi selection mode, allow clicking anywhere to select the item(s)
when Ctrl or Shift is pressed (Closes #11598).
2. Generate activation event when clicking to the right of the item too
(Closes #11602).
3. Detect item bounds correctly in WM_LBUTTONUP handler (although it's
not really clear what does this code do and hence what problem does this
fix...).
Vadim Zeitlin [Mon, 4 Jan 2010 12:51:48 +0000 (12:51 +0000)]
Add assert checking that window has no event handlers when destroyed.
Forgetting to pop custom event handlers pushed onto the window before it is
destroyed will result in a crash later on, so try to detect this immediately
with an assert.
We might want to forcefully pop them off too, this could result in memory
leaks but would be still better than crashing.
Vadim Zeitlin [Mon, 4 Jan 2010 12:22:49 +0000 (12:22 +0000)]
Fix wxConvAuto behaviour when it is used by wxTextInputStream.
wxConvAuto implicitly supposed that the chunk of data passed to it for
translation was big enough to allow it to at least detect the BOM from it.
However this isn't necessarily the case and never is with wxTextInputStream
which reads the bytes one by one.
Fix this by waiting until we have enough data to be able to detect the BOM.
This still doesn't fix the problem with streams without BOM and the
corresponding unit test still fails -- it will need to be fixed at the level
of wxTextInputStream itself later but handling correctly the cases when a BOM
is present is already better than before.
Vadim Zeitlin [Mon, 4 Jan 2010 12:22:42 +0000 (12:22 +0000)]
Make calling wxLog::IsAllowedTraceMask() safe during static init time.
Although using wxLog during statics initialization is not recommended, it may
still happen, possibly indirectly so make it work correctly by using an
accessor function for the array of trace masks which ensures that this array
is always correctly initialized before being used.
Vadim Zeitlin [Mon, 4 Jan 2010 11:05:47 +0000 (11:05 +0000)]
Correctly parse times without seconds in wxDateTime::ParseTime().
This was always supposed to work but never did because of a typo in the "24
hour format without seconds" format specification. Fix this by removing the
extra "%S" from it and add a test for this case.
Vadim Zeitlin [Mon, 4 Jan 2010 10:59:40 +0000 (10:59 +0000)]
Don't dereference invalid iterator in wxDateTime::ParseDate().
If the string passed to this method contained only spaces (possibly 0 of them,
i.e. was empty) we would dereference the end string iterator. Fix this by
adding an explicit test for "p != pEnd".
Kevin Ollivier [Mon, 4 Jan 2010 01:57:42 +0000 (01:57 +0000)]
Get the OS X Cocoa native combobox building by having the native code compile if wxOSX_USE_NATIVE_COMBOBOX is defined. It must be explicitly enabled by adding that define to the build flags as the native implementation is mostly just stubs right now.
Kevin Ollivier [Sun, 3 Jan 2010 23:59:32 +0000 (23:59 +0000)]
Don't use a destroy event handler to disconnect the native control's delegate as the destroy event propagates and can cause the TLW to remove its delegate at unexpected times, such as when a child control is destroyed but the TLW remains active. Instead, do it in response to the Destroy() call.
Václav SlavÃk [Sun, 3 Jan 2010 18:28:56 +0000 (18:28 +0000)]
Moved wxConvertVariantToOle and wxConvertOleToVariant to oleutils.cpp.
These are declared in oleutils.h, so that's where they should be. More
importantly, they are used by wxActiveXContainer and so are required
even if wxUSE_OLE_AUTOMATION is off.
Also added "wx" prefix to (Clear|Release)Variant, because they cannot be
static any longer.
Vadim Zeitlin [Sun, 3 Jan 2010 17:37:24 +0000 (17:37 +0000)]
Romanian translation update from Catalin.
This is more of a replacement than an update but apparently the old
translation had a lot of problems. The new translation is undoubtedly more
complete (1523 translated messages against 230 for the old one).
Kevin Ollivier [Wed, 30 Dec 2009 17:41:29 +0000 (17:41 +0000)]
To support playing async sounds on the stack on Mac, do not delete the wxSoundData when its wxSound object is destroyed if it's in the queue of sounds to be played. Instead, mark it to be deleted and delete it after it has played.
Vadim Zeitlin [Wed, 30 Dec 2009 13:46:27 +0000 (13:46 +0000)]
Don't create an invalid iterator in wxDateTime::ParseTime().
Creating an iterator pointing beyond the string end resulted in an assert from
MSVC 9 CRT. Fix this by using wxString ctor taking length (which may be
greater than the length of the string) instead of the one taking two iterators
(which must both be valid).
Jaakko Salli [Tue, 29 Dec 2009 16:04:40 +0000 (16:04 +0000)]
Changed wxPropertyCategory to use same cell rendering code as regular properties. This allows labels for category columns other than the first. Rendering code was heavily modified to allow 'merging' of cells when needed.
Vadim Zeitlin [Mon, 28 Dec 2009 16:18:37 +0000 (16:18 +0000)]
Ensure that frame is re-laid out when its toolbar is deleted.
The code in wxFrameBase::SetToolBar() didn't work correctly when toolbar was
unset using SetToolBar(NULL) because the frame toolbar pointer was reset
before layout was done resulting in the frame not recognizing its (still
existing) toolbar child as one of its bars and so nothing was done at all when
the frame had a single child, as in the toolbar sample.
Correct this by carefully ensuring that the toolbar pointer is still set at
the moment of the layout but hide the toolbar to ensure that no place is
allocated for it.
Also mention that it is not necessary to call SetToolBar(NULL) at all if the
toolbar is being deleted anyhow in the sample as toolbar does this itself in
its destructor.
Vadim Zeitlin [Sun, 27 Dec 2009 19:40:28 +0000 (19:40 +0000)]
Don't call SetMinSize() when creating the window if no initial size was given.
Calling SetMinSize() is unnecessary in this case. It also results in GTK+
errors when creating wxFileDialog as it is not created yet when this is called
(but it does take care to pass wxDefaultSize to this function as its size
can't be set yet).
Vadim Zeitlin [Sun, 27 Dec 2009 19:40:15 +0000 (19:40 +0000)]
Correct wxUSE_MACOSX_VERSION_MIN setting when running under OS X 10.4.
sw_vers outputs e.g. 10.4.11 under 10.4 so comparing its result with just 10.4
is wrong, match it against "10.4*" using case instead to ensure that 10.4.11
is indeed recognized as 10.4.
Vadim Zeitlin [Sun, 27 Dec 2009 19:39:55 +0000 (19:39 +0000)]
Override some methods in wxF(F)ileStream to resolve ambiguities.
Override virtual methods IsSeekable(), GetLength() and OnSysSeek/Tell() to
forward to wxF(F)InputStream base class as otherwise it's impossible to use
them at all because of ambiguity between the versions inherited from this
class and wxF(F)OutputStream (even though the two versions should do the same
thing as they operate on the same file descriptor/handle).
Also improve documentation of these classes: provide a brief description,
correct the base classes.
Vadim Zeitlin [Sat, 26 Dec 2009 16:36:39 +0000 (16:36 +0000)]
Take into account the initial buttons state when creating wxGTK toolbar.
With wxMSW it is possible to call e.g. wxToolBarTool::Enable(false) on a tool
before calling wxToolBar::Realize() to create the tool in an initially
disabled state but this wasn't done in wxGTK version.
Override Realize() now under wxGTK to bring the native toolbar buttons state
in sync with the internal state of the corresponding wxToolBarTools.
Jaakko Salli [Sat, 26 Dec 2009 10:45:04 +0000 (10:45 +0000)]
Replaced 'InlineHelp' property attribute with 'Hint'; Use SetHint() wxTextCtrl and wxComboCtrl member function to set it; Added a small section about help string and hint text in propgrid overview
Kevin Ollivier [Fri, 25 Dec 2009 20:43:43 +0000 (20:43 +0000)]
Remove the native toolbar from the frame in Destroy() rather than the destructor, as removing it in the destructor causes resize / repaint events to fire on the native control, which then goes to wx controls being deleted.
Vadim Zeitlin [Fri, 25 Dec 2009 11:36:54 +0000 (11:36 +0000)]
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.
Vadim Zeitlin [Wed, 23 Dec 2009 21:42:06 +0000 (21:42 +0000)]
Erase toolbar background even if it doesn't contain any controls/spaces.
Minor correction to changes in r62971: we still need to hook WM_ERASEBKGND in
toolbar parent when painting the toolbar itself even when there are no dummy
separators in it (and so we don't need to paint them over). Without this, the
background of simple toolbars without controls was not erased correctly.
Vadim Zeitlin [Wed, 23 Dec 2009 13:56:55 +0000 (13:56 +0000)]
Don't pass 0 timer ids to ::SetTimer().
Creating timers with 0 id failed because Windows SetTimer() function requires
a non-zero id. Fix this by using a (impossible at wx API level) -1 id value in
this case instead.
Vadim Zeitlin [Tue, 22 Dec 2009 15:37:49 +0000 (15:37 +0000)]
Remove the test of erase background events from the toolbar sample.
Handling erase background events for toolbars never worked for the ports other
than wxMSW and now it doesn't work for MSW neither as we need to skip erasing
the background in WM_ERASEBKGND handler to avoid flicker which would result
from erasing the background twice, from there and from WM_PAINT handler which
must do it. So don't even try to test if it works, it's unlikely to be very
useful anyhow.
Vadim Zeitlin [Tue, 22 Dec 2009 15:37:43 +0000 (15:37 +0000)]
Finally really correct background erasing for wxMSW wxToolBar.
Do use TBSTYLE_FLAT and TBSTYLE_TRANSPARENT (the former actually implies the
latter) for MSW toolbar as it is the only way to avoid the flicker of toolbar
buttons. These styles were disabled before because of lack of understanding
about how they worked: with them, the toolbar supposes that its parent takes
care of erasing its background but wx didn't do this (in fact wxFrame did
accidentally erase toolbar background because of the use of Win32 client
rectangle, including tool/status bars, instead of wx client rectangle,
excluding them, in wxWindowMSW::DoEraseBackground(), but it didn't do it
correctly).
Now we allow hooking WM_ERASEBKGND events processing in a parent window by a
child one and use this to handle toolbar background erasing in toolbar itself.
We still prevent the native toolbar from drawing dummy separators and always
erase the area occupied by them ourselves and thus avoid the flicker entirely.
The only remaining flicker in the toolbar sample is that of embedded
wxStaticText control. It does appear with correctly transparent background and
bitmaps with alpha channel also (still) are drawn correctly in wxStaticBitmaps
embedded in the toolbar.
Finally, we still use solid background brush for toolbar but we can easily use
a themed background if really desired, there is just a single function to
change to do it (MSWGetToolbarBgBrush()).
Vadim Zeitlin [Tue, 22 Dec 2009 15:37:37 +0000 (15:37 +0000)]
Fix best size computation for buttons without image and with empty label.
If a button was initially created with an empty label (but without image
neither), its best size was computed and cached as being null. Correct this by
giving the button the default size instead, as expected.