nsxivf7a6646
Nicer key handling, does not fix problems
+27 −42
1 file changed
- M main.c +27 −42
| @@ -136,79 +136,60 @@ void cleanup() { | |||
| 136 | 136 | ||
| 137 | 137 | void on_keypress(XEvent *ev) { | |
| 138 | 138 | char key; | |
| 139 | − | KeySym keysym; | |
| 139 | + | KeySym ksym; | |
| 140 | 140 | int changed; | |
| 141 | 141 | ||
| 142 | 142 | if (!ev) | |
| 143 | 143 | return; | |
| 144 | 144 | ||
| 145 | − | XLookupString(&ev->xkey, &key, 1, &keysym, NULL); | |
| 145 | + | XLookupString(&ev->xkey, &key, 1, &ksym, NULL); | |
| 146 | 146 | changed = 0; | |
| 147 | 147 | ||
| 148 | − | switch (keysym) { | |
| 148 | + | switch (ksym) { | |
| 149 | 149 | case XK_Escape: | |
| 150 | 150 | cleanup(); | |
| 151 | 151 | exit(2); | |
| 152 | − | case XK_space: | |
| 153 | − | key = 'n'; | |
| 154 | − | break; | |
| 155 | − | case XK_BackSpace: | |
| 156 | − | key = 'p'; | |
| 157 | − | break; | |
| 158 | − | case XK_Left: | |
| 159 | − | key = 'h'; | |
| 160 | − | break; | |
| 161 | − | case XK_Down: | |
| 162 | − | key = 'j'; | |
| 163 | − | break; | |
| 164 | − | case XK_Up: | |
| 165 | − | key = 'k'; | |
| 166 | − | break; | |
| 167 | − | case XK_Right: | |
| 168 | − | key = 'l'; | |
| 169 | − | break; | |
| 170 | − | } | |
| 171 | − | ||
| 172 | − | switch (key) { | |
| 173 | − | case 'q': | |
| 152 | + | case XK_q: | |
| 174 | 153 | cleanup(); | |
| 175 | 154 | exit(0); | |
| 176 | 155 | ||
| 177 | 156 | /* navigate image list */ | |
| 178 | − | case 'n': | |
| 157 | + | case XK_n: | |
| 158 | + | case XK_space: | |
| 179 | 159 | if (fileidx + 1 < filecnt) { | |
| 180 | 160 | img_load(&img, filenames[++fileidx]); | |
| 181 | 161 | changed = 1; | |
| 182 | 162 | } | |
| 183 | 163 | break; | |
| 184 | − | case 'p': | |
| 164 | + | case XK_p: | |
| 165 | + | case XK_BackSpace: | |
| 185 | 166 | if (fileidx > 0) { | |
| 186 | 167 | img_load(&img, filenames[--fileidx]); | |
| 187 | 168 | changed = 1; | |
| 188 | 169 | } | |
| 189 | 170 | break; | |
| 190 | − | case '[': | |
| 171 | + | case XK_bracketleft: | |
| 191 | 172 | if (fileidx != 0) { | |
| 192 | 173 | fileidx = MAX(0, fileidx - 10); | |
| 193 | 174 | img_load(&img, filenames[fileidx]); | |
| 194 | 175 | changed = 1; | |
| 195 | 176 | } | |
| 196 | 177 | break; | |
| 197 | − | case ']': | |
| 178 | + | case XK_bracketright: | |
| 198 | 179 | if (fileidx != filecnt - 1) { | |
| 199 | 180 | fileidx = MIN(fileidx + 10, filecnt - 1); | |
| 200 | 181 | img_load(&img, filenames[fileidx]); | |
| 201 | 182 | changed = 1; | |
| 202 | 183 | } | |
| 203 | 184 | break; | |
| 204 | − | case 'g': | |
| 185 | + | case XK_g: | |
| 205 | 186 | if (fileidx != 0) { | |
| 206 | 187 | fileidx = 0; | |
| 207 | 188 | img_load(&img, filenames[fileidx]); | |
| 208 | 189 | changed = 1; | |
| 209 | 190 | } | |
| 210 | 191 | break; | |
| 211 | − | case 'G': | |
| 192 | + | case XK_G: | |
| 212 | 193 | if (fileidx != filecnt - 1) { | |
| 213 | 194 | fileidx = filecnt - 1; | |
| 214 | 195 | img_load(&img, filenames[fileidx]); | |
| @@ -217,43 +198,47 @@ void on_keypress(XEvent *ev) { | |||
| 217 | 198 | break; | |
| 218 | 199 | ||
| 219 | 200 | /* zooming */ | |
| 220 | − | case '+': | |
| 221 | − | case '=': | |
| 201 | + | case XK_plus: | |
| 202 | + | case XK_equal: | |
| 222 | 203 | changed = img_zoom_in(&img); | |
| 223 | 204 | break; | |
| 224 | − | case '-': | |
| 205 | + | case XK_minus: | |
| 225 | 206 | changed = img_zoom_out(&img); | |
| 226 | 207 | break; | |
| 227 | 208 | ||
| 228 | 209 | /* panning */ | |
| 229 | − | case 'h': | |
| 210 | + | case XK_h: | |
| 211 | + | case XK_Left: | |
| 230 | 212 | changed = img_pan(&img, &win, PAN_LEFT); | |
| 231 | 213 | break; | |
| 232 | − | case 'j': | |
| 214 | + | case XK_j: | |
| 215 | + | case XK_Down: | |
| 233 | 216 | changed = img_pan(&img, &win, PAN_DOWN); | |
| 234 | 217 | break; | |
| 235 | − | case 'k': | |
| 218 | + | case XK_k: | |
| 219 | + | case XK_Up: | |
| 236 | 220 | changed = img_pan(&img, &win, PAN_UP); | |
| 237 | 221 | break; | |
| 238 | − | case 'l': | |
| 222 | + | case XK_l: | |
| 223 | + | case XK_Right: | |
| 239 | 224 | changed = img_pan(&img, &win, PAN_RIGHT); | |
| 240 | 225 | break; | |
| 241 | 226 | ||
| 242 | 227 | /* rotation */ | |
| 243 | − | case '<': | |
| 228 | + | case XK_less: | |
| 244 | 229 | changed = img_rotate_left(&img, &win); | |
| 245 | 230 | break; | |
| 246 | − | case '>': | |
| 231 | + | case XK_greater: | |
| 247 | 232 | changed = img_rotate_right(&img, &win); | |
| 248 | 233 | break; | |
| 249 | 234 | ||
| 250 | 235 | /* control window */ | |
| 251 | − | case 'f': | |
| 236 | + | case XK_f: | |
| 252 | 237 | win_toggle_fullscreen(&win); | |
| 253 | 238 | break; | |
| 254 | 239 | ||
| 255 | 240 | /* miscellaneous */ | |
| 256 | − | case 'a': | |
| 241 | + | case XK_a: | |
| 257 | 242 | changed = img_toggle_antialias(&img); | |
| 258 | 243 | break; | |
| 259 | 244 | } | |