97 lines
2.0 KiB
C
97 lines
2.0 KiB
C
#include "output.h"
|
|
|
|
#include "log.h"
|
|
#include "x11/x.h"
|
|
#include "x11/screen.h"
|
|
|
|
#ifdef ENABLE_WAYLAND
|
|
#include "wayland/wl.h"
|
|
#endif
|
|
|
|
bool is_running_wayland(void) {
|
|
char* wayland_display = getenv("WAYLAND_DISPLAY");
|
|
return !(wayland_display == NULL);
|
|
}
|
|
|
|
const struct output output_x11 = {
|
|
x_setup,
|
|
x_free,
|
|
|
|
x_win_create,
|
|
x_win_destroy,
|
|
|
|
x_win_show,
|
|
x_win_hide,
|
|
|
|
x_display_surface,
|
|
x_win_get_context,
|
|
|
|
get_active_screen,
|
|
|
|
x_is_idle,
|
|
have_fullscreen_window,
|
|
|
|
x_get_scale,
|
|
};
|
|
|
|
#ifdef ENABLE_WAYLAND
|
|
const struct output output_wl = {
|
|
wl_init,
|
|
wl_deinit,
|
|
|
|
wl_win_create,
|
|
wl_win_destroy,
|
|
|
|
wl_win_show,
|
|
wl_win_hide,
|
|
|
|
wl_display_surface,
|
|
wl_win_get_context,
|
|
|
|
wl_get_active_screen,
|
|
|
|
wl_is_idle,
|
|
wl_have_fullscreen_window,
|
|
|
|
wl_get_scale,
|
|
};
|
|
#endif
|
|
|
|
const struct output* get_x11_output() {
|
|
const struct output* output = &output_x11;
|
|
if (output->init()) {
|
|
return output;
|
|
} else {
|
|
LOG_E("Couldn't initialize X11 output. Aborting...");
|
|
}
|
|
}
|
|
|
|
#ifdef ENABLE_WAYLAND
|
|
const struct output* get_wl_output() {
|
|
const struct output* output = &output_wl;
|
|
if (output->init()) {
|
|
return output;
|
|
} else {
|
|
LOG_W("Couldn't initialize wayland output. Falling back to X11 output.");
|
|
output->deinit();
|
|
return get_x11_output();
|
|
}
|
|
}
|
|
#endif
|
|
|
|
const struct output* output_create(bool force_xwayland)
|
|
{
|
|
#ifdef ENABLE_WAYLAND
|
|
if (!force_xwayland && is_running_wayland()) {
|
|
LOG_I("Using Wayland output");
|
|
return get_wl_output();
|
|
} else {
|
|
LOG_I("Using X11 output");
|
|
return get_x11_output();
|
|
}
|
|
#else
|
|
return get_x11_output();
|
|
#endif
|
|
}
|
|
/* vim: set ft=c tabstop=8 shiftwidth=8 expandtab textwidth=0: */
|