Avoid undefined 'isdigit()' behaviour
authorMichael Weghorn <m.weghorn@posteo.de>
Thu, 27 Dec 2018 10:56:09 +0000 (11:56 +0100)
committerAndriy Grytsenko <andrej@rep.kiev.ua>
Wed, 9 Jan 2019 11:55:35 +0000 (13:55 +0200)
As the C11 standard says in section 7.4, 1),
the 'isdigit()' function is only well-defined
under this precondition:

> The header <ctype.h> declares several functions
> useful for classifying and mapping characters.
> In all cases the argument is an int, the value of
> which shall be representable as an unsigned char or
> shall equal the value of the macro EOF. If the argument
> has any other value, the behavior is undefined.

Therefore avoid to use the 'isdigit()' function here,
since the Gdk key codes and thus the 'keyval'
member from the 'GdkEventKey' do not always fulfill
this requirement and the behaviour is thus undefined.

NEWS
src/main-win.c

diff --git a/NEWS b/NEWS
index d2e6caa..c5b2285 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,8 @@
+Changes on 1.3.2 since 1.3.1:
+
+* Fixed case when some keyboard shortcuts stopped working: Alt+Home, Alt+Up.
+
+
 Changes on 1.3.1 since 1.3.0:
 
 * Allowed bigger sizes of icons and thumbnails as 256*256 appears to be small
index 3907dba..49fc53b 100644 (file)
@@ -2465,7 +2465,7 @@ static gboolean on_key_press_event(GtkWidget* w, GdkEventKey* evt)
 
     if(modifier == GDK_MOD1_MASK) /* Alt */
     {
-        if(isdigit(evt->keyval)) /* Alt + 0 ~ 9, nth tab */
+        if(evt->keyval >= '0' && evt->keyval <= '9') /* Alt + 0 ~ 9, nth tab */
         {
             int n;
             if(evt->keyval == '0')