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