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
This commit is contained in:
@@ -456,7 +456,7 @@ class wxSTCListBox : public wxListBox {
|
|||||||
public:
|
public:
|
||||||
wxSTCListBox(wxWindow* parent, wxWindowID id)
|
wxSTCListBox(wxWindow* parent, wxWindowID id)
|
||||||
: wxListBox(parent, id, wxDefaultPosition, wxDefaultSize,
|
: 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) {
|
void OnFocus(wxFocusEvent& event) {
|
||||||
@@ -464,7 +464,7 @@ public:
|
|||||||
event.Skip();
|
event.Skip();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __WXGTK__
|
#if 0 // #ifdef __WXGTK__
|
||||||
void DoSetFirstItem(int n);
|
void DoSetFirstItem(int n);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -479,7 +479,7 @@ END_EVENT_TABLE()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __WXGTK__
|
#if 0 // #ifdef __WXGTK__
|
||||||
// This can be removed after 2.2.2 I think
|
// This can be removed after 2.2.2 I think
|
||||||
void wxSTCListBox::DoSetFirstItem( int n )
|
void wxSTCListBox::DoSetFirstItem( int n )
|
||||||
{
|
{
|
||||||
@@ -535,15 +535,21 @@ void ListBox::Create(Window &parent, int ctrlID) {
|
|||||||
// 0, NULL, wxLB_SINGLE | wxLB_SORT | wxSIMPLE_BORDER);
|
// 0, NULL, wxLB_SINGLE | wxLB_SORT | wxSIMPLE_BORDER);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ListBox::SetVisibleRows(int rows) {
|
||||||
|
desiredVisibleRows = rows;
|
||||||
|
printf("SetVisibleRows: %d\n", rows);
|
||||||
|
}
|
||||||
|
|
||||||
PRectangle ListBox::GetDesiredRect() {
|
PRectangle ListBox::GetDesiredRect() {
|
||||||
wxSize sz = ((wxListBox*)id)->GetBestSize();
|
wxSize sz = ((wxListBox*)id)->GetBestSize();
|
||||||
|
printf("GetDesiredRect: %d, %d\n", sz.x, sz.y);
|
||||||
PRectangle rc;
|
PRectangle rc;
|
||||||
rc.top = 0;
|
rc.top = 0;
|
||||||
rc.left = 0;
|
rc.left = 0;
|
||||||
if (sz.x > 150) // TODO: A better way to determine these max sizes
|
if (sz.x > 400)
|
||||||
sz.x = 150;
|
sz.x = 400;
|
||||||
if (sz.y > 100)
|
if (sz.y > 150)
|
||||||
sz.y = 100;
|
sz.y = 150;
|
||||||
rc.right = sz.x;
|
rc.right = sz.x;
|
||||||
rc.bottom = sz.y;
|
rc.bottom = sz.y;
|
||||||
|
|
||||||
|
@@ -421,10 +421,7 @@ void ScintillaWX::DoButtonMove(Point pt) {
|
|||||||
|
|
||||||
|
|
||||||
void ScintillaWX::DoAddChar(char ch) {
|
void ScintillaWX::DoAddChar(char ch) {
|
||||||
//bool acActiveBeforeCharAdded = ac.Active();
|
|
||||||
AddChar(ch);
|
AddChar(ch);
|
||||||
//if (acActiveBeforeCharAdded)
|
|
||||||
// AutoCompleteChanged(ch);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int ScintillaWX::DoKeyDown(int key, bool shift, bool ctrl, bool alt, bool* consumed) {
|
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);
|
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)
|
if (key)
|
||||||
return rv;
|
return rv;
|
||||||
else
|
else
|
||||||
|
@@ -1834,19 +1834,40 @@ void wxStyledTextCtrl::OnMouseWheel(wxMouseEvent& evt) {
|
|||||||
|
|
||||||
void wxStyledTextCtrl::OnChar(wxKeyEvent& evt) {
|
void wxStyledTextCtrl::OnChar(wxKeyEvent& evt) {
|
||||||
long key = evt.KeyCode();
|
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???
|
||||||
|
// \|@#<23>[]{}?<3F>$~ <20>,<2C>,<2C>,<2C>, <20>, <20>
|
||||||
|
|
||||||
|
// 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);
|
m_swx->DoAddChar(key);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
evt.Skip();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void wxStyledTextCtrl::OnKeyDown(wxKeyEvent& evt) {
|
void wxStyledTextCtrl::OnKeyDown(wxKeyEvent& evt) {
|
||||||
long key = evt.KeyCode();
|
long key = evt.KeyCode();
|
||||||
int processed = m_swx->DoKeyDown(key,
|
bool shift = evt.ShiftDown(),
|
||||||
evt.ShiftDown(),
|
ctrl = evt.ControlDown(),
|
||||||
evt.ControlDown(),
|
alt = evt.AltDown();
|
||||||
evt.AltDown(),
|
|
||||||
&m_lastKeyDownConsumed);
|
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)
|
if (!processed && !m_lastKeyDownConsumed)
|
||||||
evt.Skip();
|
evt.Skip();
|
||||||
}
|
}
|
||||||
|
@@ -380,19 +380,40 @@ void wxStyledTextCtrl::OnMouseWheel(wxMouseEvent& evt) {
|
|||||||
|
|
||||||
void wxStyledTextCtrl::OnChar(wxKeyEvent& evt) {
|
void wxStyledTextCtrl::OnChar(wxKeyEvent& evt) {
|
||||||
long key = evt.KeyCode();
|
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???
|
||||||
|
// \|@#<23>[]{}?<3F>$~ <20>,<2C>,<2C>,<2C>, <20>, <20>
|
||||||
|
|
||||||
|
// 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);
|
m_swx->DoAddChar(key);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
evt.Skip();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void wxStyledTextCtrl::OnKeyDown(wxKeyEvent& evt) {
|
void wxStyledTextCtrl::OnKeyDown(wxKeyEvent& evt) {
|
||||||
long key = evt.KeyCode();
|
long key = evt.KeyCode();
|
||||||
int processed = m_swx->DoKeyDown(key,
|
bool shift = evt.ShiftDown(),
|
||||||
evt.ShiftDown(),
|
ctrl = evt.ControlDown(),
|
||||||
evt.ControlDown(),
|
alt = evt.AltDown();
|
||||||
evt.AltDown(),
|
|
||||||
&m_lastKeyDownConsumed);
|
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)
|
if (!processed && !m_lastKeyDownConsumed)
|
||||||
evt.Skip();
|
evt.Skip();
|
||||||
}
|
}
|
||||||
|
@@ -456,7 +456,7 @@ class wxSTCListBox : public wxListBox {
|
|||||||
public:
|
public:
|
||||||
wxSTCListBox(wxWindow* parent, wxWindowID id)
|
wxSTCListBox(wxWindow* parent, wxWindowID id)
|
||||||
: wxListBox(parent, id, wxDefaultPosition, wxDefaultSize,
|
: 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) {
|
void OnFocus(wxFocusEvent& event) {
|
||||||
@@ -464,7 +464,7 @@ public:
|
|||||||
event.Skip();
|
event.Skip();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __WXGTK__
|
#if 0 // #ifdef __WXGTK__
|
||||||
void DoSetFirstItem(int n);
|
void DoSetFirstItem(int n);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -479,7 +479,7 @@ END_EVENT_TABLE()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __WXGTK__
|
#if 0 // #ifdef __WXGTK__
|
||||||
// This can be removed after 2.2.2 I think
|
// This can be removed after 2.2.2 I think
|
||||||
void wxSTCListBox::DoSetFirstItem( int n )
|
void wxSTCListBox::DoSetFirstItem( int n )
|
||||||
{
|
{
|
||||||
@@ -535,15 +535,21 @@ void ListBox::Create(Window &parent, int ctrlID) {
|
|||||||
// 0, NULL, wxLB_SINGLE | wxLB_SORT | wxSIMPLE_BORDER);
|
// 0, NULL, wxLB_SINGLE | wxLB_SORT | wxSIMPLE_BORDER);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ListBox::SetVisibleRows(int rows) {
|
||||||
|
desiredVisibleRows = rows;
|
||||||
|
printf("SetVisibleRows: %d\n", rows);
|
||||||
|
}
|
||||||
|
|
||||||
PRectangle ListBox::GetDesiredRect() {
|
PRectangle ListBox::GetDesiredRect() {
|
||||||
wxSize sz = ((wxListBox*)id)->GetBestSize();
|
wxSize sz = ((wxListBox*)id)->GetBestSize();
|
||||||
|
printf("GetDesiredRect: %d, %d\n", sz.x, sz.y);
|
||||||
PRectangle rc;
|
PRectangle rc;
|
||||||
rc.top = 0;
|
rc.top = 0;
|
||||||
rc.left = 0;
|
rc.left = 0;
|
||||||
if (sz.x > 150) // TODO: A better way to determine these max sizes
|
if (sz.x > 400)
|
||||||
sz.x = 150;
|
sz.x = 400;
|
||||||
if (sz.y > 100)
|
if (sz.y > 150)
|
||||||
sz.y = 100;
|
sz.y = 150;
|
||||||
rc.right = sz.x;
|
rc.right = sz.x;
|
||||||
rc.bottom = sz.y;
|
rc.bottom = sz.y;
|
||||||
|
|
||||||
|
@@ -421,10 +421,7 @@ void ScintillaWX::DoButtonMove(Point pt) {
|
|||||||
|
|
||||||
|
|
||||||
void ScintillaWX::DoAddChar(char ch) {
|
void ScintillaWX::DoAddChar(char ch) {
|
||||||
//bool acActiveBeforeCharAdded = ac.Active();
|
|
||||||
AddChar(ch);
|
AddChar(ch);
|
||||||
//if (acActiveBeforeCharAdded)
|
|
||||||
// AutoCompleteChanged(ch);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int ScintillaWX::DoKeyDown(int key, bool shift, bool ctrl, bool alt, bool* consumed) {
|
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);
|
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)
|
if (key)
|
||||||
return rv;
|
return rv;
|
||||||
else
|
else
|
||||||
|
@@ -1834,19 +1834,40 @@ void wxStyledTextCtrl::OnMouseWheel(wxMouseEvent& evt) {
|
|||||||
|
|
||||||
void wxStyledTextCtrl::OnChar(wxKeyEvent& evt) {
|
void wxStyledTextCtrl::OnChar(wxKeyEvent& evt) {
|
||||||
long key = evt.KeyCode();
|
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???
|
||||||
|
// \|@#<23>[]{}?<3F>$~ <20>,<2C>,<2C>,<2C>, <20>, <20>
|
||||||
|
|
||||||
|
// 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);
|
m_swx->DoAddChar(key);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
evt.Skip();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void wxStyledTextCtrl::OnKeyDown(wxKeyEvent& evt) {
|
void wxStyledTextCtrl::OnKeyDown(wxKeyEvent& evt) {
|
||||||
long key = evt.KeyCode();
|
long key = evt.KeyCode();
|
||||||
int processed = m_swx->DoKeyDown(key,
|
bool shift = evt.ShiftDown(),
|
||||||
evt.ShiftDown(),
|
ctrl = evt.ControlDown(),
|
||||||
evt.ControlDown(),
|
alt = evt.AltDown();
|
||||||
evt.AltDown(),
|
|
||||||
&m_lastKeyDownConsumed);
|
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)
|
if (!processed && !m_lastKeyDownConsumed)
|
||||||
evt.Skip();
|
evt.Skip();
|
||||||
}
|
}
|
||||||
|
@@ -380,19 +380,40 @@ void wxStyledTextCtrl::OnMouseWheel(wxMouseEvent& evt) {
|
|||||||
|
|
||||||
void wxStyledTextCtrl::OnChar(wxKeyEvent& evt) {
|
void wxStyledTextCtrl::OnChar(wxKeyEvent& evt) {
|
||||||
long key = evt.KeyCode();
|
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???
|
||||||
|
// \|@#<23>[]{}?<3F>$~ <20>,<2C>,<2C>,<2C>, <20>, <20>
|
||||||
|
|
||||||
|
// 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);
|
m_swx->DoAddChar(key);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
evt.Skip();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void wxStyledTextCtrl::OnKeyDown(wxKeyEvent& evt) {
|
void wxStyledTextCtrl::OnKeyDown(wxKeyEvent& evt) {
|
||||||
long key = evt.KeyCode();
|
long key = evt.KeyCode();
|
||||||
int processed = m_swx->DoKeyDown(key,
|
bool shift = evt.ShiftDown(),
|
||||||
evt.ShiftDown(),
|
ctrl = evt.ControlDown(),
|
||||||
evt.ControlDown(),
|
alt = evt.AltDown();
|
||||||
evt.AltDown(),
|
|
||||||
&m_lastKeyDownConsumed);
|
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)
|
if (!processed && !m_lastKeyDownConsumed)
|
||||||
evt.Skip();
|
evt.Skip();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user