mirror of
https://github.com/labwc/labwc.git
synced 2026-02-15 22:05:25 -05:00
Move isfocusable() from desktop.c to view.c
This commit is contained in:
parent
602d59a3b2
commit
e5a6c57a6e
5 changed files with 29 additions and 24 deletions
|
|
@ -45,7 +45,7 @@ desktop_focus_and_activate_view(struct seat *seat, struct view *view)
|
|||
/*
|
||||
* Guard against views with no mapped surfaces when handling
|
||||
* 'request_activate' and 'request_minimize'.
|
||||
* See notes by isfocusable()
|
||||
* See notes by view_isfocusable()
|
||||
*/
|
||||
if (!view->surface) {
|
||||
return;
|
||||
|
|
@ -81,23 +81,6 @@ desktop_focus_and_activate_view(struct seat *seat, struct view *view)
|
|||
seat_focus_surface(seat, view->surface);
|
||||
}
|
||||
|
||||
/*
|
||||
* Some xwayland apps produce unmapped surfaces on startup and also leave
|
||||
* some unmapped surfaces kicking around on 'close' (for example leafpad's
|
||||
* "about" dialogue). Whilst this is not normally a problem, we have to be
|
||||
* careful when cycling between views. The only views we should focus are
|
||||
* those that are already mapped and those that have been minimized.
|
||||
*/
|
||||
bool
|
||||
isfocusable(struct view *view)
|
||||
{
|
||||
/* filter out those xwayland surfaces that have never been mapped */
|
||||
if (!view->surface) {
|
||||
return false;
|
||||
}
|
||||
return (view->mapped || view->minimized);
|
||||
}
|
||||
|
||||
static struct wl_list *
|
||||
get_prev_item(struct wl_list *item)
|
||||
{
|
||||
|
|
@ -122,7 +105,7 @@ first_view(struct server *server)
|
|||
continue;
|
||||
}
|
||||
struct view *view = node_view_from_node(node);
|
||||
if (isfocusable(view)) {
|
||||
if (view_isfocusable(view)) {
|
||||
return view;
|
||||
}
|
||||
}
|
||||
|
|
@ -194,7 +177,7 @@ desktop_cycle_view(struct server *server, struct view *start_view,
|
|||
view = node_view_from_node(node);
|
||||
|
||||
enum property skip = window_rules_get_property(view, "skipWindowSwitcher");
|
||||
if (isfocusable(view) && skip != LAB_PROP_TRUE) {
|
||||
if (view_isfocusable(view) && skip != LAB_PROP_TRUE) {
|
||||
return view;
|
||||
}
|
||||
} while (view != start_view);
|
||||
|
|
@ -269,7 +252,7 @@ desktop_focus_output(struct output *output)
|
|||
continue;
|
||||
}
|
||||
view = node_view_from_node(node);
|
||||
if (!isfocusable(view)) {
|
||||
if (!view_isfocusable(view)) {
|
||||
continue;
|
||||
}
|
||||
if (wlr_output_layout_intersects(layout,
|
||||
|
|
|
|||
|
|
@ -475,7 +475,7 @@ osd_update(struct server *server)
|
|||
|
||||
/* Outline current window */
|
||||
if (rc.window_switcher.outlines) {
|
||||
if (isfocusable(server->osd_state.cycle_view)) {
|
||||
if (view_isfocusable(server->osd_state.cycle_view)) {
|
||||
osd_update_preview_outlines(server->osd_state.cycle_view);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
11
src/view.c
11
src/view.c
|
|
@ -22,7 +22,7 @@
|
|||
static bool
|
||||
matches_criteria(struct view *view, enum lab_view_criteria criteria)
|
||||
{
|
||||
if (!isfocusable(view)) {
|
||||
if (!view_isfocusable(view)) {
|
||||
return false;
|
||||
}
|
||||
if (criteria & LAB_VIEW_CRITERIA_CURRENT_WORKSPACE) {
|
||||
|
|
@ -80,6 +80,15 @@ view_array_append(struct server *server, struct wl_array *views,
|
|||
}
|
||||
}
|
||||
|
||||
bool
|
||||
view_isfocusable(struct view *view)
|
||||
{
|
||||
if (!view->surface) {
|
||||
return false;
|
||||
}
|
||||
return (view->mapped || view->minimized);
|
||||
}
|
||||
|
||||
/**
|
||||
* All view_apply_xxx_geometry() functions must *not* modify
|
||||
* any state besides repositioning or resizing the view.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue