diff options
author | Michael Drake <tlsa@netsurf-browser.org> | 2012-08-01 14:47:20 +0100 |
---|---|---|
committer | Michael Drake <tlsa@netsurf-browser.org> | 2012-08-01 14:47:20 +0100 |
commit | b238791002697efbda1ece31985ca15331511fa8 (patch) | |
tree | 099a9c336f66ada1daff6642649d1059505ea571 /framebuffer/gui.c | |
parent | 46527795dbf69f08d55692fa1ca85b54a6bcc4dc (diff) | |
download | netsurf-b238791002697efbda1ece31985ca15331511fa8.tar.gz netsurf-b238791002697efbda1ece31985ca15331511fa8.tar.bz2 |
Use enum instead of magic numbers for tracking key modifier states. Pass special keys to core (e.g. WORD_LEFT, SELECT_ALL, etc).
Diffstat (limited to 'framebuffer/gui.c')
-rw-r--r-- | framebuffer/gui.c | 90 |
1 files changed, 75 insertions, 15 deletions
diff --git a/framebuffer/gui.c b/framebuffer/gui.c index 286f26357..c451bc8b9 100644 --- a/framebuffer/gui.c +++ b/framebuffer/gui.c @@ -688,7 +688,7 @@ static int fb_browser_window_input(fbtk_widget_t *widget, fbtk_callback_info *cbi) { struct gui_window *gw = cbi->context; - static uint8_t modifier = 0; + static fbtk_modifier_type modifier = FBTK_MOD_CLEAR; int ucs4 = -1; LOG(("got value %d", cbi->event->value.keycode)); @@ -698,41 +698,93 @@ fb_browser_window_input(fbtk_widget_t *widget, fbtk_callback_info *cbi) switch (cbi->event->value.keycode) { case NSFB_KEY_PAGEUP: - if (browser_window_key_press(gw->bw, KEY_PAGE_UP) == false) - widget_scroll_y(gw, -fbtk_get_height(gw->browser), false); + if (browser_window_key_press(gw->bw, + KEY_PAGE_UP) == false) + widget_scroll_y(gw, -fbtk_get_height( + gw->browser), false); break; case NSFB_KEY_PAGEDOWN: - if (browser_window_key_press(gw->bw, KEY_PAGE_DOWN) == false) - widget_scroll_y(gw, fbtk_get_height(gw->browser), false); + if (browser_window_key_press(gw->bw, + KEY_PAGE_DOWN) == false) + widget_scroll_y(gw, fbtk_get_height( + gw->browser), false); break; case NSFB_KEY_RIGHT: - if (browser_window_key_press(gw->bw, KEY_RIGHT) == false) - widget_scroll_x(gw, 100, false); + if (modifier & FBTK_MOD_RCTRL || + modifier & FBTK_MOD_LCTRL) { + /* CTRL held */ + if (browser_window_key_press(gw->bw, + KEY_LINE_END) == false) + widget_scroll_x(gw, INT_MAX, true); + + } else if (modifier & FBTK_MOD_RSHIFT || + modifier & FBTK_MOD_LSHIFT) { + /* SHIFT held */ + if (browser_window_key_press(gw->bw, + KEY_WORD_RIGHT) == false) + widget_scroll_x(gw, fbtk_get_width( + gw->browser), false); + + } else { + /* no modifier */ + if (browser_window_key_press(gw->bw, + KEY_RIGHT) == false) + widget_scroll_x(gw, 100, false); + } break; case NSFB_KEY_LEFT: - if (browser_window_key_press(gw->bw, KEY_LEFT) == false) - widget_scroll_x(gw, -100, false); + if (modifier & FBTK_MOD_RCTRL || + modifier & FBTK_MOD_LCTRL) { + /* CTRL held */ + if (browser_window_key_press(gw->bw, + KEY_LINE_START) == false) + widget_scroll_x(gw, 0, true); + + } else if (modifier & FBTK_MOD_RSHIFT || + modifier & FBTK_MOD_LSHIFT) { + /* SHIFT held */ + if (browser_window_key_press(gw->bw, + KEY_WORD_LEFT) == false) + widget_scroll_x(gw, -fbtk_get_width( + gw->browser), false); + + } else { + /* no modifier */ + if (browser_window_key_press(gw->bw, + KEY_LEFT) == false) + widget_scroll_x(gw, -100, false); + } break; case NSFB_KEY_UP: - if (browser_window_key_press(gw->bw, KEY_UP) == false) + if (browser_window_key_press(gw->bw, + KEY_UP) == false) widget_scroll_y(gw, -100, false); break; case NSFB_KEY_DOWN: - if (browser_window_key_press(gw->bw, KEY_DOWN) == false) + if (browser_window_key_press(gw->bw, + KEY_DOWN) == false) widget_scroll_y(gw, 100, false); break; case NSFB_KEY_RSHIFT: - modifier |= 1; + modifier |= FBTK_MOD_RSHIFT; break; case NSFB_KEY_LSHIFT: - modifier |= 1<<1; + modifier |= FBTK_MOD_LSHIFT; + break; + + case NSFB_KEY_RCTRL: + modifier |= FBTK_MOD_RCTRL; + break; + + case NSFB_KEY_LCTRL: + modifier |= FBTK_MOD_LCTRL; break; default: @@ -747,11 +799,19 @@ fb_browser_window_input(fbtk_widget_t *widget, fbtk_callback_info *cbi) case NSFB_EVENT_KEY_UP: switch (cbi->event->value.keycode) { case NSFB_KEY_RSHIFT: - modifier &= ~1; + modifier &= ~FBTK_MOD_RSHIFT; break; case NSFB_KEY_LSHIFT: - modifier &= ~(1<<1); + modifier &= ~FBTK_MOD_LSHIFT; + break; + + case NSFB_KEY_RCTRL: + modifier &= ~FBTK_MOD_RCTRL; + break; + + case NSFB_KEY_LCTRL: + modifier &= ~FBTK_MOD_LCTRL; break; default: |