mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2025-11-24 06:59:45 -05:00
Merge branch 'master' into feature/xwm-selection
This commit is contained in:
commit
35188834db
48 changed files with 1130 additions and 591 deletions
|
|
@ -10,13 +10,6 @@ enum roots_cursor_mode {
|
|||
ROOTS_CURSOR_ROTATE = 3,
|
||||
};
|
||||
|
||||
enum roots_cursor_resize_edge {
|
||||
ROOTS_CURSOR_RESIZE_EDGE_TOP = 1,
|
||||
ROOTS_CURSOR_RESIZE_EDGE_BOTTOM = 2,
|
||||
ROOTS_CURSOR_RESIZE_EDGE_LEFT = 4,
|
||||
ROOTS_CURSOR_RESIZE_EDGE_RIGHT = 8,
|
||||
};
|
||||
|
||||
struct roots_input_event {
|
||||
uint32_t serial;
|
||||
struct wlr_cursor *cursor;
|
||||
|
|
|
|||
|
|
@ -19,13 +19,14 @@ struct roots_output {
|
|||
struct wlr_output *wlr_output;
|
||||
struct wl_listener frame;
|
||||
struct timespec last_frame;
|
||||
struct wl_list link;
|
||||
struct wl_list link; // roots_desktop:outputs
|
||||
struct roots_view *fullscreen_view;
|
||||
};
|
||||
|
||||
struct roots_desktop {
|
||||
struct wl_list views; // roots_view::link
|
||||
|
||||
struct wl_list outputs;
|
||||
struct wl_list outputs; // roots_output::link
|
||||
struct timespec last_frame;
|
||||
|
||||
struct roots_server *server;
|
||||
|
|
@ -59,11 +60,13 @@ struct roots_server;
|
|||
struct roots_desktop *desktop_create(struct roots_server *server,
|
||||
struct roots_config *config);
|
||||
void desktop_destroy(struct roots_desktop *desktop);
|
||||
struct roots_output *desktop_output_from_wlr_output(
|
||||
struct roots_desktop *desktop, struct wlr_output *output);
|
||||
struct roots_view *desktop_view_at(struct roots_desktop *desktop, double lx,
|
||||
double ly, struct wlr_surface **surface, double *sx, double *sy);
|
||||
|
||||
void view_init(struct roots_view *view, struct roots_desktop *desktop);
|
||||
void view_destroy(struct roots_view *view);
|
||||
struct roots_view *view_at(struct roots_desktop *desktop, double lx, double ly,
|
||||
struct wlr_surface **surface, double *sx, double *sy);
|
||||
void view_activate(struct roots_view *view, bool activate);
|
||||
|
||||
void output_add_notify(struct wl_listener *listener, void *data);
|
||||
|
|
|
|||
|
|
@ -12,7 +12,8 @@ struct roots_wl_shell_surface {
|
|||
struct wl_listener destroy;
|
||||
struct wl_listener request_move;
|
||||
struct wl_listener request_resize;
|
||||
struct wl_listener request_set_maximized;
|
||||
struct wl_listener request_maximize;
|
||||
struct wl_listener request_fullscreen;
|
||||
struct wl_listener set_state;
|
||||
|
||||
struct wl_listener surface_commit;
|
||||
|
|
@ -26,6 +27,9 @@ struct roots_xdg_surface_v6 {
|
|||
struct wl_listener request_move;
|
||||
struct wl_listener request_resize;
|
||||
struct wl_listener request_maximize;
|
||||
struct wl_listener request_fullscreen;
|
||||
|
||||
uint32_t pending_move_resize_configure_serial;
|
||||
};
|
||||
|
||||
struct roots_xwayland_surface {
|
||||
|
|
@ -36,8 +40,11 @@ struct roots_xwayland_surface {
|
|||
struct wl_listener request_move;
|
||||
struct wl_listener request_resize;
|
||||
struct wl_listener request_maximize;
|
||||
struct wl_listener request_fullscreen;
|
||||
struct wl_listener map_notify;
|
||||
struct wl_listener unmap_notify;
|
||||
|
||||
struct wl_listener surface_commit;
|
||||
};
|
||||
|
||||
enum roots_view_type {
|
||||
|
|
@ -54,12 +61,19 @@ struct roots_view {
|
|||
float rotation;
|
||||
|
||||
bool maximized;
|
||||
struct roots_output *fullscreen_output;
|
||||
struct {
|
||||
double x, y;
|
||||
uint32_t width, height;
|
||||
float rotation;
|
||||
} saved;
|
||||
|
||||
struct {
|
||||
bool update_x, update_y;
|
||||
double x, y;
|
||||
uint32_t width, height;
|
||||
} pending_move_resize;
|
||||
|
||||
// TODO: Something for roots-enforced width/height
|
||||
enum roots_view_type type;
|
||||
union {
|
||||
|
|
@ -93,6 +107,7 @@ struct roots_view {
|
|||
void (*move_resize)(struct roots_view *view, double x, double y,
|
||||
uint32_t width, uint32_t height);
|
||||
void (*maximize)(struct roots_view *view, bool maximized);
|
||||
void (*set_fullscreen)(struct roots_view *view, bool fullscreen);
|
||||
void (*close)(struct roots_view *view);
|
||||
};
|
||||
|
||||
|
|
@ -103,6 +118,8 @@ void view_resize(struct roots_view *view, uint32_t width, uint32_t height);
|
|||
void view_move_resize(struct roots_view *view, double x, double y,
|
||||
uint32_t width, uint32_t height);
|
||||
void view_maximize(struct roots_view *view, bool maximized);
|
||||
void view_set_fullscreen(struct roots_view *view, bool fullscreen,
|
||||
struct wlr_output *output);
|
||||
void view_close(struct roots_view *view);
|
||||
bool view_center(struct roots_view *view);
|
||||
void view_setup(struct roots_view *view);
|
||||
|
|
|
|||
|
|
@ -3,12 +3,10 @@
|
|||
|
||||
#include <stdint.h>
|
||||
|
||||
#define ROOTS_XCURSOR_SIZE 16
|
||||
#define ROOTS_XCURSOR_SIZE 24
|
||||
|
||||
#define ROOTS_XCURSOR_DEFAULT "left_ptr"
|
||||
#define ROOTS_XCURSOR_MOVE "grabbing"
|
||||
#define ROOTS_XCURSOR_ROTATE "grabbing"
|
||||
|
||||
const char *roots_xcursor_get_resize_name(uint32_t edges);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
12
include/util/os-compatibility.h
Normal file
12
include/util/os-compatibility.h
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
#ifndef _WLR_UTIL_OS_COMPATIBILITY_H
|
||||
#define _WLR_UTIL_OS_COMPATIBILITY_H
|
||||
|
||||
int os_fd_set_cloexec(int fd);
|
||||
|
||||
int set_cloexec_or_close(int fd);
|
||||
|
||||
int create_tmpfile_cloexec(char *tmpname);
|
||||
|
||||
int os_create_anonymous_file(off_t size);
|
||||
|
||||
#endif
|
||||
|
|
@ -16,6 +16,7 @@ struct wlr_output_cursor {
|
|||
struct wlr_output *output;
|
||||
double x, y;
|
||||
bool enabled;
|
||||
bool visible;
|
||||
uint32_t width, height;
|
||||
int32_t hotspot_x, hotspot_y;
|
||||
struct wl_list link;
|
||||
|
|
@ -64,6 +65,10 @@ struct wlr_output {
|
|||
struct wl_signal destroy;
|
||||
} events;
|
||||
|
||||
struct wlr_surface *fullscreen_surface;
|
||||
struct wl_listener fullscreen_surface_commit;
|
||||
struct wl_listener fullscreen_surface_destroy;
|
||||
|
||||
struct wl_list cursors; // wlr_output_cursor::link
|
||||
struct wlr_output_cursor *hardware_cursor;
|
||||
|
||||
|
|
@ -81,6 +86,7 @@ bool wlr_output_set_mode(struct wlr_output *output,
|
|||
void wlr_output_transform(struct wlr_output *output,
|
||||
enum wl_output_transform transform);
|
||||
void wlr_output_set_position(struct wlr_output *output, int32_t lx, int32_t ly);
|
||||
void wlr_output_set_scale(struct wlr_output *output, uint32_t scale);
|
||||
void wlr_output_destroy(struct wlr_output *output);
|
||||
void wlr_output_effective_resolution(struct wlr_output *output,
|
||||
int *width, int *height);
|
||||
|
|
@ -89,8 +95,13 @@ void wlr_output_swap_buffers(struct wlr_output *output);
|
|||
void wlr_output_set_gamma(struct wlr_output *output,
|
||||
uint32_t size, uint16_t *r, uint16_t *g, uint16_t *b);
|
||||
uint32_t wlr_output_get_gamma_size(struct wlr_output *output);
|
||||
void wlr_output_set_fullscreen_surface(struct wlr_output *output,
|
||||
struct wlr_surface *surface);
|
||||
|
||||
struct wlr_output_cursor *wlr_output_cursor_create(struct wlr_output *output);
|
||||
/**
|
||||
* Sets the cursor image. The image must be already scaled for the output.
|
||||
*/
|
||||
bool wlr_output_cursor_set_image(struct wlr_output_cursor *cursor,
|
||||
const uint8_t *pixels, int32_t stride, uint32_t width, uint32_t height,
|
||||
int32_t hotspot_x, int32_t hotspot_y);
|
||||
|
|
|
|||
|
|
@ -3,12 +3,35 @@
|
|||
|
||||
#include <wayland-server.h>
|
||||
|
||||
/**
|
||||
* Possible values to use in request_mode and the event mode. Same as
|
||||
* org_kde_kwin_server_decoration_manager_mode.
|
||||
*/
|
||||
enum wlr_server_decoration_manager_mode {
|
||||
/**
|
||||
* Undecorated: The surface is not decorated at all, neither server nor
|
||||
* client-side. An example is a popup surface which should not be
|
||||
* decorated.
|
||||
*/
|
||||
WLR_SERVER_DECORATION_MANAGER_MODE_NONE = 0,
|
||||
/**
|
||||
* Client-side decoration: The decoration is part of the surface and the
|
||||
* client.
|
||||
*/
|
||||
WLR_SERVER_DECORATION_MANAGER_MODE_CLIENT = 1,
|
||||
/**
|
||||
* Server-side decoration: The server embeds the surface into a decoration
|
||||
* frame.
|
||||
*/
|
||||
WLR_SERVER_DECORATION_MANAGER_MODE_SERVER = 2,
|
||||
};
|
||||
|
||||
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
|
||||
uint32_t default_mode; // enum wlr_server_decoration_manager_mode
|
||||
|
||||
struct {
|
||||
struct wl_signal new_decoration;
|
||||
|
|
@ -22,7 +45,7 @@ struct wlr_server_decoration {
|
|||
struct wlr_surface *surface;
|
||||
struct wl_list link;
|
||||
|
||||
uint32_t mode; // enum org_kde_kwin_server_decoration_manager_mode
|
||||
uint32_t mode; // enum wlr_server_decoration_manager_mode
|
||||
|
||||
struct {
|
||||
struct wl_signal destroy;
|
||||
|
|
|
|||
|
|
@ -1,9 +1,10 @@
|
|||
#ifndef WLR_TYPES_WLR_SURFACE_H
|
||||
#define WLR_TYPES_WLR_SURFACE_H
|
||||
#include <wayland-server.h>
|
||||
#include <pixman.h>
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <time.h>
|
||||
#include <pixman.h>
|
||||
#include <wayland-server.h>
|
||||
#include <wlr/types/wlr_output.h>
|
||||
|
||||
struct wlr_frame_callback {
|
||||
|
|
@ -142,4 +143,7 @@ void wlr_surface_send_enter(struct wlr_surface *surface,
|
|||
void wlr_surface_send_leave(struct wlr_surface *surface,
|
||||
struct wlr_output *output);
|
||||
|
||||
void wlr_surface_send_frame_done(struct wlr_surface *surface,
|
||||
const struct timespec *when);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -77,12 +77,13 @@ struct wlr_wl_shell_surface {
|
|||
|
||||
struct {
|
||||
struct wl_signal destroy;
|
||||
struct wl_signal commit;
|
||||
struct wl_signal ping_timeout;
|
||||
|
||||
struct wl_signal request_move;
|
||||
struct wl_signal request_resize;
|
||||
struct wl_signal request_set_fullscreen;
|
||||
struct wl_signal request_set_maximized;
|
||||
struct wl_signal request_fullscreen;
|
||||
struct wl_signal request_maximize;
|
||||
|
||||
struct wl_signal set_state;
|
||||
struct wl_signal set_title;
|
||||
|
|
@ -93,14 +94,12 @@ struct wlr_wl_shell_surface {
|
|||
};
|
||||
|
||||
struct wlr_wl_shell_surface_move_event {
|
||||
struct wl_client *client;
|
||||
struct wlr_wl_shell_surface *surface;
|
||||
struct wlr_seat_client *seat;
|
||||
uint32_t serial;
|
||||
};
|
||||
|
||||
struct wlr_wl_shell_surface_resize_event {
|
||||
struct wl_client *client;
|
||||
struct wlr_wl_shell_surface *surface;
|
||||
struct wlr_seat_client *seat;
|
||||
uint32_t serial;
|
||||
|
|
@ -108,15 +107,13 @@ struct wlr_wl_shell_surface_resize_event {
|
|||
};
|
||||
|
||||
struct wlr_wl_shell_surface_set_fullscreen_event {
|
||||
struct wl_client *client;
|
||||
struct wlr_wl_shell_surface *surface;
|
||||
enum wl_shell_surface_fullscreen_method method;
|
||||
uint32_t framerate;
|
||||
struct wlr_output *output;
|
||||
};
|
||||
|
||||
struct wlr_wl_shell_surface_set_maximized_event {
|
||||
struct wl_client *client;
|
||||
struct wlr_wl_shell_surface_maximize_event {
|
||||
struct wlr_wl_shell_surface *surface;
|
||||
struct wlr_output *output;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -107,7 +107,9 @@ struct wlr_xdg_surface_v6 {
|
|||
|
||||
bool configured;
|
||||
bool added;
|
||||
uint32_t configure_serial;
|
||||
struct wl_event_source *configure_idle;
|
||||
uint32_t configure_next_serial;
|
||||
struct wl_list configure_list;
|
||||
|
||||
char *title;
|
||||
|
|
@ -123,7 +125,6 @@ struct wlr_xdg_surface_v6 {
|
|||
struct {
|
||||
struct wl_signal commit;
|
||||
struct wl_signal destroy;
|
||||
struct wl_signal ack_configure;
|
||||
struct wl_signal ping_timeout;
|
||||
|
||||
struct wl_signal request_maximize;
|
||||
|
|
@ -138,27 +139,29 @@ struct wlr_xdg_surface_v6 {
|
|||
};
|
||||
|
||||
struct wlr_xdg_toplevel_v6_move_event {
|
||||
struct wl_client *client;
|
||||
struct wlr_xdg_surface_v6 *surface;
|
||||
struct wlr_seat_client *seat;
|
||||
uint32_t serial;
|
||||
};
|
||||
|
||||
struct wlr_xdg_toplevel_v6_resize_event {
|
||||
struct wl_client *client;
|
||||
struct wlr_xdg_surface_v6 *surface;
|
||||
struct wlr_seat_client *seat;
|
||||
uint32_t serial;
|
||||
uint32_t edges;
|
||||
};
|
||||
|
||||
struct wlr_xdg_toplevel_v6_set_fullscreen_event {
|
||||
struct wlr_xdg_surface_v6 *surface;
|
||||
bool fullscreen;
|
||||
struct wlr_output *output;
|
||||
};
|
||||
|
||||
struct wlr_xdg_toplevel_v6_show_window_menu_event {
|
||||
struct wl_client *client;
|
||||
struct wlr_xdg_surface_v6 *surface;
|
||||
struct wlr_seat_client *seat;
|
||||
uint32_t serial;
|
||||
uint32_t x;
|
||||
uint32_t y;
|
||||
uint32_t x, y;
|
||||
};
|
||||
|
||||
struct wlr_xdg_shell_v6 *wlr_xdg_shell_v6_create(struct wl_display *display);
|
||||
|
|
@ -171,37 +174,38 @@ void wlr_xdg_shell_v6_destroy(struct wlr_xdg_shell_v6 *xdg_shell);
|
|||
void wlr_xdg_surface_v6_ping(struct wlr_xdg_surface_v6 *surface);
|
||||
|
||||
/**
|
||||
* Request that this toplevel surface be the given size.
|
||||
* Request that this toplevel surface be the given size. Returns the associated
|
||||
* configure serial.
|
||||
*/
|
||||
void wlr_xdg_toplevel_v6_set_size(struct wlr_xdg_surface_v6 *surface,
|
||||
uint32_t wlr_xdg_toplevel_v6_set_size(struct wlr_xdg_surface_v6 *surface,
|
||||
uint32_t width, uint32_t height);
|
||||
|
||||
/**
|
||||
* Request that this toplevel surface show itself in an activated or deactivated
|
||||
* state.
|
||||
* state. Returns the associated configure serial.
|
||||
*/
|
||||
void wlr_xdg_toplevel_v6_set_activated(struct wlr_xdg_surface_v6 *surface,
|
||||
uint32_t wlr_xdg_toplevel_v6_set_activated(struct wlr_xdg_surface_v6 *surface,
|
||||
bool activated);
|
||||
|
||||
/**
|
||||
* Request that this toplevel surface consider itself maximized or not
|
||||
* maximized.
|
||||
* maximized. Returns the associated configure serial.
|
||||
*/
|
||||
void wlr_xdg_toplevel_v6_set_maximized(struct wlr_xdg_surface_v6 *surface,
|
||||
uint32_t wlr_xdg_toplevel_v6_set_maximized(struct wlr_xdg_surface_v6 *surface,
|
||||
bool maximized);
|
||||
|
||||
/**
|
||||
* Request that this toplevel surface consider itself fullscreen or not
|
||||
* fullscreen.
|
||||
* fullscreen. Returns the associated configure serial.
|
||||
*/
|
||||
void wlr_xdg_toplevel_v6_set_fullscreen(struct wlr_xdg_surface_v6 *surface,
|
||||
uint32_t wlr_xdg_toplevel_v6_set_fullscreen(struct wlr_xdg_surface_v6 *surface,
|
||||
bool fullscreen);
|
||||
|
||||
/**
|
||||
* Request that this toplevel surface consider itself to be resizing or not
|
||||
* resizing.
|
||||
* resizing. Returns the associated configure serial.
|
||||
*/
|
||||
void wlr_xdg_toplevel_v6_set_resizing(struct wlr_xdg_surface_v6 *surface,
|
||||
uint32_t wlr_xdg_toplevel_v6_set_resizing(struct wlr_xdg_surface_v6 *surface,
|
||||
bool resizing);
|
||||
|
||||
/**
|
||||
|
|
@ -223,4 +227,5 @@ void wlr_xdg_surface_v6_popup_get_position(struct wlr_xdg_surface_v6 *surface,
|
|||
struct wlr_xdg_surface_v6 *wlr_xdg_surface_v6_popup_at(
|
||||
struct wlr_xdg_surface_v6 *surface, double sx, double sy,
|
||||
double *popup_sx, double *popup_sy);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
12
include/wlr/util/edges.h
Normal file
12
include/wlr/util/edges.h
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
#ifndef WLR_UTIL_EDGES_H
|
||||
#define WLR_UTIL_EDGES_H
|
||||
|
||||
enum wlr_edges {
|
||||
WLR_EDGE_NONE = 0,
|
||||
WLR_EDGE_TOP = 1,
|
||||
WLR_EDGE_BOTTOM = 2,
|
||||
WLR_EDGE_LEFT = 4,
|
||||
WLR_EDGE_RIGHT = 8,
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
@ -32,6 +32,7 @@
|
|||
#define WLR_XCURSOR_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <wlr/util/edges.h>
|
||||
|
||||
struct wlr_xcursor_image {
|
||||
uint32_t width; /* actual width */
|
||||
|
|
@ -65,4 +66,9 @@ struct wlr_xcursor *wlr_xcursor_theme_get_cursor(
|
|||
|
||||
int wlr_xcursor_frame(struct wlr_xcursor *cursor, uint32_t time);
|
||||
|
||||
/**
|
||||
* Get the name of the resize cursor image for the given edges.
|
||||
*/
|
||||
const char *wlr_xcursor_get_resize_name(enum wlr_edges edges);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -155,21 +155,19 @@ void wlr_xwayland_set_cursor(struct wlr_xwayland *wlr_xwayland,
|
|||
uint8_t *pixels, uint32_t stride, uint32_t width, uint32_t height,
|
||||
int32_t hotspot_x, int32_t hotspot_y);
|
||||
|
||||
void wlr_xwayland_surface_activate(struct wlr_xwayland *wlr_xwayland,
|
||||
struct wlr_xwayland_surface *surface, bool activated);
|
||||
void wlr_xwayland_surface_activate(struct wlr_xwayland_surface *surface,
|
||||
bool activated);
|
||||
|
||||
void wlr_xwayland_surface_configure(struct wlr_xwayland *wlr_xwayland,
|
||||
struct wlr_xwayland_surface *surface, int16_t x, int16_t y,
|
||||
uint16_t width, uint16_t height);
|
||||
void wlr_xwayland_surface_configure(struct wlr_xwayland_surface *surface,
|
||||
int16_t x, int16_t y, uint16_t width, uint16_t height);
|
||||
|
||||
void wlr_xwayland_surface_close(struct wlr_xwayland *wlr_xwayland,
|
||||
struct wlr_xwayland_surface *surface);
|
||||
void wlr_xwayland_surface_close(struct wlr_xwayland_surface *surface);
|
||||
|
||||
void wlr_xwayland_surface_set_maximized(struct wlr_xwayland *wlr_xwayland,
|
||||
struct wlr_xwayland_surface *surface, bool maximized);
|
||||
void wlr_xwayland_surface_set_maximized(struct wlr_xwayland_surface *surface,
|
||||
bool maximized);
|
||||
|
||||
void wlr_xwayland_surface_set_fullscreen(struct wlr_xwayland *wlr_xwayland,
|
||||
struct wlr_xwayland_surface *surface, bool fullscreen);
|
||||
void wlr_xwayland_surface_set_fullscreen(struct wlr_xwayland_surface *surface,
|
||||
bool fullscreen);
|
||||
|
||||
void wlr_xwayland_set_seat(struct wlr_xwayland *xwayland,
|
||||
struct wlr_seat *seat);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue