resize fix
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
#include <stdnoreturn.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <wayland-server-core.h>
|
||||
#include <wlr/util/log.h>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#include <wlr/types/wlr_layer_shell_v1.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "focus.h"
|
||||
#include "layers.h"
|
||||
|
||||
+7
-7
@@ -259,10 +259,10 @@ void cursor_button(struct wl_listener *listener, void *data)
|
||||
server->grab_x = server->cursor->x;
|
||||
server->grab_y = server->cursor->y;
|
||||
|
||||
int32_t nx, ny;
|
||||
wlr_scene_node_coords(&toplevel->scene_tree->node, &nx, &ny);
|
||||
server->grab_geom.x = nx;
|
||||
server->grab_geom.y = ny;
|
||||
int32_t tx, ty;
|
||||
wlr_scene_node_coords(&toplevel->scene_tree->node, &tx, &ty);
|
||||
server->grab_geom.x = tx;
|
||||
server->grab_geom.y = ty;
|
||||
server->grab_geom.width = toplevel->geom.width;
|
||||
server->grab_geom.height = toplevel->geom.height;
|
||||
|
||||
@@ -273,13 +273,13 @@ void cursor_button(struct wl_listener *listener, void *data)
|
||||
int32_t width = toplevel->xdg->base->geometry.width;
|
||||
int32_t height = toplevel->xdg->base->geometry.height;
|
||||
|
||||
if (server->grab_x > (x + width / 2) && server->grab_y > (y + height / 2)) {
|
||||
if (server->grab_x > (tx + width / 2) && server->grab_y > (ty + height / 2)) {
|
||||
server->resize_corner = BOTTOM_RIGHT;
|
||||
wlr_cursor_set_xcursor(server->cursor, server->cursor_mgr, "se-resize");
|
||||
} else if (server->grab_x < (x + width / 2) && server->grab_y > (y + height / 2)) {
|
||||
} else if (server->grab_x < (tx + width / 2) && server->grab_y > (ty + height / 2)) {
|
||||
server->resize_corner = BOTTOM_LEFT;
|
||||
wlr_cursor_set_xcursor(server->cursor, server->cursor_mgr, "sw-resize");
|
||||
} else if (server->grab_x > (x + width / 2) && server->grab_y < (y + height / 2)) {
|
||||
} else if (server->grab_x > (tx + width / 2) && server->grab_y < (ty + height / 2)) {
|
||||
server->resize_corner = TOP_RIGHT;
|
||||
wlr_cursor_set_xcursor(server->cursor, server->cursor_mgr, "ne-resize");
|
||||
} else {
|
||||
|
||||
@@ -23,8 +23,6 @@ void toplevel_map(struct wl_listener *listener, void *data)
|
||||
wlr_xdg_toplevel_set_maximized(toplevel->xdg, true);
|
||||
}
|
||||
|
||||
toplevel->bw = toplevel_is_unmanaged(toplevel) ? 0 : TOPLEVEL_BW;
|
||||
|
||||
#ifdef XWAYLAND
|
||||
if (toplevel->type == TOPLEVEL_X11) {
|
||||
toplevel->scene_surface = wlr_scene_subsurface_tree_create(toplevel->scene_tree, toplevel->xw->surface);
|
||||
@@ -38,6 +36,12 @@ void toplevel_map(struct wl_listener *listener, void *data)
|
||||
toplevel_get_geom(toplevel);
|
||||
toplevel->bw = toplevel_is_unmanaged(toplevel) ? 0 : TOPLEVEL_BW;
|
||||
|
||||
#ifdef XWAYLAND
|
||||
if (toplevel->type == TOPLEVEL_X11) {
|
||||
toplevel->xw->surface->data = toplevel;
|
||||
}
|
||||
#endif
|
||||
|
||||
for (int i = 0; i < 4; ++i) {
|
||||
toplevel->border[i] = wlr_scene_rect_create(toplevel->scene_tree, 0, 0, unfocused_bc);
|
||||
toplevel->border[i]->node.data = toplevel;
|
||||
|
||||
+7
-2
@@ -1,6 +1,7 @@
|
||||
#include <wayland-server-core.h>
|
||||
|
||||
#include "config.h"
|
||||
#include "layers.h"
|
||||
#include "layout.h"
|
||||
#include "toplevel.h"
|
||||
#include "types.h"
|
||||
@@ -96,7 +97,7 @@ void toplevel_set_size(absn_toplevel *toplevel, int32_t width, int32_t height)
|
||||
wlr_xwayland_surface_configure(toplevel->xw, toplevel->geom.x, toplevel->geom.y, width - 2 * bw, height - 2 * toplevel->bw);
|
||||
/* manually update position */
|
||||
toplevel_set_pos(toplevel, toplevel->geom.x, toplevel->geom.y);
|
||||
}
|
||||
} else
|
||||
#endif
|
||||
|
||||
wlr_scene_subsurface_tree_set_clip(&toplevel->scene_surface->node, &clip);
|
||||
@@ -133,7 +134,9 @@ void toplevel_set_fullscreen(absn_toplevel *toplevel, bool fullscreen)
|
||||
|
||||
absn_output *output = toplevel->server->focused_output;
|
||||
toplevel->fullscreen = fullscreen;
|
||||
wlr_xdg_toplevel_set_fullscreen(toplevel->xdg, fullscreen);
|
||||
if (toplevel->type == TOPLEVEL_XDG) {
|
||||
wlr_xdg_toplevel_set_fullscreen(toplevel->xdg, fullscreen);
|
||||
}
|
||||
|
||||
if (fullscreen) {
|
||||
toplevel->prev_geom = toplevel->geom;
|
||||
@@ -154,6 +157,7 @@ void toplevel_set_fullscreen(absn_toplevel *toplevel, bool fullscreen)
|
||||
toplevel_update_borders_geom(toplevel);
|
||||
|
||||
layout_arrange(toplevel->output);
|
||||
layers_arrange(toplevel->output);
|
||||
}
|
||||
|
||||
void toplevel_set_border_color(absn_toplevel *toplevel, const float color[4])
|
||||
@@ -161,6 +165,7 @@ void toplevel_set_border_color(absn_toplevel *toplevel, const float color[4])
|
||||
if (!toplevel) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = 0; i < 4; ++i) {
|
||||
wlr_scene_rect_set_color(toplevel->border[i], color);
|
||||
}
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "types.h"
|
||||
|
||||
void xdg_popup_commit(struct wl_listener *listener, void *data)
|
||||
|
||||
Reference in New Issue
Block a user