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:
committed by
Vadim Zeitlin
parent
e1a4b7d5aa
commit
48b86c20b2
@@ -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)
|
||||
|
@@ -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;
|
||||
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user