mirror of
https://github.com/labwc/labwc.git
synced 2025-10-29 05:40:24 -04:00
Prepare OSD for reimplementation of the preview feature
This commit is contained in:
parent
a32e1ff8f9
commit
296e58079f
5 changed files with 28 additions and 21 deletions
|
|
@ -231,7 +231,11 @@ struct server {
|
||||||
struct wl_listener new_constraint;
|
struct wl_listener new_constraint;
|
||||||
|
|
||||||
/* Set when in cycle (alt-tab) mode */
|
/* Set when in cycle (alt-tab) mode */
|
||||||
struct view *cycle_view;
|
struct osd_state {
|
||||||
|
struct view *cycle_view;
|
||||||
|
struct wlr_scene_node *preview_node;
|
||||||
|
struct wlr_scene_node *preview_anchor;
|
||||||
|
} osd_state;
|
||||||
|
|
||||||
struct theme *theme;
|
struct theme *theme;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -235,13 +235,13 @@ actions_run(struct view *activator, struct server *server,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ACTION_TYPE_NEXT_WINDOW:
|
case ACTION_TYPE_NEXT_WINDOW:
|
||||||
server->cycle_view = desktop_cycle_view(server,
|
server->osd_state.cycle_view = desktop_cycle_view(server,
|
||||||
server->cycle_view, LAB_CYCLE_DIR_FORWARD);
|
server->osd_state.cycle_view, LAB_CYCLE_DIR_FORWARD);
|
||||||
osd_update(server);
|
osd_update(server);
|
||||||
break;
|
break;
|
||||||
case ACTION_TYPE_PREVIOUS_WINDOW:
|
case ACTION_TYPE_PREVIOUS_WINDOW:
|
||||||
server->cycle_view = desktop_cycle_view(server,
|
server->osd_state.cycle_view = desktop_cycle_view(server,
|
||||||
server->cycle_view, LAB_CYCLE_DIR_BACKWARD);
|
server->osd_state.cycle_view, LAB_CYCLE_DIR_BACKWARD);
|
||||||
osd_update(server);
|
osd_update(server);
|
||||||
break;
|
break;
|
||||||
case ACTION_TYPE_RECONFIGURE:
|
case ACTION_TYPE_RECONFIGURE:
|
||||||
|
|
|
||||||
|
|
@ -39,18 +39,18 @@ keyboard_modifiers_notify(struct wl_listener *listener, void *data)
|
||||||
struct seat *seat = wl_container_of(listener, seat, keyboard_modifiers);
|
struct seat *seat = wl_container_of(listener, seat, keyboard_modifiers);
|
||||||
struct server *server = seat->server;
|
struct server *server = seat->server;
|
||||||
|
|
||||||
if (server->cycle_view || seat->workspace_osd_shown_by_modifier) {
|
if (server->osd_state.cycle_view || seat->workspace_osd_shown_by_modifier) {
|
||||||
struct wlr_keyboard_key_event *event = data;
|
struct wlr_keyboard_key_event *event = data;
|
||||||
struct wlr_keyboard *keyboard = &seat->keyboard_group->keyboard;
|
struct wlr_keyboard *keyboard = &seat->keyboard_group->keyboard;
|
||||||
|
|
||||||
if (event->state == WL_KEYBOARD_KEY_STATE_RELEASED
|
if (event->state == WL_KEYBOARD_KEY_STATE_RELEASED
|
||||||
&& !keyboard_any_modifiers_pressed(keyboard)) {
|
&& !keyboard_any_modifiers_pressed(keyboard)) {
|
||||||
if (server->cycle_view) {
|
if (server->osd_state.cycle_view) {
|
||||||
/* end cycle */
|
/* end cycle */
|
||||||
desktop_focus_and_activate_view(&server->seat,
|
desktop_focus_and_activate_view(&server->seat,
|
||||||
server->cycle_view);
|
server->osd_state.cycle_view);
|
||||||
desktop_move_to_front(server->cycle_view);
|
desktop_move_to_front(server->osd_state.cycle_view);
|
||||||
server->cycle_view = NULL;
|
/* osd_finish() additionally resets cycle_view to NULL */
|
||||||
osd_finish(server);
|
osd_finish(server);
|
||||||
}
|
}
|
||||||
if (seat->workspace_osd_shown_by_modifier) {
|
if (seat->workspace_osd_shown_by_modifier) {
|
||||||
|
|
@ -145,12 +145,12 @@ handle_compositor_keybindings(struct wl_listener *listener,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (server->cycle_view) {
|
if (server->osd_state.cycle_view) {
|
||||||
if (event->state == WL_KEYBOARD_KEY_STATE_PRESSED) {
|
if (event->state == WL_KEYBOARD_KEY_STATE_PRESSED) {
|
||||||
for (int i = 0; i < nsyms; i++) {
|
for (int i = 0; i < nsyms; i++) {
|
||||||
if (syms[i] == XKB_KEY_Escape) {
|
if (syms[i] == XKB_KEY_Escape) {
|
||||||
/* cancel */
|
/* cancel */
|
||||||
server->cycle_view = NULL;
|
/* osd_finish() additionally resets cycle_view to NULL */
|
||||||
osd_finish(server);
|
osd_finish(server);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@ -168,8 +168,8 @@ handle_compositor_keybindings(struct wl_listener *listener,
|
||||||
enum lab_cycle_dir dir = backwards
|
enum lab_cycle_dir dir = backwards
|
||||||
? LAB_CYCLE_DIR_BACKWARD
|
? LAB_CYCLE_DIR_BACKWARD
|
||||||
: LAB_CYCLE_DIR_FORWARD;
|
: LAB_CYCLE_DIR_FORWARD;
|
||||||
server->cycle_view = desktop_cycle_view(server,
|
server->osd_state.cycle_view = desktop_cycle_view(server,
|
||||||
server->cycle_view, dir);
|
server->osd_state.cycle_view, dir);
|
||||||
osd_update(server);
|
osd_update(server);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -109,6 +109,8 @@ osd_update_preview_outlines(struct view *view)
|
||||||
void
|
void
|
||||||
osd_finish(struct server *server)
|
osd_finish(struct server *server)
|
||||||
{
|
{
|
||||||
|
server->osd_state.cycle_view = NULL;
|
||||||
|
|
||||||
struct output *output;
|
struct output *output;
|
||||||
wl_list_for_each(output, &server->outputs, link) {
|
wl_list_for_each(output, &server->outputs, link) {
|
||||||
destroy_osd_nodes(output);
|
destroy_osd_nodes(output);
|
||||||
|
|
@ -185,7 +187,7 @@ osd_update(struct server *server)
|
||||||
if (!isfocusable(view)) {
|
if (!isfocusable(view)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (view == server->cycle_view) {
|
if (view == server->osd_state.cycle_view) {
|
||||||
set_cairo_color(cairo, theme->osd_label_text_color);
|
set_cairo_color(cairo, theme->osd_label_text_color);
|
||||||
cairo_rectangle(cairo, OSD_BORDER_WIDTH, y,
|
cairo_rectangle(cairo, OSD_BORDER_WIDTH, y,
|
||||||
OSD_ITEM_WIDTH, OSD_ITEM_HEIGHT);
|
OSD_ITEM_WIDTH, OSD_ITEM_HEIGHT);
|
||||||
|
|
|
||||||
13
src/view.c
13
src/view.c
|
|
@ -808,25 +808,26 @@ view_destroy(struct view *view)
|
||||||
server->focused_view = NULL;
|
server->focused_view = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (server->cycle_view == view) {
|
struct osd_state *osd_state = &view->server->osd_state;
|
||||||
|
if (osd_state->cycle_view == view) {
|
||||||
/*
|
/*
|
||||||
* If we are the current OSD selected view, cycle
|
* If we are the current OSD selected view, cycle
|
||||||
* to the next because we are dying.
|
* to the next because we are dying.
|
||||||
*/
|
*/
|
||||||
server->cycle_view = desktop_cycle_view(server,
|
osd_state->cycle_view = desktop_cycle_view(server,
|
||||||
server->cycle_view, LAB_CYCLE_DIR_BACKWARD);
|
osd_state->cycle_view, LAB_CYCLE_DIR_BACKWARD);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If we cycled back to ourselves, then we have no windows.
|
* If we cycled back to ourselves, then we have no windows.
|
||||||
* just remove it and close the OSD for good.
|
* just remove it and close the OSD for good.
|
||||||
*/
|
*/
|
||||||
if (server->cycle_view == view || !server->cycle_view) {
|
if (osd_state->cycle_view == view || !osd_state->cycle_view) {
|
||||||
server->cycle_view = NULL;
|
/* osd_finish() additionally resets cycle_view to NULL */
|
||||||
osd_finish(server);
|
osd_finish(server);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (server->cycle_view) {
|
if (osd_state->cycle_view) {
|
||||||
/* Update the OSD to reflect the view has now gone. */
|
/* Update the OSD to reflect the view has now gone. */
|
||||||
osd_update(server);
|
osd_update(server);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue