mirror of
https://github.com/labwc/labwc.git
synced 2025-10-29 05:40:24 -04:00
view: introduce view_matches_query()
Add new function view_matches_query() that will be required by If and ForEach actions in the future.
This commit is contained in:
parent
8988194785
commit
abb7c03c75
2 changed files with 53 additions and 0 deletions
|
|
@ -172,6 +172,12 @@ struct view {
|
||||||
struct wl_listener set_title;
|
struct wl_listener set_title;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct view_query {
|
||||||
|
struct wl_list link;
|
||||||
|
char *identifier;
|
||||||
|
char *title;
|
||||||
|
};
|
||||||
|
|
||||||
struct xdg_toplevel_view {
|
struct xdg_toplevel_view {
|
||||||
struct view base;
|
struct view base;
|
||||||
struct wlr_xdg_surface *xdg_surface;
|
struct wlr_xdg_surface *xdg_surface;
|
||||||
|
|
@ -194,6 +200,22 @@ enum lab_view_criteria {
|
||||||
*/
|
*/
|
||||||
struct view *view_from_wlr_surface(struct wlr_surface *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
|
* for_each_view() - iterate over all views which match criteria
|
||||||
* @view: Iterator.
|
* @view: Iterator.
|
||||||
|
|
|
||||||
31
src/view.c
31
src/view.c
|
|
@ -2,6 +2,7 @@
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <strings.h>
|
#include <strings.h>
|
||||||
|
#include "common/match.h"
|
||||||
#include "common/mem.h"
|
#include "common/mem.h"
|
||||||
#include "common/scene-helpers.h"
|
#include "common/scene-helpers.h"
|
||||||
#include "labwc.h"
|
#include "labwc.h"
|
||||||
|
|
@ -51,6 +52,36 @@ view_from_wlr_surface(struct wlr_surface *surface)
|
||||||
return NULL;
|
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
|
static bool
|
||||||
matches_criteria(struct view *view, enum lab_view_criteria criteria)
|
matches_criteria(struct view *view, enum lab_view_criteria criteria)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue