aboutsummaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'main.c')
-rw-r--r--main.c81
1 files changed, 81 insertions, 0 deletions
diff --git a/main.c b/main.c
new file mode 100644
index 0000000..0d71046
--- /dev/null
+++ b/main.c
@@ -0,0 +1,81 @@
+#include "gdk/gdk.h"
+#include "gio/gio.h"
+#include "glib-object.h"
+#include "gtk/gtkcssprovider.h"
+#include <gtk/gtk.h>
+#include <gtk4-layer-shell/gtk4-layer-shell.h>
+#include <libguile.h>
+
+static void setup_window_styles(GtkWindow *window) {
+ GtkCssProvider *css_provider = gtk_css_provider_new();
+ gtk_css_provider_load_from_resource(css_provider,
+ "/ski/frog/assistant/window.css");
+
+ gtk_style_context_add_provider_for_display(
+ gdk_display_get_default(), GTK_STYLE_PROVIDER(css_provider),
+ GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+}
+
+static gboolean on_escape_key_pressed(GtkEventControllerKey *controller, guint keyval,
+ guint keycode, GdkModifierType state,
+ gpointer user_data) {
+ GtkWindow *window = GTK_WINDOW(user_data);
+ if (keyval == GDK_KEY_Escape) {
+ gtk_window_close(window);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static void setup_close_on_escape(GtkWindow *window) {
+ GtkEventController *controller = gtk_event_controller_key_new();
+ g_signal_connect(controller, "key-pressed", G_CALLBACK(on_escape_key_pressed),
+ window);
+ gtk_widget_add_controller(GTK_WIDGET(window), controller);
+}
+
+static void on_submit(GtkWidget *widget, gpointer data) {
+ GtkEntry *entry = GTK_ENTRY(data);
+ const char *text = gtk_editable_get_text(GTK_EDITABLE(entry));
+ g_print("Got: %s\n", text);
+}
+
+static void activate(GtkApplication *app, gpointer user_data) {
+ GtkWidget *window = gtk_application_window_new(app);
+
+ gtk_layer_init_for_window(GTK_WINDOW(window));
+ gtk_layer_set_layer(GTK_WINDOW(window), GTK_LAYER_SHELL_LAYER_OVERLAY);
+ gtk_layer_set_keyboard_mode(GTK_WINDOW(window),
+ GTK_LAYER_SHELL_KEYBOARD_MODE_EXCLUSIVE);
+
+ gtk_window_set_decorated(GTK_WINDOW(window), FALSE);
+
+ setup_window_styles(GTK_WINDOW(window));
+ setup_close_on_escape(GTK_WINDOW(window));
+
+ GtkWidget *hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
+ gtk_widget_set_name(hbox, "prompt-box");
+
+ GtkWidget *entry = gtk_entry_new();
+ GtkWidget *submit_button = gtk_button_new_from_icon_name("send-to-symbolic");
+ g_signal_connect(submit_button, "clicked", G_CALLBACK(on_submit), entry);
+ g_signal_connect(entry, "activate", G_CALLBACK(on_submit), entry);
+
+ gtk_box_append(GTK_BOX(hbox), entry);
+ gtk_box_append(GTK_BOX(hbox), submit_button);
+
+ gtk_window_set_child(GTK_WINDOW(window), hbox);
+
+ gtk_window_present(GTK_WINDOW(window));
+}
+
+int main(int argc, char *argv[]) {
+ GtkApplication *app =
+ gtk_application_new("ski.frog.assistant", G_APPLICATION_DEFAULT_FLAGS);
+ g_signal_connect(app, "activate", G_CALLBACK(activate), NULL);
+
+ int status = g_application_run(G_APPLICATION(app), argc, argv);
+ g_object_unref(app);
+
+ return status;
+}