aboutsummaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'main.c')
-rw-r--r--main.c92
1 files changed, 92 insertions, 0 deletions
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 <webkit2/webkit2.h>
+#include <gtk/gtk.h>
+#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;
+}
+