Browse code

Add quirk_duplicates, as it seems that the ignorenkeys hack is only necessary on Debian 10 Buster' sdl 2.0.9

Dario Rodriguez authored on 22/05/2022 18:09:47
Showing 1 changed files
... ...
@@ -76,6 +76,7 @@ typedef struct re_t {
76 76
         redata_t *data;
77 77
         reui_t *ui;
78 78
         int viewonly;
79
+        int quirk_duplicates;
79 80
         int flag_newfile;
80 81
         int showlinenumbers;
81 82
         char filename[PATH_MAX];
... ...
@@ -631,6 +632,7 @@ re_t *
631 632
 re_init(int viewonly)
632 633
 {
633 634
         re_t *re;
635
+        SDL_version linked_version;
634 636
         if((re=malloc(sizeof(re_t)))==NULL)
635 637
                 return(NULL); /* insuf. mem. */
636 638
         memset(re,0,sizeof(re_t));
... ...
@@ -655,6 +657,8 @@ re_init(int viewonly)
655 657
                 return(NULL); /* video init error */
656 658
         }
657 659
         re->viewonly=(viewonly!=0)?1:0;
660
+        SDL_GetVersion(&linked_version);
661
+        re->quirk_duplicates=(linked_version.major==2 && linked_version.minor==0 && linked_version.patch==9)?1:0;
658 662
         return(re);
659 663
 }
660 664
 
... ...
@@ -1167,13 +1171,16 @@ fprintf(stderr,"SDL_KEYDOWN: BACKSPACE%s\n",(event==&fakeevent)?" (fake)":"");
1167 1171
         } else if(event->key.keysym.sym==SDLK_PLUS && (SDL_GetModState()&KMOD_CTRL)!=0) {
1168 1172
 #warning XXX TODO: Control+shift+'+'/'-' iterates between the color permutations of the current theme in rgb, 6 in total (Control+shift+'0' resets to the default permutation)
1169 1173
                 re_changefontsize(re, 1);
1170
-                re->ignorenkeys++;
1174
+                if(re->quirk_duplicates)
1175
+                        re->ignorenkeys++;
1171 1176
         } else if(event->key.keysym.sym==SDLK_MINUS && (SDL_GetModState()&KMOD_CTRL)!=0) {
1172 1177
                 re_changefontsize(re, -1);
1173
-                re->ignorenkeys++;
1178
+                if(re->quirk_duplicates)
1179
+                        re->ignorenkeys++;
1174 1180
         } else if(event->key.keysym.sym==SDLK_0 && (SDL_GetModState()&KMOD_CTRL)!=0) {
1175 1181
                 re_changefontsize(re, 0);
1176
-                re->ignorenkeys++;
1182
+                if(re->quirk_duplicates)
1183
+                        re->ignorenkeys++;
1177 1184
         } else if((event->key.keysym.sym==SDLK_c || event->key.keysym.sym==SDLK_x) && (SDL_GetModState()&KMOD_CTRL)!=0) {
1178 1185
                 long frompos,topos;
1179 1186
                 int coldone;
... ...
@@ -1198,7 +1205,8 @@ fprintf(stderr,"SDL_KEYDOWN: BACKSPACE%s\n",(event==&fakeevent)?" (fake)":"");
1198 1205
                         re_sel_toggle(re);
1199 1206
                         re->contentsdirty=1;
1200 1207
                 }
1201
-                re->ignorenkeys++;
1208
+                if(re->quirk_duplicates)
1209
+                        re->ignorenkeys++;
1202 1210
         } else if(event->key.keysym.sym==SDLK_v && (SDL_GetModState()&KMOD_CTRL)!=0) {
1203 1211
                 long cursorpos;
1204 1212
                 /* Mac-HIG/OpenLook-style paste (ctrl+v)*/
... ...
@@ -1218,7 +1226,8 @@ fprintf(stderr,"SDL_KEYDOWN: BACKSPACE%s\n",(event==&fakeevent)?" (fake)":"");
1218 1226
                 }
1219 1227
                 if(re->usedselectbuf>0)
1220 1228
                         re_textinsert(re, re->selectbuf,re->usedselectbuf);
1221
-                re->ignorenkeys++;
1229
+                if(re->quirk_duplicates)
1230
+                        re->ignorenkeys++;
1222 1231
         } else if(/*re->selactive &&*/ event->key.keysym.sym==SDLK_p && (SDL_GetModState()&KMOD_CTRL)!=0) {
1223 1232
                 re_addprint(re);
1224 1233
         } else if(event->key.keysym.sym==SDLK_n && (SDL_GetModState()&KMOD_CTRL)!=0) {
... ...
@@ -1352,8 +1361,10 @@ re_processkey_commandwait(re_t *re, SDL_Event *event)
1352 1361
                 re->command=NULL;
1353 1362
                 re->headerdirty=1;
1354 1363
         }
1355
-        if(!(SDL_GetModState()&KMOD_CTRL))
1356
-                re->ignorenkeys=1; /* control was not pressed, we will receive again this key as SDL_TEXTINPUT */
1364
+        if(!(SDL_GetModState()&KMOD_CTRL)) {
1365
+                if(re->quirk_duplicates)
1366
+                        re->ignorenkeys=1; /* control was not pressed, we will receive again this key as SDL_TEXTINPUT */
1367
+        }
1357 1368
         return(0);
1358 1369
 }
1359 1370