ui/gtk/window.c

branch
newapi
changeset 278
a8faf8757450
parent 276
376921880a7f
child 279
2ad83650d797
--- a/ui/gtk/window.c	Sun Apr 07 11:26:38 2024 +0200
+++ b/ui/gtk/window.c	Sun Apr 07 12:36:07 2024 +0200
@@ -155,6 +155,76 @@
     return create_window(title, window_data, TRUE);
 }
 
+static void ui_dialog_response (GtkDialog* self, gint response_id, gpointer user_data) {
+    UiEventData *data = user_data;
+    UiEvent evt;
+    evt.obj = data->obj;
+    evt.document = evt.obj->ctx->document;
+    evt.window = evt.obj->window;
+    evt.eventdata = NULL;
+    evt.intval = 0;
+    
+    if(data->customdata) {
+        GtkWidget *entry = data->customdata;
+        evt.eventdata = (void*)gtk_entry_get_text(GTK_ENTRY(entry));
+        
+    }
+    
+    if(response_id == 1 || response_id == 2) {
+        evt.intval = response_id;
+    }
+    
+    
+    if(data->callback) {
+        data->callback(&evt, data->userdata);
+    }
+    
+    gtk_widget_destroy(GTK_WIDGET(self));
+}
+
+void ui_dialog_create(UiObject *parent, UiDialogArgs args) {
+    GtkDialog *dialog = GTK_DIALOG(gtk_dialog_new());
+    GtkWidget *dialog_w = GTK_WIDGET(dialog);
+    if(args.title) {
+        gtk_window_set_title(GTK_WINDOW(dialog), args.title);
+    }
+    if(args.button1_label) {
+        gtk_dialog_add_button(dialog, args.button1_label, 1);
+    }
+    if(args.button2_label) {
+        gtk_dialog_add_button(dialog, args.button2_label, 2);
+    }
+    if(args.closebutton_label) {
+        gtk_dialog_add_button(dialog, args.closebutton_label, 0);
+    }
+    
+    GtkWidget *content_area = gtk_dialog_get_content_area(dialog);
+    if(args.content) {
+        GtkWidget *label = gtk_label_new(args.content);
+        gtk_container_add(GTK_CONTAINER(content_area), label);
+    }
+    
+    GtkWidget *textfield = NULL;
+    if(args.input) {
+        textfield = gtk_entry_new();
+        gtk_container_add(GTK_CONTAINER(content_area), textfield);
+    }
+    
+    UiEventData *event = malloc(sizeof(UiEventData));
+    event->obj = parent;
+    event->callback = args.result;
+    event->userdata = args.resultdata;
+    event->value = 0;
+    event->customdata = textfield;
+    
+    g_signal_connect(dialog_w,
+                           "response",
+                           G_CALLBACK(ui_dialog_response),
+                           event);
+    
+    gtk_widget_show_all(GTK_WIDGET(dialog_w));
+}
+
 static char* ui_gtkfilechooser(UiObject *obj, GtkFileChooserAction action) {
     char *button;
     char *title;

mercurial