+ int have_digit = -1;
+
+#define ASCII(x) (x | 0x8000)
+#define DIGIT(x) case KEY_##x: case KEY_KP##x: case ASCII(x|0x30): have_digit=x; break;
+ switch (code)
+ {
+ DIGIT(0);
+ DIGIT(1);
+ DIGIT(2);
+ DIGIT(3);
+ DIGIT(4);
+ DIGIT(5);
+ DIGIT(6);
+ DIGIT(7);
+ DIGIT(8);
+ DIGIT(9);
+ }
+
+ if (have_digit != -1)
+ {
+ insertDigit(m_cursor, have_digit);
+ m_cursor++;
+
+ recalcLen();
+
+ // can happen when 0 -> x
+ if (m_cursor > m_len)
+ m_cursor = m_len;
+
+ if (m_input)
+ m_input->invalidate();
+ }