aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/backend/drm/drm.h1
-rw-r--r--include/rootston/config.h27
-rw-r--r--include/rootston/desktop.h2
-rw-r--r--include/rootston/input.h24
-rw-r--r--include/rootston/server.h2
-rw-r--r--include/rootston/view.h3
-rw-r--r--include/wlr/interfaces/wlr_data_source.h16
-rw-r--r--include/wlr/types/wlr_data_device.h89
-rw-r--r--include/wlr/types/wlr_data_device_manager.h26
-rw-r--r--include/wlr/types/wlr_data_source.h32
-rw-r--r--include/wlr/types/wlr_seat.h20
-rw-r--r--include/wlr/types/wlr_server_decoration.h44
12 files changed, 197 insertions, 89 deletions
diff --git a/include/backend/drm/drm.h b/include/backend/drm/drm.h
index 4d23f963..a6dd247c 100644
--- a/include/backend/drm/drm.h
+++ b/include/backend/drm/drm.h
@@ -33,6 +33,7 @@ struct wlr_drm_plane {
float matrix[16];
struct wlr_texture *wlr_tex;
struct gbm_bo *cursor_bo;
+ bool cursor_enabled;
union wlr_drm_plane_props props;
};
diff --git a/include/rootston/config.h b/include/rootston/config.h
index 5fa4890f..ecbdd88b 100644
--- a/include/rootston/config.h
+++ b/include/rootston/config.h
@@ -26,6 +26,17 @@ struct binding_config {
struct wl_list link;
};
+struct keyboard_config {
+ char *name;
+ uint32_t meta_key;
+ char *rules;
+ char *model;
+ char *layout;
+ char *variant;
+ char *options;
+ struct wl_list link;
+};
+
struct roots_config {
bool xwayland;
// TODO: Multiple cursors, multiseat
@@ -34,13 +45,10 @@ struct roots_config {
struct wlr_box *mapped_box;
} cursor;
- struct {
- uint32_t meta_key;
- } keyboard;
-
struct wl_list outputs;
struct wl_list devices;
struct wl_list bindings;
+ struct wl_list keyboards;
char *config_path;
char *startup_cmd;
};
@@ -54,13 +62,20 @@ void roots_config_destroy(struct roots_config *config);
* NULL.
*/
struct output_config *config_get_output(struct roots_config *config,
- struct wlr_output *output);
+ struct wlr_output *output);
/**
* Get configuration for the device. If the device is not configured, returns
* NULL.
*/
struct device_config *config_get_device(struct roots_config *config,
- struct wlr_input_device *device);
+ struct wlr_input_device *device);
+
+/**
+ * Get configuration for the keyboard. If the keyboard is not configured,
+ * returns NULL. A NULL device returns the default config for keyboards.
+ */
+struct keyboard_config *config_get_keyboard(struct roots_config *config,
+ struct wlr_input_device *device);
#endif
diff --git a/include/rootston/desktop.h b/include/rootston/desktop.h
index c3859afb..376412fb 100644
--- a/include/rootston/desktop.h
+++ b/include/rootston/desktop.h
@@ -37,11 +37,13 @@ struct roots_desktop {
struct wlr_xdg_shell_v6 *xdg_shell_v6;
struct wlr_gamma_control_manager *gamma_control_manager;
struct wlr_screenshooter *screenshooter;
+ struct wlr_server_decoration_manager *server_decoration_manager;
struct wl_listener output_add;
struct wl_listener output_remove;
struct wl_listener xdg_shell_v6_surface;
struct wl_listener wl_shell_surface;
+ struct wl_listener decoration_new;
#ifdef HAS_XWAYLAND
struct wlr_xwayland *xwayland;
diff --git a/include/rootston/input.h b/include/rootston/input.h
index b55288c9..5cd7509e 100644
--- a/include/rootston/input.h
+++ b/include/rootston/input.h
@@ -65,6 +65,17 @@ struct roots_input_event {
struct wlr_input_device *device;
};
+struct roots_drag_icon {
+ struct wlr_surface *surface;
+ struct wl_list link; // roots_input::drag_icons
+
+ int32_t sx;
+ int32_t sy;
+
+ struct wl_listener surface_destroy;
+ struct wl_listener surface_commit;
+};
+
struct roots_touch_point {
struct roots_touch *device;
int32_t slot;
@@ -78,13 +89,13 @@ struct roots_input {
// TODO: multiseat, multicursor
struct wlr_cursor *cursor;
- struct wlr_xcursor_theme *theme;
- struct wlr_xcursor *xcursor;
+ struct wlr_xcursor_theme *xcursor_theme;
struct wlr_seat *wl_seat;
+ struct wl_list drag_icons;
struct wl_client *cursor_client;
enum roots_cursor_mode mode;
- struct roots_view *active_view, *last_active_view;
+ struct roots_view *active_view;
int offs_x, offs_y;
int view_x, view_y, view_width, view_height;
float view_rotation;
@@ -114,6 +125,7 @@ struct roots_input {
struct wl_listener cursor_tool_axis;
struct wl_listener cursor_tool_tip;
+ struct wl_listener pointer_grab_begin;
struct wl_list touch_points;
struct wl_listener pointer_grab_end;
@@ -146,6 +158,12 @@ void view_begin_move(struct roots_input *input, struct wlr_cursor *cursor,
void view_begin_resize(struct roots_input *input, struct wlr_cursor *cursor,
struct roots_view *view, uint32_t edges);
+struct wlr_xcursor *get_default_xcursor(struct wlr_xcursor_theme *theme);
+struct wlr_xcursor *get_move_xcursor(struct wlr_xcursor_theme *theme);
+struct wlr_xcursor *get_resize_xcursor(struct wlr_xcursor_theme *theme,
+ uint32_t edges);
+struct wlr_xcursor *get_rotate_xcursor(struct wlr_xcursor_theme *theme);
+
void set_view_focus(struct roots_input *input, struct roots_desktop *desktop,
struct roots_view *view);
diff --git a/include/rootston/server.h b/include/rootston/server.h
index a4eacb7f..8fc6530e 100644
--- a/include/rootston/server.h
+++ b/include/rootston/server.h
@@ -3,7 +3,7 @@
#include <wayland-server.h>
#include <wlr/backend.h>
#include <wlr/backend/session.h>
-#include <wlr/types/wlr_data_device_manager.h>
+#include <wlr/types/wlr_data_device.h>
#include <wlr/render.h>
#ifdef HAS_XWAYLAND
#include <wlr/xwayland.h>
diff --git a/include/rootston/view.h b/include/rootston/view.h
index 7d297329..9eb7065d 100644
--- a/include/rootston/view.h
+++ b/include/rootston/view.h
@@ -80,6 +80,7 @@ void view_resize(struct roots_view *view, uint32_t width, uint32_t height);
void view_set_position(struct roots_view *view, double x, double y);
void view_close(struct roots_view *view);
bool view_center(struct roots_view *view);
-void view_initialize(struct roots_view *view);
+void view_setup(struct roots_view *view);
+void view_teardown(struct roots_view *view);
#endif
diff --git a/include/wlr/interfaces/wlr_data_source.h b/include/wlr/interfaces/wlr_data_source.h
deleted file mode 100644
index 821bdea0..00000000
--- a/include/wlr/interfaces/wlr_data_source.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifndef WLR_INTERFACES_WLR_DATA_SOURCE_H
-#define WLR_INTERFACES_WLR_DATA_SOURCE_H
-
-#include <wlr/types/wlr_data_source.h>
-
-struct wlr_data_source_impl {
- void (*send)(struct wlr_data_source *data_source, const char *type, int fd);
- void (*accepted)(struct wlr_data_source *data_source, const char *type);
- void (*cancelled)(struct wlr_data_source *data_source);
-};
-
-bool wlr_data_source_init(struct wlr_data_source *source,
- struct wlr_data_source_impl *impl);
-void wlr_data_source_finish(struct wlr_data_source *source);
-
-#endif
diff --git a/include/wlr/types/wlr_data_device.h b/include/wlr/types/wlr_data_device.h
new file mode 100644
index 00000000..e1e1e516
--- /dev/null
+++ b/include/wlr/types/wlr_data_device.h
@@ -0,0 +1,89 @@
+#ifndef WLR_TYPES_WLR_DATA_DEVICE_H
+#define WLR_TYPES_WLR_DATA_DEVICE_H
+
+#include <wayland-server.h>
+#include <wlr/types/wlr_seat.h>
+
+extern const struct
+wlr_pointer_grab_interface wlr_data_device_pointer_drag_interface;
+
+extern const struct
+wlr_keyboard_grab_interface wlr_data_device_keyboard_drag_interface;
+
+struct wlr_data_device_manager {
+ struct wl_global *global;
+};
+
+struct wlr_data_offer {
+ struct wl_resource *resource;
+ struct wlr_data_source *source;
+
+ uint32_t dnd_actions;
+ enum wl_data_device_manager_dnd_action preferred_dnd_action;
+ bool in_ask;
+
+ struct wl_listener source_destroy;
+};
+
+struct wlr_data_source {
+ struct wl_resource *resource;
+ struct wlr_data_offer *offer;
+ struct wlr_seat_handle *seat;
+ struct wl_array mime_types;
+
+ bool accepted;
+
+ // drag and drop
+ enum wl_data_device_manager_dnd_action current_dnd_action;
+ uint32_t dnd_actions;
+ uint32_t compositor_action;
+ bool actions_set;
+
+ void (*accept)(struct wlr_data_source *source, uint32_t serial,
+ const char *mime_type);
+ void (*send)(struct wlr_data_source *source, const char *mime_type,
+ int32_t fd);
+ void (*cancel)(struct wlr_data_source *source);
+
+ struct {
+ struct wl_signal destroy;
+ } events;
+};
+
+struct wlr_drag {
+ struct wlr_seat_pointer_grab pointer_grab;
+ struct wlr_seat_keyboard_grab keyboard_grab;
+
+ struct wlr_seat_handle *handle;
+ struct wlr_seat_handle *focus_handle;
+
+ struct wlr_surface *icon;
+ struct wlr_surface *focus;
+ struct wlr_data_source *source;
+
+ struct wl_listener icon_destroy;
+ struct wl_listener source_destroy;
+ struct wl_listener handle_unbound;
+};
+
+/**
+ * Create a wl data device manager global for this display.
+ */
+struct wlr_data_device_manager *wlr_data_device_manager_create(
+ struct wl_display *display);
+
+/**
+ * Creates a new wl_data_offer if there is a wl_data_source currently set as the
+ * seat selection and sends it to the client for this handle, followed by the
+ * wl_data_device.selection() event.
+ * If there is no current selection, the wl_data_device.selection() event will
+ * carry a NULL wl_data_offer.
+ * If the client does not have a wl_data_device for the seat nothing * will be
+ * done.
+ */
+void wlr_seat_handle_send_selection(struct wlr_seat_handle *handle);
+
+void wlr_seat_set_selection(struct wlr_seat *seat,
+ struct wlr_data_source *source, uint32_t serial);
+
+#endif
diff --git a/include/wlr/types/wlr_data_device_manager.h b/include/wlr/types/wlr_data_device_manager.h
deleted file mode 100644
index 500f8acd..00000000
--- a/include/wlr/types/wlr_data_device_manager.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef WLR_TYPES_WLR_DATA_DEVICE_MANAGER_H
-#define WLR_TYPES_WLR_DATA_DEVICE_MANAGER_H
-
-#include <wayland-server.h>
-
-struct wlr_data_device_manager {
- struct wl_global *global;
-};
-
-struct wlr_data_device_manager *wlr_data_device_manager_create(struct wl_display *dpy);
-void wlr_data_device_manager_destroy(struct wlr_data_device_manager *manager);
-
-struct wlr_data_device {
- struct wlr_seat *seat;
- struct wlr_data_source *selection;
- struct wl_listener selection_destroyed;
-
- struct {
- struct wl_signal selection_change;
- } events;
-};
-
-void wlr_data_device_set_selection(struct wlr_data_device *manager,
- struct wlr_data_source *source);
-
-#endif
diff --git a/include/wlr/types/wlr_data_source.h b/include/wlr/types/wlr_data_source.h
deleted file mode 100644
index f54ac0a9..00000000
--- a/include/wlr/types/wlr_data_source.h
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef WLR_TYPES_WLR_DATA_SOURCE_H
-#define WLR_TYPES_WLR_DATA_SOURCE_H
-
-#include <wayland-server.h>
-#include <wlr/types/wlr_list.h>
-
-struct wlr_data_source_impl;
-
-struct wlr_data_source {
- struct wlr_data_source_impl *impl;
- struct wlr_list *types;
- void *data;
-
- struct {
- struct wl_signal destroy;
- } events;
-};
-
-void wlr_data_source_send(struct wlr_data_source *src, const char *type, int fd);
-void wlr_data_source_accepted(struct wlr_data_source *src, const char *type);
-void wlr_data_source_cancelled(struct wlr_data_source *src);
-
-struct wlr_wl_data_source {
- struct wlr_data_source base;
- struct wl_resource *resource;
-};
-
-struct wlr_wl_data_source *wlr_wl_data_source_create(
- struct wl_client *client,
- uint32_t version, uint32_t id);
-
-#endif
diff --git a/include/wlr/types/wlr_seat.h b/include/wlr/types/wlr_seat.h
index 6fda89b9..d241175b 100644
--- a/include/wlr/types/wlr_seat.h
+++ b/include/wlr/types/wlr_seat.h
@@ -74,11 +74,16 @@ struct wlr_seat_pointer_state {
struct wlr_seat_handle *focused_handle;
struct wlr_surface *focused_surface;
- struct wl_listener surface_destroy;
- struct wl_listener resource_destroy;
-
struct wlr_seat_pointer_grab *grab;
struct wlr_seat_pointer_grab *default_grab;
+
+ uint32_t button_count;
+ uint32_t grab_button;
+ uint32_t grab_serial;
+ uint32_t grab_time;
+
+ struct wl_listener surface_destroy;
+ struct wl_listener resource_destroy;
};
struct wlr_seat_keyboard_state {
@@ -104,11 +109,16 @@ struct wlr_seat {
struct wl_list handles;
char *name;
uint32_t capabilities;
- struct wlr_data_device *data_device;
+
+ struct wlr_data_device *data_device; // TODO needed?
+ struct wlr_data_source *selection_source;
+ uint32_t selection_serial;
struct wlr_seat_pointer_state pointer_state;
struct wlr_seat_keyboard_state keyboard_state;
+ struct wl_listener selection_data_source_destroy;
+
struct {
struct wl_signal client_bound;
struct wl_signal client_unbound;
@@ -120,6 +130,8 @@ struct wlr_seat {
struct wl_signal keyboard_grab_end;
struct wl_signal request_set_cursor;
+
+ struct wl_signal selection;
} events;
void *data;
diff --git a/include/wlr/types/wlr_server_decoration.h b/include/wlr/types/wlr_server_decoration.h
new file mode 100644
index 00000000..b4cac5b7
--- /dev/null
+++ b/include/wlr/types/wlr_server_decoration.h
@@ -0,0 +1,44 @@
+#ifndef WLR_TYPES_WLR_SERVER_DECORATION_H
+#define WLR_TYPES_WLR_SERVER_DECORATION_H
+
+#include <wayland-server.h>
+
+struct wlr_server_decoration_manager {
+ struct wl_global *wl_global;
+ struct wl_list wl_resources;
+ struct wl_list decorations; // wlr_server_decoration::link
+
+ uint32_t default_mode; // enum org_kde_kwin_server_decoration_manager_mode
+
+ struct {
+ struct wl_signal new_decoration;
+ } events;
+
+ void *data;
+};
+
+struct wlr_server_decoration {
+ struct wl_resource *resource;
+ struct wlr_surface *surface;
+ struct wl_list link;
+
+ uint32_t mode; // enum org_kde_kwin_server_decoration_manager_mode
+
+ struct {
+ struct wl_signal destroy;
+ struct wl_signal mode;
+ } events;
+
+ struct wl_listener surface_destroy_listener;
+
+ void *data;
+};
+
+struct wlr_server_decoration_manager *wlr_server_decoration_manager_create(
+ struct wl_display *display);
+void wlr_server_decoration_manager_set_default_mode(
+ struct wlr_server_decoration_manager *manager, uint32_t default_mode);
+void wlr_server_decoration_manager_destroy(
+ struct wlr_server_decoration_manager *manager);
+
+#endif