ltk

GUI toolkit for X11 (WIP)
git clone git://lumidify.org/ltk.git (fast, but not encrypted)
git clone https://lumidify.org/ltk.git (encrypted, but very slow)
git clone git://4kcetb7mo7hj6grozzybxtotsub5bempzo4lirzc3437amof2c2impyd.onion/ltk.git (over tor)
Log | Files | Refs | README | LICENSE

box.c (3102B)


      1 /*
      2  * Copyright (c) 2021-2026 lumidify <nobody@lumidify.org>
      3  *
      4  * Permission to use, copy, modify, and/or distribute this software for any
      5  * purpose with or without fee is hereby granted, provided that the above
      6  * copyright notice and this permission notice appear in all copies.
      7  *
      8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
      9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
     10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
     11  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
     12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
     13  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
     14  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
     15  */
     16 
     17 #include <stddef.h>
     18 
     19 #include "err.h"
     20 #include "ltkd.h"
     21 #include "widget.h"
     22 #include "cmd.h"
     23 
     24 #include <ltk/ltk.h>
     25 #include <ltk/util.h>
     26 #include <ltk/box.h>
     27 
     28 /* box <box id> add <widget id> [sticky] */
     29 static int
     30 ltkd_box_cmd_add(
     31     ltk_widget_id windowid,
     32     ltkd_widget *widget,
     33     ltkd_cmd_token *tokens,
     34     size_t num_tokens,
     35     ltkd_error *err) {
     36 	(void)windowid;
     37 	ltkd_cmdarg_parseinfo cmd[] = {
     38 		{.type = CMDARG_WIDGET, .widget_type = LTK_WIDGET_UNKNOWN, .optional = 0},
     39 		{.type = CMDARG_STICKY, .optional = 1},
     40 	};
     41 	if (ltkd_parse_cmd(tokens, num_tokens, cmd, LENGTH(cmd), err))
     42 		return 1;
     43 	if (ltk_box_add(widget->ltkid, cmd[0].val.widget->ltkid, cmd[1].initialized ? cmd[1].val.sticky : 0)) {
     44 		err->type = ERR_WIDGET_IN_CONTAINER;
     45 		err->arg = 0;
     46 		return 1;
     47 	}
     48 	return 0;
     49 }
     50 
     51 /* box <box id> remove <widget id> */
     52 static int
     53 ltkd_box_cmd_remove(
     54     ltk_widget_id windowid,
     55     ltkd_widget *widget,
     56     ltkd_cmd_token *tokens,
     57     size_t num_tokens,
     58     ltkd_error *err) {
     59 	(void)windowid;
     60 	ltkd_cmdarg_parseinfo cmd[] = {
     61 		{.type = CMDARG_WIDGET, .widget_type = LTK_WIDGET_UNKNOWN, .optional = 0},
     62 	};
     63 	if (ltkd_parse_cmd(tokens, num_tokens, cmd, LENGTH(cmd), err))
     64 		return 1;
     65 	if (ltk_box_remove(widget->ltkid, cmd[0].val.widget->ltkid)) {
     66 		err->type = ERR_WIDGET_NOT_IN_CONTAINER;
     67 		err->arg = 0;
     68 		return 1;
     69 	}
     70 	return 0;
     71 }
     72 
     73 /* box <box id> create <orientation> */
     74 static int
     75 ltkd_box_cmd_create(
     76     ltk_widget_id windowid,
     77     ltkd_widget *widget_unneeded,
     78     ltkd_cmd_token *tokens,
     79     size_t num_tokens,
     80     ltkd_error *err) {
     81 	(void)widget_unneeded;
     82 	ltkd_cmdarg_parseinfo cmd[] = {
     83 		{.type = CMDARG_IGNORE, .optional = 0},
     84 		{.type = CMDARG_STRING, .optional = 0},
     85 		{.type = CMDARG_IGNORE, .optional = 0},
     86 		{.type = CMDARG_ORIENTATION, .optional = 0},
     87 	};
     88 	if (ltkd_parse_cmd(tokens, num_tokens, cmd, LENGTH(cmd), err))
     89 		return 1;
     90 	ltk_widget_id box = ltk_box_create(windowid, cmd[3].val.orient);
     91 	if (!ltkd_widget_create(box, cmd[1].val.str, NULL, 0, err)) {
     92 		ltk_widget_id_destroy(box, 1);
     93 		err->arg = 1;
     94 		return 1;
     95 	}
     96 
     97 	return 0;
     98 }
     99 
    100 static ltkd_cmd_info box_cmds[] = {
    101         {"add", &ltkd_box_cmd_add, 0},
    102         {"create", &ltkd_box_cmd_create, 1},
    103         {"remove", &ltkd_box_cmd_remove, 0},
    104 };
    105 
    106 GEN_CMD_HELPERS(ltkd_box_cmd, LTK_WIDGET_BOX, box_cmds)