Implement floating

This commit is contained in:
Ryan Dwyer 2018-05-24 22:30:44 +10:00
parent 1132efe42e
commit 1f2e399ade
21 changed files with 572 additions and 169 deletions

View file

@ -75,8 +75,13 @@ struct sway_container {
enum sway_container_layout layout;
enum sway_container_layout prev_layout;
// Allow the container to be automatically removed if it's empty. True by
// default, false for the magic floating container that each workspace has.
bool reapable;
// Saves us from searching the list of children/floating in the parent
bool is_floating;
bool is_sticky;
// For C_ROOT, this has no meaning
// For C_OUTPUT, this is the output position in layout coordinates
@ -173,6 +178,13 @@ struct sway_container *container_at(struct sway_container *container,
double ox, double oy, struct wlr_surface **surface,
double *sx, double *sy);
/**
* Same as container_at, but only checks floating views and expects coordinates
* to be layout coordinates, as that's what floating views use.
*/
struct sway_container *floating_container_at(double lx, double ly,
struct wlr_surface **surface, double *sx, double *sy);
/**
* Apply the function for each descendant of the container breadth first.
*/
@ -229,4 +241,14 @@ void container_notify_subtree_changed(struct sway_container *container);
*/
size_t container_titlebar_height(void);
void container_set_floating(struct sway_container *container, bool enable);
void container_set_geometry_from_view(struct sway_container *container);
/**
* Determine if the given container is itself floating or has a floating
* ancestor.
*/
bool container_self_or_parent_floating(struct sway_container *container);
#endif

View file

@ -46,9 +46,6 @@ struct sway_container *container_add_sibling(struct sway_container *parent,
struct sway_container *container_remove_child(struct sway_container *child);
void container_add_floating(struct sway_container *workspace,
struct sway_container *child);
struct sway_container *container_replace_child(struct sway_container *child,
struct sway_container *new_child);

View file

@ -32,7 +32,9 @@ struct sway_view_impl {
void (*configure)(struct sway_view *view, double ox, double oy, int width,
int height);
void (*set_activated)(struct sway_view *view, bool activated);
void (*set_maximized)(struct sway_view *view, bool maximized);
void (*set_fullscreen)(struct sway_view *view, bool fullscreen);
bool (*wants_floating)(struct sway_view *view);
void (*for_each_surface)(struct sway_view *view,
wlr_surface_iterator_func_t iterator, void *user_data);
void (*close)(struct sway_view *view);
@ -50,6 +52,10 @@ struct sway_view {
double x, y;
int width, height;
// The size the view would want to be if it weren't tiled.
// Used when changing a view from tiled to floating.
int natural_width, natural_height;
bool is_fullscreen;
char *title_format;
@ -214,6 +220,8 @@ void view_autoconfigure(struct sway_view *view);
void view_set_activated(struct sway_view *view, bool activated);
void view_set_maximized(struct sway_view *view, bool maximized);
void view_set_fullscreen_raw(struct sway_view *view, bool fullscreen);
void view_set_fullscreen(struct sway_view *view, bool fullscreen);
@ -236,7 +244,7 @@ void view_map(struct sway_view *view, struct wlr_surface *wlr_surface);
void view_unmap(struct sway_view *view);
void view_update_position(struct sway_view *view, double ox, double oy);
void view_update_position(struct sway_view *view, double lx, double ly);
void view_update_size(struct sway_view *view, int width, int height);

View file

@ -8,7 +8,7 @@ struct sway_view;
struct sway_workspace {
struct sway_container *swayc;
struct sway_view *fullscreen;
list_t *floating;
struct sway_container *floating;
};
extern char *prev_workspace_name;
@ -31,4 +31,6 @@ struct sway_container *workspace_prev(struct sway_container *current);
bool workspace_is_visible(struct sway_container *ws);
bool workspace_is_empty(struct sway_container *ws);
#endif