return;
}
+ if (output->current_workspace == NULL) {
+ DLOG("Boundary checking deferred, no current workspace on output\n");
+ client->force_reconfigure = true;
+ return;
+ }
+
DLOG("Client is on workspace %p with output %p\n", client->workspace, client->workspace->output);
DLOG("but output at %d, %d is %p\n", client->rect.x, client->rect.y, output);
floating_assign_to_workspace(client, output->current_workspace);
yoffset[cols] += single_height;
}
+ /* Reposition all floating clients with force_reconfigure == true */
+ TAILQ_FOREACH(client, &(r_ws->floating_clients), floating_clients) {
+ if (!client->force_reconfigure)
+ continue;
+
+ client->force_reconfigure = false;
+ reposition_client(conn, client);
+ resize_client(conn, client);
+ }
+
ignore_enter_notify_forall(conn, r_ws, false);
render_bars(conn, r_ws, width, &height);
#include "log.h"
#include "ewmh.h"
#include "ipc.h"
+#include "client.h"
/* While a clean namespace is usually a pretty good thing, we really need
* to use shorter names than the whole xcb_randr_* default names. */
if (ws->output != output)
continue;
+ SLIST_FOREACH(client, &(ws->focus_stack), focus_clients) {
+ client->force_reconfigure = true;
+ if (!client_is_floating(client))
+ continue;
+ /* For floating clients we need to translate the
+ * coordinates (old workspace to new workspace) */
+ DLOG("old: (%x, %x)\n", client->rect.x, client->rect.y);
+ client->rect.x -= ws->rect.x;
+ client->rect.y -= ws->rect.y;
+ client->rect.x += ws->output->rect.x;
+ client->rect.y += ws->output->rect.y;
+ DLOG("new: (%x, %x)\n", client->rect.x, client->rect.y);
+ }
+
/* Update dimensions from output */
memcpy(&(ws->rect), &(ws->output->rect), sizeof(Rect));
- SLIST_FOREACH(client, &(ws->focus_stack), focus_clients)
- client->force_reconfigure = true;
-
/* Update the dimensions of a fullscreen client, if any */
if (ws->fullscreen_client != NULL) {
DLOG("Updating fullscreen client size\n");