aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Dwyer <ryandwyer1@gmail.com>2018-04-17 08:11:50 +1000
committerRyan Dwyer <ryandwyer1@gmail.com>2018-04-17 08:11:50 +1000
commitbfd5834f4c1046c234ceaae212e65e045cd51460 (patch)
treefc789c66bd9c20bfc30307c3f675d9c4079b5c4c
parent52420cc24d61db8d22cf0d391f1f84b37bf087d5 (diff)
Feedback for fullscreen.
-rw-r--r--include/sway/tree/container.h1
-rw-r--r--include/sway/tree/view.h1
-rw-r--r--sway/commands/fullscreen.c14
-rw-r--r--sway/desktop/output.c6
-rw-r--r--sway/desktop/xwayland.c12
-rw-r--r--sway/tree/layout.c2
-rw-r--r--sway/tree/view.c18
7 files changed, 13 insertions, 41 deletions
diff --git a/include/sway/tree/container.h b/include/sway/tree/container.h
index 22bd7240..0283584b 100644
--- a/include/sway/tree/container.h
+++ b/include/sway/tree/container.h
@@ -72,7 +72,6 @@ struct sway_container {
// For C_OUTPUT, this is the output position in layout coordinates
// For other types, this is the position in output-local coordinates
double x, y;
- double saved_x, saved_y;
// does not include borders or gaps.
double width, height;
diff --git a/include/sway/tree/view.h b/include/sway/tree/view.h
index 73d5f6c7..9dfd171f 100644
--- a/include/sway/tree/view.h
+++ b/include/sway/tree/view.h
@@ -42,7 +42,6 @@ struct sway_view {
struct sway_container *swayc; // NULL for unmanaged views
struct wlr_surface *surface; // NULL for unmapped views
int width, height;
- int saved_width, saved_height;
bool is_fullscreen;
union {
diff --git a/sway/commands/fullscreen.c b/sway/commands/fullscreen.c
index 3e256282..5a044aa8 100644
--- a/sway/commands/fullscreen.c
+++ b/sway/commands/fullscreen.c
@@ -8,12 +8,6 @@
// fullscreen toggle|enable|disable
struct cmd_results *cmd_fullscreen(int argc, char **argv) {
- struct cmd_results *error = NULL;
- if (config->reading) return cmd_results_new(CMD_FAILURE, "fullscreen", "Can't be used in config file.");
- if (!config->active) return cmd_results_new(CMD_FAILURE, "fullscreen", "Can only be used when sway is running.");
- if ((error = checkarg(argc, "fullscreen", EXPECTED_AT_LEAST, 1))) {
- return error;
- }
struct sway_container *container =
config->handler_context.current_container;
if (container->type != C_VIEW) {
@@ -23,15 +17,15 @@ struct cmd_results *cmd_fullscreen(int argc, char **argv) {
struct sway_view *view = container->sway_view;
bool wants_fullscreen;
- if (strcmp(argv[0], "enable") == 0) {
+ if (argc == 0 || strcmp(argv[0], "toggle") == 0) {
+ wants_fullscreen = !view->is_fullscreen;
+ } else if (strcmp(argv[0], "enable") == 0) {
wants_fullscreen = true;
} else if (strcmp(argv[0], "disable") == 0) {
wants_fullscreen = false;
- } else if (strcmp(argv[0], "toggle") == 0) {
- wants_fullscreen = !view->is_fullscreen;
} else {
return cmd_results_new(CMD_INVALID, "fullscreen",
- "Expected 'fullscreen <enable|disable|toggle>'");
+ "Expected 'fullscreen' or fullscreen <enable|disable|toggle>'");
}
view_set_fullscreen(view, wants_fullscreen);
diff --git a/sway/desktop/output.c b/sway/desktop/output.c
index b86f20e8..dc2f6380 100644
--- a/sway/desktop/output.c
+++ b/sway/desktop/output.c
@@ -287,11 +287,9 @@ static void render_output(struct sway_output *output, struct timespec *when,
render_container(output, workspace);
render_unmanaged(output, &root_container.sway_root->xwayland_unmanaged);
-
- render_layer(output, &output->layers[ZWLR_LAYER_SHELL_V1_LAYER_TOP]);
- render_layer(output,
- &output->layers[ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY]);
}
+ render_layer(output, &output->layers[ZWLR_LAYER_SHELL_V1_LAYER_TOP]);
+ render_layer(output, &output->layers[ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY]);
renderer_end:
if (root_container.sway_root->debug_tree) {
diff --git a/sway/desktop/xwayland.c b/sway/desktop/xwayland.c
index 716d8882..963c5a0e 100644
--- a/sway/desktop/xwayland.c
+++ b/sway/desktop/xwayland.c
@@ -25,15 +25,6 @@ static void unmanaged_handle_request_configure(struct wl_listener *listener,
ev->width, ev->height);
}
-static void unmanaged_handle_request_fullscreen(struct wl_listener *listener,
- void *data) {
- struct sway_xwayland_view *xwayland_view =
- wl_container_of(listener, xwayland_view, request_fullscreen);
- struct sway_view *view = &xwayland_view->view;
- struct wlr_xwayland_surface *xsurface = view->wlr_xwayland_surface;
- view_set_fullscreen(view, xsurface->fullscreen);
-}
-
static void unmanaged_handle_commit(struct wl_listener *listener, void *data) {
struct sway_xwayland_unmanaged *surface =
wl_container_of(listener, surface, commit);
@@ -115,9 +106,6 @@ static struct sway_xwayland_unmanaged *create_unmanaged(
wl_signal_add(&xsurface->events.request_configure,
&surface->request_configure);
surface->request_configure.notify = unmanaged_handle_request_configure;
- wl_signal_add(&xsurface->events.request_fullscreen,
- &surface->request_fullscreen);
- surface->request_fullscreen.notify = unmanaged_handle_request_fullscreen;
wl_signal_add(&xsurface->events.map, &surface->map);
surface->map.notify = unmanaged_handle_map;
wl_signal_add(&xsurface->events.unmap, &surface->unmap);
diff --git a/sway/tree/layout.c b/sway/tree/layout.c
index ae6db454..ad097f2e 100644
--- a/sway/tree/layout.c
+++ b/sway/tree/layout.c
@@ -138,7 +138,7 @@ void container_move_to(struct sway_container *container,
return;
}
- if (container->sway_view->is_fullscreen) {
+ if (container->type == C_VIEW && container->sway_view->is_fullscreen) {
struct sway_container *old_workspace = container;
if (old_workspace->type != C_WORKSPACE) {
old_workspace = container_parent(old_workspace, C_WORKSPACE);
diff --git a/sway/tree/view.c b/sway/tree/view.c
index b958233b..10285ad0 100644
--- a/sway/tree/view.c
+++ b/sway/tree/view.c
@@ -79,32 +79,26 @@ void view_set_fullscreen(struct sway_view *view, bool fullscreen) {
return;
}
- struct sway_container *container = container_parent(view->swayc, C_OUTPUT);
- struct sway_output *output = container->sway_output;
struct sway_container *workspace = container_parent(view->swayc, C_WORKSPACE);
+ struct sway_container *container = container_parent(workspace, C_OUTPUT);
+ struct sway_output *output = container->sway_output;
if (view->impl->set_fullscreen) {
view->impl->set_fullscreen(view, fullscreen);
}
+ view->is_fullscreen = fullscreen;
+
if (fullscreen) {
- view->swayc->saved_x = view->swayc->x;
- view->swayc->saved_y = view->swayc->y;
- view->saved_width = view->width;
- view->saved_height = view->height;
- view_configure(view, 0, 0, output->wlr_output->width, output->wlr_output->height);
workspace->fullscreen = view;
+ view_configure(view, 0, 0, output->wlr_output->width, output->wlr_output->height);
} else {
- view_configure(view, view->swayc->saved_x, view->swayc->saved_y,
- view->saved_width, view->saved_height);
workspace->fullscreen = NULL;
+ arrange_windows(workspace, -1, -1);
}
- view->is_fullscreen = fullscreen;
output_damage_whole(output);
- arrange_windows(workspace, -1, -1);
-
ipc_event_window(view->swayc, "fullscreen_mode");
}