bring_window_here function and command

This commit is contained in:
Blekos EelVex Kostas 2010-04-11 15:19:13 +03:00 committed by Michael Stapelberg
parent a99fff03c3
commit aeee7d0402
1 changed files with 42 additions and 0 deletions

View File

@ -703,6 +703,41 @@ static void move_current_window_to_workspace(xcb_connection_t *conn, int workspa
}
}
/*
* Brings the given window class / title to the current workspace.
*
*/
static void bring_window_here(xcb_connection_t *conn, const char *arguments) {
char *classtitle;
Client *client;
/* The first character is a quote, this was checked before */
classtitle = sstrdup(arguments+1);
/* The last character is a quote, we just set it to NULL */
classtitle[strlen(classtitle)-1] = '\0';
if ((client = get_matching_client(conn, classtitle, NULL)) == NULL) {
free(classtitle);
ELOG("No matching client found.\n");
return;
}
/* This is the workspace num that we are on */
int current_workspace_num = c_ws->output->current_workspace->num + 1;
/* This is the workspace num that the client is on */
int clients_workspace_num = client->workspace->num + 1;
free(classtitle);
workspace_show(conn, clients_workspace_num);
set_focus(conn, client, true);
if (client_is_floating(client))
move_floating_window_to_workspace(conn, client, current_workspace_num);
else move_current_window_to_workspace(conn, current_workspace_num);
workspace_show(conn, current_workspace_num);
set_focus(conn, client, true);
}
/*
* Jumps to the given window class / title.
* Title is matched using strstr, that is, matches if it appears anywhere
@ -1104,6 +1139,13 @@ void parse_command(xcb_connection_t *conn, const char *command) {
return;
}
if (STARTS_WITH(command, "bring ")) {
const char *arguments = command + strlen("bring ");
if (arguments[0] == '"')
bring_window_here(conn, arguments);
return;
}
/* Is it a jump to a specified workspace, row, col? */
if (STARTS_WITH(command, "jump ")) {
const char *arguments = command + strlen("jump ");