remove old fullscreen code
This commit is contained in:
parent
6bf55dc356
commit
b93413ca49
|
@ -46,34 +46,6 @@ void client_kill(xcb_connection_t *conn, Client *window);
|
||||||
bool client_matches_class_name(Client *client, char *to_class, char *to_title,
|
bool client_matches_class_name(Client *client, char *to_class, char *to_title,
|
||||||
char *to_title_ucs, int to_title_ucs_len);
|
char *to_title_ucs, int to_title_ucs_len);
|
||||||
|
|
||||||
/**
|
|
||||||
* Enters fullscreen mode for the given client. This is called by toggle_fullscreen
|
|
||||||
* and when moving a fullscreen client to another screen.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void client_enter_fullscreen(xcb_connection_t *conn, Client *client, bool global);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Leaves fullscreen mode for the given client. This is called by toggle_fullscreen.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void client_leave_fullscreen(xcb_connection_t *conn, Client *client);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Toggles fullscreen mode for the given client. It updates the data
|
|
||||||
* structures and reconfigures (= resizes/moves) the client and its frame to
|
|
||||||
* the full size of the screen. When leaving fullscreen, re-rendering the
|
|
||||||
* layout is forced.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void client_toggle_fullscreen(xcb_connection_t *conn, Client *client);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Like client_toggle_fullscreen(), but putting it in global fullscreen-mode.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void client_toggle_fullscreen_global(xcb_connection_t *conn, Client *client);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the position of the given client in the X stack to the highest (tiling
|
* Sets the position of the given client in the X stack to the highest (tiling
|
||||||
* layer is always on the same position, so this doesn’t matter) below the
|
* layer is always on the same position, so this doesn’t matter) below the
|
||||||
|
|
149
src/client.c
149
src/client.c
|
@ -148,155 +148,6 @@ bool client_matches_class_name(Client *client, char *to_class, char *to_title,
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Enters fullscreen mode for the given client. This is called by toggle_fullscreen
|
|
||||||
* and when moving a fullscreen client to another screen.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void client_enter_fullscreen(xcb_connection_t *conn, Client *client, bool global) {
|
|
||||||
Workspace *workspace;
|
|
||||||
Output *output;
|
|
||||||
Rect r;
|
|
||||||
|
|
||||||
if (global) {
|
|
||||||
TAILQ_FOREACH(output, &outputs, outputs) {
|
|
||||||
if (!output->active)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (output->current_workspace->fullscreen_client == NULL)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
LOG("Not entering global fullscreen mode, there already "
|
|
||||||
"is a fullscreen client on output %s.\n", output->name);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
r = (Rect) { UINT_MAX, UINT_MAX, 0,0 };
|
|
||||||
Output *output;
|
|
||||||
|
|
||||||
/* Set fullscreen_client for each active workspace.
|
|
||||||
* Expand the rectangle to contain all outputs. */
|
|
||||||
TAILQ_FOREACH(output, &outputs, outputs) {
|
|
||||||
if (!output->active)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
output->current_workspace->fullscreen_client = client;
|
|
||||||
|
|
||||||
/* Temporarily abuse width/heigth as coordinates of the lower right corner */
|
|
||||||
if (r.x > output->rect.x)
|
|
||||||
r.x = output->rect.x;
|
|
||||||
if (r.y > output->rect.y)
|
|
||||||
r.y = output->rect.y;
|
|
||||||
if (r.x + r.width < output->rect.x + output->rect.width)
|
|
||||||
r.width = output->rect.x + output->rect.width;
|
|
||||||
if (r.y + r.height < output->rect.y + output->rect.height)
|
|
||||||
r.height = output->rect.y + output->rect.height;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Putting them back to their original meaning */
|
|
||||||
r.height -= r.x;
|
|
||||||
r.width -= r.y;
|
|
||||||
|
|
||||||
LOG("Entering global fullscreen mode...\n");
|
|
||||||
} else {
|
|
||||||
workspace = client->workspace;
|
|
||||||
if (workspace->fullscreen_client != NULL && workspace->fullscreen_client != client) {
|
|
||||||
LOG("Not entering fullscreen mode, there already is a fullscreen client.\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
workspace->fullscreen_client = client;
|
|
||||||
r = workspace->rect;
|
|
||||||
|
|
||||||
LOG("Entering fullscreen mode...\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
client->fullscreen = true;
|
|
||||||
|
|
||||||
/* We just entered fullscreen mode, let’s configure the window */
|
|
||||||
DLOG("child itself will be at %dx%d with size %dx%d\n",
|
|
||||||
r.x, r.y, r.width, r.height);
|
|
||||||
|
|
||||||
xcb_set_window_rect(conn, client->frame, r);
|
|
||||||
|
|
||||||
/* Child’s coordinates are relative to the parent (=frame) */
|
|
||||||
r.x = 0;
|
|
||||||
r.y = 0;
|
|
||||||
xcb_set_window_rect(conn, client->child, r);
|
|
||||||
|
|
||||||
/* Raise the window */
|
|
||||||
uint32_t values[] = { XCB_STACK_MODE_ABOVE };
|
|
||||||
xcb_configure_window(conn, client->frame, XCB_CONFIG_WINDOW_STACK_MODE, values);
|
|
||||||
|
|
||||||
fake_configure_notify(conn, r, client->child);
|
|
||||||
|
|
||||||
xcb_flush(conn);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Leaves fullscreen mode for the current client. This is called by toggle_fullscreen.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void client_leave_fullscreen(xcb_connection_t *conn, Client *client) {
|
|
||||||
LOG("leaving fullscreen mode\n");
|
|
||||||
client->fullscreen = false;
|
|
||||||
Workspace *ws;
|
|
||||||
TAILQ_FOREACH(ws, workspaces, workspaces)
|
|
||||||
if (ws->fullscreen_client == client)
|
|
||||||
ws->fullscreen_client = NULL;
|
|
||||||
|
|
||||||
if (client_is_floating(client)) {
|
|
||||||
/* For floating clients it’s enough if we just reconfigure that window (in fact,
|
|
||||||
* re-rendering the layout will not update the client.) */
|
|
||||||
reposition_client(conn, client);
|
|
||||||
resize_client(conn, client);
|
|
||||||
/* redecorate_window flushes */
|
|
||||||
redecorate_window(conn, client);
|
|
||||||
} else {
|
|
||||||
client_set_below_floating(conn, client);
|
|
||||||
|
|
||||||
/* Because the coordinates of the window haven’t changed, it would not be
|
|
||||||
re-configured if we don’t set the following flag */
|
|
||||||
client->force_reconfigure = true;
|
|
||||||
/* We left fullscreen mode, redraw the whole layout to ensure enternotify events are disabled */
|
|
||||||
render_layout(conn);
|
|
||||||
}
|
|
||||||
|
|
||||||
xcb_flush(conn);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Toggles fullscreen mode for the given client. It updates the data structures and
|
|
||||||
* reconfigures (= resizes/moves) the client and its frame to the full size of the
|
|
||||||
* screen. When leaving fullscreen, re-rendering the layout is forced.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void client_toggle_fullscreen(xcb_connection_t *conn, Client *client) {
|
|
||||||
/* dock clients cannot enter fullscreen mode */
|
|
||||||
assert(!client->dock);
|
|
||||||
|
|
||||||
if (!client->fullscreen) {
|
|
||||||
client_enter_fullscreen(conn, client, false);
|
|
||||||
} else {
|
|
||||||
client_leave_fullscreen(conn, client);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Like client_toggle_fullscreen(), but putting it in global fullscreen-mode.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void client_toggle_fullscreen_global(xcb_connection_t *conn, Client *client) {
|
|
||||||
/* dock clients cannot enter fullscreen mode */
|
|
||||||
assert(!client->dock);
|
|
||||||
|
|
||||||
if (!client->fullscreen) {
|
|
||||||
client_enter_fullscreen(conn, client, true);
|
|
||||||
} else {
|
|
||||||
client_leave_fullscreen(conn, client);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Sets the position of the given client in the X stack to the highest (tiling layer is always
|
* Sets the position of the given client in the X stack to the highest (tiling layer is always
|
||||||
* on the same position, so this doesn’t matter) below the first floating client, so that
|
* on the same position, so this doesn’t matter) below the first floating client, so that
|
||||||
|
|
Loading…
Reference in New Issue