From e85467ec272826bed113c29042ea4db355b851a3 Mon Sep 17 00:00:00 2001 From: Shav Kinderlehrer Date: Fri, 8 May 2026 02:47:47 -0400 Subject: Initial commit --- main.c | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 main.c (limited to 'main.c') 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 +#include +#include + +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; +} -- cgit v1.2.3