Drop xdg-output requirement
Rely on wl_output v4 instead.
This commit is contained in:
parent
92de4d2e31
commit
2813756a19
@ -1,10 +1,11 @@
|
|||||||
# swaylock
|
# swaylock
|
||||||
|
|
||||||
swaylock is a screen locking utility for Wayland compositors. It is compatible
|
swaylock is a screen locking utility for Wayland compositors. It is compatible
|
||||||
with any Wayland compositor which implements the following Wayland protocols:
|
with any Wayland compositor which implements one of the following Wayland
|
||||||
|
protocols:
|
||||||
|
|
||||||
- wlr-layer-shell + wlr-input-inhibitor, or ext-session-lock-v1
|
- ext-session-lock-v1, or
|
||||||
- xdg-output
|
- wlr-layer-shell and wlr-input-inhibitor
|
||||||
|
|
||||||
See the man page, `swaylock(1)`, for instructions on using swaylock.
|
See the man page, `swaylock(1)`, for instructions on using swaylock.
|
||||||
|
|
||||||
|
@ -88,7 +88,6 @@ struct swaylock_state {
|
|||||||
enum auth_state auth_state;
|
enum auth_state auth_state;
|
||||||
int failed_attempts;
|
int failed_attempts;
|
||||||
bool run_display;
|
bool run_display;
|
||||||
struct zxdg_output_manager_v1 *zxdg_output_manager;
|
|
||||||
struct ext_session_lock_manager_v1 *ext_session_lock_manager_v1;
|
struct ext_session_lock_manager_v1 *ext_session_lock_manager_v1;
|
||||||
struct ext_session_lock_v1 *ext_session_lock_v1;
|
struct ext_session_lock_v1 *ext_session_lock_v1;
|
||||||
};
|
};
|
||||||
@ -98,7 +97,6 @@ struct swaylock_surface {
|
|||||||
struct swaylock_state *state;
|
struct swaylock_state *state;
|
||||||
struct wl_output *output;
|
struct wl_output *output;
|
||||||
uint32_t output_global_name;
|
uint32_t output_global_name;
|
||||||
struct zxdg_output_v1 *xdg_output;
|
|
||||||
struct wl_surface *surface;
|
struct wl_surface *surface;
|
||||||
struct wl_surface *child; // surface made into subsurface
|
struct wl_surface *child; // surface made into subsurface
|
||||||
struct wl_subsurface *subsurface;
|
struct wl_subsurface *subsurface;
|
||||||
|
68
main.c
68
main.c
@ -25,7 +25,6 @@
|
|||||||
#include "swaylock.h"
|
#include "swaylock.h"
|
||||||
#include "wlr-input-inhibitor-unstable-v1-client-protocol.h"
|
#include "wlr-input-inhibitor-unstable-v1-client-protocol.h"
|
||||||
#include "wlr-layer-shell-unstable-v1-client-protocol.h"
|
#include "wlr-layer-shell-unstable-v1-client-protocol.h"
|
||||||
#include "xdg-output-unstable-v1-client-protocol.h"
|
|
||||||
#include "ext-session-lock-v1-client-protocol.h"
|
#include "ext-session-lock-v1-client-protocol.h"
|
||||||
|
|
||||||
static uint32_t parse_color(const char *color) {
|
static uint32_t parse_color(const char *color) {
|
||||||
@ -295,46 +294,24 @@ static void handle_wl_output_scale(void *data, struct wl_output *output,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void handle_wl_output_name(void *data, struct wl_output *output,
|
||||||
|
const char *name) {
|
||||||
|
struct swaylock_surface *surface = data;
|
||||||
|
surface->output_name = strdup(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void handle_wl_output_description(void *data, struct wl_output *output,
|
||||||
|
const char *description) {
|
||||||
|
// Who cares
|
||||||
|
}
|
||||||
|
|
||||||
struct wl_output_listener _wl_output_listener = {
|
struct wl_output_listener _wl_output_listener = {
|
||||||
.geometry = handle_wl_output_geometry,
|
.geometry = handle_wl_output_geometry,
|
||||||
.mode = handle_wl_output_mode,
|
.mode = handle_wl_output_mode,
|
||||||
.done = handle_wl_output_done,
|
.done = handle_wl_output_done,
|
||||||
.scale = handle_wl_output_scale,
|
.scale = handle_wl_output_scale,
|
||||||
};
|
.name = handle_wl_output_name,
|
||||||
|
.description = handle_wl_output_description,
|
||||||
static void handle_xdg_output_logical_size(void *data, struct zxdg_output_v1 *output,
|
|
||||||
int width, int height) {
|
|
||||||
// Who cares
|
|
||||||
}
|
|
||||||
|
|
||||||
static void handle_xdg_output_logical_position(void *data,
|
|
||||||
struct zxdg_output_v1 *output, int x, int y) {
|
|
||||||
// Who cares
|
|
||||||
}
|
|
||||||
|
|
||||||
static void handle_xdg_output_name(void *data, struct zxdg_output_v1 *output,
|
|
||||||
const char *name) {
|
|
||||||
swaylock_log(LOG_DEBUG, "output name is %s", name);
|
|
||||||
struct swaylock_surface *surface = data;
|
|
||||||
surface->xdg_output = output;
|
|
||||||
surface->output_name = strdup(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void handle_xdg_output_description(void *data, struct zxdg_output_v1 *output,
|
|
||||||
const char *description) {
|
|
||||||
// Who cares
|
|
||||||
}
|
|
||||||
|
|
||||||
static void handle_xdg_output_done(void *data, struct zxdg_output_v1 *output) {
|
|
||||||
// Who cares
|
|
||||||
}
|
|
||||||
|
|
||||||
struct zxdg_output_v1_listener _xdg_output_listener = {
|
|
||||||
.logical_position = handle_xdg_output_logical_position,
|
|
||||||
.logical_size = handle_xdg_output_logical_size,
|
|
||||||
.done = handle_xdg_output_done,
|
|
||||||
.name = handle_xdg_output_name,
|
|
||||||
.description = handle_xdg_output_description,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void ext_session_lock_v1_handle_locked(void *data, struct ext_session_lock_v1 *lock) {
|
static void ext_session_lock_v1_handle_locked(void *data, struct ext_session_lock_v1 *lock) {
|
||||||
@ -377,15 +354,12 @@ static void handle_global(void *data, struct wl_registry *registry,
|
|||||||
} else if (strcmp(interface, zwlr_input_inhibit_manager_v1_interface.name) == 0) {
|
} else if (strcmp(interface, zwlr_input_inhibit_manager_v1_interface.name) == 0) {
|
||||||
state->input_inhibit_manager = wl_registry_bind(
|
state->input_inhibit_manager = wl_registry_bind(
|
||||||
registry, name, &zwlr_input_inhibit_manager_v1_interface, 1);
|
registry, name, &zwlr_input_inhibit_manager_v1_interface, 1);
|
||||||
} else if (strcmp(interface, zxdg_output_manager_v1_interface.name) == 0) {
|
|
||||||
state->zxdg_output_manager = wl_registry_bind(
|
|
||||||
registry, name, &zxdg_output_manager_v1_interface, 2);
|
|
||||||
} else if (strcmp(interface, wl_output_interface.name) == 0) {
|
} else if (strcmp(interface, wl_output_interface.name) == 0) {
|
||||||
struct swaylock_surface *surface =
|
struct swaylock_surface *surface =
|
||||||
calloc(1, sizeof(struct swaylock_surface));
|
calloc(1, sizeof(struct swaylock_surface));
|
||||||
surface->state = state;
|
surface->state = state;
|
||||||
surface->output = wl_registry_bind(registry, name,
|
surface->output = wl_registry_bind(registry, name,
|
||||||
&wl_output_interface, 3);
|
&wl_output_interface, 4);
|
||||||
surface->output_global_name = name;
|
surface->output_global_name = name;
|
||||||
wl_output_add_listener(surface->output, &_wl_output_listener, surface);
|
wl_output_add_listener(surface->output, &_wl_output_listener, surface);
|
||||||
wl_list_insert(&state->surfaces, &surface->link);
|
wl_list_insert(&state->surfaces, &surface->link);
|
||||||
@ -1265,20 +1239,6 @@ int main(int argc, char **argv) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (state.zxdg_output_manager) {
|
|
||||||
struct swaylock_surface *surface;
|
|
||||||
wl_list_for_each(surface, &state.surfaces, link) {
|
|
||||||
surface->xdg_output = zxdg_output_manager_v1_get_xdg_output(
|
|
||||||
state.zxdg_output_manager, surface->output);
|
|
||||||
zxdg_output_v1_add_listener(
|
|
||||||
surface->xdg_output, &_xdg_output_listener, surface);
|
|
||||||
}
|
|
||||||
wl_display_roundtrip(state.display);
|
|
||||||
} else {
|
|
||||||
swaylock_log(LOG_INFO, "Compositor does not support zxdg output "
|
|
||||||
"manager, images assigned to named outputs will not work");
|
|
||||||
}
|
|
||||||
|
|
||||||
struct swaylock_surface *surface;
|
struct swaylock_surface *surface;
|
||||||
wl_list_for_each(surface, &state.surfaces, link) {
|
wl_list_for_each(surface, &state.surfaces, link) {
|
||||||
create_surface(surface);
|
create_surface(surface);
|
||||||
|
@ -36,7 +36,7 @@ if is_freebsd
|
|||||||
add_project_arguments('-D_C11_SOURCE', language: 'c')
|
add_project_arguments('-D_C11_SOURCE', language: 'c')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
wayland_client = dependency('wayland-client')
|
wayland_client = dependency('wayland-client', version: '>=1.20.0')
|
||||||
wayland_protos = dependency('wayland-protocols', version: '>=1.25', fallback: 'wayland-protocols')
|
wayland_protos = dependency('wayland-protocols', version: '>=1.25', fallback: 'wayland-protocols')
|
||||||
wayland_scanner = dependency('wayland-scanner', version: '>=1.15.0')
|
wayland_scanner = dependency('wayland-scanner', version: '>=1.15.0')
|
||||||
xkbcommon = dependency('xkbcommon')
|
xkbcommon = dependency('xkbcommon')
|
||||||
@ -81,7 +81,6 @@ client_protos_headers = []
|
|||||||
|
|
||||||
client_protocols = [
|
client_protocols = [
|
||||||
[wl_protocol_dir, 'stable/xdg-shell/xdg-shell.xml'],
|
[wl_protocol_dir, 'stable/xdg-shell/xdg-shell.xml'],
|
||||||
[wl_protocol_dir, 'unstable/xdg-output/xdg-output-unstable-v1.xml'],
|
|
||||||
[wl_protocol_dir, 'staging/ext-session-lock/ext-session-lock-v1.xml'],
|
[wl_protocol_dir, 'staging/ext-session-lock/ext-session-lock-v1.xml'],
|
||||||
['wlr-layer-shell-unstable-v1.xml'],
|
['wlr-layer-shell-unstable-v1.xml'],
|
||||||
['wlr-input-inhibitor-unstable-v1.xml'],
|
['wlr-input-inhibitor-unstable-v1.xml'],
|
||||||
|
Loading…
Reference in New Issue
Block a user