ui/server/toolkit.c

Mon, 08 Dec 2025 18:11:54 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Mon, 08 Dec 2025 18:11:54 +0100
changeset 981
1d47e71f26b6
parent 956
4cdfbfd2038d
child 982
9102a53c5385
permissions
-rw-r--r--

add server base structs

/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 *
 * Copyright 2025 Olaf Wintermann. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright
 *      notice, this list of conditions and the following disclaimer.
 *
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>

#include "toolkit.h"

#include "../common/message.h"
#include "../common/threadpool.h"
#include "../common/app.h"

static const char *ui_app_name;

static UiMessageHandler *message_handler;

static ui_callback onstartup;
static void *onstartupdata;

static UiQueue *event_queue;

void ui_init(const char *appname, int argc, char **argv) {
    ui_app_name = appname;
    
    message_handler = uic_simple_msg_handler(STDIN_FILENO, STDOUT_FILENO, ui_server_message_received);
}

const char* ui_appname() {
    return ui_app_name;
}

void ui_add_styledata(const char *styledata, int len) {
    // NOOP
}


void ui_server_message_received(cxstring msg) {
    
}

void ui_main(void) {
    event_queue = ui_queue_create();
    UiServerEvent *event = NULL;
    while((event = ui_queue_get_wait(event_queue)) != NULL) {
        if(event->callback) {
            event->callback(&event->event, event->userdata);
        }
    }
    ui_queue_free(event_queue);
}

typedef struct CallMain {
    UiServerEvent event;
    ui_threadfunc func;
    void *data;
} CallMain;

static void mainthr(UiServerEventData *event, void *userdata) {
    CallMain *c = userdata;
    if(c->func) {
        c->func(c->data);
    }
    free(c);
}

void ui_call_mainthread(ui_threadfunc tf, void* td) {
    CallMain *c = malloc(sizeof(CallMain));
    c->func = tf;
    c->data = td;
    ui_queue_put(event_queue, c);
}

mercurial