diff options
| author | Michael Forney <mforney@mforney.org> | 2016-12-23 15:32:20 -0800 |
|---|---|---|
| committer | Michael Forney <mforney@mforney.org> | 2016-12-29 23:29:18 -0800 |
| commit | e7181404bf50baf29e3a3d9f0e9ebe8a97566316 (patch) | |
| tree | 2ef48628d13ee934f9d43a37f1e4d58c6bb46ca1 /pkg/netsurf/patch | |
| parent | 5084e84171fc00de2d65abd61e55577cd1fe1bff (diff) | |
Add netsurf 3.6
{nsgenbind,webidl}-{lexer,parser}.{c,h} were generated using flex and bison on
unmodified 0.4 sources.
Diffstat (limited to 'pkg/netsurf/patch')
5 files changed, 835 insertions, 0 deletions
diff --git a/pkg/netsurf/patch/0001-Remove-non-reproducible-info-from-about-page.patch b/pkg/netsurf/patch/0001-Remove-non-reproducible-info-from-about-page.patch new file mode 100644 index 00000000..98663d3a --- /dev/null +++ b/pkg/netsurf/patch/0001-Remove-non-reproducible-info-from-about-page.patch @@ -0,0 +1,40 @@ +From ba5389200ff60bb5494efe503f1f1fc165383a85 Mon Sep 17 00:00:00 2001 +From: Michael Forney <mforney@mforney.org> +Date: Fri, 23 Dec 2016 14:41:52 -0800 +Subject: [PATCH] Remove non-reproducible info from about page + +--- + content/fetchers/about.c | 17 ----------------- + 1 file changed, 17 deletions(-) + +diff --git a/content/fetchers/about.c b/content/fetchers/about.c +index 4d14020b0..aff21c81a 100644 +--- a/content/fetchers/about.c ++++ b/content/fetchers/about.c +@@ -477,23 +477,6 @@ static bool fetch_about_testament_handler(struct fetch_about_context *ctx) + if (fetch_about_send_callback(&msg, ctx)) + goto fetch_about_testament_handler_aborted; + +- +- slen = snprintf(buffer, sizeof buffer, +- "Built by %s (%s) from %s at revision %s on %s\n\n", +- GECOS, USERNAME, WT_BRANCHPATH, WT_REVID, WT_COMPILEDATE); +- +- msg.data.header_or_data.len = slen; +- if (fetch_about_send_callback(&msg, ctx)) +- goto fetch_about_testament_handler_aborted; +- +- slen = snprintf(buffer, sizeof buffer, +- "Built on %s in %s\n\n", +- WT_HOSTNAME, WT_ROOT); +- +- msg.data.header_or_data.len = slen; +- if (fetch_about_send_callback(&msg, ctx)) +- goto fetch_about_testament_handler_aborted; +- + if (WT_MODIFIED > 0) { + slen = snprintf(buffer, sizeof buffer, + "Working tree has %d modification%s\n\n", +-- +2.11.0 + diff --git a/pkg/netsurf/patch/0002-framebuffer-Set-default-backend-to-wayland.patch b/pkg/netsurf/patch/0002-framebuffer-Set-default-backend-to-wayland.patch new file mode 100644 index 00000000..4b63ac8e --- /dev/null +++ b/pkg/netsurf/patch/0002-framebuffer-Set-default-backend-to-wayland.patch @@ -0,0 +1,25 @@ +From ecd460198f101721260d770a6dcc52922f643a62 Mon Sep 17 00:00:00 2001 +From: Michael Forney <mforney@mforney.org> +Date: Fri, 23 Dec 2016 15:13:31 -0800 +Subject: [PATCH] framebuffer: Set default backend to wayland + +--- + frontends/framebuffer/gui.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/frontends/framebuffer/gui.c b/frontends/framebuffer/gui.c +index 4d4c7334f..2e819e6fa 100644 +--- a/frontends/framebuffer/gui.c ++++ b/frontends/framebuffer/gui.c +@@ -466,7 +466,7 @@ process_cmdline(int argc, char** argv) + + LOG("argc %d, argv %p", argc, argv); + +- fename = "sdl"; ++ fename = "wayland"; + febpp = 32; + + fewidth = nsoption_int(window_width); +-- +2.11.0 + diff --git a/pkg/netsurf/patch/0003-framebuffer-Fix-cookie-defaults.patch b/pkg/netsurf/patch/0003-framebuffer-Fix-cookie-defaults.patch new file mode 100644 index 00000000..17bc12f5 --- /dev/null +++ b/pkg/netsurf/patch/0003-framebuffer-Fix-cookie-defaults.patch @@ -0,0 +1,100 @@ +From 8a15a5505db85870f340c61fea1db3da16fde039 Mon Sep 17 00:00:00 2001 +From: Michael Forney <mforney@mforney.org> +Date: Sat, 24 Dec 2016 16:57:34 -0800 +Subject: [PATCH] framebuffer: Fix cookie defaults + +--- + frontends/framebuffer/gui.c | 48 +++++++++++++++++++++++++++++++++++++++++++-- + 1 file changed, 46 insertions(+), 2 deletions(-) + +diff --git a/frontends/framebuffer/gui.c b/frontends/framebuffer/gui.c +index 2e819e6fa..e176ac9e4 100644 +--- a/frontends/framebuffer/gui.c ++++ b/frontends/framebuffer/gui.c +@@ -31,6 +31,7 @@ + + #include "utils/utils.h" + #include "utils/nsoption.h" ++#include "utils/file.h" + #include "utils/filepath.h" + #include "utils/log.h" + #include "utils/messages.h" +@@ -61,6 +62,7 @@ + fbtk_widget_t *fbtk; + + static bool fb_complete = false; ++static char *fb_data_home; + + struct gui_window *input_window = NULL; + struct gui_window *search_current_window; +@@ -527,9 +529,18 @@ process_cmdline(int argc, char** argv) + */ + static nserror set_defaults(struct nsoption_s *defaults) + { ++ char *fname; ++ + /* Set defaults for absent option strings */ +- nsoption_setnull_charp(cookie_file, strdup("~/.netsurf/Cookies")); +- nsoption_setnull_charp(cookie_jar, strdup("~/.netsurf/Cookies")); ++ fname = NULL; ++ netsurf_mkpath(&fname, NULL, 2, fb_data_home, "Cookies"); ++ if (fname != NULL) ++ nsoption_setnull_charp(cookie_file, fname); ++ ++ fname = NULL; ++ netsurf_mkpath(&fname, NULL, 2, fb_data_home, "Cookies"); ++ if (fname != NULL) ++ nsoption_setnull_charp(cookie_jar, fname); + + if (nsoption_charp(cookie_file) == NULL || + nsoption_charp(cookie_jar) == NULL) { +@@ -2076,6 +2087,34 @@ static struct gui_misc_table framebuffer_misc_table = { + .quit = gui_quit, + }; + ++static nserror get_data_home(char **data_home_out) ++{ ++ nserror ret; ++ char *xdg_data_home, *data_home, *home; ++ ++ xdg_data_home = getenv("XDG_DATA_HOME"); ++ if ((xdg_data_home == NULL) || (*xdg_data_home == '\0')) { ++ home = getenv("HOME"); ++ if (home == NULL) ++ return NSERROR_NOT_DIRECTORY; ++ ret = netsurf_mkpath(&data_home, NULL, 5, home, ".local", "share", "netsurf", "/"); ++ } else { ++ ret = netsurf_mkpath(&data_home, NULL, 3, xdg_data_home, "netsurf", "/"); ++ } ++ if (ret != NSERROR_OK) ++ return ret; ++ ++ ret = netsurf_mkdir_all(data_home); ++ if (ret != NSERROR_OK) { ++ free(data_home); ++ return ret; ++ } ++ data_home[strlen(data_home) - 1] = 0; ++ *data_home_out = data_home; ++ ++ return NSERROR_OK; ++} ++ + /** Entry point from OS. + * + * /param argc The number of arguments in the string vector. +@@ -2106,6 +2145,11 @@ main(int argc, char** argv) + die("NetSurf operation table failed registration"); + } + ++ ret = get_data_home(&fb_data_home); ++ if (ret != NSERROR_OK) { ++ die("Failed to get home data directory"); ++ } ++ + respaths = fb_init_resource(NETSURF_FB_RESPATH":"NETSURF_FB_FONTPATH); + + /* initialise logging. Not fatal if it fails but not much we +-- +2.11.0 + diff --git a/pkg/netsurf/patch/0004-framebuffer-Fix-font-layout-function-return-values.patch b/pkg/netsurf/patch/0004-framebuffer-Fix-font-layout-function-return-values.patch new file mode 100644 index 00000000..accd9cc0 --- /dev/null +++ b/pkg/netsurf/patch/0004-framebuffer-Fix-font-layout-function-return-values.patch @@ -0,0 +1,112 @@ +From 507e82825f659742b76df9179e59975b3bd55b30 Mon Sep 17 00:00:00 2001 +From: Michael Forney <mforney@mforney.org> +Date: Sun, 25 Dec 2016 00:23:34 -0800 +Subject: [PATCH] framebuffer: Fix font layout function return values + +The return type is nserror, so they should return NSERROR_OK, not true. +--- + frontends/framebuffer/font_freetype.c | 10 +++++----- + frontends/framebuffer/font_internal.c | 10 +++++----- + 2 files changed, 10 insertions(+), 10 deletions(-) + +diff --git a/frontends/framebuffer/font_freetype.c b/frontends/framebuffer/font_freetype.c +index 9235ad476..42be6d443 100644 +--- a/frontends/framebuffer/font_freetype.c ++++ b/frontends/framebuffer/font_freetype.c +@@ -445,7 +445,7 @@ fb_font_width(const plot_font_style_t *fstyle, + *width += glyph->advance.x >> 16; + } + +- return true; ++ return NSERROR_OK; + } + + +@@ -481,7 +481,7 @@ fb_font_position(const plot_font_style_t *fstyle, + *actual_x = prev_x; + + *char_offset = nxtchr; +- return true; ++ return NSERROR_OK; + } + + +@@ -494,7 +494,7 @@ fb_font_position(const plot_font_style_t *fstyle, + * \param x width available + * \param char_offset updated to offset in string of actual_x, [1..length] + * \param actual_x updated to x coordinate of character closest to x +- * \return true on success, false on error and error reported ++ * \return NSERROR_OK on success or error code on failure + * + * On exit, char_offset indicates first character after split point. + * +@@ -537,7 +537,7 @@ fb_font_split(const plot_font_style_t *fstyle, + * found a space; return previous space */ + *actual_x = last_space_x; + *char_offset = last_space_idx; +- return true; ++ return NSERROR_OK; + } + + nxtchr = utf8_next(string, length, nxtchr); +@@ -545,7 +545,7 @@ fb_font_split(const plot_font_style_t *fstyle, + + *char_offset = nxtchr; + +- return true; ++ return NSERROR_OK; + } + + static struct gui_layout_table layout_table = { +diff --git a/frontends/framebuffer/font_internal.c b/frontends/framebuffer/font_internal.c +index 9164a29db..a9054098f 100644 +--- a/frontends/framebuffer/font_internal.c ++++ b/frontends/framebuffer/font_internal.c +@@ -364,7 +364,7 @@ fb_font_width(const plot_font_style_t *fstyle, + } + + *width *= fb_get_font_size(fstyle); +- return true; ++ return NSERROR_OK; + } + + +@@ -397,7 +397,7 @@ fb_font_position(const plot_font_style_t *fstyle, + *actual_x = x_pos; + + *char_offset = nxtchr; +- return true; ++ return NSERROR_OK; + } + + +@@ -410,7 +410,7 @@ fb_font_position(const plot_font_style_t *fstyle, + * \param x width available + * \param char_offset updated to offset in string of actual_x, [1..length] + * \param actual_x updated to x coordinate of character closest to x +- * \return true on success, false on error and error reported ++ * \return NSERROR_OK on success or error code on failure + * + * On exit, char_offset indicates first character after split point. + * +@@ -455,7 +455,7 @@ fb_font_split(const plot_font_style_t *fstyle, + * found a space; return previous space */ + *actual_x = last_space_x; + *char_offset = last_space_idx; +- return true; ++ return NSERROR_OK; + } + + nxtchr = utf8_next(string, length, nxtchr); +@@ -463,7 +463,7 @@ fb_font_split(const plot_font_style_t *fstyle, + + *char_offset = nxtchr; + +- return true; ++ return NSERROR_OK; + } + + +-- +2.11.0 + diff --git a/pkg/netsurf/patch/0005-framebuffer-Use-XKB-key-events.patch b/pkg/netsurf/patch/0005-framebuffer-Use-XKB-key-events.patch new file mode 100644 index 00000000..e79e4f4c --- /dev/null +++ b/pkg/netsurf/patch/0005-framebuffer-Use-XKB-key-events.patch @@ -0,0 +1,558 @@ +From e8a794e1ee7422613be28dbe6263b5877d9bf840 Mon Sep 17 00:00:00 2001 +From: Michael Forney <mforney@mforney.org> +Date: Sun, 25 Dec 2016 14:46:31 -0800 +Subject: [PATCH] framebuffer: Use XKB key events + +--- + frontends/framebuffer/fbtk/event.c | 86 +------------ + frontends/framebuffer/fbtk/text.c | 83 ++++--------- + frontends/framebuffer/gui.c | 240 +++++++++++++++---------------------- + 3 files changed, 128 insertions(+), 281 deletions(-) + +diff --git a/frontends/framebuffer/fbtk/event.c b/frontends/framebuffer/fbtk/event.c +index a48e63809..29eed3286 100644 +--- a/frontends/framebuffer/fbtk/event.c ++++ b/frontends/framebuffer/fbtk/event.c +@@ -224,6 +224,11 @@ fbtk_event(fbtk_widget_t *root, nsfb_event_t *event, int timeout) + } + break; + ++ case NSFB_EVENT_XKB_KEY_DOWN: ++ case NSFB_EVENT_XKB_KEY_UP: ++ fbtk_input(root, event); ++ break; ++ + case NSFB_EVENT_CONTROL: + unused = true; + break; +@@ -261,87 +266,6 @@ fbtk_event(fbtk_widget_t *root, nsfb_event_t *event, int timeout) + return unused; + } + +-static int keymap[] = { +- /* 0 1 2 3 4 5 6 7 8 9 */ +- -1, -1, -1, -1, -1, -1, -1, -1, 8, 9, /* 0 - 9 */ +- -1, -1, -1, 13, -1, -1, -1, -1, -1, -1, /* 10 - 19 */ +- -1, -1, -1, -1, -1, -1, -1, 27, -1, -1, /* 20 - 29 */ +- -1, -1, ' ', '!', '"', '#', '$', -1, '&','\'', /* 30 - 39 */ +- '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', /* 40 - 49 */ +- '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', /* 50 - 59 */ +- '<', '=', '>', '?', '@', -1, -1, -1, -1, -1, /* 60 - 69 */ +- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 70 - 79 */ +- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 80 - 89 */ +- -1, '[','\\', ']', '~', '_', '`', 'a', 'b', 'c', /* 90 - 99 */ +- 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', /* 100 - 109 */ +- 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', /* 110 - 119 */ +- 'x', 'y', 'z', -1, -1, -1, -1, -1, -1, -1, /* 120 - 129 */ +-}; +- +-static int sh_keymap[] = { +- /* 0 1 2 3 4 5 6 7 8 9 */ +- -1, -1, -1, -1, -1, -1, -1, -1, 8, 9, /* 0 - 9 */ +- -1, -1, -1, 13, -1, -1, -1, -1, -1, -1, /* 10 - 19 */ +- -1, -1, -1, -1, -1, -1, -1, 27, -1, -1, /* 20 - 29 */ +- -1, -1, ' ', '!', '"', '~', '$', -1, '&', '@', /* 30 - 39 */ +- '(', ')', '*', '+', '<', '_', '>', '?', ')', '!', /* 40 - 49 */ +- '"', 243, '$', '%', '^', '&', '*', '(', ';', ':', /* 50 - 59 */ +- '<', '+', '>', '?', '@', -1, -1, -1, -1, -1, /* 60 - 69 */ +- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 70 - 79 */ +- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 80 - 89 */ +- -1, '{', '|', '}', '~', '_', 254, 'A', 'B', 'C', /* 90 - 99 */ +- 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', /* 100 - 109 */ +- 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', /* 110 - 119 */ +- 'X', 'Y', 'Z', -1, -1, -1, -1, -1, -1, -1, /* 120 - 129 */ +-}; +- +- +-/* exported function documented in fbtk.h */ +-int +-fbtk_keycode_to_ucs4(int code, fbtk_modifier_type mods) +-{ +- int ucs4 = -1; +- +- if (mods & FBTK_MOD_LSHIFT || mods & FBTK_MOD_RSHIFT) { +- if ((code >= 0) && (code < (int) NOF_ELEMENTS(sh_keymap))) +- ucs4 = sh_keymap[code]; +- +- } else if (mods == FBTK_MOD_CLEAR) { +- if ((code >= 0) && (code < (int) NOF_ELEMENTS(keymap))) +- ucs4 = keymap[code]; +- +- } else if (mods & FBTK_MOD_LCTRL || mods & FBTK_MOD_RCTRL) { +- switch (code) { +- case NSFB_KEY_a: +- ucs4 = NS_KEY_SELECT_ALL; +- break; +- +- case NSFB_KEY_c: +- ucs4 = NS_KEY_COPY_SELECTION; +- break; +- +- case NSFB_KEY_u: +- ucs4 = NS_KEY_DELETE_LINE; +- break; +- +- case NSFB_KEY_v: +- ucs4 = NS_KEY_PASTE; +- break; +- +- case NSFB_KEY_x: +- ucs4 = NS_KEY_CUT_SELECTION; +- break; +- +- case NSFB_KEY_z: +- ucs4 = NS_KEY_CLEAR_SELECTION; +- break; +- default: +- break; +- } +- } +- return ucs4; +-} +- + /* + * Local Variables: + * c-basic-offset:8 +diff --git a/frontends/framebuffer/fbtk/text.c b/frontends/framebuffer/fbtk/text.c +index 00dcba491..95333a52f 100644 +--- a/frontends/framebuffer/fbtk/text.c ++++ b/frontends/framebuffer/fbtk/text.c +@@ -26,6 +26,7 @@ + #include <libnsfb_plot.h> + #include <libnsfb_plot_util.h> + #include <libnsfb_event.h> ++#include <xkbcommon/xkbcommon.h> + + #include "utils/log.h" + #include "netsurf/browser_window.h" +@@ -287,13 +288,14 @@ fb_text_input_remove_caret_cb(fbtk_widget_t *widget) + static int + text_input(fbtk_widget_t *widget, fbtk_callback_info *cbi) + { +- int value; +- static fbtk_modifier_type modifier = FBTK_MOD_CLEAR; ++ xkb_keysym_t sym; ++ enum nsfb_mod_e mods; + char *temp; + plot_font_style_t font_style; + int fh; + int border; + bool caret_moved = false; ++ uint32_t key; + + fb_text_font_style(widget, &fh, &border, &font_style); + +@@ -305,34 +307,14 @@ text_input(fbtk_widget_t *widget, fbtk_callback_info *cbi) + return 0; + } + +- value = cbi->event->value.keycode; +- +- if (cbi->event->type != NSFB_EVENT_KEY_DOWN) { +- switch (value) { +- case NSFB_KEY_RSHIFT: +- modifier &= ~FBTK_MOD_RSHIFT; +- break; +- +- case NSFB_KEY_LSHIFT: +- modifier &= ~FBTK_MOD_LSHIFT; +- break; +- +- case NSFB_KEY_RCTRL: +- modifier &= ~FBTK_MOD_RCTRL; +- break; +- +- case NSFB_KEY_LCTRL: +- modifier &= ~FBTK_MOD_LCTRL; +- break; +- +- default: +- break; +- } ++ if (cbi->event->type != NSFB_EVENT_XKB_KEY_DOWN) + return 0; +- } + +- switch (value) { +- case NSFB_KEY_BACKSPACE: ++ sym = cbi->event->value.xkb.sym; ++ mods = cbi->event->value.xkb.mod; ++ ++ switch (sym) { ++ case XKB_KEY_BackSpace: + if (widget->u.text.idx <= 0) + break; + memmove(widget->u.text.text + widget->u.text.idx - 1, +@@ -348,13 +330,13 @@ text_input(fbtk_widget_t *widget, fbtk_callback_info *cbi) + caret_moved = true; + break; + +- case NSFB_KEY_RETURN: ++ case XKB_KEY_Return: + widget->u.text.enter(widget->u.text.pw, widget->u.text.text); + break; + +- case NSFB_KEY_RIGHT: ++ case XKB_KEY_Right: + if (widget->u.text.idx < widget->u.text.len) { +- if (modifier == FBTK_MOD_CLEAR) ++ if (mods == 0) + widget->u.text.idx++; + else + widget->u.text.idx = widget->u.text.len; +@@ -363,9 +345,9 @@ text_input(fbtk_widget_t *widget, fbtk_callback_info *cbi) + } + break; + +- case NSFB_KEY_LEFT: ++ case XKB_KEY_Left: + if (widget->u.text.idx > 0) { +- if (modifier == FBTK_MOD_CLEAR) ++ if (mods == 0) + widget->u.text.idx--; + else + widget->u.text.idx = 0; +@@ -374,34 +356,18 @@ text_input(fbtk_widget_t *widget, fbtk_callback_info *cbi) + } + break; + +- case NSFB_KEY_PAGEUP: +- case NSFB_KEY_PAGEDOWN: +- case NSFB_KEY_UP: +- case NSFB_KEY_DOWN: ++ case XKB_KEY_Page_Up: ++ case XKB_KEY_Page_Down: ++ case XKB_KEY_Up: ++ case XKB_KEY_Down: + /* Not handling any of these correctly yet, but avoid putting + * charcters in the text widget when they're pressed. */ + break; + +- case NSFB_KEY_RSHIFT: +- modifier |= FBTK_MOD_RSHIFT; +- break; +- +- case NSFB_KEY_LSHIFT: +- modifier |= FBTK_MOD_LSHIFT; +- break; +- +- case NSFB_KEY_RCTRL: +- modifier |= FBTK_MOD_RCTRL; +- break; +- +- case NSFB_KEY_LCTRL: +- modifier |= FBTK_MOD_LCTRL; +- break; +- + default: +- if (modifier & FBTK_MOD_LCTRL || modifier & FBTK_MOD_RCTRL) { ++ if (mods & NSFB_MOD_CTRL) { + /* CTRL pressed, don't enter any text */ +- if (value == NSFB_KEY_u) { ++ if (sym == XKB_KEY_u) { + /* CTRL+U: clear writable */ + widget->u.text.idx = 0; + widget->u.text.len = 0; +@@ -412,6 +378,10 @@ text_input(fbtk_widget_t *widget, fbtk_callback_info *cbi) + break; + } + ++ key = xkb_keysym_to_utf32(sym); ++ if (key == 0) ++ break; ++ + /* allow for new character and null */ + temp = realloc(widget->u.text.text, widget->u.text.len + 2); + if (temp == NULL) { +@@ -422,8 +392,7 @@ text_input(fbtk_widget_t *widget, fbtk_callback_info *cbi) + memmove(widget->u.text.text + widget->u.text.idx + 1, + widget->u.text.text + widget->u.text.idx, + widget->u.text.len - widget->u.text.idx); +- widget->u.text.text[widget->u.text.idx] = +- fbtk_keycode_to_ucs4(value, modifier); ++ widget->u.text.text[widget->u.text.idx] = key; + widget->u.text.idx++; + widget->u.text.len++; + widget->u.text.text[widget->u.text.len] = '\0'; +diff --git a/frontends/framebuffer/gui.c b/frontends/framebuffer/gui.c +index e176ac9e4..6bf5152c0 100644 +--- a/frontends/framebuffer/gui.c ++++ b/frontends/framebuffer/gui.c +@@ -28,6 +28,7 @@ + #include <libnsfb.h> + #include <libnsfb_plot.h> + #include <libnsfb_event.h> ++#include <xkbcommon/xkbcommon.h> + + #include "utils/utils.h" + #include "utils/nsoption.h" +@@ -831,170 +832,123 @@ static int + fb_browser_window_input(fbtk_widget_t *widget, fbtk_callback_info *cbi) + { + struct gui_window *gw = cbi->context; +- static fbtk_modifier_type modifier = FBTK_MOD_CLEAR; +- int ucs4 = -1; ++ xkb_keysym_t sym = cbi->event->value.xkb.sym; ++ enum nsfb_mod_e mods = cbi->event->value.xkb.mod; ++ uint32_t key; + +- LOG("got value %d", cbi->event->value.keycode); +- +- switch (cbi->event->type) { +- case NSFB_EVENT_KEY_DOWN: +- switch (cbi->event->value.keycode) { +- +- case NSFB_KEY_DELETE: +- browser_window_key_press(gw->bw, NS_KEY_DELETE_RIGHT); +- break; ++ if (cbi->event->type != NSFB_EVENT_XKB_KEY_DOWN) ++ return 0; + +- case NSFB_KEY_PAGEUP: +- if (browser_window_key_press(gw->bw, +- NS_KEY_PAGE_UP) == false) +- widget_scroll_y(gw, -fbtk_get_height( +- gw->browser), false); +- break; ++ LOG("got value %d", cbi->event->value.xkb.sym); + +- case NSFB_KEY_PAGEDOWN: +- if (browser_window_key_press(gw->bw, +- NS_KEY_PAGE_DOWN) == false) +- widget_scroll_y(gw, fbtk_get_height( +- gw->browser), false); +- break; ++ switch (sym) { ++ case XKB_KEY_Delete: ++ browser_window_key_press(gw->bw, NS_KEY_DELETE_RIGHT); ++ break; + +- case NSFB_KEY_RIGHT: +- if (modifier & FBTK_MOD_RCTRL || +- modifier & FBTK_MOD_LCTRL) { +- /* CTRL held */ +- if (browser_window_key_press(gw->bw, +- NS_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, +- NS_KEY_WORD_RIGHT) == false) +- widget_scroll_x(gw, fbtk_get_width( +- gw->browser), false); ++ case XKB_KEY_Page_Up: ++ if (browser_window_key_press(gw->bw, ++ NS_KEY_PAGE_UP) == false) ++ widget_scroll_y(gw, -fbtk_get_height( ++ gw->browser), false); ++ break; + +- } else { +- /* no modifier */ +- if (browser_window_key_press(gw->bw, +- NS_KEY_RIGHT) == false) +- widget_scroll_x(gw, 100, false); +- } +- break; ++ case XKB_KEY_Page_Down: ++ if (browser_window_key_press(gw->bw, ++ NS_KEY_PAGE_DOWN) == false) ++ widget_scroll_y(gw, fbtk_get_height( ++ gw->browser), false); ++ break; + +- case NSFB_KEY_LEFT: +- if (modifier & FBTK_MOD_RCTRL || +- modifier & FBTK_MOD_LCTRL) { +- /* CTRL held */ +- if (browser_window_key_press(gw->bw, +- NS_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, +- NS_KEY_WORD_LEFT) == false) +- widget_scroll_x(gw, -fbtk_get_width( +- gw->browser), false); ++ case XKB_KEY_Right: ++ if (mods & NSFB_MOD_CTRL) { ++ /* CTRL held */ ++ if (browser_window_key_press(gw->bw, ++ NS_KEY_LINE_END) == false) ++ widget_scroll_x(gw, INT_MAX, true); + +- } else { +- /* no modifier */ +- if (browser_window_key_press(gw->bw, +- NS_KEY_LEFT) == false) +- widget_scroll_x(gw, -100, false); +- } +- break; ++ } else if (mods & NSFB_MOD_SHIFT) { ++ /* SHIFT held */ ++ if (browser_window_key_press(gw->bw, ++ NS_KEY_WORD_RIGHT) == false) ++ widget_scroll_x(gw, fbtk_get_width( ++ gw->browser), false); + +- case NSFB_KEY_UP: ++ } else { ++ /* no modifier */ + if (browser_window_key_press(gw->bw, +- NS_KEY_UP) == false) +- widget_scroll_y(gw, -100, false); +- break; ++ NS_KEY_RIGHT) == false) ++ widget_scroll_x(gw, 100, false); ++ } ++ break; + +- case NSFB_KEY_DOWN: ++ case XKB_KEY_Left: ++ if (mods & NSFB_MOD_CTRL) { ++ /* CTRL held */ + if (browser_window_key_press(gw->bw, +- NS_KEY_DOWN) == false) +- widget_scroll_y(gw, 100, false); +- break; ++ NS_KEY_LINE_START) == false) ++ widget_scroll_x(gw, 0, true); + +- case NSFB_KEY_RSHIFT: +- modifier |= FBTK_MOD_RSHIFT; +- break; ++ } else if (mods & NSFB_MOD_SHIFT) { ++ /* SHIFT held */ ++ if (browser_window_key_press(gw->bw, ++ NS_KEY_WORD_LEFT) == false) ++ widget_scroll_x(gw, -fbtk_get_width( ++ gw->browser), false); + +- case NSFB_KEY_LSHIFT: +- modifier |= FBTK_MOD_LSHIFT; +- break; ++ } else { ++ /* no modifier */ ++ if (browser_window_key_press(gw->bw, ++ NS_KEY_LEFT) == false) ++ widget_scroll_x(gw, -100, false); ++ } ++ break; + +- case NSFB_KEY_RCTRL: +- modifier |= FBTK_MOD_RCTRL; +- break; ++ case XKB_KEY_Up: ++ if (browser_window_key_press(gw->bw, ++ NS_KEY_UP) == false) ++ widget_scroll_y(gw, -100, false); ++ break; + +- case NSFB_KEY_LCTRL: +- modifier |= FBTK_MOD_LCTRL; +- break; ++ case XKB_KEY_Down: ++ if (browser_window_key_press(gw->bw, ++ NS_KEY_DOWN) == false) ++ widget_scroll_y(gw, 100, false); ++ break; + +- case NSFB_KEY_y: +- case NSFB_KEY_z: +- if (cbi->event->value.keycode == NSFB_KEY_z && +- (modifier & FBTK_MOD_RCTRL || +- modifier & FBTK_MOD_LCTRL) && +- (modifier & FBTK_MOD_RSHIFT || +- modifier & FBTK_MOD_LSHIFT)) { +- /* Z pressed with CTRL and SHIFT held */ +- browser_window_key_press(gw->bw, NS_KEY_REDO); ++ default: ++ if (mods & NSFB_MOD_CTRL) { ++ switch (sym) { ++ case XKB_KEY_a: ++ key = NS_KEY_SELECT_ALL; + break; +- +- } else if (cbi->event->value.keycode == NSFB_KEY_z && +- (modifier & FBTK_MOD_RCTRL || +- modifier & FBTK_MOD_LCTRL)) { +- /* Z pressed with CTRL held */ +- browser_window_key_press(gw->bw, NS_KEY_UNDO); ++ case XKB_KEY_c: ++ key = NS_KEY_COPY_SELECTION; + break; +- +- } else if (cbi->event->value.keycode == NSFB_KEY_y && +- (modifier & FBTK_MOD_RCTRL || +- modifier & FBTK_MOD_LCTRL)) { +- /* Y pressed with CTRL held */ +- browser_window_key_press(gw->bw, NS_KEY_REDO); ++ case XKB_KEY_u: ++ key = NS_KEY_DELETE_LINE; ++ break; ++ case XKB_KEY_v: ++ key = NS_KEY_PASTE; ++ break; ++ case XKB_KEY_x: ++ key = NS_KEY_CUT_SELECTION; ++ break; ++ case XKB_KEY_y: ++ key = NS_KEY_REDO; ++ break; ++ case XKB_KEY_z: ++ key = mods & NSFB_MOD_SHIFT ? NS_KEY_REDO : NS_KEY_UNDO; ++ break; ++ default: ++ key = 0; + break; + } +- /* Z or Y pressed but not undo or redo; +- * Fall through to default handling */ +- +- default: +- ucs4 = fbtk_keycode_to_ucs4(cbi->event->value.keycode, +- modifier); +- if (ucs4 != -1) +- browser_window_key_press(gw->bw, ucs4); +- break; +- } +- break; +- +- case NSFB_EVENT_KEY_UP: +- switch (cbi->event->value.keycode) { +- case NSFB_KEY_RSHIFT: +- modifier &= ~FBTK_MOD_RSHIFT; +- break; +- +- case NSFB_KEY_LSHIFT: +- modifier &= ~FBTK_MOD_LSHIFT; +- break; +- +- case NSFB_KEY_RCTRL: +- modifier &= ~FBTK_MOD_RCTRL; +- break; +- +- case NSFB_KEY_LCTRL: +- modifier &= ~FBTK_MOD_LCTRL; +- break; +- +- default: +- break; + } +- break; +- +- default: ++ if (key == 0) ++ key = xkb_keysym_to_utf32(cbi->event->value.xkb.sym); ++ if (key != 0) ++ browser_window_key_press(gw->bw, key); + break; + } + +-- +2.11.0 + |
