Vadim Zeitlin [Thu, 11 Nov 2010 12:09:22 +0000 (12:09 +0000)]
Initialize wxCSConv immediately instead of deferring it.
Deferred initialization code was not MT-safe and just wasn't that useful
anyhow because it is rare to create a wxCSConv object and not use it
afterwards.
Remove the deferred initialization logic and create the real conversion used
by wxCSConv immediately in its ctor.
Also improve the comments by clearly explaining the possible values of
wxCSConv::m_name and m_encoding.
Vadim Zeitlin [Wed, 10 Nov 2010 13:53:40 +0000 (13:53 +0000)]
Use wxString::To8BitData() instead of mb_str() to handle NULs correctly.
In ANSI build wxString::mb_str() returns a pointer to the internal wxString
data directly instead of a buffer with a proper length, so it provides access
to the part of the string before the first embedded NUL only.
Use To8BitData() which always returns the buffer of the correct size in all
builds.
The open question remains whether mb_str() should be changed to return a (non
owned) buffer and not just a pointer in ANSI build. This would make
manipulating strings with embedded NULs safer but mb_str() would be less
efficient and less compatible.
Vadim Zeitlin [Wed, 10 Nov 2010 13:53:34 +0000 (13:53 +0000)]
Fix wxString::{Before,After}{First,Last} unit test for ANSI build.
The test used a wide character constant and so didn't work in ANSI build. Use
an ASCII string there now while still keeping the original version in Unicode
build.
Vadim Zeitlin [Wed, 10 Nov 2010 13:53:27 +0000 (13:53 +0000)]
Don't check for wxDF_UNICODETEXT support in ANSI builds.
wxDF_UNICODETEXT clipboard format can't be even constructed without provoking
an assert in ANSI build of wxGTK, so avoid using it, we don't support it
anyhow.
Vadim Zeitlin [Wed, 10 Nov 2010 13:53:15 +0000 (13:53 +0000)]
Don't crash in wxGUIEventLoop::Exit() if not running in wxX11.
The implementation of wxEventLoop::IsRunning() has changed since this code was
written and it doesn't check for m_impl != NULL any more. Because of this,
calling Exit() for an active but not running event loop resulted in a crash in
wxX11.
Fix this by doing nothing in this case. This seems better than asserting as
the event handling code exits the loop if an event handler throws an exception
and the loop might not be running in this case yet (events could be processed
because of a wxYield() call).
Vadim Zeitlin [Wed, 10 Nov 2010 13:52:59 +0000 (13:52 +0000)]
Don't test for DC validity in wxX11 wxDC text extent functions.
The code in GetTextExtent() and GetChar{Width,Height}() works fine even for
non-initialized wxMemoryDC and the ellipsization unit test relies on this
working so simply remove the asserts which resulted in the test failures.
Vadim Zeitlin [Wed, 10 Nov 2010 13:52:52 +0000 (13:52 +0000)]
Disable measuring context unit test for wxX11.
wxCairoRenderer::CreateMeasuringContext() is only implemented for wxGTK so the
test fails under other ports when using Cairo. Disable it for wxX11 for now.
Vadim Zeitlin [Wed, 10 Nov 2010 13:52:45 +0000 (13:52 +0000)]
Use Cairo for wxGraphicsContext in wxX11.
Check for Cairo in configure for wxX11 too.
Fix compilation of wxCairoContext for non-{GTK,MSW} platforms.
Also make wxUSE_CAIRO a "normal" option, i.e. add it to all wx/setup.h files
instead of defining it as 1 unconditionally for wxGTK and 0 for everything
else.
Vadim Zeitlin [Wed, 10 Nov 2010 13:52:29 +0000 (13:52 +0000)]
Fix signed/unsigned comparison warnings in wxUniv wxNotebook.
Recent replacement of size_t wxNotebook::m_selection with int
wxBookCtrlBase::m_selection resulted in appearance of many warnings in wxUniv
wxNotebook. Fix them by removing some now unnecessary casts between int and
size_t and adjusting the remaining ones.
Vadim Zeitlin [Wed, 10 Nov 2010 13:52:10 +0000 (13:52 +0000)]
Don't exclude a bunch of wxDir methods when wxUSE_LONGLONG==0.
The #endif part of a #if wxUSE_LONGLONG check was incorrectly positioned and
excluded the definition of several wxDir methods not related to wxLongLong
when wxUSE_LONGLONG was 0.
Vadim Zeitlin [Wed, 10 Nov 2010 13:51:51 +0000 (13:51 +0000)]
Make wxBitmap::ConvertToDisabled() available in all ports.
This method was defined in wxBitmapBase which is not used by wxMSW (and wxOS2)
so it wasn't available there. Move the definition of the method inline and
reuse it for all ports, making it part of either wxBitmapBase or wxBitmap as
appropriate.
This is clearly ugly but we still have no good solution for deriving wxBitmap
from wxBitmapBase in wxMSW as it already inherits from MSW-specific wxGDIImage
there.
Also document that ConvertToDisabled() is only available when wxUSE_IMAGE==1.
Vadim Zeitlin [Wed, 10 Nov 2010 00:36:55 +0000 (00:36 +0000)]
Disconnect "hide" menu signal to fix menu destruction in wxGTK.
The "hide" signal handler was triggered when destroying a sub-menu (even if it
was not shown at this time). Disconnect it to avoid asserts due to attempts to
generate an event for an already detached menu and to avoid the (bogus)
wxEVT_MENU_CLOSE event as well.
Vadim Zeitlin [Tue, 9 Nov 2010 23:53:42 +0000 (23:53 +0000)]
Fix preprocessor definitions for wxBase build under OS X.
Define __WXOSX__ for non-GUI build under Darwin. Ensure that the rest of the
code compiles correctly when just __WXOSX__ is defined but neither of
__WXOSX_{CARBON,COCOA,IPHONE}__ is. This ensures that wxBase can actually be
built under Mac.
Move OS X symbols definitions in wx/platform.h after wx/setup.h inclusion as
they rely on __DARWIN__ and wxUSE_GUI values which are both define in that
file now. Still keep them before wx/chkconf.h inclusion which relies on
__WXOSX_XXX__ being defined. Yes, it's a mess and should be cleaned up more
permanently some day.
Also remove some redundancy from wx/osx/{carbon,cocoa}/private.h by factoring
out common parts into wx/osx/core/private.h. Also include this header itself
from wx/osx/private.h directly instead of including it thrice from different
sub-ports headers.
Vadim Zeitlin [Mon, 8 Nov 2010 16:28:51 +0000 (16:28 +0000)]
Unload bogus XRC resources in "garbage" unit test.
Leaving invalid XRC entries in wxXmlResource internal list of loaded resources
resulted in failures in the XRC unit test which executed after this one.
It seems that loading an invalid resource shouldn't prevent the other ones
from loading correctly later and this probably should be corrected at
wxXmlResource level but for now work around this problem in the test itself.
Vadim Zeitlin [Sun, 7 Nov 2010 19:33:55 +0000 (19:33 +0000)]
Fix memory leak of XRC ids introduced by the ID range support patch.
Fix bug in linked list processing in RemoveXRCIDEntry() added in r66059: it
incorrectly overwrote the XRC id table entry with the next element in the list
instead of just updating the pointer used during iteration.
Vadim Zeitlin [Sun, 7 Nov 2010 19:33:30 +0000 (19:33 +0000)]
Use Connect() of Bind() in the new part of xrc sample.
Use Connect() for compatibility (notably with VC6 which doesn't support
Bind()). Also connect the event handlers on loading the dialog instead of
waiting until the relevant page is selected, this makes the code slightly
simpler as we don't need to remember whether we connected them or not any
longer.
Vadim Zeitlin [Sun, 7 Nov 2010 19:33:10 +0000 (19:33 +0000)]
Don't require skipping "page changed" event in wxMSW wxNotebook.
wxMSW wxNotebook implementation used to handle EVT_NOTEBOOK_PAGE_CHANGED event
to update the currently shown page which meant that page changing was broken
if the user code handled and didn't skip this event.
As the other ports don't require the user code to skip this event, don't do
this in wxMSW neither and always update the selected page unconditionally.
Vadim Zeitlin [Sun, 7 Nov 2010 14:00:59 +0000 (14:00 +0000)]
Add support for id ranges to XRC.
Allow to declare ranges of consecutive IDs in XRC by using the "id[n]" syntax.
Show this functionality in the xrc sample and test it in the new unit test.
Also show and test the "object reference" XRC functionality.
Vadim Zeitlin [Sun, 7 Nov 2010 13:12:16 +0000 (13:12 +0000)]
Update all windows associated with the tooltip when it changes in wxMSW.
Although the tooltip was initially correctly set for all windows associated
with it, it was only updated for the main one if its text changed later. This
resulted in leaving the old tooltip for the composite controls such as
wxComboBox or controls with sub-windows such as wxRadioBox.
Fix this by storing all windows associated with the tooltip (for space
efficiency, only allocate the array if necessary however as it will be empty
in the majority of cases) and apply SetTip() to all of them, not just the main
one.
Stefan Csomor [Sat, 6 Nov 2010 15:48:48 +0000 (15:48 +0000)]
routing the tab, return events for single line fields back to standard wx handler (doesn't work for secure fields unfortunately), fixes #12386 and partly #12392
Vadim Zeitlin [Fri, 5 Nov 2010 21:43:28 +0000 (21:43 +0000)]
Fix check toolbar items behaviour in non-native toolbars in wxOSX.
Update the button state when the tool is toggled. Also use NSToggleButton for
this tool and not NSOnOffButton as the latter doesn't use the alternative
(toggled) image.
Vadim Zeitlin [Fri, 5 Nov 2010 21:43:18 +0000 (21:43 +0000)]
Avoid using wx GDI classes from non-main thread in wxOSX/Cocoa.
OS X uses a background thread for pulsing the default button and we intercept
the draw requests from it. As our drawing code is not MT-safe, executing it
from the non-main thread can result in crashes.
Avoid this by simply not doing anything fancy when called from a background
thread and simply deferring to the superclass instead.
Vadim Zeitlin [Fri, 5 Nov 2010 21:42:49 +0000 (21:42 +0000)]
Show the first, not the last, inserted item in wxListBox in wxOSX.
The listbox showed its last, not first, item after creation in wxOSX which was
inconsistent with the other ports and generally inconvenient.
Fix this by ensuring that the first item being inserted is shown, and not the
last one as was (implicitly) the case before. A better fix would be to avoid
scrolling entirely but I don't know how to do this with NSClipView.
Vadim Zeitlin [Fri, 5 Nov 2010 21:40:30 +0000 (21:40 +0000)]
Improve default position for new TLWs in wxOSX.
Put the new windows in the upper left corner of the screen but not at (0, 0)
as before, this was rather inconvenient and too different from the normal
application behaviour under OS X.
Vadim Zeitlin [Fri, 5 Nov 2010 21:39:49 +0000 (21:39 +0000)]
Remove duplicate wxEVT_COMMAND_TEXT_ENTER generation from wxOSX/Cocoa.
The code in -[wxNSTextField control:textView:doCommandBySelector:] generated a
second copy of this event as it was also generated from
wxNSTextFieldControl::controlAction() for single line text controls.
Vadim Zeitlin [Fri, 5 Nov 2010 21:39:29 +0000 (21:39 +0000)]
Don't update scrollbars when the window is being destroyed in wxOSX.
Updating scrollbars for a window that is being destroyed anyhow is useless and
resulted in crashes in the htlbox sample because it used client-to-screen
coordinates conversion which asserted because the TLW was invalid any more and
this unexpected assert during window destruction led to a crash.
Vadim Zeitlin [Fri, 5 Nov 2010 21:39:09 +0000 (21:39 +0000)]
Fix crash in wxColour ctor from NSColor in wxOSX/Cocoa.
wxColour ctor from NSColor added by Kevin Ollivier in r62525 never worked as
it passed NULL pointer to NSColor:getComponents and so always crashed. This
resulted in a crash in the rich text editor of the text sample, for example.
Fix this by passing a valid array containing colour components instead.
Vadim Zeitlin [Fri, 5 Nov 2010 21:38:25 +0000 (21:38 +0000)]
Assume sizeof(wchar_t) is always 4 under OS X.
wchar_t used to be 2 bytes in Mach-O builds but they're not supported any
longer so remove the code checking for sizeof(wchar_t) and just assume it's
always 4.
Vadim Zeitlin [Fri, 5 Nov 2010 21:37:27 +0000 (21:37 +0000)]
Disable keyboard unit test with wxUIActionSimulator under OS X.
The test doesn't work because the test window never get any events. This might
be a bug in the test or in wxUIActionSimulator itself but for now I just have
no idea about how to fix it, so disable the test to let the rest of the test
suite run.
Vadim Zeitlin [Thu, 4 Nov 2010 10:57:13 +0000 (10:57 +0000)]
No changes, just use RAII-based classes in MSW owner drawn menu code.
Add helper HDC{TextCol,BgCol,BgMode}Changer classes which ensure that the
corresponding HDC attribute is reset on scope exit instead of manually calling
the corresponding MSW functions to set and reset it.
Vadim Zeitlin [Thu, 4 Nov 2010 10:49:10 +0000 (10:49 +0000)]
Pas long to _get_timezone() even for VC8.
Apparently the MSDN documentation for VC8 is wrong and _get_timezone()
function expects a long and not int when using it (as is already the case with
VC9 and VC10).
Vadim Zeitlin [Wed, 3 Nov 2010 23:48:30 +0000 (23:48 +0000)]
Remove unused mouse event handler from dataview sample.
The mouse event handler for the frame was never executed because the frame is
entirely covered by other windows in this sample. Not sure what was meant here
but this handler is useless so just remove it.
Vadim Zeitlin [Wed, 3 Nov 2010 16:36:34 +0000 (16:36 +0000)]
Add wxAuiPaneInfo::IsDockable().
This function checks if the pane can be docked at any side. It is useful in
its own right but most importantly is needed to fix compilation broken in
r66005 which used it before it was added.
Vadim Zeitlin [Wed, 3 Nov 2010 16:29:36 +0000 (16:29 +0000)]
Set column field of wxDVC ITEM_{ACTIVATED,CONTEXT_MENU} events.
Add missing calls to wxDataViewEvent::SetColumn() and SetDataViewColumn().
In the future it would be nice to refactor the code to have a common event
object initialization function that would make it impossible to forget to do
this.
Vadim Zeitlin [Wed, 3 Nov 2010 16:29:13 +0000 (16:29 +0000)]
Handle wxLOCALE_DECIMAL_POINT in wxLOCALE_CAT_MONEY correctly in wxMSW.
Use LOCALE_SMONDECIMALSEP and not LOCALE_SDECIMAL when querying for the
decimal separator in money category, it can be different from the usual
numeric one.
Vadim Zeitlin [Tue, 2 Nov 2010 11:57:30 +0000 (11:57 +0000)]
Use _get_timezone() function instead of _timezone with MSVC8+.
While some (but not all) versions of VC8 CRT still define _timezone variable,
it is deprecated and shouldn't be used and referencing it can result in
linking problems if it pulls in static CRT.
Just use _get_timezone() function instead for the VC versions that support it
(as was already done in r54417 for VC8 in 2.8 branch).
Vadim Zeitlin [Tue, 2 Nov 2010 11:57:24 +0000 (11:57 +0000)]
Make write end of the child process pipe non-blocking under Unix.
We need to make at least one end of the pipe used to communicate with
wxExecute() child process non-blocking to avoid deadlocks, so unblock the
write end of the pipe. It seems to be unnecessary to unblock the reading ends
of std{out,err} pipes as we can already check for the presence of input there.
This is also consistent with wxMSW behaviour.
Vadim Zeitlin [Tue, 2 Nov 2010 11:57:14 +0000 (11:57 +0000)]
Don't scroll the grid too much to bring selection in view.
wxGrid scrolled completely to the right in row selection mode as it was always
trying to make the bottom right selection corner visible. This was due to
adjusting the selection block corner to cover the entire row in this mode (of
course, the same was true for the column selection mode too).
Don't do this any more as it's unnecessary, making the real selection block
corner visible is enough for the block selection mode and nothing else is
needed in row/column modes.
Vadim Zeitlin [Tue, 2 Nov 2010 11:57:03 +0000 (11:57 +0000)]
Avoid crash when releasing the mouse in wxRibbonToolBar.
The active tool pointer can be changed/set to NULL by the event handler in
wxRibbonToolBar::OnMouseUp() so test for it before using it after processing
the event.