opt: remove useless code

This commit is contained in:
DreamMaoMao 2025-06-19 12:29:50 +08:00
parent b06871fad4
commit 13afb1628b
2 changed files with 18 additions and 113 deletions

View file

@ -6,34 +6,19 @@ typedef struct Monitor Monitor;
struct workspace { struct workspace {
struct wl_list link; struct wl_list link;
char *name;
unsigned int tag; unsigned int tag;
struct wlr_scene_tree *tree;
Monitor *m; Monitor *m;
struct dwl_ext_workspace *ext_workspace; struct dwl_ext_workspace *ext_workspace;
struct { struct wl_listener activate;
struct wl_listener activate; struct wl_listener deactivate;
struct wl_listener deactivate; struct wl_listener assign;
struct wl_listener assign; struct wl_listener remove;
struct wl_listener remove;
} on_ext;
}; };
struct dwl_ext_workspace_manager *ext_manager; struct dwl_ext_workspace_manager *ext_manager;
struct wl_list workspaces; /* struct workspace.link */ struct wl_list workspaces;
void workspaces_switch_to(struct workspace *target) { void workspaces_switch_to(struct workspace *target) {
if (target == target->m->workspace_current) {
return;
}
wlr_scene_node_set_enabled(&target->m->workspace_current->tree->node,
false);
dwl_ext_workspace_set_active(target->m->workspace_current->ext_workspace,
false);
unsigned int tag; unsigned int tag;
tag = 1 << (target->tag - 1); tag = 1 << (target->tag - 1);
if (target->tag == 0) { if (target->tag == 0) {
@ -42,68 +27,27 @@ void workspaces_switch_to(struct workspace *target) {
} else { } else {
view(&(Arg){.ui = tag}, true); view(&(Arg){.ui = tag}, true);
} }
wlr_scene_node_set_enabled(&target->tree->node, true);
target->m->workspace_last = target->m->workspace_current;
target->m->workspace_current = target;
dwl_ext_workspace_set_active(target->ext_workspace, true);
} }
/* ext workspace handlers */ /* ext workspace handlers */
static void handle_ext_workspace_activate(struct wl_listener *listener, static void handle_ext_workspace_activate(struct wl_listener *listener,
void *data) { void *data) {
struct workspace *workspace = struct workspace *workspace =
wl_container_of(listener, workspace, on_ext.activate); wl_container_of(listener, workspace, activate);
workspaces_switch_to(workspace); workspaces_switch_to(workspace);
wlr_log(WLR_INFO, "ext activating workspace %s", workspace->name); wlr_log(WLR_INFO, "ext activating workspace %d", workspace->tag);
} }
static char *get_name_from_tag(unsigned int tag) { static const char *get_name_from_tag(unsigned int tag) {
char *name = NULL; static const char *names[] = {"overview", "1", "2", "3", "4",
switch (tag) { "5", "6", "7", "8", "9"};
case 0: return (tag < sizeof(names) / sizeof(names[0])) ? names[tag] : NULL;
name = "overview";
break;
case 1:
name = "1";
break;
case 2:
name = "2";
break;
case 3:
name = "3";
break;
case 4:
name = "4";
break;
case 5:
name = "5";
break;
case 6:
name = "6";
break;
case 7:
name = "7";
break;
case 8:
name = "8";
break;
case 9:
name = "9";
break;
}
return name;
} }
void destroy_workspace(struct workspace *workspace) { void destroy_workspace(struct workspace *workspace) {
// Clean up external workspace wl_list_remove(&workspace->activate.link);
wl_list_remove(&workspace->on_ext.activate.link);
dwl_ext_workspace_destroy(workspace->ext_workspace); dwl_ext_workspace_destroy(workspace->ext_workspace);
// Remove from the list and free resources
wl_list_remove(&workspace->link); wl_list_remove(&workspace->link);
wlr_scene_node_destroy(&workspace->tree->node);
free(workspace->name);
free(workspace); free(workspace);
} }
@ -120,60 +64,27 @@ static void remove_workspace_by_tag(unsigned int tag, Monitor *m) {
struct workspace *workspace, *tmp; struct workspace *workspace, *tmp;
wl_list_for_each_safe(workspace, tmp, &workspaces, link) { wl_list_for_each_safe(workspace, tmp, &workspaces, link) {
if (workspace->tag == tag && workspace->m == m) { if (workspace->tag == tag && workspace->m == m) {
// If this is the current workspace, we need to handle that
if (m->workspace_current == workspace) {
// Find another workspace to make current (maybe the overview?)
struct workspace *new_current = NULL;
if (!wl_list_empty(&workspaces)) {
struct workspace *first =
wl_container_of(workspaces.next, first, link);
if (first != workspace) {
new_current = first;
} else if (workspaces.next->next != &workspaces) {
new_current = wl_container_of(workspaces.next->next,
new_current, link);
}
}
m->workspace_current = new_current;
if (new_current) {
wlr_scene_node_set_enabled(&new_current->tree->node, true);
dwl_ext_workspace_set_active(new_current->ext_workspace,
true);
}
}
destroy_workspace(workspace); destroy_workspace(workspace);
return; return;
} }
} }
} }
/* Internal API */
static void add_workspace_by_tag(int tag, Monitor *m) { static void add_workspace_by_tag(int tag, Monitor *m) {
char *name = get_name_from_tag(tag); const char *name = get_name_from_tag(tag);
struct workspace *workspace = znew(*workspace); struct workspace *workspace = znew(*workspace);
workspace->name = xstrdup(name); wl_list_append(&workspaces, &workspace->link);
workspace->tag = tag; workspace->tag = tag;
workspace->m = m; workspace->m = m;
workspace->tree = wlr_scene_tree_create(ws_tree);
wl_list_append(&workspaces, &workspace->link);
if (!m->workspace_current) {
m->workspace_current = workspace;
} else {
wlr_scene_node_set_enabled(&workspace->tree->node, false);
}
bool active = m->workspace_current == workspace;
workspace->ext_workspace = workspace->ext_workspace =
dwl_ext_workspace_create(ext_manager, /*id*/ NULL); dwl_ext_workspace_create(ext_manager, /*id*/ NULL);
dwl_ext_workspace_assign_to_group(workspace->ext_workspace, m->ext_group); dwl_ext_workspace_assign_to_group(workspace->ext_workspace, m->ext_group);
dwl_ext_workspace_set_name(workspace->ext_workspace, name); dwl_ext_workspace_set_name(workspace->ext_workspace, name);
dwl_ext_workspace_set_active(workspace->ext_workspace, active); workspace->activate.notify = handle_ext_workspace_activate;
workspace->on_ext.activate.notify = handle_ext_workspace_activate;
wl_signal_add(&workspace->ext_workspace->events.activate, wl_signal_add(&workspace->ext_workspace->events.activate,
&workspace->on_ext.activate); &workspace->activate);
} }
void workspaces_init() { void workspaces_init() {

View file

@ -388,9 +388,6 @@ struct Monitor {
int gamma_lut_changed; int gamma_lut_changed;
int asleep; int asleep;
unsigned int visible_clients; unsigned int visible_clients;
struct workspace *workspace_current;
struct workspace *workspace_last;
struct dwl_ext_workspace_group *ext_group; struct dwl_ext_workspace_group *ext_group;
}; };
@ -680,7 +677,6 @@ static struct wlr_foreign_toplevel_manager_v1 *foreign_toplevel_manager;
static struct wlr_backend *backend; static struct wlr_backend *backend;
static struct wlr_backend *headless_backend; static struct wlr_backend *headless_backend;
static struct wlr_scene *scene; static struct wlr_scene *scene;
struct wlr_scene_tree *ws_tree;
static struct wlr_scene_tree *layers[NUM_LAYERS]; static struct wlr_scene_tree *layers[NUM_LAYERS];
static struct wlr_renderer *drw; static struct wlr_renderer *drw;
static struct wlr_allocator *alloc; static struct wlr_allocator *alloc;
@ -6504,8 +6500,6 @@ void setup(void) {
drag_icon = wlr_scene_tree_create(&scene->tree); drag_icon = wlr_scene_tree_create(&scene->tree);
wlr_scene_node_place_below(&drag_icon->node, &layers[LyrBlock]->node); wlr_scene_node_place_below(&drag_icon->node, &layers[LyrBlock]->node);
ws_tree = wlr_scene_tree_create(&scene->tree);
/* Create a renderer with the default implementation */ /* Create a renderer with the default implementation */
if (!(drw = wlr_renderer_autocreate(backend))) if (!(drw = wlr_renderer_autocreate(backend)))
die("couldn't create renderer"); die("couldn't create renderer");