Add view:title, view:app_id, view:pid
This commit is contained in:
parent
4c72a91afe
commit
43f5de3d7c
4 changed files with 109 additions and 0 deletions
|
@ -11,10 +11,17 @@
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
#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>
|
#include <wlr/util/edges.h>
|
||||||
|
|
||||||
|
enum kiwmi_view_prop {
|
||||||
|
KIWMI_VIEW_PROP_APP_ID,
|
||||||
|
KIWMI_VIEW_PROP_TITLE,
|
||||||
|
};
|
||||||
|
|
||||||
enum kiwmi_view_type {
|
enum kiwmi_view_type {
|
||||||
KIWMI_VIEW_XDG_SHELL,
|
KIWMI_VIEW_XDG_SHELL,
|
||||||
};
|
};
|
||||||
|
@ -59,10 +66,13 @@ struct kiwmi_view_impl {
|
||||||
struct kiwmi_view *view,
|
struct kiwmi_view *view,
|
||||||
wlr_surface_iterator_func_t iterator,
|
wlr_surface_iterator_func_t iterator,
|
||||||
void *user_data);
|
void *user_data);
|
||||||
|
pid_t (*get_pid)(struct kiwmi_view *view);
|
||||||
void (
|
void (
|
||||||
*get_size)(struct kiwmi_view *view, uint32_t *width, uint32_t *height);
|
*get_size)(struct kiwmi_view *view, uint32_t *width, uint32_t *height);
|
||||||
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);
|
||||||
|
const char *(
|
||||||
|
*get_string_prop)(struct kiwmi_view *view, enum kiwmi_view_prop prop);
|
||||||
void (*set_tiled)(struct kiwmi_view *view, enum wlr_edges edges);
|
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,
|
||||||
|
@ -77,7 +87,10 @@ void view_for_each_surface(
|
||||||
struct kiwmi_view *view,
|
struct kiwmi_view *view,
|
||||||
wlr_surface_iterator_func_t iterator,
|
wlr_surface_iterator_func_t iterator,
|
||||||
void *user_data);
|
void *user_data);
|
||||||
|
pid_t view_get_pid(struct kiwmi_view *view);
|
||||||
void view_get_size(struct kiwmi_view *view, uint32_t *width, uint32_t *height);
|
void view_get_size(struct kiwmi_view *view, uint32_t *width, uint32_t *height);
|
||||||
|
const char *view_get_app_id(struct kiwmi_view *view);
|
||||||
|
const char *view_get_title(struct kiwmi_view *view);
|
||||||
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, enum wlr_edges edges);
|
void view_set_tiled(struct kiwmi_view *view, enum wlr_edges edges);
|
||||||
|
|
|
@ -34,6 +34,16 @@ view_for_each_surface(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pid_t
|
||||||
|
view_get_pid(struct kiwmi_view *view)
|
||||||
|
{
|
||||||
|
if (view->impl->get_pid) {
|
||||||
|
return view->impl->get_pid(view);
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
view_get_size(struct kiwmi_view *view, uint32_t *width, uint32_t *height)
|
view_get_size(struct kiwmi_view *view, uint32_t *width, uint32_t *height)
|
||||||
{
|
{
|
||||||
|
@ -42,6 +52,26 @@ view_get_size(struct kiwmi_view *view, uint32_t *width, uint32_t *height)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *
|
||||||
|
view_get_app_id(struct kiwmi_view *view)
|
||||||
|
{
|
||||||
|
if (view->impl->get_string_prop) {
|
||||||
|
return view->impl->get_string_prop(view, KIWMI_VIEW_PROP_APP_ID);
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *
|
||||||
|
view_get_title(struct kiwmi_view *view)
|
||||||
|
{
|
||||||
|
if (view->impl->get_string_prop) {
|
||||||
|
return view->impl->get_string_prop(view, KIWMI_VIEW_PROP_TITLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
view_set_activated(struct kiwmi_view *view, bool activated)
|
view_set_activated(struct kiwmi_view *view, bool activated)
|
||||||
{
|
{
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
|
|
||||||
#include "desktop/xdg_shell.h"
|
#include "desktop/xdg_shell.h"
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
#include <wlr/types/wlr_xdg_shell.h>
|
#include <wlr/types/wlr_xdg_shell.h>
|
||||||
#include <wlr/util/edges.h>
|
#include <wlr/util/edges.h>
|
||||||
#include <wlr/util/log.h>
|
#include <wlr/util/log.h>
|
||||||
|
@ -104,6 +106,17 @@ xdg_shell_view_for_each_surface(
|
||||||
wlr_xdg_surface_for_each_surface(view->xdg_surface, iterator, user_data);
|
wlr_xdg_surface_for_each_surface(view->xdg_surface, iterator, user_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static pid_t
|
||||||
|
xdg_shell_view_get_pid(struct kiwmi_view *view)
|
||||||
|
{
|
||||||
|
struct wl_client *client = view->xdg_surface->client->client;
|
||||||
|
|
||||||
|
pid_t pid;
|
||||||
|
wl_client_get_credentials(client, &pid, NULL, NULL);
|
||||||
|
|
||||||
|
return pid;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
xdg_shell_view_get_size(
|
xdg_shell_view_get_size(
|
||||||
struct kiwmi_view *view,
|
struct kiwmi_view *view,
|
||||||
|
@ -116,6 +129,21 @@ xdg_shell_view_get_size(
|
||||||
*height = geom->height;
|
*height = geom->height;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
xdg_shell_view_get_string_prop(
|
||||||
|
struct kiwmi_view *view,
|
||||||
|
enum kiwmi_view_prop prop)
|
||||||
|
{
|
||||||
|
switch (prop) {
|
||||||
|
case KIWMI_VIEW_PROP_APP_ID:
|
||||||
|
return view->xdg_surface->toplevel->title;
|
||||||
|
case KIWMI_VIEW_PROP_TITLE:
|
||||||
|
return view->xdg_surface->toplevel->title;
|
||||||
|
default:
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
xdg_shell_view_set_activated(struct kiwmi_view *view, bool activated)
|
xdg_shell_view_set_activated(struct kiwmi_view *view, bool activated)
|
||||||
{
|
{
|
||||||
|
@ -151,7 +179,9 @@ xdg_shell_view_surface_at(
|
||||||
static const struct kiwmi_view_impl xdg_shell_view_impl = {
|
static const struct kiwmi_view_impl xdg_shell_view_impl = {
|
||||||
.close = xdg_shell_view_close,
|
.close = xdg_shell_view_close,
|
||||||
.for_each_surface = xdg_shell_view_for_each_surface,
|
.for_each_surface = xdg_shell_view_for_each_surface,
|
||||||
|
.get_pid = xdg_shell_view_get_pid,
|
||||||
.get_size = xdg_shell_view_get_size,
|
.get_size = xdg_shell_view_get_size,
|
||||||
|
.get_string_prop = xdg_shell_view_get_string_prop,
|
||||||
.set_activated = xdg_shell_view_set_activated,
|
.set_activated = xdg_shell_view_set_activated,
|
||||||
.set_size = xdg_shell_view_set_size,
|
.set_size = xdg_shell_view_set_size,
|
||||||
.set_tiled = xdg_shell_view_set_tiled,
|
.set_tiled = xdg_shell_view_set_tiled,
|
||||||
|
|
|
@ -19,6 +19,17 @@
|
||||||
#include "luak/kiwmi_lua_callback.h"
|
#include "luak/kiwmi_lua_callback.h"
|
||||||
#include "server.h"
|
#include "server.h"
|
||||||
|
|
||||||
|
static int
|
||||||
|
l_kiwmi_view_app_id(lua_State *L)
|
||||||
|
{
|
||||||
|
struct kiwmi_view *view =
|
||||||
|
*(struct kiwmi_view **)luaL_checkudata(L, 1, "kiwmi_view");
|
||||||
|
|
||||||
|
lua_pushstring(L, view_get_app_id(view));
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
l_kiwmi_view_close(lua_State *L)
|
l_kiwmi_view_close(lua_State *L)
|
||||||
{
|
{
|
||||||
|
@ -82,6 +93,17 @@ l_kiwmi_view_move(lua_State *L)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
l_kiwmi_view_pid(lua_State *L)
|
||||||
|
{
|
||||||
|
struct kiwmi_view *view =
|
||||||
|
*(struct kiwmi_view **)luaL_checkudata(L, 1, "kiwmi_view");
|
||||||
|
|
||||||
|
lua_pushinteger(L, view_get_pid(view));
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
l_kiwmi_view_pos(lua_State *L)
|
l_kiwmi_view_pos(lua_State *L)
|
||||||
{
|
{
|
||||||
|
@ -194,18 +216,32 @@ l_kiwmi_view_tiled(lua_State *L)
|
||||||
return luaL_argerror(L, 2, "expected bool or table");
|
return luaL_argerror(L, 2, "expected bool or table");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
l_kiwmi_view_title(lua_State *L)
|
||||||
|
{
|
||||||
|
struct kiwmi_view *view =
|
||||||
|
*(struct kiwmi_view **)luaL_checkudata(L, 1, "kiwmi_view");
|
||||||
|
|
||||||
|
lua_pushstring(L, view_get_app_id(view));
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
static const luaL_Reg kiwmi_view_methods[] = {
|
static const luaL_Reg kiwmi_view_methods[] = {
|
||||||
|
{"app_id", l_kiwmi_view_app_id},
|
||||||
{"close", l_kiwmi_view_close},
|
{"close", l_kiwmi_view_close},
|
||||||
{"focus", l_kiwmi_view_focus},
|
{"focus", l_kiwmi_view_focus},
|
||||||
{"hidden", l_kiwmi_view_hidden},
|
{"hidden", l_kiwmi_view_hidden},
|
||||||
{"hide", l_kiwmi_view_hide},
|
{"hide", l_kiwmi_view_hide},
|
||||||
{"move", l_kiwmi_view_move},
|
{"move", l_kiwmi_view_move},
|
||||||
{"on", luaK_callback_register_dispatch},
|
{"on", luaK_callback_register_dispatch},
|
||||||
|
{"pid", l_kiwmi_view_pid},
|
||||||
{"pos", l_kiwmi_view_pos},
|
{"pos", l_kiwmi_view_pos},
|
||||||
{"resize", l_kiwmi_view_resize},
|
{"resize", l_kiwmi_view_resize},
|
||||||
{"show", l_kiwmi_view_show},
|
{"show", l_kiwmi_view_show},
|
||||||
{"size", l_kiwmi_view_size},
|
{"size", l_kiwmi_view_size},
|
||||||
{"tiled", l_kiwmi_view_tiled},
|
{"tiled", l_kiwmi_view_tiled},
|
||||||
|
{"title", l_kiwmi_view_title},
|
||||||
{NULL, NULL},
|
{NULL, NULL},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue