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.
Václav Slavík [Sun, 7 Oct 2012 16:49:28 +0000 (16:49 +0000)]
Fix wxGenericCollapsiblePane to expand frame's size.
wxGenericCollapsiblePane::DoGetBestSize() is dynamic, returning
different values for collapsed and open states. Therefore the control
must invalidate best sizes cache every time its state changes.
Vadim Zeitlin [Wed, 3 Oct 2012 08:32:49 +0000 (08:32 +0000)]
Do use IsEscapeKey() in wxDialog escape key handling.
This method was added back in r40686 but was never actually used anywhere. Do
use it in wxDialogBase::OnCharHook() now instead of hard-coding the check for
WXK_ESCAPE, this should allow using Cmd+. to work like Escape under Mac which
was apparently the intention of the code in src/osx/dialog_osx.cpp.
Also fix IsEscapeKey() itself to ignore any modifiers as at least under MSW
Esc always closes the dialog, even if Shift or Alt is pressed.
Vadim Zeitlin [Mon, 1 Oct 2012 09:40:06 +0000 (09:40 +0000)]
Fix PCH-less build after the changes of r72589.
Use wx{SOLID,TRANSPARENT} instead of wxBRUSHSTYLE_{SOLID,TRANSPARENT}. This
makes more sense as we're setting background mode, not brush style, here and
also fixed compilation when not using PCH.
Small optimization of wxFFile::ReadAll(): avoid extra string copy.
Use swap() to move the newly created string into its destination instead of
copying it there. This can be relatively important as the string represents an
entire file contents here and so could be quite long.
Reimplement wxTextEntry::DoSetValue() in wxStyledTextCtrl.
The version inherited from the base class does work already but calling
Scintilla SetText() directly should be more efficient than selecting
everything and then calling ReplaceSelection() as the base class version does,
less code is executed.
Fix wxStyledTextCtrl::WriteText() to replace the selection.
WriteText() must replace the selection, not just insert the new text,
otherwise SetValue() implementation inherited from the base class doesn't work
as it doesn't clear the old contents of the control before adding new text to
it.
Don't call ClearAll() before LoadFile() in the stc sample.
There is no need to clear the control contents before loading a file into it
because LoadFile() is supposed to do this on its own (although currently it
doesn't, which will be fixed soon).
Add per-direction wxSocket wait flags and byte counters.
Allow to specify whether the socket should block until all the data is read or
written or, on the contrary, avoid blocking only when reading or writing
instead of always using the same behaviour in both directions.
Also add separate counters for the bytes read/written instead of using the
same one for both.
These changes make it possible to use the same socket for reading/writing in
different threads.
Don't crash in generic wxDataViewCtrl if it doesn't have any model.
A model may be dissociated from a still existing control, don't crash if it
happens (notice that we still would crash in the native GTK version right now,
so this still remains to be fixed there).
Fix handling of not fully specified min/max size in wxBoxSizer.
wxSizerItem::AddBorderToSize() added in r72344 (see #11497) didn't work
correctly as it replaced unspecified (i.e. set to -1) components of wxSize
with the small positive values that did take effect, contrary to the
intention.
Fix it to only adjust the actually set component(s) of wxSize.
Revert "Don't use StringFormat::GenericTypographic() in MSW wxGraphicsContext."
This reverts r72442 and restores the use of GenericTypographic string format
for GDI+ text rendering. While it's true that using this flag with small font
sizes results in pretty bad output, especially under Windows XP, not using it
results in wrong text extent calculations for all sizes which is even worse.
Clear the search control automatically when it's "Cancel" button is pressed.
This should be the desired behaviour in the vast majority of cases, so do it
by default.
Replace the useless OnSearchButton() doing nothing with search button events
with OnCancelButton() handling cancel button events and clearing the control.
Don't use text control foreground colour for generic wxSearchCtrl itself.
Logically, it should be done in the other direction and also doing it like
this means that the search and cancel icons, rendered using the current
foreground colour, are barely visible when using generic wxTextCtrl::SetHint()
implementation, as in wxGTK, because the text control foreground is set to
light grey in this case.
Robin Dunn [Sun, 30 Sep 2012 02:33:56 +0000 (02:33 +0000)]
Use Refresh when the initial paint was abandoned by Scintilla so it will trigger a repaint of the whole window. This is done for things like style changes, word wrapping or brace highlights where more than the current line is affected. Fixes #14653.
The best size of its text control part was not calculated correctly any more
because a wrong best size was cached during wxSearchTextCtrl construction,
when the final class overridden DoGetBestSize() was not called.
Fix this by explicitly invalidating the best size at the end of constructor
for now even though it would be arguably better to fix this in some way not
requiring anything extra to be done to always take the overridden method into
account, especially as it used to work before. But it's not clear how exactly
to restore this so for now do at least fix wxSearchCtrl appearance.
This allows to construct a font based on the parent window font instead of
either fully specifying all font parameters or basing it on a standard font.
Fix testing for existence of paths with trailing separators in wxMSW.
We removed the trailing separators, that prevented GetFileAttributes() from
working correctly, from the path but then didn't pass the modified path to it
but the original one. Fix this and do use the updated path.
It can be used for entry of relatively long text now, especially when
wxTE_MULTILINE flag is used, so allow the user to resize it to facilitate the
entry.
_tputenv() returns -1, not 0, on error, as all the other CRT functions, so the
test added by r72496 resulted in wxSetEnv() and wxUnsetEnv() always failing
when using MSVC.
Account correctly for the controller when computing wxBookCtrl best size.
We must not increase the total control size in the direction along the
controller window as the size of the controller in this direction is
determined by the size of the control itself. So doing this resulted in always
increasing best size in this direction to be at least equal to the current
size which was wrong.
Avoid useless iteration on all pages in wxBookCtrlBase::DoGetBestSize().
If m_fitToCurrentPage is true, there is no need to iterate over all the pages
computing their max best size only in order to overwrite it with the best size
of the current page later.
This doesn't result in any changes in the behaviour, just avoids useless best
size computations.
This results in the destruction of the widgets of all of its menu and when
wxMenu objects are themselves destroyed in the base class dtor, we try to
destroy their already destroyed widgets, resulting in critical GTK warnings.
Simply don't do anything in wxMenuBar dtor itself if the menu bar is not
attached to a frame as the workaround was only needed in case of destroying
attached menu bars.
Fix GTK warnings when destroying unattached wxMenuBar.
Reset m_focusWidget to NULL when destroying m_widget in wxMenuBar dtor,
otherwise we try to use this already destroyed (because it's the same as
m_widget) widget in wxWindow dtor later resulting in critical GTK warnings.
Robin Dunn [Tue, 25 Sep 2012 23:53:14 +0000 (23:53 +0000)]
Scintilla's Point class no longer matches the structure of wxPoint, so we need to copy points to a wxPoint array instead of just typcasting Scintilla's array. Fixes #14687
Really fix stack dumps for asserts and wxStackWalker::Walk() calls.
The code apparently tried to compensate for the wrong "skip" values used in
the calls to wxStackWalker::Walk() by skipping too much in Walk() itself which
was wrong as it dropped the frames that should have been shown.
Fix this by skipping only the one extra (compared to Walk() itself) frame we
add in wxStackWalker Unix implementation and not 3 of them and do skip more
frames when calling Walk() from assert failure handlers.
Also fix the wrong number of frames used in ProcessFrames(): we must not
subtract the number of skipped frames, they were already skipped.
No changes, just reuse a bit of code in wxMSW wxMDIParentFrame.
Call wxMDIChildFrame::Activate() instead of redoing the same thing. This also
ensures that iconized MDI children are restored before being activated (see
previous commit).
Correct best size computation for wxCheckBox with borders under MSW.
As wxCheckBox can now have borders (see previous commit), we must override
DoGetBestClientSize() and not DoGetBestSize() in it to take account of them.
Respect styles translated to WS_EX_XXX in wxMSW wxCheckBox and wxRadioButton.
Take into account the window styles that translate to extended Windows styles
at MSW level.
Also override MSWGetStyle() in these classes, just as in most (all?) other
ones, for consistency instead of doing wx-to-MSW styles translation directly
in Create().
Notice that as a side effect of this change, border styles now work for
wxCheckBox which wasn't the case before. It's not clear if this is really
wanted but OTOH there doesn't seem to be any real reason to forbid them
neither.
Allow wxWrapSizer to request more size than it used previously.
The code in wxWrapSizer::CalcMin() ensured that the sizer never requested more
space than what it had been already given which, while clearly done
intentionally, seems to be wrong because it can never end up with enough space
for all its rows/columns unless it is set to up to expand in the containing
sizer.
In other words, the old code could return the size which was not enough to
show the sizer contents fully which is against CalcMin() contract.
Change this by simply removing the check for the new minimal size being less
than the old one. This allows the wrap sizer demo in the layout sample to work
correctly whereas before the sizer contents was completely invisible initially.