Browse Source

Refocused on xcb instead of xlib

master
dirkson 3 years ago
parent
commit
130003d21e
  1. 3
      README.md
  2. 2
      include/boksi.h
  3. 10
      meson.build
  4. 10
      src/boksi.c
  5. 3
      src/example/complex.c
  6. 4
      src/methods.h
  7. 18
      src/methods/boksi_xcb.c
  8. 33
      src/methods/boksi_xlib.c

3
README.md

@ -92,14 +92,13 @@ Meson can also generate a .so if you really need one.
## TODO
+ Fix Xlib
+ Add XCB
+ Add actual support for OSX.
+ Add support for Wayland
+ Add glfw/nuklear
+ Add sdl/nuklear
+ Add gdi/nuklear
+ Add x11/nuklear
+ Add XCB
+ Add Zenity
+ Add kdialog
+ Add linux's "dialog"

2
include/boksi.h

@ -17,7 +17,7 @@ typedef enum boksi_method
BOKSI_NCURSES ,
BOKSI_GTK2 ,
BOKSI_STDERR ,
BOKSI_XLIB ,
BOKSI_XCB ,
BOKSI_LIBUI ,
BOKSI_NUKLEAR_SDL ,
BOKSI_NUKLEAR_GLFW,

10
meson.build

@ -1,7 +1,7 @@
project('boksi', 'c', default_options : ['default_library=static', 'c_std=gnu89'])
incdir = include_directories(['include', 'src', 'src/methods', 'src/dynload'])
boksisrc = ['src/boksi.c', 'src/methods/boksi_gtk3.c', 'src/methods/boksi_gtk2.c', 'src/methods/boksi_xaw.c', 'src/methods/boksi_xlib.c', 'src/methods/boksi_std.c', 'src/methods/boksi_win.c', 'src/methods/boksi_osx.c', 'src/methods/boksi_ncurses.c', 'src/methods/boksi_libui.c']
boksisrc = ['src/boksi.c', 'src/methods/boksi_gtk3.c', 'src/methods/boksi_gtk2.c', 'src/methods/boksi_xaw.c', 'src/methods/boksi_xcb.c', 'src/methods/boksi_std.c', 'src/methods/boksi_win.c', 'src/methods/boksi_osx.c', 'src/methods/boksi_ncurses.c', 'src/methods/boksi_libui.c']
if get_option('buildtype').startswith('debug')
add_project_arguments('-DBOKSI_DEBUG_SELF', language : 'c')
@ -38,6 +38,12 @@ else
depxaw = cc.find_library('fake_library_boksi', required:false)
endif
depxcb = dependency('xcb', required:false)
#depxlib = cc.find_library('Xlib', required:false)
if depxcb.found()
add_project_arguments('-DBOKSI_BUILD_XCB', language : 'c')
endif
depncurses = cc.find_library('ncurses', required:false)
if depncurses.found()
#Currently it won't build on windows. Disabling ncurses for cross builds for now.
@ -53,7 +59,7 @@ depdynload = dependency('dynload', fallback : ['dynload', 'dynload_dep'])
#library
libboksi = library('boksi', boksisrc, include_directories : incdir, dependencies: [depdynload, depgtk, depxt, depxaw, depncurses, deplibui] )
libboksi = library('boksi', boksisrc, include_directories : incdir, dependencies: [depdynload, depgtk, depxt, depxaw, depncurses, deplibui, depxcb] )
boksi_dep = declare_dependency(link_with : libboksi, include_directories : incdir)

10
src/boksi.c

@ -38,6 +38,9 @@ boksi_return boksi_set_info(boksi_info* info, const boksi_method method[])
#ifdef BOKSI_BUILD_XAW
BOKSI_KNOWN_METHOD(BOKSI_XAW);
#endif
#ifdef BOKSI_BUILD_XCB
BOKSI_KNOWN_METHOD(BOKSI_XCB);
#endif
#ifdef BOKSI_BUILD_GTK3
BOKSI_KNOWN_METHOD(BOKSI_GTK3);
#endif
@ -47,9 +50,6 @@ boksi_return boksi_set_info(boksi_info* info, const boksi_method method[])
#ifdef BOKSI_BUILD_NCURSES
BOKSI_KNOWN_METHOD(BOKSI_NCURSES);
#endif
#ifdef BOKSI_BUILD_XLIB
BOKSI_KNOWN_METHOD(BOKSI_XLIB);
#endif
#ifdef BOKSI_BUILD_LIBUI
BOKSI_KNOWN_METHOD(BOKSI_LIBUI);
#endif
@ -100,8 +100,8 @@ int boksi_explicit(const boksi_info info, boksi_level level, const char* name, c
#ifdef BOKSI_BUILD_XT
BOKSI_USE_METHOD(BOKSI_XT, boksi_xt(level, name, button, msg));
#endif
#ifdef BOKSI_BUILD_XLIB
BOKSI_USE_METHOD(BOKSI_XLIB, boksi_xlib(level, name, button, msg));
#ifdef BOKSI_BUILD_XCB
BOKSI_USE_METHOD(BOKSI_XCB, boksi_xcb(level, name, button, msg));
#endif
#ifdef BOKSI_BUILD_LIBUI
BOKSI_USE_METHOD(BOKSI_LIBUI, boksi_libui(level, name, button, msg));

3
src/example/complex.c

@ -9,7 +9,8 @@ int main()
//BOKSI_NCURSES,
//BOKSI_LIBUI,
//BOKSI_GTK2,
BOKSI_XAW,
//BOKSI_XAW,
BOKSI_XCB,
BOKSI_STDOUT,
BOKSI_GIVEUP};

4
src/methods.h

@ -7,9 +7,7 @@ extern boksi_return boksi_gtk2 (const boksi_level, const char*, const char*, c
extern boksi_return boksi_xaw (const boksi_level, const char*, const char*, const char*);
extern boksi_return boksi_xlib (const boksi_level, const char*, const char*, const char*);
extern boksi_return boksi_xt (const boksi_level, const char*, const char*, const char*);
extern boksi_return boksi_xcb (const boksi_level, const char*, const char*, const char*);
extern boksi_return boksi_libui (const boksi_level, const char*, const char*, const char*);

18
src/methods/boksi_xcb.c

@ -0,0 +1,18 @@
#ifdef BOKSI_BUILD_XCB
#include <boksi.h>
#include "methods.h"
//#include <dynload_xcb.h>
#include <stdio.h>
extern boksi_return boksi_xcb(const boksi_level Level, const char* name_window, const char* name_button, const char* msg)
{
// if (dynload(&dynload_xcb) != DYNLOAD_SUCCESS)
return BOKSI_FAILURE;
return BOKSI_SUCCESS;
}
#endif

33
src/methods/boksi_xlib.c

@ -1,33 +0,0 @@
#ifdef BOKSI_BUILD_XLIB
#include <boksi.h>
#include "methods.h"
#include <dynload_xt.h>
#include <dynload_xlib.h>
#include <stdio.h>
extern boksi_return boksi_xlib(const boksi_level Level, const char* name_window, const char* name_button, const char* msg)
{
if (dynload(&dynload_xlib) != DYNLOAD_SUCCESS)
return BOKSI_FAILURE;
//Somehow dynload can't find XOpenDisplay?
Display* display = XOpenDisplay(NULL);
Window window = XCreateSimpleWindow(display, XDefaultRootWindow(display), 100, 100, 200, 200, 4, 0, 0);
XMapWindow(display, window);
XSelectInput(display, window, KeyPressMask | ButtonPressMask | ExposureMask);
XEvent event;
while (True)
{
XNextEvent(display, &event);
printf("%d\n", event.type);
}
return BOKSI_SUCCESS;
}
#endif
Loading…
Cancel
Save