mirror of
https://github.com/hyprwm/wlroots-hyprland.git
synced 2024-11-25 22:25:58 +01:00
cursor: keep track of XCursor manager and name
Will be useful to apply the current cursor to new outputs.
This commit is contained in:
parent
69c44de22f
commit
d1d6cd9008
1 changed files with 18 additions and 0 deletions
|
@ -1,3 +1,4 @@
|
||||||
|
#define _POSIX_C_SOURCE 200809L
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
@ -87,6 +88,10 @@ struct wlr_cursor_state {
|
||||||
} surface_hotspot;
|
} surface_hotspot;
|
||||||
struct wl_listener surface_commit;
|
struct wl_listener surface_commit;
|
||||||
struct wl_listener surface_destroy;
|
struct wl_listener surface_destroy;
|
||||||
|
|
||||||
|
// only when using an XCursor as the cursor image
|
||||||
|
struct wlr_xcursor_manager *xcursor_manager;
|
||||||
|
char *xcursor_name;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct wlr_cursor *wlr_cursor_create(void) {
|
struct wlr_cursor *wlr_cursor_create(void) {
|
||||||
|
@ -215,6 +220,10 @@ static void cursor_reset_image(struct wlr_cursor *cur) {
|
||||||
wl_list_init(&cur->state->surface_destroy.link);
|
wl_list_init(&cur->state->surface_destroy.link);
|
||||||
wl_list_init(&cur->state->surface_commit.link);
|
wl_list_init(&cur->state->surface_commit.link);
|
||||||
cur->state->surface = NULL;
|
cur->state->surface = NULL;
|
||||||
|
|
||||||
|
cur->state->xcursor_manager = NULL;
|
||||||
|
free(cur->state->xcursor_name);
|
||||||
|
cur->state->xcursor_name = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wlr_cursor_destroy(struct wlr_cursor *cur) {
|
void wlr_cursor_destroy(struct wlr_cursor *cur) {
|
||||||
|
@ -484,6 +493,12 @@ static void output_cursor_set_xcursor_image(struct wlr_cursor_output_cursor *out
|
||||||
|
|
||||||
void wlr_cursor_set_xcursor(struct wlr_cursor *cur,
|
void wlr_cursor_set_xcursor(struct wlr_cursor *cur,
|
||||||
struct wlr_xcursor_manager *manager, const char *name) {
|
struct wlr_xcursor_manager *manager, const char *name) {
|
||||||
|
if (manager == cur->state->xcursor_manager &&
|
||||||
|
cur->state->xcursor_name != NULL &&
|
||||||
|
strcmp(name, cur->state->xcursor_name) == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
cursor_reset_image(cur);
|
cursor_reset_image(cur);
|
||||||
|
|
||||||
struct wlr_cursor_output_cursor *output_cursor;
|
struct wlr_cursor_output_cursor *output_cursor;
|
||||||
|
@ -499,6 +514,9 @@ void wlr_cursor_set_xcursor(struct wlr_cursor *cur,
|
||||||
output_cursor->xcursor = xcursor;
|
output_cursor->xcursor = xcursor;
|
||||||
output_cursor_set_xcursor_image(output_cursor, 0);
|
output_cursor_set_xcursor_image(output_cursor, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cur->state->xcursor_manager = manager;
|
||||||
|
cur->state->xcursor_name = strdup(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cursor_handle_surface_destroy(
|
static void cursor_handle_surface_destroy(
|
||||||
|
|
Loading…
Reference in a new issue