From f8ce68a83fa5133671cdd2fdde9e7a3bdeb82906 Mon Sep 17 00:00:00 2001 From: Rob Date: Tue, 17 Nov 2009 20:07:26 +0100 Subject: better utf-8 handling with KEY_PRESS/RELEASE --- events.c | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/events.c b/events.c index 965988d..238441e 100644 --- a/events.c +++ b/events.c @@ -180,23 +180,26 @@ send_event(int type, const gchar *details, const gchar *custom_event) { /* Transform gdk key events to our own events */ void key_to_event(guint keyval, gint mode) { - char byte[2] = {0, 0}; - gchar *utf_conv = NULL; + gchar ucs[7]; + gint ulen; + guint32 ukval = gdk_keyval_to_unicode(keyval); - /* check for Latin-1 characters (1:1 mapping) */ - if ((keyval > 0x0020 && keyval <= 0x007e) || - (keyval >= 0x0080 && keyval <= 0x00ff)) { - byte[0] = (char) keyval; - - /* convert to utf-8 */ - utf_conv = g_convert(byte, -1, "UTF-8", "ISO-8859-1", NULL, NULL, NULL); + /* check for printable unicode char */ + /* TODO: Pass the keyvals through a GtkIMContext so that + * we also get combining chars right + */ + if(ukval) { + ulen = g_unichar_to_utf8(ukval, ucs); + ucs[ulen] = 0; - send_event(mode == GDK_KEY_PRESS ? KEY_PRESS : KEY_RELEASE, utf_conv ? utf_conv : byte, NULL); - g_free(utf_conv); + send_event(mode == GDK_KEY_PRESS ? KEY_PRESS : KEY_RELEASE, + ucs, NULL); } - else + /* send keysym for non-printable chars */ + else { send_event(mode == GDK_KEY_PRESS ? KEY_PRESS : KEY_RELEASE, gdk_keyval_name(keyval), NULL); + } } -- cgit v1.2.3 From a84e3b16afb944ca11582ace8e5a6698cff35e18 Mon Sep 17 00:00:00 2001 From: Rob Date: Wed, 18 Nov 2009 11:58:51 +0100 Subject: fix in key press/release --- events.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/events.c b/events.c index 238441e..99e7dcb 100644 --- a/events.c +++ b/events.c @@ -188,7 +188,7 @@ key_to_event(guint keyval, gint mode) { /* TODO: Pass the keyvals through a GtkIMContext so that * we also get combining chars right */ - if(ukval) { + if(g_unichar_isgraph(ukval)) { ulen = g_unichar_to_utf8(ukval, ucs); ucs[ulen] = 0; -- cgit v1.2.3 From 492c7338e5fc88c9868295b455916da054abf5d0 Mon Sep 17 00:00:00 2001 From: Rob Date: Thu, 19 Nov 2009 14:09:08 +0100 Subject: added search_clear command --- README | 2 ++ uzbl-core.c | 14 ++++++++++++++ uzbl-core.h | 3 +++ 3 files changed, 19 insertions(+) diff --git a/README b/README index e3e22ea..28aa5b4 100644 --- a/README +++ b/README @@ -144,6 +144,8 @@ The following commands are recognized: * `search ` * `search_reverse ` - search with no string will search for the next/previous occurrence of the string previously searched for +* `search_clear` + - unmark and clear the search string * `toggle_insert_mode ` TODO new plugin based syntax - if the optional state is 0, disable insert mode. If 1, enable insert mode. * `dump_config` diff --git a/uzbl-core.c b/uzbl-core.c index be2ce75..2f808b5 100644 --- a/uzbl-core.c +++ b/uzbl-core.c @@ -630,6 +630,7 @@ struct {const char *key; CommandInfo value;} cmdlist[] = { "exit", {close_uzbl, 0} }, { "search", {search_forward_text, TRUE} }, { "search_reverse", {search_reverse_text, TRUE} }, + { "search_clear", {search_clear, TRUE} }, { "dehilight", {dehilight, 0} }, { "set", {set_var, TRUE} }, { "dump_config", {act_dump_config, 0} }, @@ -1094,6 +1095,7 @@ search_text (WebKitWebView *page, GArray *argv, const gboolean forward) { } } + if (uzbl.state.searchtx) { if (uzbl.state.verbose) printf ("Searching: %s\n", uzbl.state.searchtx); @@ -1102,6 +1104,18 @@ search_text (WebKitWebView *page, GArray *argv, const gboolean forward) { } } +void +search_clear(WebKitWebView *page, GArray *argv, GString *result) { + (void) argv; + (void) result; + + webkit_web_view_unmark_text_matches (page); + if(uzbl.state.searchtx) { + g_free(uzbl.state.searchtx); + uzbl.state.searchtx = NULL; + } +} + void search_forward_text (WebKitWebView *page, GArray *argv, GString *result) { (void) result; diff --git a/uzbl-core.h b/uzbl-core.h index 5c291e5..82137e3 100644 --- a/uzbl-core.h +++ b/uzbl-core.h @@ -373,6 +373,9 @@ search_forward_text (WebKitWebView *page, GArray *argv, GString *result); void search_reverse_text (WebKitWebView *page, GArray *argv, GString *result); +void +search_clear(WebKitWebView *page, GArray *argv, GString *result); + void dehilight (WebKitWebView *page, GArray *argv, GString *result); -- cgit v1.2.3