struct wl_listener set_title;
};
+struct view_query {
+ struct wl_list link;
+ char *identifier;
+ char *title;
+};
+
struct xdg_toplevel_view {
struct view base;
struct wlr_xdg_surface *xdg_surface;
*/
struct view *view_from_wlr_surface(struct wlr_surface *surface);
+/**
+ * view_query_free() - Free a given view query
+ * @query: Query to be freed.
+ */
+void view_query_free(struct view_query *view);
+
+/**
+ * view_matches_query() - Check if view matches the given criteria
+ * @view: View to checked.
+ * @query: Criteria to match against.
+ *
+ * Returns true if %view matches all of the criteria given in %query, false
+ * otherwise.
+ */
+bool view_matches_query(struct view *view, struct view_query *query);
+
/**
* for_each_view() - iterate over all views which match criteria
* @view: Iterator.
#include <assert.h>
#include <stdio.h>
#include <strings.h>
+#include "common/match.h"
#include "common/mem.h"
#include "common/scene-helpers.h"
#include "labwc.h"
return NULL;
}
+void
+view_query_free(struct view_query *query)
+{
+ wl_list_remove(&query->link);
+ free(query->identifier);
+ free(query->title);
+ free(query);
+}
+
+bool
+view_matches_query(struct view *view, struct view_query *query)
+{
+ bool match = true;
+ bool empty = true;
+
+ const char *identifier = view_get_string_prop(view, "app_id");
+ if (match && query->identifier) {
+ empty = false;
+ match &= match_glob(query->identifier, identifier);
+ }
+
+ const char *title = view_get_string_prop(view, "title");
+ if (match && query->title) {
+ empty = false;
+ match &= match_glob(query->title, title);
+ }
+
+ return !empty && match;
+}
+
static bool
matches_criteria(struct view *view, enum lab_view_criteria criteria)
{