// Scintilla source code edit control
-// PlatWX.cxx - implementation of platform facilities on wxWindows
+// PlatWX.cxx - implementation of platform facilities on wxWidgets
// Copyright 1998-1999 by Neil Hodgson <neilh@scintilla.org>
// Robin Dunn <robin@aldunn.com>
// The License.txt file describes the conditions under which this software may be distributed.
PRectangle PRectangleFromwxRect(wxRect rc) {
return PRectangle(rc.GetLeft(), rc.GetTop(),
- rc.GetRight(), rc.GetBottom());
+ rc.GetRight()+1, rc.GetBottom()+1);
}
wxColour wxColourFromCA(const ColourAllocated& ca) {
: wxListView(parent, id, pos, size, style)
{}
+
void OnFocus(wxFocusEvent& event) {
GetParent()->SetFocus();
event.Skip();
void OnKillFocus(wxFocusEvent& WXUNUSED(event)) {
// Do nothing. Prevents base class from resetting the colors...
}
+
+#ifdef __WXMAC__
+ // For some reason I don't understand yet the focus doesn't really leave
+ // the listbox like it should, so if we get any events feed them back to
+ // the wxSTC
+ void OnKeyDown(wxKeyEvent& event) {
+ GetGrandParent()->GetEventHandler()->ProcessEvent(event);
+ }
+ void OnChar(wxKeyEvent& event) {
+ GetGrandParent()->GetEventHandler()->ProcessEvent(event);
+ }
+ // And we need to force the focus back when being destroyed
+ ~wxSTCListBox() {
+ GetGrandParent()->SetFocus();
+ }
+#endif
+
private:
DECLARE_EVENT_TABLE()
};
BEGIN_EVENT_TABLE(wxSTCListBox, wxListView)
EVT_SET_FOCUS( wxSTCListBox::OnFocus)
EVT_KILL_FOCUS(wxSTCListBox::OnKillFocus)
+#ifdef __WXMAC__
+ EVT_KEY_DOWN( wxSTCListBox::OnKeyDown)
+ EVT_CHAR( wxSTCListBox::OnChar)
+#endif
END_EVENT_TABLE()
// immediately.
bool Destroy() {
#ifdef __WXMAC__
- // There bottom edge of this window is not getting properly
+ // The bottom edge of this window is not getting properly
// refreshed upon deletion, so help it out...
wxWindow* p = GetParent();
wxRect r(GetPosition(), GetSize());
#if wxUSE_UNICODE
wxString stc2wx(const char* str, size_t len)
{
+ // note: we assume that str is of length len not including the terminating null.
+
+ if (!len)
+ return wxEmptyString;
+ else if (str[len-1] == 0)
+ // It's already terminated correctly.
+ return wxString(str, wxConvUTF8, len);
+
char *buffer=new char[len+1];
strncpy(buffer, str, len);
buffer[len]=0;
- wxString cstr(buffer, wxConvUTF8);
+ wxString cstr(buffer, wxConvUTF8, len);
delete[] buffer;
return cstr;