#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 */
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 */
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 */