Merge pull request #2171 from atomnuker/master

Revert "Don't unmaximize floating views"
This commit is contained in:
emersion 2018-06-30 12:28:02 +01:00 committed by GitHub
commit d17ca5d15b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 51 additions and 16 deletions

View file

@ -32,6 +32,7 @@ struct sway_view_impl {
void (*configure)(struct sway_view *view, double lx, double ly, int width, void (*configure)(struct sway_view *view, double lx, double ly, int width,
int height); int height);
void (*set_activated)(struct sway_view *view, bool activated); void (*set_activated)(struct sway_view *view, bool activated);
void (*set_tiled)(struct sway_view *view, bool tiled);
void (*set_fullscreen)(struct sway_view *view, bool fullscreen); void (*set_fullscreen)(struct sway_view *view, bool fullscreen);
bool (*wants_floating)(struct sway_view *view); bool (*wants_floating)(struct sway_view *view);
void (*for_each_surface)(struct sway_view *view, void (*for_each_surface)(struct sway_view *view,
@ -223,6 +224,8 @@ void view_autoconfigure(struct sway_view *view);
void view_set_activated(struct sway_view *view, bool activated); void view_set_activated(struct sway_view *view, bool activated);
void view_set_tiled(struct sway_view *view, bool tiled);
void view_set_fullscreen_raw(struct sway_view *view, bool fullscreen); void view_set_fullscreen_raw(struct sway_view *view, bool fullscreen);
void view_set_fullscreen(struct sway_view *view, bool fullscreen); void view_set_fullscreen(struct sway_view *view, bool fullscreen);

View file

@ -645,7 +645,7 @@ static void render_container_simple(struct sway_output *output,
if (child->sway_view->border == B_NORMAL) { if (child->sway_view->border == B_NORMAL) {
render_titlebar(output, damage, child, child->x, child->y, render_titlebar(output, damage, child, child->x, child->y,
child->width, colors, title_texture, marks_texture); child->width, colors, title_texture, marks_texture);
} else { } else if (con->sway_view->border != B_NONE) {
render_top_border(output, damage, child, colors); render_top_border(output, damage, child, colors);
} }
render_view(output, damage, child, colors); render_view(output, damage, child, colors);
@ -815,7 +815,7 @@ static void render_floating_container(struct sway_output *soutput,
if (con->sway_view->border == B_NORMAL) { if (con->sway_view->border == B_NORMAL) {
render_titlebar(soutput, damage, con, con->x, con->y, con->width, render_titlebar(soutput, damage, con, con->x, con->y, con->width,
colors, title_texture, marks_texture); colors, title_texture, marks_texture);
} else { } else if (con->sway_view->border != B_NONE) {
render_top_border(soutput, damage, con, colors); render_top_border(soutput, damage, con, colors);
} }
render_view(soutput, damage, con, colors); render_view(soutput, damage, con, colors);

View file

@ -111,6 +111,19 @@ static void set_activated(struct sway_view *view, bool activated) {
} }
} }
static void set_tiled(struct sway_view *view, bool tiled) {
if (xdg_shell_view_from_view(view) == NULL) {
return;
}
struct wlr_xdg_surface *surface = view->wlr_xdg_surface;
enum wlr_edges edges = WLR_EDGE_NONE;
if (tiled) {
edges = WLR_EDGE_LEFT | WLR_EDGE_RIGHT | WLR_EDGE_TOP |
WLR_EDGE_BOTTOM;
}
wlr_xdg_toplevel_set_tiled(surface, edges);
}
static void set_fullscreen(struct sway_view *view, bool fullscreen) { static void set_fullscreen(struct sway_view *view, bool fullscreen) {
if (xdg_shell_view_from_view(view) == NULL) { if (xdg_shell_view_from_view(view) == NULL) {
return; return;
@ -164,6 +177,7 @@ static const struct sway_view_impl view_impl = {
.get_string_prop = get_string_prop, .get_string_prop = get_string_prop,
.configure = configure, .configure = configure,
.set_activated = set_activated, .set_activated = set_activated,
.set_tiled = set_tiled,
.set_fullscreen = set_fullscreen, .set_fullscreen = set_fullscreen,
.wants_floating = wants_floating, .wants_floating = wants_floating,
.for_each_surface = for_each_surface, .for_each_surface = for_each_surface,
@ -273,8 +287,6 @@ void handle_xdg_shell_surface(struct wl_listener *listener, void *data) {
wlr_log(L_DEBUG, "New xdg_shell toplevel title='%s' app_id='%s'", wlr_log(L_DEBUG, "New xdg_shell toplevel title='%s' app_id='%s'",
xdg_surface->toplevel->title, xdg_surface->toplevel->app_id); xdg_surface->toplevel->title, xdg_surface->toplevel->app_id);
wlr_xdg_surface_ping(xdg_surface); wlr_xdg_surface_ping(xdg_surface);
wlr_xdg_toplevel_set_tiled(xdg_surface, WLR_EDGE_LEFT | WLR_EDGE_RIGHT |
WLR_EDGE_TOP | WLR_EDGE_BOTTOM);
struct sway_xdg_shell_view *xdg_shell_view = struct sway_xdg_shell_view *xdg_shell_view =
calloc(1, sizeof(struct sway_xdg_shell_view)); calloc(1, sizeof(struct sway_xdg_shell_view));

View file

@ -110,6 +110,14 @@ static void set_activated(struct sway_view *view, bool activated) {
} }
} }
static void set_tiled(struct sway_view *view, bool tiled) {
if (xdg_shell_v6_view_from_view(view) == NULL) {
return;
}
struct wlr_xdg_surface_v6 *surface = view->wlr_xdg_surface_v6;
wlr_xdg_toplevel_v6_set_maximized(surface, tiled);
}
static void set_fullscreen(struct sway_view *view, bool fullscreen) { static void set_fullscreen(struct sway_view *view, bool fullscreen) {
if (xdg_shell_v6_view_from_view(view) == NULL) { if (xdg_shell_v6_view_from_view(view) == NULL) {
return; return;
@ -164,6 +172,7 @@ static const struct sway_view_impl view_impl = {
.get_string_prop = get_string_prop, .get_string_prop = get_string_prop,
.configure = configure, .configure = configure,
.set_activated = set_activated, .set_activated = set_activated,
.set_tiled = set_tiled,
.set_fullscreen = set_fullscreen, .set_fullscreen = set_fullscreen,
.wants_floating = wants_floating, .wants_floating = wants_floating,
.for_each_surface = for_each_surface, .for_each_surface = for_each_surface,
@ -273,7 +282,6 @@ void handle_xdg_shell_v6_surface(struct wl_listener *listener, void *data) {
wlr_log(L_DEBUG, "New xdg_shell_v6 toplevel title='%s' app_id='%s'", wlr_log(L_DEBUG, "New xdg_shell_v6 toplevel title='%s' app_id='%s'",
xdg_surface->toplevel->title, xdg_surface->toplevel->app_id); xdg_surface->toplevel->title, xdg_surface->toplevel->app_id);
wlr_xdg_surface_v6_ping(xdg_surface); wlr_xdg_surface_v6_ping(xdg_surface);
wlr_xdg_toplevel_v6_set_maximized(xdg_surface, true);
struct sway_xdg_shell_v6_view *xdg_shell_v6_view = struct sway_xdg_shell_v6_view *xdg_shell_v6_view =
calloc(1, sizeof(struct sway_xdg_shell_v6_view)); calloc(1, sizeof(struct sway_xdg_shell_v6_view));

View file

@ -199,6 +199,14 @@ static void set_activated(struct sway_view *view, bool activated) {
wlr_xwayland_surface_activate(surface, activated); wlr_xwayland_surface_activate(surface, activated);
} }
static void set_tiled(struct sway_view *view, bool tiled) {
if (xwayland_view_from_view(view) == NULL) {
return;
}
struct wlr_xwayland_surface *surface = view->wlr_xwayland_surface;
wlr_xwayland_surface_set_maximized(surface, tiled);
}
static void set_fullscreen(struct sway_view *view, bool fullscreen) { static void set_fullscreen(struct sway_view *view, bool fullscreen) {
if (xwayland_view_from_view(view) == NULL) { if (xwayland_view_from_view(view) == NULL) {
return; return;
@ -265,6 +273,7 @@ static const struct sway_view_impl view_impl = {
.get_int_prop = get_int_prop, .get_int_prop = get_int_prop,
.configure = configure, .configure = configure,
.set_activated = set_activated, .set_activated = set_activated,
.set_tiled = set_tiled,
.set_fullscreen = set_fullscreen, .set_fullscreen = set_fullscreen,
.wants_floating = wants_floating, .wants_floating = wants_floating,
.close = _close, .close = _close,
@ -309,7 +318,6 @@ static void handle_map(struct wl_listener *listener, void *data) {
xwayland_view->commit.notify = handle_commit; xwayland_view->commit.notify = handle_commit;
// Put it back into the tree // Put it back into the tree
wlr_xwayland_surface_set_maximized(xsurface, true);
view_map(view, xsurface->surface); view_map(view, xsurface->surface);
if (xsurface->fullscreen) { if (xsurface->fullscreen) {

View file

@ -507,21 +507,11 @@ static struct sway_container *container_at_view(struct sway_container *swayc,
view_sx, view_sy, &_sx, &_sy); view_sx, view_sy, &_sx, &_sy);
break; break;
case SWAY_VIEW_XDG_SHELL_V6: case SWAY_VIEW_XDG_SHELL_V6:
// the top left corner of the sway container is the
// coordinate of the top left corner of the window geometry
view_sx += sview->wlr_xdg_surface_v6->geometry.x;
view_sy += sview->wlr_xdg_surface_v6->geometry.y;
_surface = wlr_xdg_surface_v6_surface_at( _surface = wlr_xdg_surface_v6_surface_at(
sview->wlr_xdg_surface_v6, sview->wlr_xdg_surface_v6,
view_sx, view_sy, &_sx, &_sy); view_sx, view_sy, &_sx, &_sy);
break; break;
case SWAY_VIEW_XDG_SHELL: case SWAY_VIEW_XDG_SHELL:
// the top left corner of the sway container is the
// coordinate of the top left corner of the window geometry
view_sx += sview->wlr_xdg_surface->geometry.x;
view_sy += sview->wlr_xdg_surface->geometry.y;
_surface = wlr_xdg_surface_surface_at( _surface = wlr_xdg_surface_surface_at(
sview->wlr_xdg_surface, sview->wlr_xdg_surface,
view_sx, view_sy, &_sx, &_sy); view_sx, view_sy, &_sx, &_sy);
@ -943,6 +933,9 @@ void container_set_floating(struct sway_container *container, bool enable) {
container_add_child(workspace, container); container_add_child(workspace, container);
container->width = container->parent->width; container->width = container->parent->width;
container->height = container->parent->height; container->height = container->parent->height;
if (container->type == C_VIEW) {
view_set_tiled(container->sway_view, true);
}
container->is_sticky = false; container->is_sticky = false;
container_reap_empty_recursive(workspace->sway_workspace->floating); container_reap_empty_recursive(workspace->sway_workspace->floating);
} }

View file

@ -141,6 +141,9 @@ static void view_autoconfigure_floating(struct sway_view *view) {
view->border_top = view->border_bottom = true; view->border_top = view->border_bottom = true;
view->border_left = view->border_right = true; view->border_left = view->border_right = true;
// Don't maximize floating windows
view_set_tiled(view, false);
view_configure(view, lx, ly, width, height); view_configure(view, lx, ly, width, height);
} }
@ -248,6 +251,7 @@ void view_autoconfigure(struct sway_view *view) {
view->x = x; view->x = x;
view->y = y; view->y = y;
view_set_tiled(view, true);
view_configure(view, x, y, width, height); view_configure(view, x, y, width, height);
} }
@ -257,6 +261,13 @@ void view_set_activated(struct sway_view *view, bool activated) {
} }
} }
void view_set_tiled(struct sway_view *view, bool tiled) {
view->border = tiled ? config->border : B_NONE;
if (view->impl->set_tiled) {
view->impl->set_tiled(view, tiled);
}
}
// Set fullscreen, but without IPC events or arranging windows. // Set fullscreen, but without IPC events or arranging windows.
void view_set_fullscreen_raw(struct sway_view *view, bool fullscreen) { void view_set_fullscreen_raw(struct sway_view *view, bool fullscreen) {
if (view->is_fullscreen == fullscreen) { if (view->is_fullscreen == fullscreen) {