mirror of
https://github.com/swaywm/sway.git
synced 2024-11-26 18:01:29 +00:00
Merge pull request #501 from mikkeloscar/ws-on-output
Fix assigning workspaces to outputs
This commit is contained in:
commit
ef5d896946
|
@ -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