ui/server/window.c

changeset 991
ab3125bd8b5f
parent 990
38a48b756d80
--- a/ui/server/window.c	Fri Dec 12 11:38:47 2025 +0100
+++ b/ui/server/window.c	Fri Dec 12 12:00:34 2025 +0100
@@ -28,17 +28,19 @@
 
 #include "window.h"
 #include "container.h"
+#include "widget.h"
 
 #include "../common/object.h"
 
 #include <cx/buffer.h>
 
-static UiObject* create_window(const char *title, UiBool simple, UiBool sidebar, UiBool splitview) {
+static UiObject* create_window(const char *title, const char *type, UiBool sidebar) {
     UiObject *obj = uic_object_new_toplevel();
     const CxAllocator *a = obj->ctx->allocator;
     
     UiWindow *window = cxZalloc(a, sizeof(UiWindow));
     window->widget.obj = ui_create_server_object(obj->ctx);
+    window->widget.type = cx_str(type);
     window->widget.children = cxLinkedListCreate(a, NULL, CX_STORE_POINTERS);
     window->widget.serialize = (ui_serialize_func)ui_window_serialize;
     window->widget.invisible = TRUE;
@@ -52,19 +54,19 @@
 }
 
 UiObject *ui_window(const char *title) {
-    return create_window(title, FALSE, FALSE, FALSE);
+    return create_window(title, "window", FALSE);
 }
 
 UiObject *ui_sidebar_window(const char *title) {
-    return create_window(title, FALSE, TRUE, FALSE);
+    return create_window(title, "sidebar_window", FALSE);
 }
 
 UiObject *ui_splitview_window(const char *title, UiBool sidebar) {
-    return create_window(title, FALSE, sidebar, TRUE);
+    return create_window(title, "splitview_window", sidebar);
 }
 
 UiObject *ui_simple_window(const char *title) {
-    return create_window(title, TRUE, FALSE, FALSE);
+    return create_window(title, "simple_window", FALSE);
 }
 
 
@@ -72,27 +74,11 @@
     CxBuffer buf;
     cxBufferInit(&buf, NULL, 1024, NULL, CX_BUFFER_AUTO_EXTEND | CX_BUFFER_FREE_CONTENTS);
     
-    cxBufferPutString(&buf, "{\"type\":");
-    switch(w->type) {
-        case UI_WINDOW_MAIN: cxBufferPutString(&buf, "\"window\""); break;
-        case UI_WINDOW_SIMPLE: cxBufferPutString(&buf, "\"simple_window\""); break;
-        case UI_WINDOW_SIDEBAR: cxBufferPutString(&buf, "\"sidebar_window\""); break;
-        case UI_WINDOW_SPLITVIEW: cxBufferPutString(&buf, "\"splitview_window\""); break;
-    }
-    
-    cxmutstr obj_id = w->widget.obj->id;
-    cxmutstr id = w->widget.id;
-    
-    cxBufferPutString(&buf, ", \"obj\":\"");
-    cxBufferWrite(obj_id.ptr, 1, obj_id.length, &buf);
-    cxBufferPutString(&buf, "\",");
-    
-    cxBufferPutString(&buf, " \"id\":\"");
-    cxBufferWrite(id.ptr, 1, id.length, &buf);
-    cxBufferPutString(&buf, "\", ");
+    cxBufferPutString(&buf, "{");
+    ui_serialize_type_obj_id(&w->widget, &buf);
     
     if(w->title.ptr) {
-        cxBufferPutString(&buf, " \"title\":\"");
+        cxBufferPutString(&buf, ",\"title\":\"");
         cxBufferWrite(w->title.ptr, 1, w->title.length, &buf);
         cxBufferPutString(&buf, "\"");
     }

mercurial