aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/env_vars.md2
-rw-r--r--include/wlr/types/meson.build2
-rw-r--r--include/wlr/types/wlr_xdg_output_v1.h (renamed from include/wlr/types/wlr_xdg_output.h)14
-rw-r--r--rootston/desktop.c6
-rw-r--r--types/meson.build2
-rw-r--r--types/wlr_output.c7
-rw-r--r--types/wlr_xdg_output_v1.c (renamed from types/wlr_xdg_output.c)42
7 files changed, 42 insertions, 33 deletions
diff --git a/docs/env_vars.md b/docs/env_vars.md
index b28849cc..34d91579 100644
--- a/docs/env_vars.md
+++ b/docs/env_vars.md
@@ -14,6 +14,8 @@ wlroots specific
* *WLR_X11_OUTPUTS*: when using the X11 backend specifies the number of outputs
* *WLR_HEADLESS_OUTPUTS*: when using the headless backend specifies the number
of outputs
+* *WLR_NO_HARDWARE_CURSORS*: set to 1 to use software cursors instead of
+ hardware cursors
rootston specific
------------------
diff --git a/include/wlr/types/meson.build b/include/wlr/types/meson.build
index 8f44259e..6a8955c3 100644
--- a/include/wlr/types/meson.build
+++ b/include/wlr/types/meson.build
@@ -35,7 +35,7 @@ install_headers(
'wlr_wl_shell.h',
'wlr_xcursor_manager.h',
'wlr_xdg_decoration_v1.h',
- 'wlr_xdg_output.h',
+ 'wlr_xdg_output_v1.h',
'wlr_xdg_shell.h',
'wlr_xdg_shell_v6.h',
subdir: 'wlr/types',
diff --git a/include/wlr/types/wlr_xdg_output.h b/include/wlr/types/wlr_xdg_output_v1.h
index 60611307..d4279fb9 100644
--- a/include/wlr/types/wlr_xdg_output.h
+++ b/include/wlr/types/wlr_xdg_output_v1.h
@@ -6,13 +6,13 @@
#error "Add -DWLR_USE_UNSTABLE to enable unstable wlroots features"
#endif
-#ifndef WLR_TYPES_WLR_XDG_OUTPUT_H
-#define WLR_TYPES_WLR_XDG_OUTPUT_H
+#ifndef WLR_TYPES_WLR_XDG_OUTPUT_V1_H
+#define WLR_TYPES_WLR_XDG_OUTPUT_V1_H
#include <wayland-server.h>
#include <wlr/types/wlr_output_layout.h>
-struct wlr_xdg_output {
- struct wlr_xdg_output_manager *manager;
+struct wlr_xdg_output_v1 {
+ struct wlr_xdg_output_manager_v1 *manager;
struct wl_list resources;
struct wl_list link;
@@ -24,7 +24,7 @@ struct wlr_xdg_output {
struct wl_listener destroy;
};
-struct wlr_xdg_output_manager {
+struct wlr_xdg_output_manager_v1 {
struct wl_global *global;
struct wl_list resources;
struct wlr_output_layout *layout;
@@ -40,8 +40,8 @@ struct wlr_xdg_output_manager {
} events;
};
-struct wlr_xdg_output_manager *wlr_xdg_output_manager_create(
+struct wlr_xdg_output_manager_v1 *wlr_xdg_output_manager_v1_create(
struct wl_display *display, struct wlr_output_layout *layout);
-void wlr_xdg_output_manager_destroy(struct wlr_xdg_output_manager *manager);
+void wlr_xdg_output_manager_v1_destroy(struct wlr_xdg_output_manager_v1 *manager);
#endif
diff --git a/rootston/desktop.c b/rootston/desktop.c
index 39d25d1b..3f6d977e 100644
--- a/rootston/desktop.c
+++ b/rootston/desktop.c
@@ -19,10 +19,10 @@
#include <wlr/types/wlr_server_decoration.h>
#include <wlr/types/wlr_wl_shell.h>
#include <wlr/types/wlr_xcursor_manager.h>
-#include <wlr/types/wlr_xdg_output.h>
+#include <wlr/types/wlr_xdg_output_v1.h>
#include <wlr/types/wlr_xdg_shell_v6.h>
#include <wlr/types/wlr_xdg_shell.h>
-#include <wlr/types/wlr_xdg_output.h>
+#include <wlr/types/wlr_xdg_output_v1.h>
#include <wlr/types/wlr_tablet_v2.h>
#include <wlr/util/log.h>
#include "rootston/layers.h"
@@ -795,7 +795,7 @@ struct roots_desktop *desktop_create(struct roots_server *server,
desktop->config = config;
desktop->layout = wlr_output_layout_create();
- wlr_xdg_output_manager_create(server->wl_display, desktop->layout);
+ wlr_xdg_output_manager_v1_create(server->wl_display, desktop->layout);
desktop->layout_change.notify = handle_layout_change;
wl_signal_add(&desktop->layout->events.change, &desktop->layout_change);
diff --git a/types/meson.build b/types/meson.build
index dc1fbe7b..1329060e 100644
--- a/types/meson.build
+++ b/types/meson.build
@@ -55,7 +55,7 @@ lib_wlr_types = static_library(
'wlr_wl_shell.c',
'wlr_xcursor_manager.c',
'wlr_xdg_decoration_v1.c',
- 'wlr_xdg_output.c',
+ 'wlr_xdg_output_v1.c',
'wlr_screencopy_v1.c',
),
include_directories: wlr_inc,
diff --git a/types/wlr_output.c b/types/wlr_output.c
index abbdab9c..3a911f4b 100644
--- a/types/wlr_output.c
+++ b/types/wlr_output.c
@@ -720,6 +720,13 @@ static bool output_cursor_attempt_hardware(struct wlr_output_cursor *cursor) {
transform = cursor->surface->current.transform;
}
+ const char *no_hardware_cursors = getenv("WLR_NO_HARDWARE_CURSORS");
+ if (no_hardware_cursors != NULL && strcmp(no_hardware_cursors, "1") == 0) {
+ wlr_log(WLR_DEBUG,
+ "WLR_NO_HARDWARE_CURSORS set, forcing software cursors");
+ return false;
+ }
+
struct wlr_output_cursor *hwcur = cursor->output->hardware_cursor;
if (cursor->output->impl->set_cursor && (hwcur == NULL || hwcur == cursor)) {
// If the cursor was hidden or was a software cursor, the hardware
diff --git a/types/wlr_xdg_output.c b/types/wlr_xdg_output_v1.c
index 8c7a1fcb..5e8419ae 100644
--- a/types/wlr_xdg_output.c
+++ b/types/wlr_xdg_output_v1.c
@@ -3,7 +3,7 @@
#include <stdio.h>
#include <wlr/types/wlr_output_layout.h>
#include <wlr/types/wlr_output.h>
-#include <wlr/types/wlr_xdg_output.h>
+#include <wlr/types/wlr_xdg_output_v1.h>
#include <wlr/util/log.h>
#include "xdg-output-unstable-v1-protocol.h"
#include "util/signal.h"
@@ -23,7 +23,7 @@ static void output_handle_resource_destroy(struct wl_resource *resource) {
wl_list_remove(wl_resource_get_link(resource));
}
-static void output_send_details(struct wlr_xdg_output *xdg_output,
+static void output_send_details(struct wlr_xdg_output_v1 *xdg_output,
struct wl_resource *resource) {
struct wlr_output *output = xdg_output->layout_output->output;
@@ -46,7 +46,7 @@ static void output_send_details(struct wlr_xdg_output *xdg_output,
zxdg_output_v1_send_done(resource);
}
-static void output_update(struct wlr_xdg_output *xdg_output) {
+static void output_update(struct wlr_xdg_output_v1 *xdg_output) {
struct wlr_output_layout_output *layout_output = xdg_output->layout_output;
bool updated = false;
@@ -72,7 +72,7 @@ static void output_update(struct wlr_xdg_output *xdg_output) {
}
}
-static void output_destroy(struct wlr_xdg_output *output) {
+static void output_destroy(struct wlr_xdg_output_v1 *output) {
struct wl_resource *resource, *tmp;
wl_resource_for_each_safe(resource, tmp, &output->resources) {
wl_list_remove(wl_resource_get_link(resource));
@@ -98,7 +98,7 @@ static void output_manager_handle_get_xdg_output(struct wl_client *client,
assert(wl_resource_instance_of(resource, &zxdg_output_manager_v1_interface,
&output_manager_implementation));
- struct wlr_xdg_output_manager *manager =
+ struct wlr_xdg_output_manager_v1 *manager =
wl_resource_get_user_data(resource);
struct wlr_output_layout *layout = manager->layout;
struct wlr_output *output = wlr_output_from_resource(output_resource);
@@ -107,7 +107,7 @@ static void output_manager_handle_get_xdg_output(struct wl_client *client,
wlr_output_layout_get(layout, output);
assert(layout_output);
- struct wlr_xdg_output *_xdg_output, *xdg_output = NULL;
+ struct wlr_xdg_output_v1 *_xdg_output, *xdg_output = NULL;
wl_list_for_each(_xdg_output, &manager->outputs, link) {
if (_xdg_output->layout_output == layout_output) {
xdg_output = _xdg_output;
@@ -144,7 +144,7 @@ static void output_manager_handle_resource_destroy(
static void output_manager_bind(struct wl_client *wl_client, void *data,
uint32_t version, uint32_t id) {
- struct wlr_xdg_output_manager *manager = data;
+ struct wlr_xdg_output_manager_v1 *manager = data;
struct wl_resource *resource = wl_resource_create(wl_client,
&zxdg_output_manager_v1_interface, version, id);
@@ -158,13 +158,13 @@ static void output_manager_bind(struct wl_client *wl_client, void *data,
}
static void handle_output_destroy(struct wl_listener *listener, void *data) {
- struct wlr_xdg_output *output = wl_container_of(listener, output, destroy);
+ struct wlr_xdg_output_v1 *output = wl_container_of(listener, output, destroy);
output_destroy(output);
}
-static void add_output(struct wlr_xdg_output_manager *manager,
+static void add_output(struct wlr_xdg_output_manager_v1 *manager,
struct wlr_output_layout_output *layout_output) {
- struct wlr_xdg_output *output = calloc(1, sizeof(struct wlr_xdg_output));
+ struct wlr_xdg_output_v1 *output = calloc(1, sizeof(struct wlr_xdg_output_v1));
if (output == NULL) {
return;
}
@@ -178,37 +178,37 @@ static void add_output(struct wlr_xdg_output_manager *manager,
}
static void output_manager_send_details(
- struct wlr_xdg_output_manager *manager) {
- struct wlr_xdg_output *output;
+ struct wlr_xdg_output_manager_v1 *manager) {
+ struct wlr_xdg_output_v1 *output;
wl_list_for_each(output, &manager->outputs, link) {
output_update(output);
}
}
static void handle_layout_add(struct wl_listener *listener, void *data) {
- struct wlr_xdg_output_manager *manager =
+ struct wlr_xdg_output_manager_v1 *manager =
wl_container_of(listener, manager, layout_add);
struct wlr_output_layout_output *layout_output = data;
add_output(manager, layout_output);
}
static void handle_layout_change(struct wl_listener *listener, void *data) {
- struct wlr_xdg_output_manager *manager =
+ struct wlr_xdg_output_manager_v1 *manager =
wl_container_of(listener, manager, layout_change);
output_manager_send_details(manager);
}
static void handle_layout_destroy(struct wl_listener *listener, void *data) {
- struct wlr_xdg_output_manager *manager =
+ struct wlr_xdg_output_manager_v1 *manager =
wl_container_of(listener, manager, layout_destroy);
- wlr_xdg_output_manager_destroy(manager);
+ wlr_xdg_output_manager_v1_destroy(manager);
}
-struct wlr_xdg_output_manager *wlr_xdg_output_manager_create(
+struct wlr_xdg_output_manager_v1 *wlr_xdg_output_manager_v1_create(
struct wl_display *display, struct wlr_output_layout *layout) {
assert(display && layout);
- struct wlr_xdg_output_manager *manager =
- calloc(1, sizeof(struct wlr_xdg_output_manager));
+ struct wlr_xdg_output_manager_v1 *manager =
+ calloc(1, sizeof(struct wlr_xdg_output_manager_v1));
if (manager == NULL) {
return NULL;
}
@@ -239,8 +239,8 @@ struct wlr_xdg_output_manager *wlr_xdg_output_manager_create(
return manager;
}
-void wlr_xdg_output_manager_destroy(struct wlr_xdg_output_manager *manager) {
- struct wlr_xdg_output *output, *output_tmp;
+void wlr_xdg_output_manager_v1_destroy(struct wlr_xdg_output_manager_v1 *manager) {
+ struct wlr_xdg_output_v1 *output, *output_tmp;
wl_list_for_each_safe(output, output_tmp, &manager->outputs, link) {
output_destroy(output);
}