Make view:tiled user configurable
This commit is contained in:
parent
783e982206
commit
838aaf2daf
4 changed files with 55 additions and 17 deletions
|
@ -13,6 +13,7 @@
|
||||||
|
|
||||||
#include <wayland-server.h>
|
#include <wayland-server.h>
|
||||||
#include <wlr/types/wlr_xdg_shell.h>
|
#include <wlr/types/wlr_xdg_shell.h>
|
||||||
|
#include <wlr/util/edges.h>
|
||||||
|
|
||||||
enum kiwmi_view_type {
|
enum kiwmi_view_type {
|
||||||
KIWMI_VIEW_XDG_SHELL,
|
KIWMI_VIEW_XDG_SHELL,
|
||||||
|
@ -55,7 +56,7 @@ struct kiwmi_view_impl {
|
||||||
void *user_data);
|
void *user_data);
|
||||||
void (*set_activated)(struct kiwmi_view *view, bool activated);
|
void (*set_activated)(struct kiwmi_view *view, bool activated);
|
||||||
void (*set_size)(struct kiwmi_view *view, uint32_t width, uint32_t height);
|
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 wlr_surface *(*surface_at)(
|
||||||
struct kiwmi_view *view,
|
struct kiwmi_view *view,
|
||||||
double sx,
|
double sx,
|
||||||
|
@ -71,7 +72,7 @@ void view_for_each_surface(
|
||||||
void *user_data);
|
void *user_data);
|
||||||
void view_set_activated(struct kiwmi_view *view, bool activated);
|
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_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 wlr_surface *view_surface_at(
|
||||||
struct kiwmi_view *view,
|
struct kiwmi_view *view,
|
||||||
double sx,
|
double sx,
|
||||||
|
|
|
@ -48,10 +48,10 @@ view_set_size(struct kiwmi_view *view, uint32_t width, uint32_t height)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
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) {
|
if (view->impl->set_tiled) {
|
||||||
view->impl->set_tiled(view, tiled);
|
view->impl->set_tiled(view, edges);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -83,16 +83,8 @@ xdg_shell_view_set_size(struct kiwmi_view *view, uint32_t width, uint32_t height
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
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);
|
wlr_xdg_toplevel_set_tiled(view->xdg_surface, edges);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,10 @@
|
||||||
|
|
||||||
#include "luak/kiwmi_view.h"
|
#include "luak/kiwmi_view.h"
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include <lauxlib.h>
|
#include <lauxlib.h>
|
||||||
|
#include <wlr/util/edges.h>
|
||||||
#include <wlr/util/log.h>
|
#include <wlr/util/log.h>
|
||||||
|
|
||||||
#include "desktop/view.h"
|
#include "desktop/view.h"
|
||||||
|
@ -117,13 +120,55 @@ l_kiwmi_view_tiled(lua_State *L)
|
||||||
{
|
{
|
||||||
struct kiwmi_view *view =
|
struct kiwmi_view *view =
|
||||||
*(struct kiwmi_view **)luaL_checkudata(L, 1, "kiwmi_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[] = {
|
static const luaL_Reg kiwmi_view_methods[] = {
|
||||||
|
|
Loading…
Reference in a new issue