diff options
Diffstat (limited to 'config.def.h')
| -rw-r--r-- | config.def.h | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/config.def.h b/config.def.h index 28cb8f2..412ce46 100644 --- a/config.def.h +++ b/config.def.h @@ -68,26 +68,35 @@ static void _kbd_tabopen(Cinnamon* cinnamon, void* arg) { static void _kbd_scroll(Cinnamon* cinnamon, void* arg) { GtkWidget *webview = gtk_notebook_get_nth_page(GTK_NOTEBOOK(cinnamon->notebook), gtk_notebook_get_current_page(GTK_NOTEBOOK(cinnamon->notebook))); - const char* js; + guint keyval; + if (strcmp((const char*)arg, "left") == 0) { - js = "window.scrollBy(-100, 0);"; + keyval = GDK_KEY_Left; } else if (strcmp((const char*)arg, "right") == 0) { - js = "window.scrollBy(100, 0);"; + keyval = GDK_KEY_Right; } else if (strcmp((const char*)arg, "up") == 0) { - js = "window.scrollBy(0, -100);"; + keyval = GDK_KEY_Up; } else if (strcmp((const char*)arg, "down") == 0) { - js = "window.scrollBy(0, 100);"; + keyval = GDK_KEY_Down; } else { - js = "alert(\"an unexpected error occurred in the scroll handler\");"; + return; + } + + // create a GdkEvent with actual hardware keycode so that the webview accepts it :) + GdkEvent *event = gdk_event_new(GDK_KEY_PRESS); + event->key.keyval = keyval; + event->key.window = g_object_ref(gtk_widget_get_window(GTK_WIDGET(webview))); + + GdkKeymapKey *keys; + gint n_keys; + if (gdk_keymap_get_entries_for_keyval(gdk_keymap_get_default(), keyval, &keys, &n_keys)) { + event->key.hardware_keycode = keys[0].keycode; + g_free(keys); } - /* some distros ship older versions of webkit2gtk-4.1, use the deprecated run_javascript api to ensure compatibility */ - /* this entire scroll mechanism is scuffed, first of all, i should have abstracted that in main.c, second of all, we're using JS apis of all things just to scroll T_T */ - /* this code sucks, - * you know it, - * i know it. - * call me an idiot later and just use the browser. */ - webkit_web_view_run_javascript(WEBKIT_WEB_VIEW(webview), js, NULL, NULL, NULL); + gboolean return_val; + g_signal_emit_by_name(webview, "key-press-event", &event->key, &return_val); + gdk_event_free(event); } static void _kbd_tabsel(Cinnamon* cinnamon, void* arg) { |
