From f3c2c221081e2a3d65712b36429b4bc7bfc10b91 Mon Sep 17 00:00:00 2001 From: Robin Dunn Date: Wed, 17 Oct 2001 05:29:09 +0000 Subject: [PATCH] Another attempt to handle key events correctly for wxSTC git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12037 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- contrib/src/stc/PlatWX.cpp | 20 +++++++++++++------- contrib/src/stc/ScintillaWX.cpp | 6 ------ contrib/src/stc/stc.cpp | 33 +++++++++++++++++++++++++++------ contrib/src/stc/stc.cpp.in | 33 +++++++++++++++++++++++++++------ src/stc/PlatWX.cpp | 20 +++++++++++++------- src/stc/ScintillaWX.cpp | 6 ------ src/stc/stc.cpp | 33 +++++++++++++++++++++++++++------ src/stc/stc.cpp.in | 33 +++++++++++++++++++++++++++------ 8 files changed, 134 insertions(+), 50 deletions(-) diff --git a/contrib/src/stc/PlatWX.cpp b/contrib/src/stc/PlatWX.cpp index ae53b19b54..0e73907414 100644 --- a/contrib/src/stc/PlatWX.cpp +++ b/contrib/src/stc/PlatWX.cpp @@ -456,7 +456,7 @@ class wxSTCListBox : public wxListBox { public: wxSTCListBox(wxWindow* parent, wxWindowID id) : wxListBox(parent, id, wxDefaultPosition, wxDefaultSize, - 0, NULL, wxLB_SINGLE | wxLB_SORT | wxSIMPLE_BORDER) + 0, NULL, wxLB_SINGLE | wxSIMPLE_BORDER | wxLB_SORT ) {} void OnFocus(wxFocusEvent& event) { @@ -464,7 +464,7 @@ public: event.Skip(); } -#ifdef __WXGTK__ +#if 0 // #ifdef __WXGTK__ void DoSetFirstItem(int n); #endif @@ -479,7 +479,7 @@ END_EVENT_TABLE() -#ifdef __WXGTK__ +#if 0 // #ifdef __WXGTK__ // This can be removed after 2.2.2 I think void wxSTCListBox::DoSetFirstItem( int n ) { @@ -535,15 +535,21 @@ void ListBox::Create(Window &parent, int ctrlID) { // 0, NULL, wxLB_SINGLE | wxLB_SORT | wxSIMPLE_BORDER); } +void ListBox::SetVisibleRows(int rows) { + desiredVisibleRows = rows; + printf("SetVisibleRows: %d\n", rows); +} + PRectangle ListBox::GetDesiredRect() { wxSize sz = ((wxListBox*)id)->GetBestSize(); + printf("GetDesiredRect: %d, %d\n", sz.x, sz.y); PRectangle rc; rc.top = 0; rc.left = 0; - if (sz.x > 150) // TODO: A better way to determine these max sizes - sz.x = 150; - if (sz.y > 100) - sz.y = 100; + if (sz.x > 400) + sz.x = 400; + if (sz.y > 150) + sz.y = 150; rc.right = sz.x; rc.bottom = sz.y; diff --git a/contrib/src/stc/ScintillaWX.cpp b/contrib/src/stc/ScintillaWX.cpp index cfa59ede1e..103ce92796 100644 --- a/contrib/src/stc/ScintillaWX.cpp +++ b/contrib/src/stc/ScintillaWX.cpp @@ -421,10 +421,7 @@ void ScintillaWX::DoButtonMove(Point pt) { void ScintillaWX::DoAddChar(char ch) { - //bool acActiveBeforeCharAdded = ac.Active(); AddChar(ch); - //if (acActiveBeforeCharAdded) - // AutoCompleteChanged(ch); } int ScintillaWX::DoKeyDown(int key, bool shift, bool ctrl, bool alt, bool* consumed) { @@ -466,9 +463,6 @@ int ScintillaWX::DoKeyDown(int key, bool shift, bool ctrl, bool alt, bool* cons int rv = KeyDown(key, shift, ctrl, alt, consumed); -// printf("key: %d shift: %d ctrl: %d alt: %d rv: %d consumed: %d\n", -// key, shift, ctrl, alt, rv, *consumed); - if (key) return rv; else diff --git a/contrib/src/stc/stc.cpp b/contrib/src/stc/stc.cpp index 711ff34390..bd6184cf6a 100644 --- a/contrib/src/stc/stc.cpp +++ b/contrib/src/stc/stc.cpp @@ -1834,19 +1834,40 @@ void wxStyledTextCtrl::OnMouseWheel(wxMouseEvent& evt) { void wxStyledTextCtrl::OnChar(wxKeyEvent& evt) { long key = evt.KeyCode(); - if (key <= 0xff && !iscntrl(key) && !m_lastKeyDownConsumed) { + +// printf("OnChar key:%d consumed:%d ctrl:%d alt:%d\n", +// key, m_lastKeyDownConsumed, evt.ControlDown(), evt.AltDown()); + + // AltGr keys??? + // \|@#¬[]{}?£$~ ã,õ,Ã,Õ, ñ, Ñ + + // On (some?) non-US keyboards the AltGr key is required to enter some + // common characters. It comes to us as both Alt and Ctrl down so we need + // to let the char through in that case, otherwise if only ctrl or only + // alt let's skip it. + bool ctrl = evt.ControlDown(); + bool alt = evt.AltDown(); + bool skip = (ctrl || alt && ! (ctrl && alt)); + + if (key <= 0xff && !iscntrl(key) && !m_lastKeyDownConsumed && !skip) { m_swx->DoAddChar(key); + return; } + evt.Skip(); } void wxStyledTextCtrl::OnKeyDown(wxKeyEvent& evt) { long key = evt.KeyCode(); - int processed = m_swx->DoKeyDown(key, - evt.ShiftDown(), - evt.ControlDown(), - evt.AltDown(), - &m_lastKeyDownConsumed); + bool shift = evt.ShiftDown(), + ctrl = evt.ControlDown(), + alt = evt.AltDown(); + + int processed = m_swx->DoKeyDown(key, shift, ctrl, alt, &m_lastKeyDownConsumed); + +// printf("key: %d shift: %d ctrl: %d alt: %d processed: %d consumed: %d\n", +// key, shift, ctrl, alt, processed, m_lastKeyDownConsumed); + if (!processed && !m_lastKeyDownConsumed) evt.Skip(); } diff --git a/contrib/src/stc/stc.cpp.in b/contrib/src/stc/stc.cpp.in index e4c51365a9..979bca8794 100644 --- a/contrib/src/stc/stc.cpp.in +++ b/contrib/src/stc/stc.cpp.in @@ -380,19 +380,40 @@ void wxStyledTextCtrl::OnMouseWheel(wxMouseEvent& evt) { void wxStyledTextCtrl::OnChar(wxKeyEvent& evt) { long key = evt.KeyCode(); - if (key <= 0xff && !iscntrl(key) && !m_lastKeyDownConsumed) { + +// printf("OnChar key:%%d consumed:%%d ctrl:%%d alt:%%d\n", +// key, m_lastKeyDownConsumed, evt.ControlDown(), evt.AltDown()); + + // AltGr keys??? + // \|@#¬[]{}?£$~ ã,õ,Ã,Õ, ñ, Ñ + + // On (some?) non-US keyboards the AltGr key is required to enter some + // common characters. It comes to us as both Alt and Ctrl down so we need + // to let the char through in that case, otherwise if only ctrl or only + // alt let's skip it. + bool ctrl = evt.ControlDown(); + bool alt = evt.AltDown(); + bool skip = (ctrl || alt && ! (ctrl && alt)); + + if (key <= 0xff && !iscntrl(key) && !m_lastKeyDownConsumed && !skip) { m_swx->DoAddChar(key); + return; } + evt.Skip(); } void wxStyledTextCtrl::OnKeyDown(wxKeyEvent& evt) { long key = evt.KeyCode(); - int processed = m_swx->DoKeyDown(key, - evt.ShiftDown(), - evt.ControlDown(), - evt.AltDown(), - &m_lastKeyDownConsumed); + bool shift = evt.ShiftDown(), + ctrl = evt.ControlDown(), + alt = evt.AltDown(); + + int processed = m_swx->DoKeyDown(key, shift, ctrl, alt, &m_lastKeyDownConsumed); + +// printf("key: %%d shift: %%d ctrl: %%d alt: %%d processed: %%d consumed: %%d\n", +// key, shift, ctrl, alt, processed, m_lastKeyDownConsumed); + if (!processed && !m_lastKeyDownConsumed) evt.Skip(); } diff --git a/src/stc/PlatWX.cpp b/src/stc/PlatWX.cpp index ae53b19b54..0e73907414 100644 --- a/src/stc/PlatWX.cpp +++ b/src/stc/PlatWX.cpp @@ -456,7 +456,7 @@ class wxSTCListBox : public wxListBox { public: wxSTCListBox(wxWindow* parent, wxWindowID id) : wxListBox(parent, id, wxDefaultPosition, wxDefaultSize, - 0, NULL, wxLB_SINGLE | wxLB_SORT | wxSIMPLE_BORDER) + 0, NULL, wxLB_SINGLE | wxSIMPLE_BORDER | wxLB_SORT ) {} void OnFocus(wxFocusEvent& event) { @@ -464,7 +464,7 @@ public: event.Skip(); } -#ifdef __WXGTK__ +#if 0 // #ifdef __WXGTK__ void DoSetFirstItem(int n); #endif @@ -479,7 +479,7 @@ END_EVENT_TABLE() -#ifdef __WXGTK__ +#if 0 // #ifdef __WXGTK__ // This can be removed after 2.2.2 I think void wxSTCListBox::DoSetFirstItem( int n ) { @@ -535,15 +535,21 @@ void ListBox::Create(Window &parent, int ctrlID) { // 0, NULL, wxLB_SINGLE | wxLB_SORT | wxSIMPLE_BORDER); } +void ListBox::SetVisibleRows(int rows) { + desiredVisibleRows = rows; + printf("SetVisibleRows: %d\n", rows); +} + PRectangle ListBox::GetDesiredRect() { wxSize sz = ((wxListBox*)id)->GetBestSize(); + printf("GetDesiredRect: %d, %d\n", sz.x, sz.y); PRectangle rc; rc.top = 0; rc.left = 0; - if (sz.x > 150) // TODO: A better way to determine these max sizes - sz.x = 150; - if (sz.y > 100) - sz.y = 100; + if (sz.x > 400) + sz.x = 400; + if (sz.y > 150) + sz.y = 150; rc.right = sz.x; rc.bottom = sz.y; diff --git a/src/stc/ScintillaWX.cpp b/src/stc/ScintillaWX.cpp index cfa59ede1e..103ce92796 100644 --- a/src/stc/ScintillaWX.cpp +++ b/src/stc/ScintillaWX.cpp @@ -421,10 +421,7 @@ void ScintillaWX::DoButtonMove(Point pt) { void ScintillaWX::DoAddChar(char ch) { - //bool acActiveBeforeCharAdded = ac.Active(); AddChar(ch); - //if (acActiveBeforeCharAdded) - // AutoCompleteChanged(ch); } int ScintillaWX::DoKeyDown(int key, bool shift, bool ctrl, bool alt, bool* consumed) { @@ -466,9 +463,6 @@ int ScintillaWX::DoKeyDown(int key, bool shift, bool ctrl, bool alt, bool* cons int rv = KeyDown(key, shift, ctrl, alt, consumed); -// printf("key: %d shift: %d ctrl: %d alt: %d rv: %d consumed: %d\n", -// key, shift, ctrl, alt, rv, *consumed); - if (key) return rv; else diff --git a/src/stc/stc.cpp b/src/stc/stc.cpp index 711ff34390..bd6184cf6a 100644 --- a/src/stc/stc.cpp +++ b/src/stc/stc.cpp @@ -1834,19 +1834,40 @@ void wxStyledTextCtrl::OnMouseWheel(wxMouseEvent& evt) { void wxStyledTextCtrl::OnChar(wxKeyEvent& evt) { long key = evt.KeyCode(); - if (key <= 0xff && !iscntrl(key) && !m_lastKeyDownConsumed) { + +// printf("OnChar key:%d consumed:%d ctrl:%d alt:%d\n", +// key, m_lastKeyDownConsumed, evt.ControlDown(), evt.AltDown()); + + // AltGr keys??? + // \|@#¬[]{}?£$~ ã,õ,Ã,Õ, ñ, Ñ + + // On (some?) non-US keyboards the AltGr key is required to enter some + // common characters. It comes to us as both Alt and Ctrl down so we need + // to let the char through in that case, otherwise if only ctrl or only + // alt let's skip it. + bool ctrl = evt.ControlDown(); + bool alt = evt.AltDown(); + bool skip = (ctrl || alt && ! (ctrl && alt)); + + if (key <= 0xff && !iscntrl(key) && !m_lastKeyDownConsumed && !skip) { m_swx->DoAddChar(key); + return; } + evt.Skip(); } void wxStyledTextCtrl::OnKeyDown(wxKeyEvent& evt) { long key = evt.KeyCode(); - int processed = m_swx->DoKeyDown(key, - evt.ShiftDown(), - evt.ControlDown(), - evt.AltDown(), - &m_lastKeyDownConsumed); + bool shift = evt.ShiftDown(), + ctrl = evt.ControlDown(), + alt = evt.AltDown(); + + int processed = m_swx->DoKeyDown(key, shift, ctrl, alt, &m_lastKeyDownConsumed); + +// printf("key: %d shift: %d ctrl: %d alt: %d processed: %d consumed: %d\n", +// key, shift, ctrl, alt, processed, m_lastKeyDownConsumed); + if (!processed && !m_lastKeyDownConsumed) evt.Skip(); } diff --git a/src/stc/stc.cpp.in b/src/stc/stc.cpp.in index e4c51365a9..979bca8794 100644 --- a/src/stc/stc.cpp.in +++ b/src/stc/stc.cpp.in @@ -380,19 +380,40 @@ void wxStyledTextCtrl::OnMouseWheel(wxMouseEvent& evt) { void wxStyledTextCtrl::OnChar(wxKeyEvent& evt) { long key = evt.KeyCode(); - if (key <= 0xff && !iscntrl(key) && !m_lastKeyDownConsumed) { + +// printf("OnChar key:%%d consumed:%%d ctrl:%%d alt:%%d\n", +// key, m_lastKeyDownConsumed, evt.ControlDown(), evt.AltDown()); + + // AltGr keys??? + // \|@#¬[]{}?£$~ ã,õ,Ã,Õ, ñ, Ñ + + // On (some?) non-US keyboards the AltGr key is required to enter some + // common characters. It comes to us as both Alt and Ctrl down so we need + // to let the char through in that case, otherwise if only ctrl or only + // alt let's skip it. + bool ctrl = evt.ControlDown(); + bool alt = evt.AltDown(); + bool skip = (ctrl || alt && ! (ctrl && alt)); + + if (key <= 0xff && !iscntrl(key) && !m_lastKeyDownConsumed && !skip) { m_swx->DoAddChar(key); + return; } + evt.Skip(); } void wxStyledTextCtrl::OnKeyDown(wxKeyEvent& evt) { long key = evt.KeyCode(); - int processed = m_swx->DoKeyDown(key, - evt.ShiftDown(), - evt.ControlDown(), - evt.AltDown(), - &m_lastKeyDownConsumed); + bool shift = evt.ShiftDown(), + ctrl = evt.ControlDown(), + alt = evt.AltDown(); + + int processed = m_swx->DoKeyDown(key, shift, ctrl, alt, &m_lastKeyDownConsumed); + +// printf("key: %%d shift: %%d ctrl: %%d alt: %%d processed: %%d consumed: %%d\n", +// key, shift, ctrl, alt, processed, m_lastKeyDownConsumed); + if (!processed && !m_lastKeyDownConsumed) evt.Skip(); } -- 2.45.2