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