mirror of
https://github.com/labwc/labwc.git
synced 2026-03-07 04:33:54 -05:00
ext-workspace protocol integration
This commit is contained in:
parent
acde3b4a8b
commit
8156b91306
4 changed files with 50 additions and 0 deletions
|
|
@ -311,6 +311,8 @@ struct server {
|
||||||
struct workspace *last;
|
struct workspace *last;
|
||||||
struct lab_cosmic_workspace_manager *cosmic_manager;
|
struct lab_cosmic_workspace_manager *cosmic_manager;
|
||||||
struct lab_cosmic_workspace_group *cosmic_group;
|
struct lab_cosmic_workspace_group *cosmic_group;
|
||||||
|
struct lab_ext_workspace_manager *ext_manager;
|
||||||
|
struct lab_ext_workspace_group *ext_group;
|
||||||
struct {
|
struct {
|
||||||
struct wl_listener layout_output_added;
|
struct wl_listener layout_output_added;
|
||||||
} on;
|
} on;
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,14 @@ struct workspace {
|
||||||
struct wl_listener deactivate;
|
struct wl_listener deactivate;
|
||||||
struct wl_listener remove;
|
struct wl_listener remove;
|
||||||
} on_cosmic;
|
} on_cosmic;
|
||||||
|
|
||||||
|
struct lab_ext_workspace *ext_workspace;
|
||||||
|
struct {
|
||||||
|
struct wl_listener activate;
|
||||||
|
struct wl_listener deactivate;
|
||||||
|
struct wl_listener assign;
|
||||||
|
struct wl_listener remove;
|
||||||
|
} on_ext;
|
||||||
};
|
};
|
||||||
|
|
||||||
void workspaces_init(struct server *server);
|
void workspaces_init(struct server *server);
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@
|
||||||
#include "output-state.h"
|
#include "output-state.h"
|
||||||
#include "output-virtual.h"
|
#include "output-virtual.h"
|
||||||
#include "protocols/cosmic-workspaces.h"
|
#include "protocols/cosmic-workspaces.h"
|
||||||
|
#include "protocols/ext-workspace.h"
|
||||||
#include "regions.h"
|
#include "regions.h"
|
||||||
#include "view.h"
|
#include "view.h"
|
||||||
#include "xwayland.h"
|
#include "xwayland.h"
|
||||||
|
|
@ -284,6 +285,8 @@ add_output_to_layout(struct server *server, struct output *output)
|
||||||
|
|
||||||
lab_cosmic_workspace_group_output_enter(
|
lab_cosmic_workspace_group_output_enter(
|
||||||
server->workspaces.cosmic_group, output->wlr_output);
|
server->workspaces.cosmic_group, output->wlr_output);
|
||||||
|
lab_ext_workspace_group_output_enter(
|
||||||
|
server->workspaces.ext_group, output->wlr_output);
|
||||||
|
|
||||||
/* (Re-)create regions from config */
|
/* (Re-)create regions from config */
|
||||||
regions_reconfigure_output(output);
|
regions_reconfigure_output(output);
|
||||||
|
|
@ -596,6 +599,8 @@ output_config_apply(struct server *server,
|
||||||
|
|
||||||
lab_cosmic_workspace_group_output_leave(
|
lab_cosmic_workspace_group_output_leave(
|
||||||
server->workspaces.cosmic_group, output->wlr_output);
|
server->workspaces.cosmic_group, output->wlr_output);
|
||||||
|
lab_ext_workspace_group_output_leave(
|
||||||
|
server->workspaces.ext_group, output->wlr_output);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* At time of writing, wlr_output_layout_remove()
|
* At time of writing, wlr_output_layout_remove()
|
||||||
|
|
|
||||||
|
|
@ -16,11 +16,13 @@
|
||||||
#include "input/keyboard.h"
|
#include "input/keyboard.h"
|
||||||
#include "labwc.h"
|
#include "labwc.h"
|
||||||
#include "protocols/cosmic-workspaces.h"
|
#include "protocols/cosmic-workspaces.h"
|
||||||
|
#include "protocols/ext-workspace.h"
|
||||||
#include "view.h"
|
#include "view.h"
|
||||||
#include "workspaces.h"
|
#include "workspaces.h"
|
||||||
#include "xwayland.h"
|
#include "xwayland.h"
|
||||||
|
|
||||||
#define COSMIC_WORKSPACES_VERSION 1
|
#define COSMIC_WORKSPACES_VERSION 1
|
||||||
|
#define EXT_WORKSPACES_VERSION 1
|
||||||
|
|
||||||
/* Internal helpers */
|
/* Internal helpers */
|
||||||
static size_t
|
static size_t
|
||||||
|
|
@ -185,6 +187,15 @@ handle_cosmic_workspace_activate(struct wl_listener *listener, void *data)
|
||||||
wlr_log(WLR_INFO, "cosmic activating workspace %s", workspace->name);
|
wlr_log(WLR_INFO, "cosmic activating workspace %s", workspace->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ext workspace handlers */
|
||||||
|
static void
|
||||||
|
handle_ext_workspace_activate(struct wl_listener *listener, void *data)
|
||||||
|
{
|
||||||
|
struct workspace *workspace = wl_container_of(listener, workspace, on_ext.activate);
|
||||||
|
workspaces_switch_to(workspace, /* update_focus */ true);
|
||||||
|
wlr_log(WLR_INFO, "ext activating workspace %s", workspace->name);
|
||||||
|
}
|
||||||
|
|
||||||
/* Internal API */
|
/* Internal API */
|
||||||
static void
|
static void
|
||||||
add_workspace(struct server *server, const char *name)
|
add_workspace(struct server *server, const char *name)
|
||||||
|
|
@ -210,6 +221,17 @@ add_workspace(struct server *server, const char *name)
|
||||||
workspace->on_cosmic.activate.notify = handle_cosmic_workspace_activate;
|
workspace->on_cosmic.activate.notify = handle_cosmic_workspace_activate;
|
||||||
wl_signal_add(&workspace->cosmic_workspace->events.activate,
|
wl_signal_add(&workspace->cosmic_workspace->events.activate,
|
||||||
&workspace->on_cosmic.activate);
|
&workspace->on_cosmic.activate);
|
||||||
|
|
||||||
|
/* ext */
|
||||||
|
workspace->ext_workspace = lab_ext_workspace_create(
|
||||||
|
server->workspaces.ext_manager, /*id*/ NULL);
|
||||||
|
lab_ext_workspace_assign_to_group(workspace->ext_workspace, server->workspaces.ext_group);
|
||||||
|
lab_ext_workspace_set_name(workspace->ext_workspace, name);
|
||||||
|
lab_ext_workspace_set_active(workspace->ext_workspace, active);
|
||||||
|
|
||||||
|
workspace->on_ext.activate.notify = handle_ext_workspace_activate;
|
||||||
|
wl_signal_add(&workspace->ext_workspace->events.activate,
|
||||||
|
&workspace->on_ext.activate);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct workspace *
|
static struct workspace *
|
||||||
|
|
@ -288,9 +310,16 @@ workspaces_init(struct server *server)
|
||||||
server->wl_display, /* capabilities */ CW_CAP_WS_ACTIVATE,
|
server->wl_display, /* capabilities */ CW_CAP_WS_ACTIVATE,
|
||||||
COSMIC_WORKSPACES_VERSION);
|
COSMIC_WORKSPACES_VERSION);
|
||||||
|
|
||||||
|
server->workspaces.ext_manager = lab_ext_workspace_manager_create(
|
||||||
|
server->wl_display, /* capabilities */ WS_CAP_WS_ACTIVATE,
|
||||||
|
EXT_WORKSPACES_VERSION);
|
||||||
|
|
||||||
server->workspaces.cosmic_group = lab_cosmic_workspace_group_create(
|
server->workspaces.cosmic_group = lab_cosmic_workspace_group_create(
|
||||||
server->workspaces.cosmic_manager);
|
server->workspaces.cosmic_manager);
|
||||||
|
|
||||||
|
server->workspaces.ext_group = lab_ext_workspace_group_create(
|
||||||
|
server->workspaces.ext_manager);
|
||||||
|
|
||||||
wl_list_init(&server->workspaces.all);
|
wl_list_init(&server->workspaces.all);
|
||||||
|
|
||||||
struct workspace *conf;
|
struct workspace *conf;
|
||||||
|
|
@ -319,6 +348,8 @@ workspaces_switch_to(struct workspace *target, bool update_focus)
|
||||||
|
|
||||||
lab_cosmic_workspace_set_active(
|
lab_cosmic_workspace_set_active(
|
||||||
server->workspaces.current->cosmic_workspace, false);
|
server->workspaces.current->cosmic_workspace, false);
|
||||||
|
lab_ext_workspace_set_active(
|
||||||
|
server->workspaces.current->ext_workspace, false);
|
||||||
|
|
||||||
/* Move Omnipresent views to new workspace */
|
/* Move Omnipresent views to new workspace */
|
||||||
struct view *view;
|
struct view *view;
|
||||||
|
|
@ -374,6 +405,7 @@ workspaces_switch_to(struct workspace *target, bool update_focus)
|
||||||
desktop_update_top_layer_visiblity(server);
|
desktop_update_top_layer_visiblity(server);
|
||||||
|
|
||||||
lab_cosmic_workspace_set_active(target->cosmic_workspace, true);
|
lab_cosmic_workspace_set_active(target->cosmic_workspace, true);
|
||||||
|
lab_ext_workspace_set_active(target->ext_workspace, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -440,6 +472,7 @@ destroy_workspace(struct workspace *workspace)
|
||||||
wl_list_remove(&workspace->link);
|
wl_list_remove(&workspace->link);
|
||||||
|
|
||||||
lab_cosmic_workspace_destroy(workspace->cosmic_workspace);
|
lab_cosmic_workspace_destroy(workspace->cosmic_workspace);
|
||||||
|
lab_ext_workspace_destroy(workspace->ext_workspace);
|
||||||
free(workspace);
|
free(workspace);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -476,6 +509,8 @@ workspaces_reconfigure(struct server *server)
|
||||||
actual_workspace->name = xstrdup(configured_workspace->name);
|
actual_workspace->name = xstrdup(configured_workspace->name);
|
||||||
lab_cosmic_workspace_set_name(
|
lab_cosmic_workspace_set_name(
|
||||||
actual_workspace->cosmic_workspace, actual_workspace->name);
|
actual_workspace->cosmic_workspace, actual_workspace->name);
|
||||||
|
lab_ext_workspace_set_name(
|
||||||
|
actual_workspace->ext_workspace, actual_workspace->name);
|
||||||
}
|
}
|
||||||
actual_workspace_link = actual_workspace_link->next;
|
actual_workspace_link = actual_workspace_link->next;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue