Make view:tiled user configurable

This commit is contained in:
buffet 2020-01-08 17:24:13 +00:00
parent a2b4bd58ae
commit e75b462fc1
4 changed files with 55 additions and 17 deletions

View file

@ -13,6 +13,7 @@
#include <wayland-server.h>
#include <wlr/types/wlr_xdg_shell.h>
#include <wlr/util/edges.h>
enum kiwmi_view_type {
KIWMI_VIEW_XDG_SHELL,
@ -55,7 +56,7 @@ struct kiwmi_view_impl {
void *user_data);
void (*set_activated)(struct kiwmi_view *view, bool activated);
void (*set_size)(struct kiwmi_view *view, uint32_t width, uint32_t height);
void (*set_tiled)(struct kiwmi_view *view, bool tiled);
void (*set_tiled)(struct kiwmi_view *view, enum wlr_edges edges);
struct wlr_surface *(*surface_at)(
struct kiwmi_view *view,
double sx,
@ -71,7 +72,7 @@ void view_for_each_surface(
void *user_data);
void view_set_activated(struct kiwmi_view *view, bool activated);
void view_set_size(struct kiwmi_view *view, uint32_t width, uint32_t height);
void view_set_tiled(struct kiwmi_view *view, bool tiled);
void view_set_tiled(struct kiwmi_view *view, enum wlr_edges edges);
struct wlr_surface *view_surface_at(
struct kiwmi_view *view,
double sx,

View file

@ -48,10 +48,10 @@ view_set_size(struct kiwmi_view *view, uint32_t width, uint32_t height)
}
void
view_set_tiled(struct kiwmi_view *view, bool tiled)
view_set_tiled(struct kiwmi_view *view, enum wlr_edges edges)
{
if (view->impl->set_tiled) {
view->impl->set_tiled(view, tiled);
view->impl->set_tiled(view, edges);
}
}

View file

@ -83,16 +83,8 @@ xdg_shell_view_set_size(struct kiwmi_view *view, uint32_t width, uint32_t height
}
static void
xdg_shell_view_set_tiled(struct kiwmi_view *view, bool tiled)
xdg_shell_view_set_tiled(struct kiwmi_view *view, enum wlr_edges edges)
{
enum wlr_edges edges;
if (tiled) {
edges = WLR_EDGE_TOP | WLR_EDGE_BOTTOM | WLR_EDGE_LEFT | WLR_EDGE_RIGHT;
} else {
edges = WLR_EDGE_NONE;
}
wlr_xdg_toplevel_set_tiled(view->xdg_surface, edges);
}

View file

@ -7,7 +7,10 @@
#include "luak/kiwmi_view.h"
#include <string.h>
#include <lauxlib.h>
#include <wlr/util/edges.h>
#include <wlr/util/log.h>
#include "desktop/view.h"
@ -117,13 +120,55 @@ l_kiwmi_view_tiled(lua_State *L)
{
struct kiwmi_view *view =
*(struct kiwmi_view **)luaL_checkudata(L, 1, "kiwmi_view");
luaL_checktype(L, 2, LUA_TBOOLEAN);
bool tiled = lua_toboolean(L, 2);
if (lua_isboolean(L, 2)) {
enum wlr_edges edges = WLR_EDGE_NONE;
view_set_tiled(view, tiled);
if (lua_toboolean(L, 2)) {
edges = WLR_EDGE_TOP | WLR_EDGE_BOTTOM | WLR_EDGE_LEFT | WLR_EDGE_RIGHT;
}
return 0;
view_set_tiled(view, edges);
return 0;
}
if (lua_istable(L, 2)) {
enum wlr_edges edges = WLR_EDGE_NONE;
lua_pushnil(L);
while (lua_next(L, 2)) {
if (!lua_isstring(L, -1)) {
lua_pop(L, 1);
continue;
}
const char *edge = lua_tostring(L, -1);
switch (edge[0]) {
case 't':
edges |= WLR_EDGE_TOP;
break;
case 'b':
edges |= WLR_EDGE_BOTTOM;
break;
case 'l':
edges |= WLR_EDGE_LEFT;
break;
case 'r':
edges |= WLR_EDGE_RIGHT;
break;
}
lua_pop(L, 1);
}
view_set_tiled(view, edges);
return 0;
}
return luaL_argerror(L, 2, "expected bool or table");
}
static const luaL_Reg kiwmi_view_methods[] = {