Fix or work around several wxX11 problems in the widgets sample

Initialize the variables and check that they're initialized in the event
handlers which are called earlier in wxX11.

Also always use valid wxSlider flags.

Closes #17843.
This commit is contained in:
David Hart
2017-04-18 03:17:18 +02:00
committed by Vadim Zeitlin
parent e1a4b7d5aa
commit 48b86c20b2
3 changed files with 86 additions and 7 deletions

View File

@@ -305,7 +305,8 @@ IMPLEMENT_WIDGETS_PAGE(ODComboboxWidgetsPage, wxT("OwnerDrawnCombobox"),
ODComboboxWidgetsPage::ODComboboxWidgetsPage(WidgetsBookCtrl *book,
wxImageList *imaglist)
: ItemContainerWidgetsPage(book, imaglist, odcombobox_xpm)
: ItemContainerWidgetsPage(book, imaglist, odcombobox_xpm),
m_textPopupMinWidth(NULL), m_textPopupHeight(NULL)
{
// init everything
m_chkSort =
@@ -649,6 +650,11 @@ void ODComboboxWidgetsPage::OnTextPopupWidth(wxCommandEvent& WXUNUSED(event))
{
long l = 0;
if (!m_textPopupMinWidth)
{
return;
}
m_textPopupMinWidth->GetValue().ToLong(&l);
if (m_combobox && l > 0)
@@ -661,6 +667,11 @@ void ODComboboxWidgetsPage::OnTextPopupHeight(wxCommandEvent& WXUNUSED(event))
{
long l = 0;
if (!m_textPopupHeight)
{
return;
}
m_textPopupHeight->GetValue().ToLong(&l);
if (m_combobox && l > 0)

View File

@@ -385,6 +385,11 @@ void SliderWidgetsPage::CreateSlider()
{
int flags = ms_defaultFlags;
#if defined(__WXX11__)
// wxX11 asserts without a sane tick setting, which initially it hasn't
flags |= wxSL_BOTTOM;
#endif
if ( m_chkInverse->GetValue() )
{
flags |= wxSL_INVERSE;

View File

@@ -1580,13 +1580,76 @@ bool wxTranslateKeyEvent(wxKeyEvent& wxevent, wxWindow *win, Window WXUNUSED(win
KeySym keySym;
(void) XLookupString ((XKeyEvent *) xevent, buf, 20, &keySym, NULL);
int id = wxCharCodeXToWX (keySym);
// id may be WXK_xxx code - these are outside ASCII range, so we
// can't just use toupper() on id.
// Only change this if we want the raw key that was pressed,
// and don't change it if we want an ASCII value.
if (!isAscii && (id >= 'a' && id <= 'z'))
if (isAscii)
{
id = id + 'A' - 'a';
// fold keypad into normal character codes
if (id >= WXK_NUMPAD0 && id <= WXK_NUMPAD9)
{
id = id - WXK_NUMPAD0 + '0';
}
else if (id >= WXK_NUMPAD_SPACE && id <= WXK_NUMPAD_DIVIDE)
{
switch (id)
{
case WXK_NUMPAD_SPACE:
id = ' ';
break;
case WXK_NUMPAD_TAB:
id = WXK_TAB;
break;
case WXK_NUMPAD_ENTER:
id = WXK_RETURN;
break;
case WXK_NUMPAD_F1:
case WXK_NUMPAD_F2:
case WXK_NUMPAD_F3:
case WXK_NUMPAD_F4:
id = id - WXK_NUMPAD_F1 + WXK_F1;
break;
case WXK_NUMPAD_END:
case WXK_NUMPAD_HOME:
case WXK_NUMPAD_LEFT:
case WXK_NUMPAD_UP:
case WXK_NUMPAD_RIGHT:
case WXK_NUMPAD_DOWN:
id = id - WXK_NUMPAD_END + WXK_END;
break;
case WXK_NUMPAD_PAGEUP:
id = WXK_PAGEUP;
break;
case WXK_NUMPAD_PAGEDOWN:
id = WXK_PAGEDOWN;
break;
case WXK_NUMPAD_INSERT:
case WXK_NUMPAD_DELETE:
case WXK_NUMPAD_EQUAL:
id = id - WXK_NUMPAD_INSERT + WXK_INSERT;
break;
case WXK_NUMPAD_BEGIN:
id = WXK_HOME;
break;
case WXK_NUMPAD_MULTIPLY:
case WXK_NUMPAD_ADD:
case WXK_NUMPAD_SEPARATOR:
case WXK_NUMPAD_SUBTRACT:
case WXK_NUMPAD_DECIMAL:
case WXK_NUMPAD_DIVIDE:
id = id - WXK_NUMPAD_MULTIPLY + WXK_MULTIPLY;
break;
}
}
}
else
{
// Fold case for alphabetic characters. We can't just
// use toupper() on id, since id may be WXK_xxx code -
// these are outside ASCII range. Only change this if
// we want the raw key that was pressed, and don't
// change it if we want an ASCII value.
if (id >= 'a' && id <= 'z')
{
id = id + 'A' - 'a';
}
}
wxevent.m_shiftDown = XKeyEventShiftIsDown(xevent);