Fix assigning workspaces to outputs
It's possible to assign workspaces to certain outputs using the command: workspace <name> output <output> However, this did not work in some cases where the workspace was assigned before the given output was made available to sway. This patch fixes those cases.
This commit is contained in:
parent
79bfd620d6
commit
8ddafeeaae
|
@ -7,7 +7,7 @@
|
|||
|
||||
extern char *prev_workspace_name;
|
||||
|
||||
char *workspace_next_name(void);
|
||||
char *workspace_next_name(const char *output_name);
|
||||
swayc_t *workspace_create(const char*);
|
||||
swayc_t *workspace_by_name(const char*);
|
||||
swayc_t *workspace_by_number(const char*);
|
||||
|
|
|
@ -143,7 +143,7 @@ swayc_t *new_output(wlc_handle handle) {
|
|||
}
|
||||
}
|
||||
if (!ws_name) {
|
||||
ws_name = workspace_next_name();
|
||||
ws_name = workspace_next_name(output->name);
|
||||
}
|
||||
|
||||
// create and initilize default workspace
|
||||
|
|
|
@ -364,7 +364,7 @@ void move_workspace_to(swayc_t* workspace, swayc_t* destination) {
|
|||
|
||||
// make sure source output has a workspace
|
||||
if (src_op->children->length == 0) {
|
||||
char *ws_name = workspace_next_name();
|
||||
char *ws_name = workspace_next_name(src_op->name);
|
||||
swayc_t *ws = new_workspace(src_op, ws_name);
|
||||
ws->is_focused = true;
|
||||
free(ws_name);
|
||||
|
|
|
@ -25,8 +25,22 @@ struct workspace_by_number_data {
|
|||
const char *name;
|
||||
};
|
||||
|
||||
char *workspace_next_name(void) {
|
||||
sway_log(L_DEBUG, "Workspace: Generating new name");
|
||||
static bool workspace_valid_on_output(const char *output_name, const char *ws_name) {
|
||||
int i;
|
||||
for (i = 0; i < config->workspace_outputs->length; ++i) {
|
||||
struct workspace_output *wso = config->workspace_outputs->items[i];
|
||||
if (strcasecmp(wso->workspace, ws_name) == 0) {
|
||||
if (strcasecmp(wso->output, output_name) != 0) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
char *workspace_next_name(const char *output_name) {
|
||||
sway_log(L_DEBUG, "Workspace: Generating new workspace name for output %s", output_name);
|
||||
int i;
|
||||
int l = 1;
|
||||
// Scan all workspace bindings to find the next available workspace name,
|
||||
|
@ -73,6 +87,14 @@ char *workspace_next_name(void) {
|
|||
free(_target);
|
||||
continue;
|
||||
}
|
||||
|
||||
// make sure that the workspace can appear on the given
|
||||
// output
|
||||
if (!workspace_valid_on_output(output_name, _target)) {
|
||||
free(_target);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (binding->order < order) {
|
||||
order = binding->order;
|
||||
target = _target;
|
||||
|
|
Loading…
Reference in a new issue