Make named workspace assignments work again
Please note that you need a quoted string for the workspace name. Example: workspace "1: www" output HDMI2 Fixes: #456
This commit is contained in:
parent
a4cb4a64d4
commit
5227b29b0f
@ -741,6 +741,7 @@ void parse_file(const char *f) {
|
|||||||
%type <number> bar_mode_mode
|
%type <number> bar_mode_mode
|
||||||
%type <string> command
|
%type <string> command
|
||||||
%type <string> word_or_number
|
%type <string> word_or_number
|
||||||
|
%type <string> qstring_or_number
|
||||||
%type <string> optional_workspace_name
|
%type <string> optional_workspace_name
|
||||||
%type <string> workspace_name
|
%type <string> workspace_name
|
||||||
%type <string> window_class
|
%type <string> window_class
|
||||||
@ -935,7 +936,10 @@ criterion:
|
|||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
|
qstring_or_number:
|
||||||
|
QUOTEDSTRING
|
||||||
|
| NUMBER { sasprintf(&$$, "%d", $1); }
|
||||||
|
;
|
||||||
|
|
||||||
word_or_number:
|
word_or_number:
|
||||||
WORD
|
WORD
|
||||||
@ -1344,40 +1348,39 @@ workspace_bar:
|
|||||||
;
|
;
|
||||||
|
|
||||||
workspace:
|
workspace:
|
||||||
TOKWORKSPACE NUMBER TOKOUTPUT OUTPUT optional_workspace_name
|
TOKWORKSPACE qstring_or_number TOKOUTPUT OUTPUT optional_workspace_name
|
||||||
{
|
{
|
||||||
int ws_num = $2;
|
char *ws_name = $2;
|
||||||
if (ws_num < 1) {
|
|
||||||
DLOG("Invalid workspace assignment, workspace number %d out of range\n", ws_num);
|
|
||||||
} else {
|
|
||||||
char *ws_name = NULL;
|
|
||||||
if ($5 == NULL) {
|
|
||||||
sasprintf(&ws_name, "%d", ws_num);
|
|
||||||
} else {
|
|
||||||
ws_name = $5;
|
|
||||||
}
|
|
||||||
|
|
||||||
DLOG("Should assign workspace %s to output %s\n", ws_name, $4);
|
if ($5 != NULL) {
|
||||||
/* Check for earlier assignments of the same workspace so that we
|
ELOG("The old (v3) syntax workspace <number> output <output> <name> is deprecated.\n");
|
||||||
* don’t have assignments of a single workspace to different
|
ELOG("Please use the new syntax: workspace \"<workspace>\" output <output>\n");
|
||||||
* outputs */
|
ELOG("In your case, the following should work:\n");
|
||||||
struct Workspace_Assignment *assignment;
|
ELOG(" workspace \"%s\" output %s\n", $5, $4);
|
||||||
bool duplicate = false;
|
ws_name = $5;
|
||||||
TAILQ_FOREACH(assignment, &ws_assignments, ws_assignments) {
|
context->has_warnings = true;
|
||||||
if (strcasecmp(assignment->name, ws_name) == 0) {
|
}
|
||||||
ELOG("You have a duplicate workspace assignment for workspace \"%s\"\n",
|
|
||||||
ws_name);
|
DLOG("Assigning workspace \"%s\" to output \"%s\"\n", ws_name, $4);
|
||||||
assignment->output = $4;
|
/* Check for earlier assignments of the same workspace so that we
|
||||||
duplicate = true;
|
* don’t have assignments of a single workspace to different
|
||||||
}
|
* outputs */
|
||||||
}
|
struct Workspace_Assignment *assignment;
|
||||||
if (!duplicate) {
|
bool duplicate = false;
|
||||||
assignment = scalloc(sizeof(struct Workspace_Assignment));
|
TAILQ_FOREACH(assignment, &ws_assignments, ws_assignments) {
|
||||||
assignment->name = ws_name;
|
if (strcasecmp(assignment->name, ws_name) == 0) {
|
||||||
|
ELOG("You have a duplicate workspace assignment for workspace \"%s\"\n",
|
||||||
|
ws_name);
|
||||||
assignment->output = $4;
|
assignment->output = $4;
|
||||||
TAILQ_INSERT_TAIL(&ws_assignments, assignment, ws_assignments);
|
duplicate = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!duplicate) {
|
||||||
|
assignment = scalloc(sizeof(struct Workspace_Assignment));
|
||||||
|
assignment->name = ws_name;
|
||||||
|
assignment->output = $4;
|
||||||
|
TAILQ_INSERT_TAIL(&ws_assignments, assignment, ws_assignments);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
| TOKWORKSPACE NUMBER workspace_name
|
| TOKWORKSPACE NUMBER workspace_name
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user