Criteria improvements

Adds support for the following criteria tokens: id (X11 window ID),
instance, tiling, workspace.

Ensures each view will only execute a criteria once, by storing a list
of executed criteria in the view. This is the same strategy used by i3.

This also adds a check for criteria when an xwayland view changes its
title, class, instance or window type.
This commit is contained in:
Ryan Dwyer 2018-05-06 11:40:28 +10:00
parent 73cc92213f
commit e9fe1141e6
6 changed files with 171 additions and 28 deletions

View file

@ -20,11 +20,15 @@ enum sway_view_prop {
VIEW_PROP_APP_ID,
VIEW_PROP_CLASS,
VIEW_PROP_INSTANCE,
VIEW_PROP_WINDOW_TYPE,
VIEW_PROP_WINDOW_ROLE,
VIEW_PROP_X11_WINDOW_ID,
};
struct sway_view_impl {
const char *(*get_prop)(struct sway_view *view,
const char *(*get_string_prop)(struct sway_view *view,
enum sway_view_prop prop);
uint32_t (*get_int_prop)(struct sway_view *view, enum sway_view_prop prop);
void (*configure)(struct sway_view *view, double ox, double oy, int width,
int height);
void (*set_activated)(struct sway_view *view, bool activated);
@ -52,6 +56,8 @@ struct sway_view {
enum sway_container_border border;
int border_thickness;
list_t *executed_criteria;
union {
struct wlr_xdg_surface_v6 *wlr_xdg_surface_v6;
struct wlr_xwayland_surface *wlr_xwayland_surface;
@ -91,6 +97,9 @@ struct sway_xwayland_view {
struct wl_listener request_maximize;
struct wl_listener request_configure;
struct wl_listener request_fullscreen;
struct wl_listener set_title;
struct wl_listener set_class;
struct wl_listener set_window_type;
struct wl_listener map;
struct wl_listener unmap;
struct wl_listener destroy;
@ -165,6 +174,12 @@ const char *view_get_class(struct sway_view *view);
const char *view_get_instance(struct sway_view *view);
uint32_t view_get_x11_window_id(struct sway_view *view);
uint32_t view_get_window_type(struct sway_view *view);
uint32_t view_get_window_role(struct sway_view *view);
const char *view_get_type(struct sway_view *view);
void view_configure(struct sway_view *view, double ox, double oy, int width,
@ -217,4 +232,10 @@ void view_child_destroy(struct sway_view_child *child);
*/
void view_update_title(struct sway_view *view, bool force);
/**
* Run any criteria that match the view and haven't been run on this view
* before.
*/
void view_execute_criteria(struct sway_view *view);
#endif