aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config.def.h35
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) {