diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/sway/criteria.h | 73 | ||||
-rw-r--r-- | include/sway/tree/view.h | 21 |
2 files changed, 28 insertions, 66 deletions
diff --git a/include/sway/criteria.h b/include/sway/criteria.h index 74da132c..ec256ddb 100644 --- a/include/sway/criteria.h +++ b/include/sway/criteria.h | |||
@@ -1,61 +1,42 @@ | |||
1 | #ifndef _SWAY_CRITERIA_H | 1 | #ifndef _SWAY_CRITERIA_H |
2 | #define _SWAY_CRITERIA_H | 2 | #define _SWAY_CRITERIA_H |
3 | 3 | ||
4 | #include <pcre.h> | 4 | #include "tree/container.h" |
5 | #include "list.h" | 5 | #include "list.h" |
6 | #include "tree/view.h" | ||
7 | |||
8 | enum criteria_type { | ||
9 | CT_COMMAND = 1 << 0, | ||
10 | CT_ASSIGN_OUTPUT = 1 << 1, | ||
11 | CT_ASSIGN_WORKSPACE = 1 << 2, | ||
12 | }; | ||
13 | 6 | ||
7 | /** | ||
8 | * Maps criteria (as a list of criteria tokens) to a command list. | ||
9 | * | ||
10 | * A list of tokens together represent a single criteria string (e.g. | ||
11 | * '[class="abc" title="xyz"]' becomes two criteria tokens). | ||
12 | * | ||
13 | * for_window: Views matching all criteria will have the bound command list | ||
14 | * executed on them. | ||
15 | * | ||
16 | * Set via `for_window <criteria> <cmd list>`. | ||
17 | */ | ||
14 | struct criteria { | 18 | struct criteria { |
15 | enum criteria_type type; | 19 | list_t *tokens; // struct crit_token, contains compiled regex. |
16 | char *raw; // entire criteria string (for logging) | 20 | char *crit_raw; // entire criteria string (for logging) |
21 | |||
17 | char *cmdlist; | 22 | char *cmdlist; |
18 | char *target; // workspace or output name for `assign` criteria | ||
19 | |||
20 | pcre *title; | ||
21 | pcre *app_id; | ||
22 | pcre *class; | ||
23 | pcre *instance; | ||
24 | pcre *con_mark; | ||
25 | uint32_t con_id; // internal ID | ||
26 | uint32_t id; // X11 window ID | ||
27 | pcre *window_role; | ||
28 | uint32_t window_type; | ||
29 | bool floating; | ||
30 | bool tiling; | ||
31 | char urgent; // 'l' for latest or 'o' for oldest | ||
32 | char *workspace; | ||
33 | }; | 23 | }; |
34 | 24 | ||
35 | bool criteria_is_empty(struct criteria *criteria); | 25 | int criteria_cmp(const void *item, const void *data); |
26 | void free_criteria(struct criteria *crit); | ||
36 | 27 | ||
37 | void criteria_destroy(struct criteria *criteria); | 28 | // Pouplate list with crit_tokens extracted from criteria string, returns error |
29 | // string or NULL if successful. | ||
30 | char *extract_crit_tokens(list_t *tokens, const char *criteria); | ||
38 | 31 | ||
39 | /** | 32 | // Returns list of criteria that match given container. These criteria have |
40 | * Generate a criteria struct from a raw criteria string such as | 33 | // been set with `for_window` commands and have an associated cmdlist. |
41 | * [class="foo" instance="bar"] (brackets inclusive). | 34 | list_t *criteria_for(struct sway_container *cont); |
42 | * | ||
43 | * The error argument is expected to be an address of a null pointer. If an | ||
44 | * error is encountered, the function will return NULL and the pointer will be | ||
45 | * changed to point to the error string. This string should be freed afterwards. | ||
46 | */ | ||
47 | struct criteria *criteria_parse(char *raw, char **error); | ||
48 | 35 | ||
49 | /** | 36 | // Returns a list of all containers that match the given list of tokens. |
50 | * Compile a list of criterias matching the given view. | 37 | list_t *container_for_crit_tokens(list_t *tokens); |
51 | * | ||
52 | * Criteria types can be bitwise ORed. | ||
53 | */ | ||
54 | list_t *criteria_for_view(struct sway_view *view, enum criteria_type types); | ||
55 | 38 | ||
56 | /** | 39 | // Returns true if any criteria in the given list matches this container |
57 | * Compile a list of views matching the given criteria. | 40 | bool criteria_any(struct sway_container *cont, list_t *criteria); |
58 | */ | ||
59 | list_t *criteria_get_views(struct criteria *criteria); | ||
60 | 41 | ||
61 | #endif | 42 | #endif |
diff --git a/include/sway/tree/view.h b/include/sway/tree/view.h index 144ad038..4ecd8c44 100644 --- a/include/sway/tree/view.h +++ b/include/sway/tree/view.h | |||
@@ -20,15 +20,11 @@ enum sway_view_prop { | |||
20 | VIEW_PROP_APP_ID, | 20 | VIEW_PROP_APP_ID, |
21 | VIEW_PROP_CLASS, | 21 | VIEW_PROP_CLASS, |
22 | VIEW_PROP_INSTANCE, | 22 | VIEW_PROP_INSTANCE, |
23 | VIEW_PROP_WINDOW_TYPE, | ||
24 | VIEW_PROP_WINDOW_ROLE, | ||
25 | VIEW_PROP_X11_WINDOW_ID, | ||
26 | }; | 23 | }; |
27 | 24 | ||
28 | struct sway_view_impl { | 25 | struct sway_view_impl { |
29 | const char *(*get_string_prop)(struct sway_view *view, | 26 | const char *(*get_prop)(struct sway_view *view, |
30 | enum sway_view_prop prop); | 27 | enum sway_view_prop prop); |
31 | uint32_t (*get_int_prop)(struct sway_view *view, enum sway_view_prop prop); | ||
32 | void (*configure)(struct sway_view *view, double ox, double oy, int width, | 28 | void (*configure)(struct sway_view *view, double ox, double oy, int width, |
33 | int height); | 29 | int height); |
34 | void (*set_activated)(struct sway_view *view, bool activated); | 30 | void (*set_activated)(struct sway_view *view, bool activated); |
@@ -56,8 +52,6 @@ struct sway_view { | |||
56 | enum sway_container_border border; | 52 | enum sway_container_border border; |
57 | int border_thickness; | 53 | int border_thickness; |
58 | 54 | ||
59 | list_t *executed_criteria; | ||
60 | |||
61 | union { | 55 | union { |
62 | struct wlr_xdg_surface_v6 *wlr_xdg_surface_v6; | 56 | struct wlr_xdg_surface_v6 *wlr_xdg_surface_v6; |
63 | struct wlr_xwayland_surface *wlr_xwayland_surface; | 57 | struct wlr_xwayland_surface *wlr_xwayland_surface; |
@@ -97,9 +91,6 @@ struct sway_xwayland_view { | |||
97 | struct wl_listener request_maximize; | 91 | struct wl_listener request_maximize; |
98 | struct wl_listener request_configure; | 92 | struct wl_listener request_configure; |
99 | struct wl_listener request_fullscreen; | 93 | struct wl_listener request_fullscreen; |
100 | struct wl_listener set_title; | ||
101 | struct wl_listener set_class; | ||
102 | struct wl_listener set_window_type; | ||
103 | struct wl_listener map; | 94 | struct wl_listener map; |
104 | struct wl_listener unmap; | 95 | struct wl_listener unmap; |
105 | struct wl_listener destroy; | 96 | struct wl_listener destroy; |
@@ -174,10 +165,6 @@ const char *view_get_class(struct sway_view *view); | |||
174 | 165 | ||
175 | const char *view_get_instance(struct sway_view *view); | 166 | const char *view_get_instance(struct sway_view *view); |
176 | 167 | ||
177 | uint32_t view_get_x11_window_id(struct sway_view *view); | ||
178 | |||
179 | uint32_t view_get_window_type(struct sway_view *view); | ||
180 | |||
181 | const char *view_get_type(struct sway_view *view); | 168 | const char *view_get_type(struct sway_view *view); |
182 | 169 | ||
183 | void view_configure(struct sway_view *view, double ox, double oy, int width, | 170 | void view_configure(struct sway_view *view, double ox, double oy, int width, |
@@ -230,10 +217,4 @@ void view_child_destroy(struct sway_view_child *child); | |||
230 | */ | 217 | */ |
231 | void view_update_title(struct sway_view *view, bool force); | 218 | void view_update_title(struct sway_view *view, bool force); |
232 | 219 | ||
233 | /** | ||
234 | * Run any criteria that match the view and haven't been run on this view | ||
235 | * before. | ||
236 | */ | ||
237 | void view_execute_criteria(struct sway_view *view); | ||
238 | |||
239 | #endif | 220 | #endif |