...
|
...
|
@@ -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
|
|