feat: add "AutoPlace" action

The AutoPlace action will apply placement_find_best() to an active view,
moving it to a position on its output that will minimize overlap with
other views.
This commit is contained in:
Andrew J. Hesford 2023-12-28 16:47:21 -05:00 committed by Johan Malm
parent 4b6239ee0c
commit e3cd189769
3 changed files with 20 additions and 1 deletions

View file

@ -16,6 +16,7 @@
#include "debug.h"
#include "labwc.h"
#include "menu/menu.h"
#include "placement.h"
#include "regions.h"
#include "ssd.h"
#include "view.h"
@ -100,6 +101,7 @@ enum action_type {
ACTION_TYPE_FOR_EACH,
ACTION_TYPE_VIRTUAL_OUTPUT_ADD,
ACTION_TYPE_VIRTUAL_OUTPUT_REMOVE,
ACTION_TYPE_AUTO_PLACE,
};
const char *action_names[] = {
@ -146,6 +148,7 @@ const char *action_names[] = {
"ForEach",
"VirtualOutputAdd",
"VirtualOutputRemove",
"AutoPlace",
NULL
};
@ -940,6 +943,14 @@ actions_run(struct view *activator, struct server *server,
output_remove_virtual(server, output_name);
}
break;
case ACTION_TYPE_AUTO_PLACE:
if (view) {
int x = 0, y = 0;
if (placement_find_best(view, &x, &y)) {
view_move(view, x, y);
}
}
break;
case ACTION_TYPE_INVALID:
wlr_log(WLR_ERROR, "Not executing unknown action");
break;