build: replace genshader by binary linker
[platform/upstream/kmscon.git] / src / kmscon_conf.h
index 46afa9c..d253f4a 100644 (file)
 #define KMSCON_MAIN_H
 
 #include <stdbool.h>
+#include <stddef.h>
 #include <stdlib.h>
 #include "conf.h"
+#include "shl_dlist.h"
+
+enum kmscon_conf_gpu_selection {
+       KMSCON_GPU_ALL,
+       KMSCON_GPU_AUX,
+       KMSCON_GPU_PRIMARY,
+};
 
 struct kmscon_conf_t {
+       /* header information */
+       bool seat_config;
+
+       /* General Options */
        /* show help/usage information */
        bool help;
        /* exit application after parsing options */
        bool exit;
-       /* enable debug messages */
-       bool debug;
        /* enable verbose info messages */
        bool verbose;
+       /* enable debug messages */
+       bool debug;
        /* disable notices and warnings */
        bool silent;
-       /* VT number to run on on seat0 */
+       /* config directory name */
+       char *configdir;
+       /* listen mode */
+       bool listen;
+
+       /* Seat Options */
+       /* VT number to run on */
        char *vt;
        /* enter new VT directly */
        bool switchvt;
-       /* use framebuffers instead of DRM */
-       bool use_fbdev;
-       /* use dumb DRM devices */
-       bool dumb;
-       /* render engine */
-       char *render_engine;
+       /* seats */
+       char **seats;
 
-       /* input KBD layout */
-       char *xkb_layout;
-       char *xkb_variant;
-       char *xkb_options;
-       unsigned int xkb_repeat_delay;
-       unsigned int xkb_repeat_rate;
+       /* Session Options */
+       /* sessions */
+       unsigned int session_max;
+       /* allow keyboard session control */
+       bool session_control;
+       /* run terminal session */
+       bool terminal_session;
 
-       /* TERM value */
-       char *term;
+       /* Terminal Options */
        /* custom login process */
        bool login;
        /* argv for login process */
        char **argv;
+       /* TERM value */
+       char *term;
+       /* reset environment */
+       bool reset_env;
+       /* color palette */
+       char *palette;
        /* terminal scroll-back buffer size */
        unsigned int sb_size;
+
+       /* Input Options */
+       /* input KBD model */
+       char *xkb_model;
+       /* input KBD layout */
+       char *xkb_layout;
+       /* input KBD variant */
+       char *xkb_variant;
+       /* input KBD options */
+       char *xkb_options;
+       /* input predefined KBD keymap */
+       char *xkb_keymap;
+       /* keyboard key-repeat delay */
+       unsigned int xkb_repeat_delay;
+       /* keyboard key-repeat rate */
+       unsigned int xkb_repeat_rate;
+
+       /* Grabs / Keyboard-Shortcuts */
        /* scroll-up grab */
        struct conf_grab *grab_scroll_up;
        /* scroll-down grab */
@@ -80,11 +118,32 @@ struct kmscon_conf_t {
        struct conf_grab *grab_page_up;
        /* page-down grab */
        struct conf_grab *grab_page_down;
+       /* zoom-in grab */
+       struct conf_grab *grab_zoom_in;
+       /* zoom-out grab */
+       struct conf_grab *grab_zoom_out;
+       /* session-next grab */
+       struct conf_grab *grab_session_next;
+       /* session-prev grab */
+       struct conf_grab *grab_session_prev;
+       /* session-dummy grab */
+       struct conf_grab *grab_session_dummy;
+       /* session-close grab */
+       struct conf_grab *grab_session_close;
+       /* terminal-new grab */
+       struct conf_grab *grab_terminal_new;
 
-       /* seats */
-       char **seats;
-       bool all_seats;
+       /* Video Options */
+       /* use DRM if available */
+       bool drm;
+       /* use 3D hardware-acceleration if available */
+       bool hwaccel;
+       /* gpu selection mode */
+       unsigned int gpus;
+       /* render engine */
+       char *render_engine;
 
+       /* Font Options */
        /* font engine */
        char *font_engine;
        /* font size */
@@ -93,19 +152,28 @@ struct kmscon_conf_t {
        char *font_name;
        /* font ppi (overrides per monitor PPI) */
        unsigned int font_ppi;
+};
 
-       /* color palette */
-       char *palette;
+int kmscon_conf_new(struct conf_ctx **out);
+void kmscon_conf_free(struct conf_ctx *ctx);
+int kmscon_conf_load_main(struct conf_ctx *ctx, int argc, char **argv);
+int kmscon_conf_load_seat(struct conf_ctx *ctx, const struct conf_ctx *main,
+                         const char *seat);
 
-       /* frame-rate limit */
-       unsigned int fps;
-       /* print rendering engine timing information */
-       bool render_timing;
-};
+static inline bool kmscon_conf_is_current_seat(struct kmscon_conf_t *conf)
+{
+       return conf && shl_string_list_is(conf->seats, "current");
+}
 
-extern struct kmscon_conf_t kmscon_conf;
+static inline bool kmscon_conf_is_all_seats(struct kmscon_conf_t *conf)
+{
+       return conf && shl_string_list_is(conf->seats, "all");
+}
 
-int kmscon_load_config(int argc, char **argv);
-void kmscon_free_config(void);
+static inline bool kmscon_conf_is_single_seat(struct kmscon_conf_t *conf)
+{
+       return conf && !kmscon_conf_is_all_seats(conf) &&
+              shl_string_list_count(conf->seats, true) == 1;
+}
 
 #endif /* KMSCON_MAIN_H */