mirror of
https://github.com/swaywm/sway.git
synced 2026-05-03 06:46:26 -04:00
Merge 75a99c1b99 into a06d45a14d
This commit is contained in:
commit
7de05087cc
3 changed files with 36 additions and 34 deletions
|
|
@ -29,6 +29,7 @@ struct sway_view_impl {
|
||||||
const char *(*get_string_prop)(struct sway_view *view,
|
const char *(*get_string_prop)(struct sway_view *view,
|
||||||
enum sway_view_prop prop);
|
enum sway_view_prop prop);
|
||||||
uint32_t (*get_int_prop)(struct sway_view *view, enum sway_view_prop prop);
|
uint32_t (*get_int_prop)(struct sway_view *view, enum sway_view_prop prop);
|
||||||
|
void (*get_geometry)(struct sway_view *view, struct wlr_box *box);
|
||||||
uint32_t (*configure)(struct sway_view *view, double lx, double ly,
|
uint32_t (*configure)(struct sway_view *view, double lx, double ly,
|
||||||
int width, int height);
|
int width, int height);
|
||||||
void (*set_activated)(struct sway_view *view, bool activated);
|
void (*set_activated)(struct sway_view *view, bool activated);
|
||||||
|
|
@ -250,10 +251,6 @@ void view_map(struct sway_view *view, struct wlr_surface *wlr_surface);
|
||||||
|
|
||||||
void view_unmap(struct sway_view *view);
|
void view_unmap(struct sway_view *view);
|
||||||
|
|
||||||
void view_update_position(struct sway_view *view, double lx, double ly);
|
|
||||||
|
|
||||||
void view_update_size(struct sway_view *view, int width, int height);
|
|
||||||
|
|
||||||
void view_child_init(struct sway_view_child *child,
|
void view_child_init(struct sway_view_child *child,
|
||||||
const struct sway_view_child_impl *impl, struct sway_view *view,
|
const struct sway_view_child_impl *impl, struct sway_view *view,
|
||||||
struct wlr_surface *surface);
|
struct wlr_surface *surface);
|
||||||
|
|
|
||||||
|
|
@ -74,7 +74,8 @@ static struct sway_xdg_shell_view *xdg_shell_view_from_view(
|
||||||
return (struct sway_xdg_shell_view *)view;
|
return (struct sway_xdg_shell_view *)view;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *get_string_prop(struct sway_view *view, enum sway_view_prop prop) {
|
static const char *get_string_prop(struct sway_view *view,
|
||||||
|
enum sway_view_prop prop) {
|
||||||
if (xdg_shell_view_from_view(view) == NULL) {
|
if (xdg_shell_view_from_view(view) == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
@ -88,6 +89,16 @@ static const char *get_string_prop(struct sway_view *view, enum sway_view_prop p
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void get_geometry(struct sway_view *view, struct wlr_box *box) {
|
||||||
|
struct sway_xdg_shell_view *xdg_shell_view =
|
||||||
|
xdg_shell_view_from_view(view);
|
||||||
|
if (xdg_shell_view == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
struct wlr_xdg_surface *surface = view->wlr_xdg_surface;
|
||||||
|
wlr_xdg_surface_get_geometry(surface, box);
|
||||||
|
}
|
||||||
|
|
||||||
static uint32_t configure(struct sway_view *view, double lx, double ly,
|
static uint32_t configure(struct sway_view *view, double lx, double ly,
|
||||||
int width, int height) {
|
int width, int height) {
|
||||||
struct sway_xdg_shell_view *xdg_shell_view =
|
struct sway_xdg_shell_view *xdg_shell_view =
|
||||||
|
|
@ -115,8 +126,8 @@ static void set_tiled(struct sway_view *view, bool tiled) {
|
||||||
struct wlr_xdg_surface *surface = view->wlr_xdg_surface;
|
struct wlr_xdg_surface *surface = view->wlr_xdg_surface;
|
||||||
enum wlr_edges edges = WLR_EDGE_NONE;
|
enum wlr_edges edges = WLR_EDGE_NONE;
|
||||||
if (tiled) {
|
if (tiled) {
|
||||||
edges = WLR_EDGE_LEFT | WLR_EDGE_RIGHT | WLR_EDGE_TOP |
|
// edges = WLR_EDGE_LEFT | WLR_EDGE_RIGHT | WLR_EDGE_TOP |
|
||||||
WLR_EDGE_BOTTOM;
|
// WLR_EDGE_BOTTOM;
|
||||||
}
|
}
|
||||||
wlr_xdg_toplevel_set_tiled(surface, edges);
|
wlr_xdg_toplevel_set_tiled(surface, edges);
|
||||||
}
|
}
|
||||||
|
|
@ -168,6 +179,7 @@ static void destroy(struct sway_view *view) {
|
||||||
|
|
||||||
static const struct sway_view_impl view_impl = {
|
static const struct sway_view_impl view_impl = {
|
||||||
.get_string_prop = get_string_prop,
|
.get_string_prop = get_string_prop,
|
||||||
|
.get_geometry = get_geometry,
|
||||||
.configure = configure,
|
.configure = configure,
|
||||||
.set_activated = set_activated,
|
.set_activated = set_activated,
|
||||||
.set_tiled = set_tiled,
|
.set_tiled = set_tiled,
|
||||||
|
|
|
||||||
|
|
@ -129,7 +129,7 @@ uint32_t view_get_window_type(struct sway_view *view) {
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *view_get_shell(struct sway_view *view) {
|
const char *view_get_shell(struct sway_view *view) {
|
||||||
switch(view->type) {
|
switch (view->type) {
|
||||||
case SWAY_VIEW_XDG_SHELL_V6:
|
case SWAY_VIEW_XDG_SHELL_V6:
|
||||||
return "xdg_shell_v6";
|
return "xdg_shell_v6";
|
||||||
case SWAY_VIEW_XDG_SHELL:
|
case SWAY_VIEW_XDG_SHELL:
|
||||||
|
|
@ -140,6 +140,20 @@ const char *view_get_shell(struct sway_view *view) {
|
||||||
return "unknown";
|
return "unknown";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void view_get_geometry(struct sway_view *view, struct wlr_box *box) {
|
||||||
|
if (view->surface == NULL) {
|
||||||
|
box->x = box->y = box->width = box->height = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (view->impl->get_geometry) {
|
||||||
|
view->impl->get_geometry(view, box);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
box->x = box->y = 0;
|
||||||
|
box->width = view->surface->current->width;
|
||||||
|
box->height = view->surface->current->height;
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t view_configure(struct sway_view *view, double lx, double ly, int width,
|
uint32_t view_configure(struct sway_view *view, double lx, double ly, int width,
|
||||||
int height) {
|
int height) {
|
||||||
if (view->impl->configure) {
|
if (view->impl->configure) {
|
||||||
|
|
@ -271,6 +285,11 @@ void view_autoconfigure(struct sway_view *view) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct wlr_box geo;
|
||||||
|
view_get_geometry(view, &geo);
|
||||||
|
x -= geo.x;
|
||||||
|
y -= geo.y;
|
||||||
|
|
||||||
view->x = x;
|
view->x = x;
|
||||||
view->y = y;
|
view->y = y;
|
||||||
view->width = width;
|
view->width = width;
|
||||||
|
|
@ -567,32 +586,6 @@ void view_unmap(struct sway_view *view) {
|
||||||
view->surface = NULL;
|
view->surface = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void view_update_position(struct sway_view *view, double lx, double ly) {
|
|
||||||
if (view->x == lx && view->y == ly) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
container_damage_whole(view->swayc);
|
|
||||||
view->x = lx;
|
|
||||||
view->y = ly;
|
|
||||||
if (container_is_floating(view->swayc)) {
|
|
||||||
container_set_geometry_from_floating_view(view->swayc);
|
|
||||||
}
|
|
||||||
container_damage_whole(view->swayc);
|
|
||||||
}
|
|
||||||
|
|
||||||
void view_update_size(struct sway_view *view, int width, int height) {
|
|
||||||
if (view->width == width && view->height == height) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
container_damage_whole(view->swayc);
|
|
||||||
view->width = width;
|
|
||||||
view->height = height;
|
|
||||||
if (container_is_floating(view->swayc)) {
|
|
||||||
container_set_geometry_from_floating_view(view->swayc);
|
|
||||||
}
|
|
||||||
container_damage_whole(view->swayc);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void view_subsurface_create(struct sway_view *view,
|
static void view_subsurface_create(struct sway_view *view,
|
||||||
struct wlr_subsurface *subsurface) {
|
struct wlr_subsurface *subsurface) {
|
||||||
struct sway_view_child *child = calloc(1, sizeof(struct sway_view_child));
|
struct sway_view_child *child = calloc(1, sizeof(struct sway_view_child));
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue