From aeee7d04021c955ca4bff85504c3702b475d4588 Mon Sep 17 00:00:00 2001 From: Blekos EelVex Kostas Date: Sun, 11 Apr 2010 15:19:13 +0300 Subject: [PATCH] bring_window_here function and command --- src/commands.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/commands.c b/src/commands.c index 6742a469..9d0d0f65 100644 --- a/src/commands.c +++ b/src/commands.c @@ -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 "); -- 2.39.5