Vadim Zeitlin [Wed, 24 Nov 2010 00:42:53 +0000 (00:42 +0000)]
Add support for negatable command line switches.
Add wxCMD_LINE_SWITCH_NEGATABLE which allows to use a dash after a command
line switch to inverse its meaning (i.e. use "/X-" form). Also add new
wxCmdLineParser::FoundSwitch() allowing to check for whether the switch was
specified in normal or negated form.
Vadim Zeitlin [Wed, 24 Nov 2010 00:42:45 +0000 (00:42 +0000)]
Rewind the input stream after failing to load image from it.
For seekable streams, don't change the current position when loading image
fails. This allows the subsequent image handlers to succeed during image
format auto-detection even if a previous, erroneously chosen, handler failed.
Vadim Zeitlin [Wed, 24 Nov 2010 00:42:35 +0000 (00:42 +0000)]
Improve error messages from wxImage::LoadFile().
The error given when loading an image file failed was not very useful because
they didn't specify which file exactly we failed to load and also because the
numeric handler type which means nothing at all to the end user (and not much
to the developer) was used.
Use the description of the file format instead and also always give the name
of the file that we failed to load.
Finally, remove the test for file existence: this is one of many reasons why
opening the file could fail and it doesn't make sense to handle it specially,
just let the underlying stream generate the appropriate error message in all
cases.
Vadim Zeitlin [Wed, 24 Nov 2010 00:42:19 +0000 (00:42 +0000)]
Skip mouse events outside of item area in wxDataViewCtrl.
Don't consume mouse events outside of the area occupied by the items in the
generic implementation of wxDataViewCtrl as this prevented wxEVT_CONTEXT_MENU
events from being generated.
Vadim Zeitlin [Tue, 23 Nov 2010 13:11:02 +0000 (13:11 +0000)]
Center task dialog-based wxProgressDialog on the parent window.
wxProgressDialog was created without the parent when using task dialogs so it
was centred on screen and not on its parent as usual. Fix this by explicitly
positioning it so that it's centered over the parent.
Vadim Zeitlin [Tue, 23 Nov 2010 13:10:54 +0000 (13:10 +0000)]
Deselect all items in wxMSW wxListBox when selection is set to -1.
Even though this behaviour is somewhat counterintuitive, the documentation
mentions that this is what should happen and wxGTK and wxOSX already behave
like this so bring wxMSW in line.
wxListBox::DeselectAll() should probably just call SetSelection(wxNOT_FOUND)
when the item to leave selected is not specified too now.
Vadim Zeitlin [Mon, 22 Nov 2010 16:18:47 +0000 (16:18 +0000)]
Initialize time zone information before using it in wxGetTimeZone().
We must call _tzset() before calling _get_timezone() as while this is normally
done implicitly by the other time functions, it might not have been done yet
if create a wxDateTime::TimeZone before calling any of them.
Jaakko Salli [Mon, 22 Nov 2010 14:28:16 +0000 (14:28 +0000)]
Have wxPropertyGridEditorEventForwarder::ProcessEvent() return true more often - that is when the event was recognized as being 'handled', and specifically for the case of property editor's button being pressed (fixes #12487).
Vadim Zeitlin [Mon, 22 Nov 2010 12:51:05 +0000 (12:51 +0000)]
Fix wxUniv build after deriving wxStatusBar from wxControl.
wxUniv build was broken since the base class of wxStatusBar was changed from
wxWindow to wxControl in r66226 because it derived twice from wxInputConsumer
now.
Fix this by simply not inheriting wxStatusBarUniv from wxInputConsumer any
more, it already derives from it via wxControl now.
Vadim Zeitlin [Mon, 22 Nov 2010 12:48:47 +0000 (12:48 +0000)]
Set the width of the last status bar pane correctly in wxMSW.
The total width of status bar panes must add up to the size of the status bar
as otherwise an extra unwanted border is drawn after the last pane and we did
have this border for status bar with a size grip.
So while we still use the width without the size grip for calculating the
fields widths, pass the width with the size grip to Windows to prevent this
from happening.
Also, don't pretend that the last field stretches up to the status bar edge
when it should end before the size grip and Windows even already helpfully
does it for us.
Vadim Zeitlin [Mon, 22 Nov 2010 12:48:35 +0000 (12:48 +0000)]
Put WINDRES_CPU_DEFINE in RESFLAGS and not RESCOMP in configure.
WINDRES_CPU_DEFINE is just another resource compiler flag which should be part
of RESFLAGS instead of being added to RESCOMP definition itself. This is not
only more logical but also fixes the problem with matching RESCOMP against
"windres" or "wrc" in wx-config.
Vadim Zeitlin [Mon, 22 Nov 2010 01:23:16 +0000 (01:23 +0000)]
Deprecate not working wxSplitterWindow::SetSashSize().
Setting sash size to non default value didn't work correctly and didn't make
much sense anyhow as the sash appearance is platform-dependent and current
code for drawing it doesn't work for arbitrary sizes.
Simply remove the possibility to set the sash size.
Vadim Zeitlin [Mon, 22 Nov 2010 01:23:09 +0000 (01:23 +0000)]
Don't set explicit background colour for wxStatusBar in wxMSW.
Setting the background colour for the status bar explicitly is unnecessary and
probably prevents it from rendering correctly with some themes. Simply remove
the call to SetBackgroundColour() from wxStatusBar::Create().
We should also define Get[Class]DefaultAttributes() in wxStatusBar in the
future.
Vadim Zeitlin [Mon, 22 Nov 2010 01:23:02 +0000 (01:23 +0000)]
Don't forbid creating wxSplitterWindow with border style.
Any border specified for wxSplitterWindow was explicitly discarded when
creating it but there doesn't seem to be any reason to forbid it, the original
code probably predated the addition of wxWindow::GetDefaultBorder() which
allowed to have different borders by default for different classes.
In any case, simply remove this code now to allow creating splitters with
borders if so desired.
Vadim Zeitlin [Mon, 22 Nov 2010 01:22:56 +0000 (01:22 +0000)]
Delete pending objects in wxApp::ProcessPendingEvents() and not ProcessIdle().
Move DeletePendingObjects() call from ProcessPendingEvents() to ProcessIdle()
to ensure that we delete the objects marked for destruction even if the
application is sitting in a tight OnIdle() loop, i.e. if the idle event
handler keeps requesting more events.
Also make sure that the event loop terminates if its OnExit() was called even
if the idle event handler continues to request more events.
Vadim Zeitlin [Mon, 22 Nov 2010 01:22:47 +0000 (01:22 +0000)]
Silently ignore timer events from timers which were just stopped.
An assert in wxTimerWndProc() could be provoked by valid user code which
simply started and stopped the timers quickly enough because a WM_TIMER could
have been already generated just before we stopped the timer.
Simply ignore events from unknown timer under assumption that they must come
from the recently stopped ones instead of asserting.
Ideally we'd somehow distinguish between the situation described above and the
really bogus events which could indicate bugs in wx code or a change in
behaviour in a future version of Windows but there is no easy way to do it so
for now just settle for not asserting in normal case.
Vadim Zeitlin [Mon, 22 Nov 2010 01:22:41 +0000 (01:22 +0000)]
Refactor wxStatusBar creation in wxMSW to do it in standard way.
Use wxControl-provided CreateControl() and MSWCreateControl() methods to
create the status bar instead of duplicating their code in its Create().
Also translate wx styles to MSW ones in overridden MSWGetStyle() now.
In addition to making the code smaller and more clear, this fixes the
non-respect of the styles specified at status bar creation (e.g. border),
see #12655.
Vadim Zeitlin [Mon, 22 Nov 2010 01:22:36 +0000 (01:22 +0000)]
Derive wxStatusBar from wxControl and not wxWindow.
wxStatusBar is no less a control than wxToolBar and deriving it from wxControl
gives access to convenient native control creation functions under MSW (which
will be used by the next commit).
Vadim Zeitlin [Mon, 22 Nov 2010 01:22:25 +0000 (01:22 +0000)]
Send page changed event after changing the page in wxMSW wxNotebook.
Update the currently selected page before generating
wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED event in wxMSW wxNotebook. This is more
consistent with other ports and more logical as "-ED" events are supposed to
be sent after the action they notify about is completed. And it also allows to
set the focus in this event handler whereas any attempts to do it would have
been disregarded before as changing the active page resets focus.
Notice that this does introduce an incompatibility: calling
wxNotebook::GetSelection() from PAGE_CHANGED event handler now returns the new
page and not the old one as before. Again, this is more logical and more
consistent.
Vadim Zeitlin [Mon, 22 Nov 2010 01:22:17 +0000 (01:22 +0000)]
Use correct wxDEBUG_LEVEL value when building wxscintilla library.
wxScintilla code uses wxVector<> which brings in wxDEBUG_LEVEL-dependent code
so we must use the wxDEBUG_LEVEL value consistent with the rest of the library
when building it.
Simply pass wxDEBUG_LEVEL definition on the compiler command line if it's
different from the default.
Vadim Zeitlin [Mon, 22 Nov 2010 01:22:07 +0000 (01:22 +0000)]
Always define WXUSINGDLL when compiling Scintilla in shared wx build.
We need WXUSINGDLL even in monolithic build because Scintilla references wx
debugging functions (wxOnAssert(), wxTheAssertHandler &c) which still must be
seen as being exported from the (monolithic) DLL in this case.
Vadim Zeitlin [Sun, 21 Nov 2010 13:00:06 +0000 (13:00 +0000)]
Revert r66070: "Unload bogus XRC resources in "garbage" unit test."
This change is not needed any longer after r66219 which fixed the real
underlying problem, i.e. that attempting to load an invalid XRC file resulted
in failures when loading all subsequent XRC files.
Vadim Zeitlin [Sat, 20 Nov 2010 23:53:34 +0000 (23:53 +0000)]
Don't keep entries for XRC resources that failed to load in wxXmlResource.
Attempting to load a resource that couldn't be loaded resulted in
wxXmlResource::Load() returning false for this and _all_the_subsequent_ calls
to it because each call to Load() reattempted to reload all resources,
including the one(s) that failed to load initially.
Instead, try to load just the resource(s) that we should load right now and
ignore all the other ones. Also, don't add entries for the one(s) that we fail
to load.
This fixes the unit test failures in the XRC test case which was affected by
the test checking that XRC couldn't be loaded from garbage that ran before it.
It also makes the code simpler by ensuring that wxXmlResourceDataRecords
elements always have a valid wxXmlDocument associated with them.
Also clean up the code: use wxScopedPtr instead of manually deleting pointers
and reorganize #if checks to be easier to follow.
Vadim Zeitlin [Sat, 20 Nov 2010 23:53:28 +0000 (23:53 +0000)]
Don't consider extra ".." an error in wxFileName::Normalize().
The path being normalized could have come from user and there doesn't seem to
be any point in complaining about too many ".."s in it when we can handle them
correctly instead.
So simply ignore the extra ".."s for the absolute paths and keep them
unchanged for the relative ones instead of returning an error.
Jaakko Salli [Sat, 20 Nov 2010 11:58:54 +0000 (11:58 +0000)]
Reworked wxSystemColourProperty::StringToValue() to use wxColour::Set() instead of doing string-to-colour conversion by itself. This adds support for HTML-colours, among other things (closes #12696).
Vadim Zeitlin [Thu, 18 Nov 2010 12:41:13 +0000 (12:41 +0000)]
Check wxDateTime components validity more rigorously.
Check that the provided day is strictly positive and also that the month is in
valid range: while it should always be, considering that it's an enum element,
in practice people often cast ints to wxDateTime::Month with potentially fatal
results. Catch this with an assert in wxDateTime::Tm::IsValid().
Vadim Zeitlin [Wed, 17 Nov 2010 01:20:50 +0000 (01:20 +0000)]
Simplify wxMSW wxMenuBar title management.
Store the titles of the menu bar menus in the menu objects themselves. This
makes wxMenu::GetTitle() return the expected result for them (which also fixes
the current unit test failures for wxMSW) and makes wxMenuBar code simpler.
This removes the wxMenuInfo class which existed for XTI purposes only but as
it was apparently unfinished and MSW-specific it shouldn't be a big loss.
Vadim Zeitlin [Tue, 16 Nov 2010 22:38:44 +0000 (22:38 +0000)]
Emphasize that wxUSE_DYNLIB_CLASS shouldn't be disabled in wxMSW.
Mention in the setup.h comment that wxDynamicLibrary is used in a lot of
places internally and disabling it can result in a loss of a lot of important
functionality.
Vadim Zeitlin [Tue, 16 Nov 2010 22:38:26 +0000 (22:38 +0000)]
Avoid asserts due to not overriding OnGetItemText() in VirtListCtrlTestCase.
A virtual list control must override wxListCtrl::OnGetItemText() method and
wxMSW native implementation asserts if this is not the case (the generic one
should arguably do it as well).
Avoid the asserts by providing a dummy implementation of OnGetItemText() in
the unit test.
Vadim Zeitlin [Tue, 16 Nov 2010 22:38:19 +0000 (22:38 +0000)]
Add an explicit SetFocus() call to fix wxTreeCtrl unit test.
Fixing the implicit focus grabbing by wxTreeCtrl::SelectItem() in r65905 broke
its unit test case as the simulated key event was not delivered to wxTreeCtrl
itself any more.
Fix this by simply setting the focus to the tree explicitly before sending it
any key strokes.
Vadim Zeitlin [Tue, 16 Nov 2010 22:38:13 +0000 (22:38 +0000)]
Correct wxMSW wxToolTip behaviour for wxRadioBox items tooltips.
The assert added in r66053 checking that we couldn't have tooltips for child
windows if we didn't have the tooltip for the main one turned out to be wrong,
at least in wxRadioBox case it's perfectly possible to have the tooltips for
the individual radio buttons without having one for the box itself.
Replace the assert with a simple if check.
This fixes a unit test failure in RadioBoxTestCase.
Vadim Zeitlin [Tue, 16 Nov 2010 22:37:52 +0000 (22:37 +0000)]
Fix crashes in wxDateTime::ParseDate() for some invalid dates.
Parsing an incomplete date with nothing but whitespace and/or date delimiter
characters at the end crashed as we happily went beyond the end of string.
Fix this by not using a loop which didn't check for the iterator validity.
Vadim Zeitlin [Mon, 15 Nov 2010 00:22:01 +0000 (00:22 +0000)]
VC6 compilation fix in wxDIB::Create().
Deal with the lack of scope around variables declared inside the for loop in
this compiler, previously it gave "error C2360: initialization of 'x' is
skipped by 'case' label" message and also complained about redefinition of 'x'.
Vadim Zeitlin [Sun, 14 Nov 2010 14:04:44 +0000 (14:04 +0000)]
Restore code for closing inherited file descriptors in the child.
The code closing all file descriptors inherited from the parent in the child
process created by wxExecute() was removed in r57324 by mistake (probably
due the fact that its meaning was poorly explained) but we still do need to do
this, of course, to avoid descriptor "leaks" (e.g. the parent couldn't really
close any of them).
Restore the code for closing all unneeded file descriptors in the child in
slightly modified form and add a comment pointing to an URL explaining how to
do it better in the future.
Vadim Zeitlin [Sun, 14 Nov 2010 14:04:37 +0000 (14:04 +0000)]
Fix spurious errors when writing to the child process stdin under Unix.
Since the child pipe was made non-blocking in r65993, it became possible to
write to child process without deadlocking when the pipe became full. However
this still resulted in an error from wxFileOutputStream as it didn't handle
EAGAIN returned from write() any differently than any other error, even though
it is an expected situation in this particular case.
Change Unix wxExecute() to use wxPipeOutputStream which ignores EAGAIN unlike
wxFileOutputStream to fix this.
Vadim Zeitlin [Sun, 14 Nov 2010 14:04:27 +0000 (14:04 +0000)]
No real changes, just reamed HAS_PIPE_INPUT_STREAM.
Renamed the symbol indicating whether pipe-based streams are available from
HAS_PIPE_INPUT_STREAM to HAS_PIPE_STREAMS as it's not really input-specific.
Vadim Zeitlin [Sat, 13 Nov 2010 17:13:29 +0000 (17:13 +0000)]
Don't use standard menu ids in the unit test to avoid Mac problems.
wxOSX rearranges the standard menu items such as wxID_EXIT and wxID_ABOUT and,
for the former, changes its text to "Quit", so don't use them in the menu unit
test which expects to find the items in the menus to which they were added and
exactly with the labels used when adding them.
Vadim Zeitlin [Sat, 13 Nov 2010 15:03:33 +0000 (15:03 +0000)]
Don't put cursor at the end of wxGridCellEnumEditor control.
Putting the cursor to the end of the control when the editing starts doesn't
make much sense as this should be the default behaviour anyhow and, worse,
this results in an assert under wxMSW where a read-only wxComboBox doesn't
have any cursor to move.
Vadim Zeitlin [Sat, 13 Nov 2010 15:03:26 +0000 (15:03 +0000)]
Initialize scrollbar positions in wxGTK correctly.
The scrollbar positions stored in wxWindow::m_scrollPos were not initially
correct in wxGTK because wxScrollHelper::SetScrollbars() didn't update them
and only set the values of the underlying GtkAdjustments themselves. This
resulted in filtering out of the first scroll event as the code (wrongly)
believed that the scrollbar position hadn't changed.
Fix this by setting m_scrollPos to the real scrollbar positions.
Vadim Zeitlin [Sat, 13 Nov 2010 15:03:10 +0000 (15:03 +0000)]
Don't assert if config file contains an invalid boolean value.
Asserts should be only triggered by programming errors, not by user actions,
and the assert checking that the value is either 0 or 1 in
wxConfigBase::DoReadBool() could happen if the user edited the file and put a
wrong value into it.
Vadim Zeitlin [Sat, 13 Nov 2010 15:02:50 +0000 (15:02 +0000)]
Make menu operations always work with "Test" menu in the sample.
Some tests in the "Menu" menu of the menu sample worked with the "Test" menu
while others used the last one ("Help" initially but possibly something else
if the test commands from "Menubar" menu were used).
Harmonize all menu commands to use the "Test" menu now.
Vadim Zeitlin [Sat, 13 Nov 2010 15:02:42 +0000 (15:02 +0000)]
Fix resizing of wxGrid columns when they were reordered.
The column resizing code in wxGrid didn't take account of the fact that the
column positions and indices could be different. Correct it by inserting calls
to wxGrid::GetColAt() and GetColPos() in a new wxGridOperations::GetLineBefore()
method.
Vadim Zeitlin [Thu, 11 Nov 2010 12:09:30 +0000 (12:09 +0000)]
Improve check for ASCII locale in wxGTK initialization code.
Use wxFontMapper::GetEncodingFromName() to check if the current locale
encoding is ASCII instead of just comparing the name with "US-ASCII" which is
not the name used by most platforms (e.g. current Linux systems call this
encoding "ANSI_X3.4-1968").
This avoid creating a wxCSConv object for ASCII encoding unnecessarily on
startup.
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.