Implement the possibility to set a workspace open clients automatically in floating mode

Use "wwt" (with workspace: toggle floating) in your configuration file
This commit is contained in:
Michael Stapelberg 2009-06-19 13:20:10 +02:00
parent 4135aaad7c
commit 5c48444b4e
3 changed files with 32 additions and 16 deletions

View File

@ -161,6 +161,9 @@ struct Workspace {
int current_row; int current_row;
int current_col; int current_col;
/* Should clients on this workspace be automatically floating? */
bool auto_float;
Client *fullscreen_client; Client *fullscreen_client;
/* The focus stack contains the clients in the correct order of focus so that /* The focus stack contains the clients in the correct order of focus so that

View File

@ -854,8 +854,31 @@ void parse_command(xcb_connection_t *conn, const char *command) {
return; return;
} }
enum { WITH_WINDOW, WITH_CONTAINER, WITH_WORKSPACE } with = WITH_WINDOW;
/* Is it a <with>? */
if (command[0] == 'w') {
command++;
/* TODO: implement */
if (command[0] == 'c') {
with = WITH_CONTAINER;
command++;
} else if (command[0] == 'w') {
with = WITH_WORKSPACE;
command++;
} else {
LOG("not yet implemented.\n");
return;
}
}
/* Is it 't' for toggle tiling/floating? */ /* Is it 't' for toggle tiling/floating? */
if (command[0] == 't') { if (command[0] == 't') {
if (with == WITH_WORKSPACE) {
c_ws->auto_float = !c_ws->auto_float;
LOG("autofloat is now %d\n", c_ws->auto_float);
return;
}
if (last_focused == NULL) { if (last_focused == NULL) {
LOG("Cannot toggle tiling/floating: workspace empty\n"); LOG("Cannot toggle tiling/floating: workspace empty\n");
return; return;
@ -873,21 +896,6 @@ void parse_command(xcb_connection_t *conn, const char *command) {
return; return;
} }
enum { WITH_WINDOW, WITH_CONTAINER } with = WITH_WINDOW;
/* Is it a <with>? */
if (command[0] == 'w') {
command++;
/* TODO: implement */
if (command[0] == 'c') {
with = WITH_CONTAINER;
command++;
} else {
LOG("not yet implemented.\n");
return;
}
}
/* Its a normal <cmd> */ /* Its a normal <cmd> */
char *rest = NULL; char *rest = NULL;
enum { ACTION_FOCUS, ACTION_MOVE, ACTION_SNAP } action = ACTION_FOCUS; enum { ACTION_FOCUS, ACTION_MOVE, ACTION_SNAP } action = ACTION_FOCUS;

View File

@ -265,10 +265,15 @@ void reparent_window(xcb_connection_t *conn, xcb_window_t child,
atom[i] == atoms[_NET_WM_WINDOW_TYPE_SPLASH]) { atom[i] == atoms[_NET_WM_WINDOW_TYPE_SPLASH]) {
/* Set the dialog window to automatically floating, will be used below */ /* Set the dialog window to automatically floating, will be used below */
new->floating = FLOATING_AUTO_ON; new->floating = FLOATING_AUTO_ON;
LOG("dialog window, automatically floating\n"); LOG("dialog/utility/toolbar/splash window, automatically floating\n");
} }
} }
if (new->workspace->auto_float) {
new->floating = FLOATING_AUTO_ON;
LOG("workspace is in autofloat mode, setting floating\n");
}
if (new->dock) { if (new->dock) {
/* Get _NET_WM_STRUT_PARTIAL to determine the clients requested height */ /* Get _NET_WM_STRUT_PARTIAL to determine the clients requested height */
uint32_t *strut; uint32_t *strut;