Vadim Zeitlin [Sun, 19 Dec 2010 15:02:45 +0000 (15:02 +0000)]
Store menus titles in menus themselves in wxOSX.
Get rid of wxMenuBar::m_titles array which doesn't seem to be needed and just
store the titles in the menus themselves instead. This makes wxMenu::GetTitle()
work as in the other ports and fixes unit test failures in menu test.
It also makes it unnecessary to duplicate the base class Find[Menu]Item()
methods in wxOSX wxMenuBar so simply remove them entirely.
Vadim Zeitlin [Sun, 19 Dec 2010 15:02:31 +0000 (15:02 +0000)]
Fix initial gradient point calculation in wxOSX.
This fixes the bug introduced in r63879 which used the wrong indices into the
stops array resulting in visual artefacts in wxAUI, for example (and also
possible crashes due to accessing out of bound array elements).
Vadim Zeitlin [Sun, 19 Dec 2010 14:08:42 +0000 (14:08 +0000)]
Preserve wxSlider value when changing its range in wxOSX too.
This fix is similar to r66368 for wxMSW and preserves the slider value when
its range changes. This is necessary because while the underlying native
control value doesn't change when the range is, the logical value of wxSlider
does change if it must be inversed as this depends on the range.
Jaakko Salli [Fri, 17 Dec 2010 11:20:50 +0000 (11:20 +0000)]
Make the wxComboCtrl's wxTextEntry interface more complete and consistent. All text is no longer selected on SetValue(), but only when user selects an item from the drop-down list.
Jaakko Salli [Thu, 16 Dec 2010 17:21:49 +0000 (17:21 +0000)]
Instead of having wxComboCtrl mimic wxTextEntry interface, make it actually inherit from the class and implement functions to redirect to the embedded wxTextCtrl. This allows us to simplify the code and get rid of the dirty trick of directing wxComboCtrl's validator to the embedded wxTextCtrl. Also see #12779, which issue 1 is fixed by this change.
Vadim Zeitlin [Wed, 15 Dec 2010 13:36:44 +0000 (13:36 +0000)]
Initialize wxLogWindow::m_pLogFrame in ctor to avoid (rare) crash.
If the log frame creation itself generates log messages, the code using
wxLogWindow could crash because its m_pLogFrame member variable wasn't
initialized yet at this moment.
Vadim Zeitlin [Wed, 15 Dec 2010 12:04:13 +0000 (12:04 +0000)]
Compilation fixes for wx{X11,GTK1,Motif} after making ref data non copyable.
Don't use wrong compiler-generated copy ctors in the other ports neither (see
r66371..66373 for wxGTK fixes). This fixes compilation after r66374 without
reducing functionality but just making it more clear where it is missing.
Vadim Zeitlin [Wed, 15 Dec 2010 11:18:42 +0000 (11:18 +0000)]
Don't pass strings not containing accelerators to ParseAccel().
Check for the presence of accelerator part in the string passed to
wxAcceleratorEntry::Create() and don't call ParseAccel() at all if it's not
there. This avoids the spurious warnings about unrecognized accelerators when
creating menu items that don't have any accelerators at all.
Also update wxAcceleratorEntry::FromString() documentation to mention that
the new code should pass just the accelerator to this function and that it
only accepts full menu item labels for compatibility.
Vadim Zeitlin [Tue, 14 Dec 2010 18:43:49 +0000 (18:43 +0000)]
Make wxRefCounter non copyable.
wxRefCounter copy ctor was wrong as the new object had the same reference
count as the old one instead of starting its life with reference count set to
1 as any new object should.
While we could fix its copy ctor, it seems to be better to forbid copying
wxRefCounter objects at all because the semantics of doing this is not obvious
and the compiler-generated copy ctor in the derived classes often doesn't do
what the code using it expects it to do, as was discovered by making
wxRefCounter non copyable: see the fixes in the previous commits.
To uncover all such bugs, make wxRefCounter and classes deriving from it non
copyable. If this uncovers more problems, they should be fixed by implementing
copying properly (and explicitly) in the derived classes.
Vadim Zeitlin [Tue, 14 Dec 2010 18:43:39 +0000 (18:43 +0000)]
Fail in CloneGDIRefData() instead of implementing it incorrectly in wxOSX.
wxIcon and wxMetaFile implemented CloneGDIRefData() using copy ctors of the
corresponding ref data classes but the copy ctors were either wrong (for
wxIconRefData as using it would result in messing up IconRef reference count)
or had wrong semantics (wxMetafileRefData copy ctor performed shallow copy
only while CloneGDIRefData() supposes a deep copy is done).
Replace the wrong implementations of these functions with assert that will be
triggered if they are ever used (which doesn't seem to be the case so far).
Vadim Zeitlin [Tue, 14 Dec 2010 18:43:32 +0000 (18:43 +0000)]
Don't use implicit wxBitmapRefData copy ctor in wxGTK code.
wxBitmapRefData didn't have a proper copy ctor but the code in wxGTK wxBitmap
implementation used it nevertheless and then manually patched the newly copied
object to avoid double pointer deletion and other unpleasantness.
Make the code more obviously correct by not using (nor providing) copy ctor at
all. There are no real changes otherwise.
Vadim Zeitlin [Tue, 14 Dec 2010 18:43:25 +0000 (18:43 +0000)]
Fail instead of crashing in wxGTK wxCursor::CloneGDIRefData().
CloneGDIRefData() used wxCursorRefData copy ctor which wasn't implemented
correctly and simply copied its internal m_cursor member without incrementing
its reference count which resulted in a crash when it was then dereferenced
twice.
Unfortunately there doesn't seem to be any simple way to clone GDK cursors but
as this should be something only rarely (if ever?) needed, simply don't
implement CloneGDIRefData() at all for now and just leave an assert in it if
it's ever really called. Also don't define wxCursorRefData copy ctor at all as
it can't be done correctly.
Vadim Zeitlin [Mon, 13 Dec 2010 18:10:02 +0000 (18:10 +0000)]
Preserve value when changing range of inverted wxSlider in wxMSW.
The logical value of wxSlider was changed when its range was changed in wxMSW
if the slider had wxSL_INVERSE style because the logical value was actually
computed using the range and the actual physical control value and we forgot
to update the latter when changing the range.
Do update it now in SetRange() to fix this.
Also add unit tests checking for this and, more generally, for other
operations with inversed sliders.
Jaakko Salli [Mon, 13 Dec 2010 16:07:49 +0000 (16:07 +0000)]
Have wxPropertyGrid::DoubleToString() to also take comma into account as a decimal separator. In addition, the function now returns target wxString (makes writing tests easier).
Vadim Zeitlin [Fri, 3 Dec 2010 14:00:31 +0000 (14:00 +0000)]
Set the window in focus event sent by wxComboCtrl correctly.
The window parameter wasn't copied correctly in the forwarded event. Fix this
and avoid future problems of the same kind by using the copy ctor for creating
the new event and then override the fields that we need to change from the
original event instead of recreating the new event from bits and pieces of the
original one.
Vadim Zeitlin [Fri, 3 Dec 2010 12:40:28 +0000 (12:40 +0000)]
Update AUI bitmaps when its colours change.
Extract the bitmaps initialization in wxAuiDefaultDockArt::InitBitmaps() and
call it from SetColour() to ensure that the bitmaps are updated when the
colour scheme changes.
Vadim Zeitlin [Fri, 3 Dec 2010 12:40:15 +0000 (12:40 +0000)]
Update the directory icon in wxGenericDirCtrl::ExpandDir().
Calling ExpandDir() to notify the control that a new item was added in a
previously empty directory didn't work as wxTreeCtrl::SetItemHasChildren()
wasn't called.
Fix this by moving SetItemHasChildren() to ExpandDir() from OnExpandItem(), it
must be always done and not just in response to an interactive action.
Vadim Zeitlin [Fri, 3 Dec 2010 12:39:57 +0000 (12:39 +0000)]
Don't require leading TAB in wxAcceleratorEntry::FromString().
FromString() should parse string returned by ToString() successfully but this
wasn't the case because the accelerator parsing functions always insisted on
having a TAB in the string.
Fix this, document the string format and add a unit test checking for the
correct behaviour.
Vadim Zeitlin [Fri, 3 Dec 2010 12:39:48 +0000 (12:39 +0000)]
Don't try to extract accelerators from menu items which don't have any.
We don't need to call wxAcceleratorEntry::Create() in wxMenuItem::GetAccel()
if the menu item doesn't have any accelerator at all, i.e. if there is no TAB
in its label.
Calling wxAcceleratorEntry::Create() is useless and won't work correctly any
more when Create() is updated to allow passing it strings without TAB in them
in the next commit.
Vadim Zeitlin [Sun, 28 Nov 2010 15:14:49 +0000 (15:14 +0000)]
Don't compare invalid iterators in wxCommandProcessor code.
Comparing invalid iterators results in an assert failure in STL build.
We might also change wxList::compatibility_iterator::operator==() to allow
comparing invalid iterators (which should be different from all the other ones
but what about comparing two invalid iterators?) but it would probably be
better to get rid of all uses of compatibility_iterator in the code instead in
the long term.
Vadim Zeitlin [Fri, 26 Nov 2010 13:31:15 +0000 (13:31 +0000)]
Update configure helper scripts to latest versions from GNU project.
The new version (the one we used was 6 years out of date) notably detects 64
bit MinGW platforms correctly which closes #12356.
Also update config.{guess,sub} scripts in 3rd party libraries directories to
bring them all in sync with the main one and ensure that MinGW 64 is supported
by them too.
Vadim Zeitlin [Fri, 26 Nov 2010 13:30:43 +0000 (13:30 +0000)]
No real changes, just remove unnecessary const workaround.
The comment about "wxString doesn't having enough const members" was totally
incomprehensible and clearly wrong. Just remove the hack it was explaining.
Vadim Zeitlin [Fri, 26 Nov 2010 13:30:37 +0000 (13:30 +0000)]
Allow wxAutomationObject::GetInstance() create new instance if needed.
When getting an instance of an OLE automation object, it is often useful to
connect to the existing instance if any or start a new one otherwise. Make
GetInstance() behave like this by default while still allowing to use the
wxAutomationInstance_UseExistingOnly flag to reestablish the old behaviour.
Also improve the error reporting in wxAutomationObject.
Vadim Zeitlin [Thu, 25 Nov 2010 00:53:44 +0000 (00:53 +0000)]
Add wxVersionInfo and functions returning it for 3rd party libraries.
Add simple wxVersionInfo class holding the version information.
Also add GetLibraryVersionInfo() static method to wx{JPEG,PNG,TIFF}Handler,
wxStyledTextCtrl and wxXmlDocument classes and wxGetZlibVersionInfo() and
wxGetLibraryVersionInfo() global functions using it.
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.