]
subdir('src')
-subdir('tests')
subdir('docs')
executable(
+++ /dev/null
-rcxml_lib = static_library(
- 'rcxml',
- sources: files(
- '../src/config/rcxml.c',
- '../src/config/keybind.c',
- '../src/common/dir.c',
- '../src/common/buf.c',
- '../src/common/font.c',
- '../src/common/log.c',
- ),
- dependencies: labwc_deps,
- include_directories: [labwc_inc],
-)
-
-rcxml_tests = [
- 't1000-rcxml-simple-parse.c',
- 't1001-rcxml-nodenames-simple.c',
-]
-
-foreach t : rcxml_tests
- testname = t.split('.')[0].underscorify()
- exe = executable(
- testname,
- sources: [t, 'tap.c'],
- dependencies: [wlroots, cairo, pangocairo],
- include_directories: [labwc_inc],
- link_with: [rcxml_lib],
- )
- test(testname, exe)
-endforeach
-
+++ /dev/null
-#define _POSIX_C_SOURCE 200809L
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <stdbool.h>
-#include <cairo.h>
-#include <pango/pangocairo.h>
-
-#include "config/rcxml.h"
-#include "tap.h"
-
-struct rcxml rc = { 0 };
-
-static char src[] =
-"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
-"<openbox_config>\n"
-"<lab>\n"
-" <csd>yes</csd>\n"
-"</lab>\n"
-"</openbox_config>\n";
-
-int main(int argc, char **argv)
-{
- plan(1);
-
- char template[] = "temp_file_XXXXXX";
- int fd = mkstemp(template);
- if (fd < 0)
- exit(1);
- write(fd, src, sizeof(src) - 1);
-
- rcxml_read(template);
- unlink(template);
-
- diag("Simple parse rc.xml");
- ok1(rc.xdg_shell_server_side_deco);
-
- rcxml_finish();
- pango_cairo_font_map_set_default(NULL);
- return exit_status();
-}
+++ /dev/null
-#define _POSIX_C_SOURCE 200809L
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <stdbool.h>
-#include <string.h>
-#include <cairo.h>
-#include <pango/pangocairo.h>
-
-#include "config/rcxml.h"
-#include "tap.h"
-
-struct rcxml rc = { 0 };
-
-static char src[] =
-"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
-"<openbox_config>\n"
-"<lab>\n"
-" <csd>yes</csd>\n"
-"</lab>\n"
-"</openbox_config>\n";
-
-static char expect[] =
-"openbox_config\n"
-"lab\n"
-"csd.lab\n"
-"csd.lab: yes\n";
-
-int main(int argc, char **argv)
-{
- struct buf actual, source;
-
- buf_init(&actual);
- buf_init(&source);
- buf_add(&source, src);
-
- plan(1);
- diag("Parse simple rc.xml and read nodenames");
-
- rcxml_get_nodenames(&actual);
- rcxml_parse_xml(&source);
- printf("%s\n", actual.buf);
- printf("%s\n", expect);
-
- ok1(!strcmp(expect, actual.buf));
- free(actual.buf);
- free(source.buf);
- pango_cairo_font_map_set_default(NULL);
- return exit_status();
-}
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <ctype.h>
-#include <unistd.h>
-#include <stdbool.h>
-
-#include "tap.h"
-
-static int nr_tests_run;
-static int nr_tests_expected;
-static int nr_tests_failed;
-
-void plan(int nr_tests)
-{
- static bool run_once;
-
- if (run_once)
- return;
- run_once = true;
- printf("1..%d\n", nr_tests);
- nr_tests_expected = nr_tests;
-}
-
-void diag(const char *fmt, ...)
-{
- va_list params;
-
- fprintf(stdout, "# ");
- va_start(params, fmt);
- vfprintf(stdout, fmt, params);
- va_end(params);
- fprintf(stdout, "\n");
-}
-
-int ok(int result, const char *testname, ...)
-{
- va_list params;
-
- ++nr_tests_run;
- if (!result) {
- printf("not ");
- nr_tests_failed++;
- }
- printf("ok %d", nr_tests_run);
- if (testname) {
- printf(" - ");
- va_start(params, testname);
- vfprintf(stdout, testname, params);
- va_end(params);
- }
- printf("\n");
- if (!result)
- diag(" Failed test");
- return result ? 1 : 0;
-}
-
-int exit_status(void)
-{
- int ret;
-
- if (nr_tests_expected != nr_tests_run) {
- diag("expected=%d; run=%d; failed=%d", nr_tests_expected,
- nr_tests_run, nr_tests_failed);
- }
- if (nr_tests_expected < nr_tests_run)
- ret = nr_tests_run - nr_tests_expected;
- else
- ret = nr_tests_failed + nr_tests_expected - nr_tests_run;
- if (ret > 255)
- ret = 255;
- return ret;
-}
+++ /dev/null
-/*
- * Minimalist, partial TAP implementation
- *
- * Copyright Johan Malm 2020
- */
-
-#ifndef TAP_H
-#define TAP_H
-
-#define ok1(__x__) (ok(__x__, "%s", #__x__))
-
-void plan(int nr_tests);
-void diag(const char *fmt, ...);
-int ok(int result, const char *test_name, ...);
-int exit_status(void);
-
-#endif /* TAP_H */
+++ /dev/null
-leak:libxcb*
+++ /dev/null
-#!/bin/sh
-#
-# Automatically build labwc
-#
-
-builddir=build
-g_asan=
-g_wlroots=
-
-die () { printf '\033[31mfatal:\033[m %b\n' "$@" >&2 ; exit 1 ; }
-warn () { printf '\033[31mwarn:\033[m %b\n' "$@" >&2 ; }
-say () { printf '\033[32m%s\033[m' "$@" ; }
-
-usage () {
- printf "%s\n" \
-"Usage: ./tools/build [<options>]
-Options:
--w install wlroots as subproject
---asan run with ASAN and UBSAN
---clang run with clang
--h, --help show help"
- exit 0
-}
-
-wlroots_subproject () {
- if ! [ -e subprojects/wlroots ]; then
- git clone https://github.com/swaywm/wlroots subprojects/wlroots
- fi
-}
-
-main () {
- [[ -e src/main.c ]] || die "must be run from top-level directory"
-
- for arg
- do
- opt=${arg%%=*}
- var=${arg#*=}
- case "$opt" in
- -w)
- wlroots_subproject
- g_wlroots="-Dwlroots:default_library=static"
- ;;
- --asan)
- g_asan="-Db_sanitize=address,undefined" ;;
- --clang)
- export CC=clang
- ;;
- -h|--help)
- usage ;;
- esac
- done
-
- [ -e ${builddir} ] && die "build directory already exists - delete and run again"
- meson ${g_asan} ${g_wlroots} ${builddir}
- ninja -C ${builddir}
- LSAN_OPTIONS=suppressions=../tools/asan_suppressions.txt ninja -C ${builddir} test
-}
-
-main "$@"
+++ /dev/null
-#!/bin/bash
-
-options="\
- --enable=all \
- --suppress=missingInclude \
- --suppress=unusedFunction \
- --suppress=unmatchedSuppression \
-"
-
-for f in $(find src/ -name "*.c"); do
- cppcheck ${options} "${f}"
-done
-
+++ /dev/null
-*.o
-dir-list
+++ /dev/null
-CFLAGS += -g -Wall -I../../include
-CFLAGS += `pkg-config --cflags glib-2.0`
-LDFLAGS += `pkg-config --libs glib-2.0`
-
-all:
- $(CC) $(CFLAGS) -o dir-list dir-list.c ../../src/common/dir.c ../../src/common/log.c $(LDFLAGS)
-
-clean:
- rm -f *.o dir-list
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "common/dir.h"
-
-int main()
-{
- setenv("LABWC_DEBUG_DIR_CONFIG_AND_THEME", "1", 1);
- setenv("XDG_CONFIG_HOME", "/a:/bbb:/ccccc:/etc/foo", 1);
- printf("%s\n", config_dir());
- printf("%s\n", theme_dir("Numix"));
-}
+++ /dev/null
-hex-color-average
-hex-color-average.o
+++ /dev/null
-hex-color-average: hex-color-average.o
-
-clean:
- rm -f hex-color-average *.o
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-static int hexval(int c)
-{
- int ret = -1;
- switch (c) {
- case '0'...'9':
- ret = c - '0';
- break;
- case 'a'...'f':
- ret = c - 'a' + 10;
- break;
- case 'A'...'F':
- ret = c - 'A' + 10;
- break;
- }
- return ret;
-}
-
-int hex2dec(const char *hexstring)
-{
- int value = 0, pos = 0, hex;
- while ((hex = hexval(hexstring[pos++])) != -1)
- value = (value << 4) + hex;
- return value;
-}
-
-void usage(const char *command)
-{
- printf("Usage: %s <rrggbb> <rrggbb>\n", command);
- exit(1);
-}
-int main(int argc, char **argv)
-{
- double col[6] = { 0 };
-
- if (argc < 3)
- usage(argv[0]);
-
- for (int j = 1; j < argc; j++) {
- int len = strlen(argv[j]);
- for (int i = 0; i < len / 2; i++) {
- char buf[3] = { 0 };
- buf[0] = argv[j][i * 2];
- buf[1] = argv[j][i * 2 + 1];
- col[(j - 1) * 3 + i] = hex2dec(buf) / 255.0;
- }
- }
- printf("[%s] { %.2f, %.2f, %.2f }\n", argv[1], col[0], col[1], col[2]);
- printf("[%s] { %.2f, %.2f, %.2f }\n", argv[2], col[3], col[4], col[5]);
- printf("[ mean ] { %.2f, %.2f, %.2f }\n",
- (col[0] + col[3]) / 2.0,
- (col[1] + col[4]) / 2.0,
- (col[2] + col[5]) / 2.0);
- printf("[ mean ] #%x%x%x\n",
- (int)((col[0] + col[3]) / 2.0 * 255),
- (int)((col[1] + col[4]) / 2.0 * 255),
- (int)((col[2] + col[5]) / 2.0 * 255));
-}
-
+++ /dev/null
-*.o
-font-height
+++ /dev/null
-CFLAGS += -g -Wall -O0 -std=c11
-CFLAGS += `pkg-config cairo pango pangocairo --cflags`
-CFLAGS += -I../../include
-LIBS += `pkg-config cairo pango pangocairo --libs`
-LDFLAGS += $(LIBS)
-
-PROGS = font-height
-
-all: $(PROGS)
-
-font-height: font-height.c ../../src/common/font.c
- $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
-
-clean:
- rm -f $(PROGS) *.o
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "common/font.h"
-
-int main(int argc, char **argv)
-{
- if (argc < 2) {
- printf("Usage: %s <font-description> (e.g. 'sans 10')\n", argv[0]);
- exit(1);
- }
- printf("height=%d\n", font_height(argv[1]));
-}
+++ /dev/null
-rcxml-print-nodenames
+++ /dev/null
-CFLAGS = -g -O0 -Wall -Wextra -std=c11 -pedantic `xml2-config --cflags`
-CFLAGS += -Wno-unused-parameter
-CFLAGS += -I../../include
-CFLAGS += -DWLR_USE_UNSTABLE
-ASAN_FLAGS = -O0 -fsanitize=address -fno-common -fno-omit-frame-pointer -rdynamic
-CFLAGS += $(ASAN_FLAGS)
-LDFLAGS += $(ASAN_FLAGS) -fuse-ld=gold
-LDFLAGS += `xml2-config --libs`
-LDFLAGS += `pkg-config --cflags --libs glib-2.0 cairo pangocairo wayland-server xkbcommon`
-
-PROGS = rcxml-print-nodenames
-SRC = \
- rcxml-print-nodenames.c \
- ../../src/config/rcxml.c \
- ../../src/common/dir.c \
- ../../src/common/buf.c \
- ../../src/common/font.c \
- ../../src/common/log.c \
- ../../src/config/keybind.c
-
-
-all: $(PROGS)
-
-rcxml-print-nodenames: $(SRC)
- $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
-
-clean:
- rm -f $(PROGS)
+++ /dev/null
-Try
-
- ./rcxml-print-nodenames /etc/xdg/openbox/rc.xml
- ./rcxml-print-nodenames ../../data/rc.xml
-
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <cairo.h>
-#include <pango/pangocairo.h>
-
-#include "config/rcxml.h"
-#include "common/buf.h"
-#include "common/log.h"
-
-struct rcxml rc = { 0 };
-
-int main(int argc, char **argv)
-{
- struct buf b;
-
- if (argc != 2) {
- fprintf(stderr, "usage: %s <rc.xml file>\n", argv[0]);
- exit(EXIT_FAILURE);
- }
- buf_init(&b);
- rcxml_get_nodenames(&b);
- rcxml_read(argv[1]);
- printf("%s", b.buf);
- free(b.buf);
- pango_cairo_font_map_set_default(NULL);
-}
+++ /dev/null
-#!/bin/sh
-
-LSAN_OPTIONS=suppressions=tools/asan_suppressions.txt ./build/labwc
-
-
+++ /dev/null
-theme-helper
+++ /dev/null
-CFLAGS = -g -Wall -Wextra -pedantic -std=c11
-CFLAGS += -I../../include/
-CFLAGS += `pkg-config --cflags glib-2.0`
-ASAN_FLAGS = -O0 -fsanitize=address -fno-common -fno-omit-frame-pointer -rdynamic
-CFLAGS += $(ASAN_FLAGS)
-LDFLAGS += $(ASAN_FLAGS) -fuse-ld=gold
-LDFLAGS += `pkg-config --cflags --libs glib-2.0 wlroots wayland-server`
-LDFLAGS += -DWLR_USE_UNSTABLE
-
-SRCS = \
- theme-helper.c \
- ../../src/theme/theme.c \
- ../../src/common/dir.c \
- ../../src/common/log.c
-
-all:
- gcc $(CFLAGS) -o theme-helper $(SRCS) $(LDFLAGS)
-
-
-test:
- XDG_DATA_HOME=../../data ./theme-helper labwc-default
-
-clean:
- rm -f theme-helper *.o
+++ /dev/null
-#!/bin/sh
-#
-# List available openbox themes
-#
-
-printf '%b\n' "#icons\ttheme name"
-printf '%b\n' "-------------------"
-
-for d in $HOME/.themes/* /usr/share/themes/*; do
- if [ -d "$d/openbox-3" ]; then
- icon_count=0
- for f in $d/openbox-3/*; do
- case $f in
- *xbm) : $(( icon_count++ )) ;;
- esac
- done
- printf '%b\n' "$icon_count\t$(basename $d)"
- fi
-done
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "theme/theme.h"
-
-struct theme theme = { 0 };
-
-static void usage(const char *application)
-{
- printf("Usage: %s <theme-name>\n", application);
- exit(1);
-}
-
-int main(int argc, char **argv)
-{
- if (argc < 2)
- usage(argv[0]);
- theme_read(argv[1]);
-
- printf("window_active_title_bg_color = ");
- for (int i=0; i < 4; i++)
- printf("%.2f; ", theme.window_active_title_bg_color[i]);
- printf("\n");
-}
+++ /dev/null
-xbm-tokenize
-xbm-parse
-*.png
+++ /dev/null
-#define max_width 5
-#define max_height 5
-static unsigned char max_bits[] = {
- 0x1F, 0x1B, 0x15, 0x1B, 0x1F };
+++ /dev/null
-#define close_width 8
-#define close_height 8
-static unsigned char close_bits[] = {
- 0xFF, 0xC3, 0xA5, 0x99, 0x99, 0xA5, 0xC3, 0xFF };
+++ /dev/null
-#define x9_width 9
-#define x9_height 9
-static unsigned char x9_bits[] = {
- 0xFF, 0x01, 0x83, 0x01, 0x45, 0x01, 0x29, 0x01, 0x11, 0x01, 0x29, 0x01,
- 0x45, 0x01, 0x83, 0x01, 0xFF, 0x01 };
+++ /dev/null
-CFLAGS += -g -Wall -O0 -std=c11
-CFLAGS += -I../../include
-LDFLAGS += `pkg-config --cflags --libs cairo`
-ASAN += -fsanitize=address
-
-PROGS = xbm-tokenize xbm-parse
-
-DEP_TOKENIZE = \
- ../../src/common/buf.c \
- ../../src/xbm/tokenize.c
-
-DEP_PARSE = $(DEP_TOKENIZE) \
- ../../src/xbm/parse.c \
- ../../src/common/grab-file.c
-
-all: $(PROGS)
-
-xbm-tokenize: xbm-tokenize.c $(DEP_TOKENIZE)
- $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(ASAN)
-
-xbm-parse: xbm-parse.c $(DEP_PARSE)
- $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(ASAN)
-
-clean :
- $(RM) $(PROGS)
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <cairo.h>
-
-#include "xbm/parse.h"
-#include "common/grab-file.h"
-
-static float red[] = { 1.0, 0.0, 0.0, 1.0 };
-
-int main(int argc, char **argv)
-{
- struct token *tokens;
-
- if (argc != 2) {
- fprintf(stderr, "usage: %s <xbm-file>\n", argv[0]);
- return 1;
- }
-
- char *buffer = grab_file(argv[1]);
- if (!buffer)
- exit(EXIT_FAILURE);
- tokens = tokenize_xbm(buffer);
- free(buffer);
- parse_set_color(red);
- struct pixmap pixmap = parse_xbm_tokens(tokens);
- free(tokens);
-
- cairo_surface_t *g_surface;
- g_surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32,
- pixmap.width, pixmap.height);
- if (!g_surface) {
- fprintf(stderr, "no surface\n");
- exit(EXIT_FAILURE);
- }
- unsigned char *surface_data = cairo_image_surface_get_data(g_surface);
- cairo_surface_flush(g_surface);
- memcpy(surface_data, pixmap.data, pixmap.width * pixmap.height * 4);
- if (pixmap.data)
- free(pixmap.data);
- cairo_surface_mark_dirty(g_surface);
-
- char png_name[1024];
- snprintf(png_name, sizeof(png_name), "%s.png", argv[1]);
- if (cairo_surface_write_to_png(g_surface, png_name)) {
- fprintf(stderr, "cannot save png\n");
- exit(EXIT_FAILURE);
- }
- cairo_surface_destroy(g_surface);
- exit(EXIT_SUCCESS);
-}
+++ /dev/null
-#define _POSIX_C_SOURCE 200809L
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "common/buf.h"
-#include "xbm/tokenize.h"
-
-/* Read file into buffer, because it's easier to tokenize that way */
-char *read_file(const char *filename)
-{
- char *line = NULL;
- size_t len = 0;
- FILE *stream = fopen(filename, "r");
- if (!stream) {
- fprintf(stderr, "warn: cannot read '%s'\n", filename);
- return NULL;
- }
- struct buf buffer;
- buf_init(&buffer);
- while ((getline(&line, &len, stream) != -1)) {
- char *p = strrchr(line, '\n');
- if (p)
- *p = '\0';
- buf_add(&buffer, line);
- }
- free(line);
- fclose(stream);
- return (buffer.buf);
-}
-
-int main(int argc, char **argv)
-{
- struct token *tokens;
-
- if (argc != 2) {
- fprintf(stderr, "usage: %s <xbm-file>\n", argv[0]);
- return 1;
- }
-
- char *buffer = read_file(argv[1]);
- if (!buffer)
- exit(EXIT_FAILURE);
- tokens = tokenize_xbm(buffer);
- free(buffer);
- for (struct token *t = tokens; t->type; t++)
- printf("%s\n", t->name);
-}