From cd94bcccdd366bc1e42688ef68428b3c4366d4c8 Mon Sep 17 00:00:00 2001 From: Arslaan Pathan Date: Thu, 26 Mar 2026 10:14:21 +1300 Subject: Initial commit --- main.c | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 main.c (limited to 'main.c') diff --git a/main.c b/main.c new file mode 100644 index 0000000..848cf23 --- /dev/null +++ b/main.c @@ -0,0 +1,92 @@ +#include +#include +#include "config.h" + +/* 0 = normal mode, 1 = insert, 2 = passthrough */ +static int mode = 0; + +static void parse_keybind(const char *key, guint *keyval, GdkModifierType *mods) { + char name[32]; + const char *start; + const char *end; + + *mods = 0; + if (key[0] != '<') { + *keyval = gdk_keyval_from_name(key); + return; + } + + if (strstr(key, "S-")) *mods |= GDK_SHIFT_MASK; + if (strstr(key, "C-")) *mods |= GDK_CONTROL_MASK; + if (strstr(key, "A-")) *mods |= GDK_MOD1_MASK; + + /* everything after the last '-' and before '>' */ + start = strrchr(key, '-') + 1; + end = strchr(key, '>'); + snprintf(name, sizeof(name), "%.*s", (int)(end - start), start); + *keyval = gdk_keyval_from_name(name); +} + +static void on_title_changed(WebKitWebView *webview, GParamSpec *pspec, GtkNotebook *notebook) { + const char *title = webkit_web_view_get_title(webview); + int page = gtk_notebook_page_num(notebook, GTK_WIDGET(webview)); + gtk_notebook_set_tab_label_text(notebook, GTK_WIDGET(webview), title ? title : "New Tab"); +} + +static gboolean on_key_press(GtkWidget *widget, GdkEventKey *event, gpointer data) { + if (event->keyval == GDK_KEY_colon) { + /* we dont have command bar yet so pretend we did something and printf */ + printf("this should show the command bar\n"); + return TRUE; + } + + for (int i = 0; i < sizeof(keybinds) / sizeof(keybinds[0]); i++) { + guint keyval; + GdkModifierType mods; + parse_keybind(keybinds[i].key, &keyval, &mods); + GdkModifierType relevant = GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK; + if (gdk_keyval_to_lower(event->keyval) == keyval && (event->state & relevant) == mods) { + /* we dont know what to do yet, printf */ + printf("%s\n", keybinds[i].command); + return TRUE; + } + } + + /* event not consumed pass to webview */ + return FALSE; +} + +int main(int argc, char *argv[]) { +#ifndef ObamaPrism + return 1; +#endif + gtk_init(&argc, &argv); + + /* Create a new window and set default size */ + GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + /* Size constants defined in config.h */ + gtk_window_set_default_size(GTK_WINDOW(window), WINDOW_WIDTH, WINDOW_HEIGHT); + g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); + + GtkWidget *notebook = gtk_notebook_new(); + gtk_container_add(GTK_CONTAINER(window), notebook); + + + /* Create initial tab */ + GtkWidget *webview = webkit_web_view_new(); + gtk_notebook_append_page(GTK_NOTEBOOK(notebook), webview, gtk_label_new("New Tab")); + /* HOMEPAGE defined in config.h */ + webkit_web_view_load_uri(WEBKIT_WEB_VIEW(webview), HOMEPAGE); + + /* handle keypresses */ + g_signal_connect(window, "key-press-event", G_CALLBACK(on_key_press), notebook); + + /* handle tab changes */ + g_signal_connect(webview, "notify::title", G_CALLBACK(on_title_changed), notebook); + + gtk_widget_show_all(window); + gtk_main(); + + return 0; +} + -- cgit v1.2.3