merge

6 days ago

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Wed, 26 Mar 2025 20:42:02 +0100 (6 days ago)
changeset 517
ac867877999e
parent 516
4b31c74666d7 (current diff)
parent 513
a4e0ef98a8b4 (diff)
child 518
45ed276ba7a4

merge

application/main.c file | annotate | diff | comparison | revisions
--- a/application/main.c	Wed Mar 26 20:39:04 2025 +0100
+++ b/application/main.c	Wed Mar 26 20:42:02 2025 +0100
@@ -781,8 +781,18 @@
 
 #ifdef UI_WIN32
 
-int main(int argc, char **argv) {
+void application_startup(UiEvent *event, void *data) {
+
+}
+
+int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) {
+    ui_init("app1", 0, NULL);
+    ui_onstartup(application_startup, NULL);
+
+    ui_main();
+
     return 0;
 }
 
 #endif
+
--- a/ui/Makefile	Wed Mar 26 20:39:04 2025 +0100
+++ b/ui/Makefile	Wed Mar 26 20:42:02 2025 +0100
@@ -33,7 +33,7 @@
 
 include common/objs.mk
 
-UI_LIB = ../build/lib/libuitk$(LIB_EXT)
+UI_LIB = ../build/lib/$(LIB_PREFIX)uitk$(LIB_EXT)
 
 include $(TOOLKIT)/objs.mk
 OBJ = $(TOOLKITOBJS) $(COMMONOBJS)
--- a/ui/common/properties.c	Wed Mar 26 20:39:04 2025 +0100
+++ b/ui/common/properties.c	Wed Mar 26 20:42:02 2025 +0100
@@ -116,7 +116,7 @@
 
 static int ui_mkdir(char *path) {
 #ifdef _WIN32
-    return mkdir(path);
+    return _mkdir(path);
 #else
     return mkdir(path, S_IRWXU);
 #endif
--- a/ui/win32/toolkit.c	Wed Mar 26 20:39:04 2025 +0100
+++ b/ui/win32/toolkit.c	Wed Mar 26 20:42:02 2025 +0100
@@ -26,27 +26,14 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
+#include "toolkit.h"
+#include "Windows.h"
+
+#include "../common/properties.h"
+
 #include <stdio.h>
 #include <stdlib.h>
-#include <unistd.h>
-#include <pthread.h>
 
-#include "toolkit.h"
-#include "toolbar.h"
-#include "container.h"
-#include "stock.h"
-#include "../common/menu.h"
-#include "../common/toolbar.h"
-#include "../common/document.h"
-#include "../common/properties.h"
-#include <cx/buffer.h>
-
-#include <X11/Intrinsic.h>
-#include <Xm/CutPaste.h>
-
-static XtAppContext app;
-static Display *display;
-static Widget active_window;
 static const char *application_name;
 
 static ui_callback   startup_func;
@@ -56,74 +43,14 @@
 static ui_callback   exit_func;
 void                 *exit_data;
 
-static ui_callback appclose_fnc;
-static void *appclose_udata;
-
-static int is_toplevel_realized = 0;
-
-int event_pipe[2];
-
-
-static String fallback[] = {
-    	//"*fontList: -dt-interface system-medium-r-normal-s*utf*:",                 
-        "*renderTable: rt",
-        "*rt*fontType: FONT_IS_XFT",
-        "*rt*fontName: Sans",
-        "*rt*fontSize: 11",
-        
-        "*progresss_spinner*renderTable*fontType: FONT_IS_FONT",
-        "*progresss_spinner*renderTable*fontName: Cursor",
-        
-        "*window_frame.shadowType: SHADOW_ETCHED_OUT",
-        "*window_frame.shadowThickness: 1",
-        "*togglebutton.shadowThickness: 1",
-        "*togglebutton.highlightThickness: 2",
-        
-        "*ui_test.background: red",
-	NULL
-};
-
-void input_proc(XtPointer data, int *source, XtInputId *iid) {
-    void *ptr;
-    read(event_pipe[0], &ptr, sizeof(void*));
-}
-
-void ui_init(const char *appname, int argc, char **argv) { 
-    application_name = appname;
-    uic_init_global_context();
-    
-    XtToolkitInitialize();
-    XtSetLanguageProc(NULL, NULL, NULL);
-    app = XtCreateApplicationContext();
-    XtAppSetFallbackResources(app, fallback);
-    
-    display =  XtOpenDisplay(app, NULL, appname, appname, NULL, 0, &argc, argv);
-    
-    uic_docmgr_init();
-    uic_menu_init();
-    uic_toolbar_init();
-    uic_load_app_properties();
-    
-    if(pipe(event_pipe)) {
-        fprintf(stderr, "UiError: Cannot create event pipe\n");
-        exit(-1);
-    }
-    XtAppAddInput(
-            app,
-            event_pipe[0],
-            (XtPointer)XtInputReadMask,
-            input_proc,
-            NULL);
+void ui_init(const char *appname, int argc, char **argv) {
+      application_name = appname;
 }
 
 const char* ui_appname() {
     return application_name;
 }
 
-Display* ui_motif_get_display() {
-    return display;
-}
-
 void ui_onstartup(ui_callback f, void *userdata) {
     startup_func = f;
     startup_data = userdata;
@@ -143,192 +70,16 @@
     if(startup_func) {
         startup_func(NULL, startup_data);
     }
-    XtAppMainLoop(app);
+
+    // event loop
+    MSG msg;
+    while (GetMessage(&msg, NULL, 0, 0)) {
+        TranslateMessage(&msg);
+        DispatchMessage(&msg);
+    }
+
     if(exit_func) {
         exit_func(NULL, exit_data);
     }
     uic_store_app_properties();
 }
-
-void ui_exit_mainloop() {
-    XtAppSetExitFlag(app);
-}
-
-void ui_secondary_event_loop(int *loop) {
-    while(*loop && !XtAppGetExitFlag(app)) {
-        XEvent event;
-        XtAppNextEvent(app, &event);
-        XtDispatchEvent(&event);
-    }
-}
-
-void ui_show(UiObject *obj) {
-    uic_check_group_widgets(obj->ctx);
-    if(!XtIsRealized(obj->widget)) {
-        XtRealizeWidget(obj->widget);
-        obj->ref++;
-    }
-}
-
-void ui_close(UiObject *obj) {
-    
-}
-
-
-void ui_set_enabled(UIWIDGET widget, int enabled) {
-    XtSetSensitive(widget, enabled);
-}
-
-void ui_set_show_all(UIWIDGET widget, int value) {
-    if(!value) {
-        XtUnmanageChild(widget);
-    }
-}
-
-void ui_set_visible(UIWIDGET widget, int visible) {
-    if(visible) {
-        XtManageChild(widget);
-    } else {
-        XtUnmanageChild(widget);
-    }
-}
-
-static Boolean ui_job_finished(void *data) {
-    UiJob *job = data;
-    if(job->finish_callback) {
-        UiEvent event;
-        event.obj = job->obj;
-        event.window = job->obj->window;
-        event.document = job->obj->ctx->document;
-        event.intval = 0;
-        event.eventdata = NULL;
-        job->finish_callback(&event, job->finish_data);
-    }
-    free(job);
-    return TRUE;
-}
-
-static void* ui_jobthread(void *data) {
-    UiJob *job = data;
-    int result = job->job_func(job->job_data);
-    if(!result) {
-        write(event_pipe[1], &job, sizeof(void*)); // hack
-        XtAppAddWorkProc(app, ui_job_finished, job);
-        
-    }
-    return NULL;
-}
-
-void ui_job(UiObject *obj, ui_threadfunc tf, void *td, ui_callback f, void *fd) {
-    UiJob *job = malloc(sizeof(UiJob));
-    job->obj = obj;
-    job->job_func = tf;
-    job->job_data = td;
-    job->finish_callback = f;
-    job->finish_data = fd;
-    pthread_t pid;
-    pthread_create(&pid, NULL, ui_jobthread, job);
-}
-
-void ui_clipboard_set(char *str) {
-    int length = strlen(str) + 1;
-    
-    Display *dp = XtDisplayOfObject(active_window);
-    Window window = XtWindowOfObject(active_window);
-    
-    XmString label = XmStringCreateLocalized("toolkit_clipboard");
-    long id = 0;
-    
-    while(XmClipboardStartCopy(
-            dp,
-            window,
-            label,
-            CurrentTime,
-            NULL,
-            NULL,
-            &id) == ClipboardLocked);
-    XmStringFree(label);
-    
-    while(XmClipboardCopy(
-            dp,
-            window,
-            id,
-            "STRING",
-            str, 
-            length,
-            1,
-            NULL) == ClipboardLocked);
-    
-    while(XmClipboardEndCopy(dp, window, id) == ClipboardLocked);
-}
-
-char* ui_clipboard_get() {
-    Display *dp = XtDisplayOfObject(active_window);
-    Window window = XtWindowOfObject(active_window);
-    
-    long id;
-    size_t size = 128;
-    char *buf = malloc(size);
-    
-    int r;
-    for(;;) {
-        r = XmClipboardRetrieve(dp, window, "STRING", buf, size, NULL, &id);
-        if(r == ClipboardSuccess) {
-            break;
-        } else if(r == ClipboardTruncate) {
-            size *= 2;
-            buf = realloc(buf, size);
-        } else if(r == ClipboardNoData) {
-            free(buf);
-            buf = NULL;
-            break;
-        }
-    }
-    
-    return buf;
-}
-
-void ui_set_active_window(Widget w) {
-    active_window = w;
-}
-
-Widget ui_get_active_window() {
-    return active_window;
-}
-
-/*
- * doesn't work with gnome anymore
- */
-void ui_window_dark_theme(Display *dp, Window window) {
-    Atom atom = XInternAtom(dp, "_GTK_THEME_VARIANT", False);
-    Atom type = XInternAtom(dp, "UTF8_STRING", False);
-    XChangeProperty(
-            dp, 
-            window, 
-            atom,
-            type,
-            8,
-            PropModeReplace,
-            (const unsigned char*)"dark",
-            4);
-}
-
-void ui_destroy_eventdata(Widget w, XtPointer data, XtPointer d) {
-    free(data);
-}
-
-void ui_set_widget_groups(UiContext *ctx, Widget widget, const int *groups) {
-    if(!groups) {
-        return;
-    }
-    size_t ngroups = uic_group_array_size(groups);
-    ui_set_widget_ngroups(ctx, widget, groups, ngroups);
-}
-
-void ui_set_widget_ngroups(UiContext *ctx, Widget widget, const int *groups, size_t ngroups) {
-    if(ngroups > 0) {
-        uic_add_group_widget_i(ctx, widget, (ui_enablefunc)ui_set_enabled, groups, ngroups);
-        ui_set_enabled(widget, FALSE);
-    }
-}
-

mercurial