Vadim Zeitlin [Tue, 23 Oct 2012 13:51:32 +0000 (13:51 +0000)]
Refactor wxXRC to allow defining handlers outside of xrc library.
Split wxXmlResourceHandler into an ABC and the real implementation to allow
referencing the ABC in the core library itself but without pulling in all of
the XRC into it. This also allows defining XRC handlers, which only depend on
this ABC and not the xrc library, in other libraries, such as richtext, as
demonstrated by the now enabled wxRichTextXMLHandler.
Vadim Zeitlin [Tue, 23 Oct 2012 12:02:47 +0000 (12:02 +0000)]
Process pending events from wxYield() in wxGTK.
Calling wxYield() is supposed to process the pending events but it didn't, any
more, in wxGTK. Restore this by explicitly calling ProcessPendingEvents() from
wxGTK wxYield() implementation as wxGUIEventLoop::ProcessIdle() does not call
it, in spite of a comment to the contrary in the sources.
Vadim Zeitlin [Tue, 23 Oct 2012 12:02:24 +0000 (12:02 +0000)]
Add wxEvtHandler::CallAfter() for asynchronous method calls.
Add wxAsyncMethodCallEvent that is handled simply by calling the method this
event was created for and add default handler for this event to wxEvtHandler.
Implement CallAfter() overloads for up to 2 parameters only for now.
Vadim Zeitlin [Mon, 22 Oct 2012 21:46:46 +0000 (21:46 +0000)]
Fix border size computation in wxAuiTabArt.
Space was reserved for the borders even when it wasn't filled, resulting in
visual artefacts. Fix this by virtualizing the function returning the
additional space needed for the borders and only overriding it to return non
zero in wxAuiGtkTabArt.
Vadim Zeitlin [Mon, 22 Oct 2012 15:51:49 +0000 (15:51 +0000)]
Set C++ global locale too in wxAppTraitsBase::SetLocale().
Ensure that C++ locale matches the C one, otherwise operations on C++ streams
may get much slower because some implementations (notable MinGW-64) change and
reset the C locale on every function call in this case.
Vadim Zeitlin [Mon, 22 Oct 2012 15:51:26 +0000 (15:51 +0000)]
Revert accidental incompatible change to wxFileName::DirExists().
The non-static version tests for the existence of the directory part of the
object only as is explicitly mentioned in the documentation, so do the test on
GetPath() and not GetFullPath() as we did since r72707.
Vadim Zeitlin [Mon, 22 Oct 2012 11:21:02 +0000 (11:21 +0000)]
Ensure the correct cleanup order for GDI+-related modules in wxMSW.
GDI+ DLL could be unloaded by wxGdiPlusModule before wxGDIPlusRendererModule::
OnExit() was called, resulting in a crash when trying to call a GDI+ function
from the latter.
Fix this by adding a correct dependency between the modules.
Vadim Zeitlin [Fri, 19 Oct 2012 22:02:15 +0000 (22:02 +0000)]
Allow testing for existence of specific file types in wxFileName.
Add "flags" parameter to wxFileName::Exists() to allow testing for the
existing of files of specific type: not only regular or directory but also
symlink, device, FIFO or socket.
And also to pass wxFILE_EXISTS_NO_FOLLOW flag inhibiting following the
symlinks without using DontFollowLink().
Vadim Zeitlin [Fri, 19 Oct 2012 11:06:14 +0000 (11:06 +0000)]
Remove assert checking for valid font in wxMSW wxDC::GetTextExtent().
It wasn't there before wxTextMEasure changes and it doesn't seem obvious why
should it be there, it should be possible to measure the text using the
default wxDC font without setting one explicitly.
Vadim Zeitlin [Fri, 19 Oct 2012 10:42:57 +0000 (10:42 +0000)]
Invalidate wxGrid best size when the grid is changed.
Don't keep using the cached best size if rows/columns are added/removed
to/from wxGrid or resized, doing this meant that we always used the first
computed best size which was way too small after adding rows/columns to the
grid.
There could be more places where the grid best size may need to be invalidated
but this should be a good start.
Vadim Zeitlin [Wed, 17 Oct 2012 22:35:49 +0000 (22:35 +0000)]
Factor out text measurement from wxDC and wxWindow into wxTextMeasure.
Add a new private wxTextMeasure class implementing methods for measuring text
and move the often duplicated (but not always identically) code for doing the
same from wxDC and wxWindow into it.
Currently this class is only really implemented in wxMSW and wxGTK.
Also extend the test for text measuring functions and rename it to
MeasuringTextTestCase from MeasuringContextTestCase as it's not wxGC-specific
any more.
Vadim Zeitlin [Wed, 17 Oct 2012 16:44:02 +0000 (16:44 +0000)]
Fix wxGrid editors background painting.
There were two fundamental problems: first, we painted on a separately created
wxClientDC instead of using the wxPaintDC already available in wxGrid. Second,
we invalidated the control while painting, resulting in endless repainting, at
least under wxGTK.
Fix the first problem by passing wxDC to wxGridCellEditor::PaintBackground()
and the second one by not refreshing the control from there as it just seems
unnecessary.
Also pass the attribute by reference for consistency with
wxGridCellRenderer::Draw() and because this pointer can never be NULL.
Vadim Zeitlin [Mon, 15 Oct 2012 01:17:21 +0000 (01:17 +0000)]
Correctly document the library the classes belong to.
Many classes were documented as being in a wrong library, mostly a lot of
wxbase vs wxcore confusion but we even managed to document wxAuiManager as
being in wxbase. Correct all this.
Vadim Zeitlin [Mon, 15 Oct 2012 01:13:01 +0000 (01:13 +0000)]
Make help strings for --enable-webview* configure options match their names.
The options didn't have the underscore shown in the help message, so remove
the underscore (while it could be argued that underscore makes the option
names more readable, it seems better to preserve the existing names for
compatibility).
Vadim Zeitlin [Mon, 15 Oct 2012 01:09:25 +0000 (01:09 +0000)]
Check for filespec when generating events in wxFileSystemWatcher.
Instead of setting watches on individual files when a non-empty filespec is
given, always watch all the files but just ignore the events from the ones not
matching the filespec. This makes the code simpler and fixes several bugs.
Vadim Zeitlin [Mon, 15 Oct 2012 01:09:01 +0000 (01:09 +0000)]
Add support for symlinks to wxFileName.
Allow to work with the symlinks themselves and not the file they reference by
calling the new wxFileName::DontFollowLink().
Update Unix wxDir implementation to not treat symlinks to directories as
directories, this ensures that we don't recurse into the directories outside
of the original parent accidentally.
Vadim Zeitlin [Mon, 15 Oct 2012 01:08:37 +0000 (01:08 +0000)]
Make wxFileSystemWatcher watch entries reference-counted.
This helps to avoid problems that arise from watching the same physical file
system path multiple times, which could happen when adding a watch for a path
already watched because of a recursive watch on a parent directory, for
example.
Václav SlavÃk [Sun, 14 Oct 2012 19:30:46 +0000 (19:30 +0000)]
anybutton.cpp compilation fix for wxUSE_IMAGE=0.
Disabled bitmaps are not rendered properly in this configuration, they
look the same as normal ones. This is hardly ideal, but such
degradations are to be expected when disabling something as widely used
as wxImage.
Vadim Zeitlin [Sun, 14 Oct 2012 14:55:32 +0000 (14:55 +0000)]
Make GetClippingBox() work for wxPrinterDC in wxGTK.
GetClippingBox() implementation relies on wxDCImpl::m_clip[XY][12] being
updated in DoSetClippingRegion() but this wasn't done here. Fix this by adding
the code to do this to the base class version of this method and calling it
from wxGtkPrinterDCImpl.
Also, refactor wxGCDCImpl to reuse the same code instead of duplicating it.
Vadim Zeitlin [Sat, 13 Oct 2012 22:55:18 +0000 (22:55 +0000)]
Make TAB behaviour in wxGrid more configurable.
Allow making TAB/Shift-TAB wrap to the next/previous row or going to the
next/previous control when the cursor is at the end/beginning of the current
row easily.
Also add wxEVT_GRID_TABBING event to allow customizing TAB behaviour even
further.
Update the sample to show the different possible standard behaviours and a
stupid example of a custom one (it would be probably more useful to implement
something a tad more realistic, e.g. tabbing to the next non-empty cell).
Vadim Zeitlin [Sat, 13 Oct 2012 22:53:46 +0000 (22:53 +0000)]
Display system-provided drag images during drag-and-drop in wxMSW.
This is especially useful when dragging files from Explorer as it provides
big, informative drag images for them that can be easily displayed using
Windows shell support for them.
Vadim Zeitlin [Sat, 13 Oct 2012 22:52:59 +0000 (22:52 +0000)]
Set the standard sample icon for the exec sample.
Do this for consistency with all the other ones and also because it makes it
simpler to notice any unwanted icons for hidden windows created by this sample.
Vadim Zeitlin [Sat, 13 Oct 2012 22:52:35 +0000 (22:52 +0000)]
Freeze wxTreeCtrl in wxMSW by hiding it.
This is far from perfect but better than alternative as freezing this control
by sending WM_SETREDRAW to it can result in completely broken behaviour as
explained in http://support.microsoft.com/kb/130611. And not freezing it at
all shows horrible flicker when adding even a relatively small number of items
at once to the control because it recalculates and repositions its scrollbars
after every parent node addition.
Vadim Zeitlin [Sat, 13 Oct 2012 22:52:12 +0000 (22:52 +0000)]
Set wxTAB_TRAVERSAL for wxNavigationEnabled<> windows with focusable children.
We need to have this flag under wxMSW in order for navigation events to be
generated for the window. As wxNavigationEnabled can't set this flag on
creation because its ctor is called too early, do it in overridden AddChild().
Vadim Zeitlin [Sat, 13 Oct 2012 22:51:50 +0000 (22:51 +0000)]
Allow using windows that can't be focused with wxNavigationEnabled<>.
The code in wxNavigationEnabled<> assumed that the window itself could be
focused if it didn't have any focusable children because it was originally
extracted from wxPanel that can, indeed, be focused. This is however not the
case for all windows, notably not for wxStaticBox which now derives from
wxNavigationEnabled as well but can never be focused itself.
Add wxControlContainer::DisableSelfFocus() and call it from wxStaticBox to
support this situation. This required splitting m_acceptsFocus flag into
m_acceptsFocusSelf and m_acceptsFocusChildren and updating various methods
using them.
Vadim Zeitlin [Sat, 13 Oct 2012 22:51:27 +0000 (22:51 +0000)]
Use WS_EX_CONTROLPARENT for wxStaticBox in wxMSW.
This doesn't change anything currently but it seems correct to use this style
with wxStaticBox as it can now contain other windows (and so be "control
parent"), so it could allow Windows or other programs checking for this style
to handle it more correctly.
TABs appear simply as a space under MSW (because we don't use LBS_USETABSTOPS
style there) but are aligned to (multiple of 8?) tab stops under GTK. It's not
clear which behaviour is actually preferable so for now just document the
inconsistency and advise people to use spaces instead.
Vadim Zeitlin [Sat, 13 Oct 2012 22:49:56 +0000 (22:49 +0000)]
Improve explanation of maximal number of wxListBox items in the documentation.
Don't say that it's limited -- because, strictly speaking, it isn't -- but
mention other controls that are better alternatives for large numbers of items.
Vadim Zeitlin [Sat, 13 Oct 2012 22:49:33 +0000 (22:49 +0000)]
Do give focus to the wxNotebook page when switching to it under MSW.
Switching to the page but keeping the focus on the notebook itself makes it
difficult to use the UI from keyboard and is inconsistent with the behaviour
of native property sheets. Do restore the code to set the focus to the page as
the bug that resulted in a wrong radio button being selected when we did this
was apparently fixed elsewhere in the meanwhile because it doesn't happen any
more even with this change.
Vadim Zeitlin [Thu, 11 Oct 2012 12:41:07 +0000 (12:41 +0000)]
Use "true" by default in wxGenericListCtrl::EnableBellOnNoMatch().
The changes of r72639 mistakenly omitted the default value for
EnableBellOnNoMatch() argument in this class (although it was present in the
base class and in wxGenericTreeCtrl), fix this.
Vadim Zeitlin [Tue, 9 Oct 2012 21:28:33 +0000 (21:28 +0000)]
Do return the protocol part from GetLocaltion() for local wxFSFiles.
wxLocalFSHandler created wxFSFile without the protocol information which means
that calling GetLocaltion() on this file later doesn't return it, contrary to
the documentation.
Vadim Zeitlin [Tue, 9 Oct 2012 21:02:17 +0000 (21:02 +0000)]
Generate text events in generic wxSpinCtrl itself.
The text events in a wxSpinCtrl should originate from the control itself but
they were just propagated upwards from wxTextCtrl embedded into it and hence
had wrong event object and event ID fields.
Fix this by making EVT_TEXT come from wxSpinCtrl itself, in addition to
EVT_TEXT_ENTER ones which we already forwarded like this.
Vadim Zeitlin [Tue, 9 Oct 2012 21:01:53 +0000 (21:01 +0000)]
Copy wxCommandEvent string explicitly in its copy ctor.
Due to the optimization used in wxCommandEvent::GetString(), which returns the
string from the text control that generated the event only if it's really
needed, wxCommandEvent::m_cmdString field may be empty even when it does have
an associated string. As we lose the possibility to retrieve the value on
demand from wxTextCtrl when we make a copy (because it can be associated with
a different object), we need to explicitly copy the string to avoid losing
this data entirely.
This fixes GetString() value for the text events generated by generic
wxSearchCtrl.
Vadim Zeitlin [Tue, 9 Oct 2012 21:01:29 +0000 (21:01 +0000)]
Fix printing in landscape mode in wxGTK.
Only apply Cairo transforms in StartPage(), doing it earlier interferes with
the code doing the coordinate system rotation inside GTK+ itself when a
non-portrait printing mode is used.
Vadim Zeitlin [Sun, 7 Oct 2012 22:42:50 +0000 (22:42 +0000)]
Ensure that key events are sent to focused window first in wxGTK.
Start processing key events from the currently focused window, this ensures
that its key event handlers are tried before the top level window
accelerators.
This is consistent with wxMSW and allows a window to locally override the
global accelerators which really makes sense.
Vadim Zeitlin [Sun, 7 Oct 2012 22:42:27 +0000 (22:42 +0000)]
Implement incremental search in wxGenericListCtrl.
Mostly copy wxGenericTreeCtrl incremental search implementation to
wxGenericListCtrl (unfortunately there is no simple way to reuse this code
currently), including the recently added EnableBellOnNoMatch() method.
Update the sample to test it, the key event handling in it had to be modified
to allow it.
Vadim Zeitlin [Sun, 7 Oct 2012 22:41:15 +0000 (22:41 +0000)]
Handle successive key presses better in wxGenericTreeCtrl search code.
Go to the next item starting with the given character if the same one is
pressed multiple times. This is more useful than searching for an item
starting with multiple occurrences of this character (which usually won't
exist) and is more consistent with how Windows handles this.
Vadim Zeitlin [Sun, 7 Oct 2012 22:40:29 +0000 (22:40 +0000)]
Fix spurious label editing in generic wx{List,Tree,DataView}Ctrl.
Clicking on the control to give it focus must not start editing the label of
an item in it, this is bad UI as you need to carefully select where do you
click to avoid starting to edit the label and nobody else does it like this
(probably because of the former reason).
As a side note, it would be really great to abstract the item handling in a
class that could be reused by all these controls instead of having to update 3
slightly different versions of the same code every time.
Vadim Zeitlin [Sun, 7 Oct 2012 22:40:06 +0000 (22:40 +0000)]
Don't set focus explicitly in wxGenericListCtrl mouse handling code.
Just skip the event to allow the system to set the focus to the control
itself. This is more consistent with the other controls and should result in
correct behaviour everywhere automatically.
Vadim Zeitlin [Sun, 7 Oct 2012 22:39:43 +0000 (22:39 +0000)]
Don't set focus to generic wxDataViewCtrl on any button press.
Only set focus if the left button was pressed for consistency with just about
everything else. Also, just skip the event instead of setting the focus
explicitly.
Vadim Zeitlin [Sun, 7 Oct 2012 22:38:32 +0000 (22:38 +0000)]
Flush log messages from other threads on shutdown too.
Add a call to wxLog::FlushActive() to the shutdown code as calling just
wxLog::SetActiveTarget(NULL) is not enough, it flushes the current log target
only but not the ones used by other threads.
Vadim Zeitlin [Sun, 7 Oct 2012 22:37:47 +0000 (22:37 +0000)]
Fix drawing of wxAuiNotebook with GTK theme when active tab is invisible.
Draw a box using gtk_paint_box() for the tabs, without border for the active
one to avoid an extra line across the gap, and with the border for the others.