mirror of
https://github.com/swaywm/sway.git
synced 2026-05-03 06:46:26 -04:00
Merge branch 'wlroots' into multibackend
This commit is contained in:
commit
9a50972577
186 changed files with 2893 additions and 16072 deletions
|
|
@ -1,38 +1,15 @@
|
|||
#ifndef _SWAY_LOG_H
|
||||
#define _SWAY_LOG_H
|
||||
#include <stdbool.h>
|
||||
#include <wlr/util/log.h>
|
||||
|
||||
typedef enum {
|
||||
L_SILENT = 0,
|
||||
L_ERROR = 1,
|
||||
L_INFO = 2,
|
||||
L_DEBUG = 3,
|
||||
} log_importance_t;
|
||||
|
||||
void init_log(log_importance_t verbosity);
|
||||
void set_log_level(log_importance_t verbosity);
|
||||
log_importance_t get_log_level(void);
|
||||
void reset_log_level(void);
|
||||
// returns whether debug logging is on after switching.
|
||||
bool toggle_debug_logging(void);
|
||||
void sway_log_colors(int mode);
|
||||
void sway_log_errno(log_importance_t verbosity, char* format, ...) __attribute__((format(printf,2,3)));
|
||||
|
||||
void _sway_abort(const char *filename, int line, const char* format, ...) __attribute__((format(printf,3,4)));
|
||||
void _sway_abort(const char *filename, ...) ATTRIB_PRINTF(1, 2);
|
||||
#define sway_abort(FMT, ...) \
|
||||
_sway_abort(__FILE__, __LINE__, FMT, ##__VA_ARGS__)
|
||||
_sway_abort("[%s:%d] " FMT, wlr_strip_path(__FILE__), __LINE__, ##__VA_ARGS__)
|
||||
|
||||
bool _sway_assert(bool condition, const char *filename, int line, const char* format, ...) __attribute__((format(printf,4,5)));
|
||||
bool _sway_assert(bool condition, const char* format, ...) ATTRIB_PRINTF(2, 3);
|
||||
#define sway_assert(COND, FMT, ...) \
|
||||
_sway_assert(COND, __FILE__, __LINE__, "%s:" FMT, __PRETTY_FUNCTION__, ##__VA_ARGS__)
|
||||
|
||||
void _sway_log(const char *filename, int line, log_importance_t verbosity, const char* format, ...) __attribute__((format(printf,4,5)));
|
||||
|
||||
#define sway_log(VERBOSITY, FMT, ...) \
|
||||
_sway_log(__FILE__, __LINE__, VERBOSITY, FMT, ##__VA_ARGS__)
|
||||
|
||||
#define sway_vlog(VERBOSITY, FMT, VA_ARGS) \
|
||||
_sway_vlog(__FILE__, __LINE__, VERBOSITY, FMT, VA_ARGS)
|
||||
_sway_assert(COND, "[%s:%d] %s:" FMT, wlr_strip_path(__FILE__), __LINE__, __PRETTY_FUNCTION__, ##__VA_ARGS__)
|
||||
|
||||
void error_handler(int sig);
|
||||
|
||||
|
|
|
|||
|
|
@ -46,9 +46,9 @@ struct cmd_results *checkarg(int argc, const char *name,
|
|||
enum expected_args type, int val);
|
||||
|
||||
/**
|
||||
* Parse and handles a command.
|
||||
* Parse and executes a command.
|
||||
*/
|
||||
struct cmd_results *handle_command(char *command);
|
||||
struct cmd_results *execute_command(char *command, struct sway_seat *seat);
|
||||
/**
|
||||
* Parse and handles a command during config file loading.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -46,7 +46,8 @@ struct sway_mouse_binding {
|
|||
*/
|
||||
struct sway_mode {
|
||||
char *name;
|
||||
list_t *bindings;
|
||||
list_t *keysym_bindings;
|
||||
list_t *keycode_bindings;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -349,6 +350,14 @@ struct sway_config {
|
|||
list_t *command_policies;
|
||||
list_t *feature_policies;
|
||||
list_t *ipc_policies;
|
||||
|
||||
// Context for command handlers
|
||||
struct {
|
||||
struct input_config *input_config;
|
||||
struct seat_config *seat_config;
|
||||
struct sway_seat *seat;
|
||||
swayc_t *current_container;
|
||||
} handler_context;
|
||||
};
|
||||
|
||||
void pid_workspace_add(struct pid_workspace *pw);
|
||||
|
|
@ -374,6 +383,10 @@ bool read_config(FILE *file, struct sway_config *config);
|
|||
* Free config struct
|
||||
*/
|
||||
void free_config(struct sway_config *config);
|
||||
|
||||
void config_clear_handler_context(struct sway_config *config);
|
||||
|
||||
void free_sway_variable(struct sway_variable *var);
|
||||
/**
|
||||
* Does variable replacement for a string based on the config's currently loaded variables.
|
||||
*/
|
||||
|
|
@ -384,12 +397,14 @@ struct cmd_results *check_security_config();
|
|||
int input_identifier_cmp(const void *item, const void *data);
|
||||
struct input_config *new_input_config(const char* identifier);
|
||||
void merge_input_config(struct input_config *dst, struct input_config *src);
|
||||
struct input_config *copy_input_config(struct input_config *ic);
|
||||
void free_input_config(struct input_config *ic);
|
||||
void apply_input_config(struct input_config *input);
|
||||
|
||||
int seat_name_cmp(const void *item, const void *data);
|
||||
struct seat_config *new_seat_config(const char* name);
|
||||
void merge_seat_config(struct seat_config *dst, struct seat_config *src);
|
||||
struct seat_config *copy_seat_config(struct seat_config *seat);
|
||||
void free_seat_config(struct seat_config *ic);
|
||||
struct seat_attachment_config *seat_attachment_config_new();
|
||||
struct seat_attachment_config *seat_config_get_attachment(
|
||||
|
|
@ -397,6 +412,8 @@ struct seat_attachment_config *seat_config_get_attachment(
|
|||
void apply_seat_config(struct seat_config *seat);
|
||||
|
||||
int output_name_cmp(const void *item, const void *data);
|
||||
void output_get_identifier(char *identifier, size_t len,
|
||||
struct sway_output *output);
|
||||
struct output_config *new_output_config(const char *name);
|
||||
void merge_output_config(struct output_config *dst, struct output_config *src);
|
||||
void apply_output_config(struct output_config *oc, swayc_t *output);
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ typedef struct sway_container swayc_t;
|
|||
extern swayc_t root_container;
|
||||
|
||||
struct sway_view;
|
||||
struct sway_seat;
|
||||
|
||||
/**
|
||||
* Different kinds of containers.
|
||||
|
|
@ -105,10 +106,6 @@ struct sway_container {
|
|||
* The parent of this container. NULL for the root container.
|
||||
*/
|
||||
struct sway_container *parent;
|
||||
/**
|
||||
* Which of this container's children has focus.
|
||||
*/
|
||||
struct sway_container *focused;
|
||||
|
||||
/**
|
||||
* Number of master views in auto layouts.
|
||||
|
|
@ -140,9 +137,33 @@ swayc_t *new_view(swayc_t *sibling, struct sway_view *sway_view);
|
|||
swayc_t *destroy_output(swayc_t *output);
|
||||
swayc_t *destroy_view(swayc_t *view);
|
||||
|
||||
swayc_t *next_view_sibling(struct sway_seat *seat);
|
||||
|
||||
/**
|
||||
* Finds a container based on test criteria. Returns the first container that
|
||||
* passes the test.
|
||||
*/
|
||||
swayc_t *swayc_by_test(swayc_t *container,
|
||||
bool (*test)(swayc_t *view, void *data), void *data);
|
||||
/**
|
||||
* Finds a parent container with the given swayc_type.
|
||||
*/
|
||||
swayc_t *swayc_parent_by_type(swayc_t *container, enum swayc_types type);
|
||||
/**
|
||||
* Maps a container's children over a function.
|
||||
*/
|
||||
void container_map(swayc_t *container,
|
||||
void (*f)(swayc_t *view, void *data), void *data);
|
||||
|
||||
swayc_t *swayc_at(swayc_t *parent, double lx, double ly,
|
||||
struct wlr_surface **surface, double *sx, double *sy);
|
||||
|
||||
/**
|
||||
* Apply the function for each child of the container breadth first.
|
||||
*/
|
||||
void container_for_each_bfs(swayc_t *con, void (*f)(swayc_t *con, void *data),
|
||||
void *data);
|
||||
|
||||
swayc_t *swayc_change_layout(swayc_t *container, enum swayc_layouts layout);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ char *extract_crit_tokens(list_t *tokens, const char *criteria);
|
|||
list_t *criteria_for(swayc_t *cont);
|
||||
|
||||
// Returns a list of all containers that match the given list of tokens.
|
||||
list_t *container_for(list_t *tokens);
|
||||
list_t *container_for_crit_tokens(list_t *tokens);
|
||||
|
||||
// Returns true if any criteria in the given list matches this container
|
||||
bool criteria_any(swayc_t *cont, list_t *criteria);
|
||||
|
|
@ -25,6 +25,7 @@ struct sway_cursor {
|
|||
struct wl_listener request_set_cursor;
|
||||
};
|
||||
|
||||
void sway_cursor_destroy(struct sway_cursor *cursor);
|
||||
struct sway_cursor *sway_cursor_create(struct sway_seat *seat);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -5,9 +5,6 @@
|
|||
#include "sway/config.h"
|
||||
#include "list.h"
|
||||
|
||||
extern struct input_config *current_input_config;
|
||||
extern struct seat_config *current_seat_config;
|
||||
|
||||
/**
|
||||
* The global singleton input manager
|
||||
* TODO: make me not a global
|
||||
|
|
@ -19,14 +16,15 @@ struct sway_input_device {
|
|||
struct wlr_input_device *wlr_device;
|
||||
struct input_config *config;
|
||||
struct wl_list link;
|
||||
struct wl_listener device_destroy;
|
||||
};
|
||||
|
||||
struct sway_input_manager {
|
||||
struct wl_listener input_add;
|
||||
struct wl_listener input_remove;
|
||||
struct sway_server *server;
|
||||
struct wl_list devices;
|
||||
struct wl_list seats;
|
||||
|
||||
struct wl_listener new_input;
|
||||
};
|
||||
|
||||
struct sway_input_manager *sway_input_manager_create(
|
||||
|
|
@ -46,4 +44,13 @@ void sway_input_manager_apply_input_config(struct sway_input_manager *input,
|
|||
void sway_input_manager_apply_seat_config(struct sway_input_manager *input,
|
||||
struct seat_config *seat_config);
|
||||
|
||||
struct sway_seat *sway_input_manager_get_default_seat(
|
||||
struct sway_input_manager *input);
|
||||
|
||||
struct sway_seat *input_manager_get_seat(struct sway_input_manager *input,
|
||||
const char *seat_name);
|
||||
|
||||
/** Gets the last seat the user interacted with */
|
||||
struct sway_seat *input_manager_current_seat(struct sway_input_manager *input);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@
|
|||
|
||||
#include "sway/input/seat.h"
|
||||
|
||||
#define SWAY_KEYBOARD_PRESSED_KEYSYMS_CAP 32
|
||||
|
||||
struct sway_keyboard {
|
||||
struct sway_seat_device *seat_device;
|
||||
|
||||
|
|
@ -10,6 +12,12 @@ struct sway_keyboard {
|
|||
|
||||
struct wl_listener keyboard_key;
|
||||
struct wl_listener keyboard_modifiers;
|
||||
|
||||
xkb_keysym_t pressed_keysyms_translated[SWAY_KEYBOARD_PRESSED_KEYSYMS_CAP];
|
||||
uint32_t modifiers_translated;
|
||||
|
||||
xkb_keysym_t pressed_keysyms_raw[SWAY_KEYBOARD_PRESSED_KEYSYMS_CAP];
|
||||
uint32_t modifiers_raw;
|
||||
};
|
||||
|
||||
struct sway_keyboard *sway_keyboard_create(struct sway_seat *seat,
|
||||
|
|
|
|||
|
|
@ -12,14 +12,26 @@ struct sway_seat_device {
|
|||
struct wl_list link; // sway_seat::devices
|
||||
};
|
||||
|
||||
struct sway_seat_container {
|
||||
struct sway_seat *seat;
|
||||
swayc_t *container;
|
||||
|
||||
struct wl_list link; // sway_seat::focus_stack
|
||||
|
||||
struct wl_listener destroy;
|
||||
};
|
||||
|
||||
struct sway_seat {
|
||||
struct wlr_seat *wlr_seat;
|
||||
struct seat_config *config;
|
||||
struct sway_cursor *cursor;
|
||||
struct sway_input_manager *input;
|
||||
swayc_t *focus;
|
||||
|
||||
bool has_focus;
|
||||
struct wl_list focus_stack; // list of containers in focus order
|
||||
|
||||
struct wl_listener focus_destroy;
|
||||
struct wl_listener new_container;
|
||||
|
||||
struct wl_list devices; // sway_seat_device::link
|
||||
|
||||
|
|
@ -29,6 +41,8 @@ struct sway_seat {
|
|||
struct sway_seat *sway_seat_create(struct sway_input_manager *input,
|
||||
const char *seat_name);
|
||||
|
||||
void sway_seat_destroy(struct sway_seat *seat);
|
||||
|
||||
void sway_seat_add_device(struct sway_seat *seat,
|
||||
struct sway_input_device *device);
|
||||
|
||||
|
|
@ -42,6 +56,22 @@ void sway_seat_configure_xcursor(struct sway_seat *seat);
|
|||
|
||||
void sway_seat_set_focus(struct sway_seat *seat, swayc_t *container);
|
||||
|
||||
swayc_t *sway_seat_get_focus(struct sway_seat *seat);
|
||||
|
||||
/**
|
||||
* Return the last container to be focused for the seat (or the most recently
|
||||
* opened if no container has received focused) that is a child of the given
|
||||
* container. The focus-inactive container of the root window is the focused
|
||||
* container for the seat (if the seat does have focus). This function can be
|
||||
* used to determine what container gets focused next if the focused container
|
||||
* is destroyed, or focus moves to a container with children and we need to
|
||||
* descend into the next leaf in focus order.
|
||||
*/
|
||||
swayc_t *sway_seat_get_focus_inactive(struct sway_seat *seat, swayc_t *container);
|
||||
|
||||
swayc_t *sway_seat_get_focus_by_type(struct sway_seat *seat,
|
||||
enum swayc_types type);
|
||||
|
||||
void sway_seat_set_config(struct sway_seat *seat, struct seat_config *seat_config);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -2,6 +2,19 @@
|
|||
#define _SWAY_LAYOUT_H
|
||||
|
||||
#include <wlr/types/wlr_output_layout.h>
|
||||
#include "sway/container.h"
|
||||
|
||||
enum movement_direction {
|
||||
MOVE_LEFT,
|
||||
MOVE_RIGHT,
|
||||
MOVE_UP,
|
||||
MOVE_DOWN,
|
||||
MOVE_PARENT,
|
||||
MOVE_CHILD,
|
||||
MOVE_NEXT,
|
||||
MOVE_PREV,
|
||||
MOVE_FIRST
|
||||
};
|
||||
|
||||
struct sway_container;
|
||||
|
||||
|
|
@ -9,13 +22,22 @@ struct sway_root {
|
|||
struct wlr_output_layout *output_layout;
|
||||
|
||||
struct wl_listener output_layout_change;
|
||||
|
||||
struct wl_list unmanaged_views; // sway_view::unmanaged_view_link
|
||||
|
||||
struct {
|
||||
struct wl_signal new_container;
|
||||
} events;
|
||||
};
|
||||
|
||||
void init_layout(void);
|
||||
void add_child(struct sway_container *parent, struct sway_container *child);
|
||||
swayc_t *add_sibling(swayc_t *parent, swayc_t *child);
|
||||
struct sway_container *remove_child(struct sway_container *child);
|
||||
enum swayc_layouts default_layout(struct sway_container *output);
|
||||
void sort_workspaces(struct sway_container *output);
|
||||
void arrange_windows(struct sway_container *container, double width, double height);
|
||||
swayc_t *get_swayc_in_direction(swayc_t *container,
|
||||
struct sway_seat *seat, enum movement_direction dir);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1,28 +0,0 @@
|
|||
#ifndef _SWAY_BORDER_H
|
||||
#define _SWAY_BORDER_H
|
||||
#include <wlc/wlc.h>
|
||||
#include "container.h"
|
||||
|
||||
/**
|
||||
* Border pixel buffer and corresponding geometry.
|
||||
*/
|
||||
struct border {
|
||||
unsigned char *buffer;
|
||||
struct wlc_geometry geometry;
|
||||
};
|
||||
|
||||
/**
|
||||
* Clear border buffer.
|
||||
*/
|
||||
void border_clear(struct border *border);
|
||||
|
||||
/**
|
||||
* Recursively update all of the borders within a container.
|
||||
*/
|
||||
void update_container_border(swayc_t *container);
|
||||
|
||||
void render_view_borders(wlc_handle view);
|
||||
int get_font_text_height(const char *font);
|
||||
bool should_hide_top_border(swayc_t *con, double y);
|
||||
|
||||
#endif
|
||||
|
|
@ -1,214 +0,0 @@
|
|||
#ifndef _SWAY_COMMANDS_H
|
||||
#define _SWAY_COMMANDS_H
|
||||
#include <stdbool.h>
|
||||
#include <json-c/json.h>
|
||||
#include <wlc/wlc.h>
|
||||
#include "config.h"
|
||||
|
||||
// Container that a called command should act upon. Only valid in command functions.
|
||||
extern swayc_t *current_container;
|
||||
|
||||
/**
|
||||
* Indicates the result of a command's execution.
|
||||
*/
|
||||
enum cmd_status {
|
||||
CMD_SUCCESS, /**< The command was successful */
|
||||
CMD_FAILURE, /**< The command resulted in an error */
|
||||
CMD_INVALID, /**< Unknown command or parser error */
|
||||
CMD_DEFER, /**< Command execution deferred */
|
||||
// Config Blocks
|
||||
CMD_BLOCK_END,
|
||||
CMD_BLOCK_MODE,
|
||||
CMD_BLOCK_BAR,
|
||||
CMD_BLOCK_BAR_COLORS,
|
||||
CMD_BLOCK_INPUT,
|
||||
CMD_BLOCK_COMMANDS,
|
||||
CMD_BLOCK_IPC,
|
||||
CMD_BLOCK_IPC_EVENTS,
|
||||
};
|
||||
|
||||
/**
|
||||
* Stores the result of executing a command.
|
||||
*/
|
||||
struct cmd_results {
|
||||
enum cmd_status status;
|
||||
char *input;
|
||||
/**
|
||||
* Human friendly error message, or NULL on success
|
||||
*/
|
||||
char *error;
|
||||
};
|
||||
|
||||
enum expected_args {
|
||||
EXPECTED_MORE_THAN,
|
||||
EXPECTED_AT_LEAST,
|
||||
EXPECTED_LESS_THAN,
|
||||
EXPECTED_EQUAL_TO
|
||||
};
|
||||
|
||||
struct cmd_results *checkarg(int argc, const char *name, enum expected_args type, int val);
|
||||
struct cmd_results *add_color(const char*, char*, const char*);
|
||||
void input_cmd_apply(struct input_config *input);
|
||||
void hide_view_in_scratchpad(swayc_t *sp_view);
|
||||
|
||||
swayc_t *sp_view;
|
||||
int sp_index;
|
||||
|
||||
/**
|
||||
* Parse and handles a command.
|
||||
*/
|
||||
struct cmd_results *handle_command(char *command, enum command_context context);
|
||||
/**
|
||||
* Parse and handles a command during config file loading.
|
||||
*
|
||||
* Do not use this under normal conditions.
|
||||
*/
|
||||
struct cmd_results *config_command(char *command, enum cmd_status block);
|
||||
/*
|
||||
* Parses a command policy rule.
|
||||
*/
|
||||
struct cmd_results *config_commands_command(char *exec);
|
||||
|
||||
/**
|
||||
* Allocates a cmd_results object.
|
||||
*/
|
||||
struct cmd_results *cmd_results_new(enum cmd_status status, const char* input, const char *error, ...);
|
||||
/**
|
||||
* Frees a cmd_results object.
|
||||
*/
|
||||
void free_cmd_results(struct cmd_results *results);
|
||||
/**
|
||||
* Serializes cmd_results to a JSON string.
|
||||
*
|
||||
* Free the JSON string later on.
|
||||
*/
|
||||
const char *cmd_results_to_json(struct cmd_results *results);
|
||||
|
||||
void remove_view_from_scratchpad(swayc_t *);
|
||||
|
||||
/**
|
||||
* Actual command function signatures for individual .c files in commands/ directory.
|
||||
*/
|
||||
|
||||
typedef struct cmd_results *sway_cmd(int argc, char **argv);
|
||||
|
||||
sway_cmd cmd_assign;
|
||||
sway_cmd cmd_bar;
|
||||
sway_cmd cmd_bindcode;
|
||||
sway_cmd cmd_bindsym;
|
||||
sway_cmd cmd_border;
|
||||
sway_cmd cmd_client_focused;
|
||||
sway_cmd cmd_client_focused_inactive;
|
||||
sway_cmd cmd_client_unfocused;
|
||||
sway_cmd cmd_client_urgent;
|
||||
sway_cmd cmd_client_placeholder;
|
||||
sway_cmd cmd_client_background;
|
||||
sway_cmd cmd_clipboard;
|
||||
sway_cmd cmd_commands;
|
||||
sway_cmd cmd_debuglog;
|
||||
sway_cmd cmd_default_border;
|
||||
sway_cmd cmd_default_floating_border;
|
||||
sway_cmd cmd_exec;
|
||||
sway_cmd cmd_exec_always;
|
||||
sway_cmd cmd_exit;
|
||||
sway_cmd cmd_floating;
|
||||
sway_cmd cmd_floating_maximum_size;
|
||||
sway_cmd cmd_floating_minimum_size;
|
||||
sway_cmd cmd_floating_mod;
|
||||
sway_cmd cmd_floating_scroll;
|
||||
sway_cmd cmd_focus;
|
||||
sway_cmd cmd_focus_follows_mouse;
|
||||
sway_cmd cmd_font;
|
||||
sway_cmd cmd_for_window;
|
||||
sway_cmd cmd_force_focus_wrapping;
|
||||
sway_cmd cmd_fullscreen;
|
||||
sway_cmd cmd_gaps;
|
||||
sway_cmd cmd_hide_edge_borders;
|
||||
sway_cmd cmd_include;
|
||||
sway_cmd cmd_input;
|
||||
sway_cmd cmd_ipc;
|
||||
sway_cmd cmd_kill;
|
||||
sway_cmd cmd_layout;
|
||||
sway_cmd cmd_log_colors;
|
||||
sway_cmd cmd_mark;
|
||||
sway_cmd cmd_mode;
|
||||
sway_cmd cmd_mouse_warping;
|
||||
sway_cmd cmd_move;
|
||||
sway_cmd cmd_new_float;
|
||||
sway_cmd cmd_new_window;
|
||||
sway_cmd cmd_no_focus;
|
||||
sway_cmd cmd_orientation;
|
||||
sway_cmd cmd_output;
|
||||
sway_cmd cmd_permit;
|
||||
sway_cmd cmd_reject;
|
||||
sway_cmd cmd_reload;
|
||||
sway_cmd cmd_resize;
|
||||
sway_cmd cmd_scratchpad;
|
||||
sway_cmd cmd_seamless_mouse;
|
||||
sway_cmd cmd_set;
|
||||
sway_cmd cmd_show_marks;
|
||||
sway_cmd cmd_smart_gaps;
|
||||
sway_cmd cmd_split;
|
||||
sway_cmd cmd_splith;
|
||||
sway_cmd cmd_splitt;
|
||||
sway_cmd cmd_splitv;
|
||||
sway_cmd cmd_sticky;
|
||||
sway_cmd cmd_unmark;
|
||||
sway_cmd cmd_workspace;
|
||||
sway_cmd cmd_ws_auto_back_and_forth;
|
||||
sway_cmd cmd_workspace_layout;
|
||||
|
||||
sway_cmd bar_cmd_activate_button;
|
||||
sway_cmd bar_cmd_binding_mode_indicator;
|
||||
sway_cmd bar_cmd_bindsym;
|
||||
sway_cmd bar_cmd_colors;
|
||||
sway_cmd bar_cmd_context_button;
|
||||
sway_cmd bar_cmd_font;
|
||||
sway_cmd bar_cmd_mode;
|
||||
sway_cmd bar_cmd_modifier;
|
||||
sway_cmd bar_cmd_output;
|
||||
sway_cmd bar_cmd_height;
|
||||
sway_cmd bar_cmd_hidden_state;
|
||||
sway_cmd bar_cmd_icon_theme;
|
||||
sway_cmd bar_cmd_id;
|
||||
sway_cmd bar_cmd_position;
|
||||
sway_cmd bar_cmd_secondary_button;
|
||||
sway_cmd bar_cmd_separator_symbol;
|
||||
sway_cmd bar_cmd_status_command;
|
||||
sway_cmd bar_cmd_pango_markup;
|
||||
sway_cmd bar_cmd_strip_workspace_numbers;
|
||||
sway_cmd bar_cmd_swaybar_command;
|
||||
sway_cmd bar_cmd_tray_output;
|
||||
sway_cmd bar_cmd_tray_padding;
|
||||
sway_cmd bar_cmd_wrap_scroll;
|
||||
sway_cmd bar_cmd_workspace_buttons;
|
||||
|
||||
sway_cmd bar_colors_cmd_active_workspace;
|
||||
sway_cmd bar_colors_cmd_background;
|
||||
sway_cmd bar_colors_cmd_focused_background;
|
||||
sway_cmd bar_colors_cmd_binding_mode;
|
||||
sway_cmd bar_colors_cmd_focused_workspace;
|
||||
sway_cmd bar_colors_cmd_inactive_workspace;
|
||||
sway_cmd bar_colors_cmd_separator;
|
||||
sway_cmd bar_colors_cmd_focused_separator;
|
||||
sway_cmd bar_colors_cmd_statusline;
|
||||
sway_cmd bar_colors_cmd_focused_statusline;
|
||||
sway_cmd bar_colors_cmd_urgent_workspace;
|
||||
|
||||
sway_cmd input_cmd_accel_profile;
|
||||
sway_cmd input_cmd_click_method;
|
||||
sway_cmd input_cmd_drag_lock;
|
||||
sway_cmd input_cmd_dwt;
|
||||
sway_cmd input_cmd_events;
|
||||
sway_cmd input_cmd_left_handed;
|
||||
sway_cmd input_cmd_middle_emulation;
|
||||
sway_cmd input_cmd_natural_scroll;
|
||||
sway_cmd input_cmd_pointer_accel;
|
||||
sway_cmd input_cmd_scroll_method;
|
||||
sway_cmd input_cmd_tap;
|
||||
|
||||
sway_cmd cmd_ipc_cmd;
|
||||
sway_cmd cmd_ipc_events;
|
||||
sway_cmd cmd_ipc_event_cmd;
|
||||
|
||||
#endif
|
||||
|
|
@ -1,406 +0,0 @@
|
|||
#ifndef _SWAY_CONFIG_H
|
||||
#define _SWAY_CONFIG_H
|
||||
|
||||
#define PID_WORKSPACE_TIMEOUT 60
|
||||
|
||||
#include <libinput.h>
|
||||
#include <stdint.h>
|
||||
#include <wlc/geometry.h>
|
||||
#include <wlc/wlc.h>
|
||||
#include <xkbcommon/xkbcommon.h>
|
||||
#include <time.h>
|
||||
#include "wayland-desktop-shell-server-protocol.h"
|
||||
#include "list.h"
|
||||
#include "layout.h"
|
||||
#include "container.h"
|
||||
|
||||
/**
|
||||
* Describes a variable created via the `set` command.
|
||||
*/
|
||||
struct sway_variable {
|
||||
char *name;
|
||||
char *value;
|
||||
};
|
||||
|
||||
/**
|
||||
* A key binding and an associated command.
|
||||
*/
|
||||
struct sway_binding {
|
||||
int order;
|
||||
bool release;
|
||||
bool bindcode;
|
||||
list_t *keys;
|
||||
uint32_t modifiers;
|
||||
char *command;
|
||||
};
|
||||
|
||||
/**
|
||||
* A mouse binding and an associated command.
|
||||
*/
|
||||
struct sway_mouse_binding {
|
||||
uint32_t button;
|
||||
char *command;
|
||||
};
|
||||
|
||||
/**
|
||||
* A "mode" of keybindings created via the `mode` command.
|
||||
*/
|
||||
struct sway_mode {
|
||||
char *name;
|
||||
list_t *bindings;
|
||||
};
|
||||
|
||||
/**
|
||||
* libinput options for input devices
|
||||
*/
|
||||
struct input_config {
|
||||
char *identifier;
|
||||
|
||||
int accel_profile;
|
||||
int click_method;
|
||||
int drag_lock;
|
||||
int dwt;
|
||||
int left_handed;
|
||||
int middle_emulation;
|
||||
int natural_scroll;
|
||||
float pointer_accel;
|
||||
int scroll_method;
|
||||
int send_events;
|
||||
int tap;
|
||||
|
||||
bool capturable;
|
||||
struct wlc_geometry region;
|
||||
};
|
||||
|
||||
/**
|
||||
* Size and position configuration for a particular output.
|
||||
*
|
||||
* This is set via the `output` command.
|
||||
*/
|
||||
struct output_config {
|
||||
char *name;
|
||||
int enabled;
|
||||
int width, height;
|
||||
int x, y;
|
||||
int scale;
|
||||
char *background;
|
||||
char *background_option;
|
||||
};
|
||||
|
||||
/**
|
||||
* Maps a workspace name to an output name.
|
||||
*
|
||||
* Set via `workspace <x> output <y>`
|
||||
*/
|
||||
struct workspace_output {
|
||||
char *output;
|
||||
char *workspace;
|
||||
};
|
||||
|
||||
struct pid_workspace {
|
||||
pid_t *pid;
|
||||
char *workspace;
|
||||
time_t *time_added;
|
||||
};
|
||||
|
||||
struct bar_config {
|
||||
/**
|
||||
* One of "dock", "hide", "invisible"
|
||||
*
|
||||
* Always visible in dock mode. Visible only when modifier key is held in hide mode.
|
||||
* Never visible in invisible mode.
|
||||
*/
|
||||
char *mode;
|
||||
/**
|
||||
* One of "show" or "hide".
|
||||
*
|
||||
* In "show" mode, it will always be shown on top of the active workspace.
|
||||
*/
|
||||
char *hidden_state;
|
||||
/**
|
||||
* Id name used to identify the bar through IPC.
|
||||
*
|
||||
* Defaults to bar-x, where x corresponds to the position of the
|
||||
* embedding bar block in the config file (bar-0, bar-1, ...).
|
||||
*/
|
||||
char *id;
|
||||
uint32_t modifier;
|
||||
list_t *outputs;
|
||||
enum desktop_shell_panel_position position;
|
||||
list_t *bindings;
|
||||
char *status_command;
|
||||
bool pango_markup;
|
||||
char *swaybar_command;
|
||||
char *font;
|
||||
int height; // -1 not defined
|
||||
|
||||
#ifdef ENABLE_TRAY
|
||||
// Tray
|
||||
char *tray_output;
|
||||
char *icon_theme;
|
||||
uint32_t tray_padding;
|
||||
uint32_t activate_button;
|
||||
uint32_t context_button;
|
||||
uint32_t secondary_button;
|
||||
#endif
|
||||
|
||||
bool workspace_buttons;
|
||||
bool wrap_scroll;
|
||||
char *separator_symbol;
|
||||
bool strip_workspace_numbers;
|
||||
bool binding_mode_indicator;
|
||||
bool verbose;
|
||||
pid_t pid;
|
||||
struct {
|
||||
char *background;
|
||||
char *statusline;
|
||||
char *separator;
|
||||
char *focused_background;
|
||||
char *focused_statusline;
|
||||
char *focused_separator;
|
||||
char *focused_workspace_border;
|
||||
char *focused_workspace_bg;
|
||||
char *focused_workspace_text;
|
||||
char *active_workspace_border;
|
||||
char *active_workspace_bg;
|
||||
char *active_workspace_text;
|
||||
char *inactive_workspace_border;
|
||||
char *inactive_workspace_bg;
|
||||
char *inactive_workspace_text;
|
||||
char *urgent_workspace_border;
|
||||
char *urgent_workspace_bg;
|
||||
char *urgent_workspace_text;
|
||||
char *binding_mode_border;
|
||||
char *binding_mode_bg;
|
||||
char *binding_mode_text;
|
||||
} colors;
|
||||
};
|
||||
|
||||
struct border_colors {
|
||||
uint32_t border;
|
||||
uint32_t background;
|
||||
uint32_t text;
|
||||
uint32_t indicator;
|
||||
uint32_t child_border;
|
||||
};
|
||||
|
||||
enum edge_border_types {
|
||||
E_NONE, /**< Don't hide edge borders */
|
||||
E_VERTICAL, /**< hide vertical edge borders */
|
||||
E_HORIZONTAL, /**< hide horizontal edge borders */
|
||||
E_BOTH, /**< hide vertical and horizontal edge borders */
|
||||
E_SMART /**< hide both if precisely one window is present in workspace */
|
||||
};
|
||||
|
||||
enum command_context {
|
||||
CONTEXT_CONFIG = 1,
|
||||
CONTEXT_BINDING = 2,
|
||||
CONTEXT_IPC = 4,
|
||||
CONTEXT_CRITERIA = 8,
|
||||
CONTEXT_ALL = 0xFFFFFFFF,
|
||||
};
|
||||
|
||||
struct command_policy {
|
||||
char *command;
|
||||
uint32_t context;
|
||||
};
|
||||
|
||||
enum secure_feature {
|
||||
FEATURE_LOCK = 1,
|
||||
FEATURE_PANEL = 2,
|
||||
FEATURE_BACKGROUND = 4,
|
||||
FEATURE_SCREENSHOT = 8,
|
||||
FEATURE_FULLSCREEN = 16,
|
||||
FEATURE_KEYBOARD = 32,
|
||||
FEATURE_MOUSE = 64,
|
||||
};
|
||||
|
||||
struct feature_policy {
|
||||
char *program;
|
||||
uint32_t features;
|
||||
};
|
||||
|
||||
enum ipc_feature {
|
||||
IPC_FEATURE_COMMAND = 1,
|
||||
IPC_FEATURE_GET_WORKSPACES = 2,
|
||||
IPC_FEATURE_GET_OUTPUTS = 4,
|
||||
IPC_FEATURE_GET_TREE = 8,
|
||||
IPC_FEATURE_GET_MARKS = 16,
|
||||
IPC_FEATURE_GET_BAR_CONFIG = 32,
|
||||
IPC_FEATURE_GET_VERSION = 64,
|
||||
IPC_FEATURE_GET_INPUTS = 128,
|
||||
IPC_FEATURE_EVENT_WORKSPACE = 256,
|
||||
IPC_FEATURE_EVENT_OUTPUT = 512,
|
||||
IPC_FEATURE_EVENT_MODE = 1024,
|
||||
IPC_FEATURE_EVENT_WINDOW = 2048,
|
||||
IPC_FEATURE_EVENT_BINDING = 4096,
|
||||
IPC_FEATURE_EVENT_INPUT = 8192,
|
||||
IPC_FEATURE_GET_CLIPBOARD = 16384,
|
||||
|
||||
IPC_FEATURE_ALL_COMMANDS = 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 | 16384,
|
||||
IPC_FEATURE_ALL_EVENTS = 256 | 512 | 1024 | 2048 | 4096 | 8192,
|
||||
|
||||
IPC_FEATURE_ALL = IPC_FEATURE_ALL_COMMANDS | IPC_FEATURE_ALL_EVENTS,
|
||||
};
|
||||
|
||||
struct ipc_policy {
|
||||
char *program;
|
||||
uint32_t features;
|
||||
};
|
||||
|
||||
/**
|
||||
* The configuration struct. The result of loading a config file.
|
||||
*/
|
||||
struct sway_config {
|
||||
list_t *symbols;
|
||||
list_t *modes;
|
||||
list_t *bars;
|
||||
list_t *cmd_queue;
|
||||
list_t *workspace_outputs;
|
||||
list_t *pid_workspaces;
|
||||
list_t *output_configs;
|
||||
list_t *input_configs;
|
||||
list_t *criteria;
|
||||
list_t *no_focus;
|
||||
list_t *active_bar_modifiers;
|
||||
struct sway_mode *current_mode;
|
||||
struct bar_config *current_bar;
|
||||
uint32_t floating_mod;
|
||||
uint32_t dragging_key;
|
||||
uint32_t resizing_key;
|
||||
char *floating_scroll_up_cmd;
|
||||
char *floating_scroll_down_cmd;
|
||||
char *floating_scroll_left_cmd;
|
||||
char *floating_scroll_right_cmd;
|
||||
enum swayc_layouts default_orientation;
|
||||
enum swayc_layouts default_layout;
|
||||
char *font;
|
||||
int font_height;
|
||||
|
||||
// Flags
|
||||
bool focus_follows_mouse;
|
||||
bool mouse_warping;
|
||||
bool force_focus_wrapping;
|
||||
bool active;
|
||||
bool failed;
|
||||
bool reloading;
|
||||
bool reading;
|
||||
bool auto_back_and_forth;
|
||||
bool seamless_mouse;
|
||||
bool show_marks;
|
||||
|
||||
bool edge_gaps;
|
||||
bool smart_gaps;
|
||||
int gaps_inner;
|
||||
int gaps_outer;
|
||||
|
||||
list_t *config_chain;
|
||||
const char *current_config;
|
||||
|
||||
enum swayc_border_types border;
|
||||
enum swayc_border_types floating_border;
|
||||
int border_thickness;
|
||||
int floating_border_thickness;
|
||||
enum edge_border_types hide_edge_borders;
|
||||
|
||||
// border colors
|
||||
struct {
|
||||
struct border_colors focused;
|
||||
struct border_colors focused_inactive;
|
||||
struct border_colors unfocused;
|
||||
struct border_colors urgent;
|
||||
struct border_colors placeholder;
|
||||
uint32_t background;
|
||||
} border_colors;
|
||||
|
||||
// floating view
|
||||
int32_t floating_maximum_width;
|
||||
int32_t floating_maximum_height;
|
||||
int32_t floating_minimum_width;
|
||||
int32_t floating_minimum_height;
|
||||
|
||||
// Security
|
||||
list_t *command_policies;
|
||||
list_t *feature_policies;
|
||||
list_t *ipc_policies;
|
||||
};
|
||||
|
||||
void pid_workspace_add(struct pid_workspace *pw);
|
||||
void free_pid_workspace(struct pid_workspace *pw);
|
||||
|
||||
/**
|
||||
* Loads the main config from the given path. is_active should be true when
|
||||
* reloading the config.
|
||||
*/
|
||||
bool load_main_config(const char *path, bool is_active);
|
||||
|
||||
/**
|
||||
* Loads an included config. Can only be used after load_main_config.
|
||||
*/
|
||||
bool load_include_configs(const char *path, struct sway_config *config);
|
||||
|
||||
/**
|
||||
* Reads the config from the given FILE.
|
||||
*/
|
||||
bool read_config(FILE *file, struct sway_config *config);
|
||||
|
||||
/**
|
||||
* Free config struct
|
||||
*/
|
||||
void free_config(struct sway_config *config);
|
||||
/**
|
||||
* Does variable replacement for a string based on the config's currently loaded variables.
|
||||
*/
|
||||
char *do_var_replacement(char *str);
|
||||
|
||||
struct cmd_results *check_security_config();
|
||||
|
||||
int input_identifier_cmp(const void *item, const void *data);
|
||||
void merge_input_config(struct input_config *dst, struct input_config *src);
|
||||
void apply_input_config(struct input_config *ic, struct libinput_device *dev);
|
||||
void free_input_config(struct input_config *ic);
|
||||
|
||||
int output_name_cmp(const void *item, const void *data);
|
||||
void merge_output_config(struct output_config *dst, struct output_config *src);
|
||||
/** Sets up a WLC output handle based on a given output_config.
|
||||
*/
|
||||
void apply_output_config(struct output_config *oc, swayc_t *output);
|
||||
void free_output_config(struct output_config *oc);
|
||||
|
||||
/**
|
||||
* Updates the list of active bar modifiers
|
||||
*/
|
||||
void update_active_bar_modifiers(void);
|
||||
|
||||
int workspace_output_cmp_workspace(const void *a, const void *b);
|
||||
|
||||
int sway_binding_cmp(const void *a, const void *b);
|
||||
int sway_binding_cmp_qsort(const void *a, const void *b);
|
||||
int sway_binding_cmp_keys(const void *a, const void *b);
|
||||
void free_sway_binding(struct sway_binding *sb);
|
||||
struct sway_binding *sway_binding_dup(struct sway_binding *sb);
|
||||
|
||||
int sway_mouse_binding_cmp(const void *a, const void *b);
|
||||
int sway_mouse_binding_cmp_qsort(const void *a, const void *b);
|
||||
int sway_mouse_binding_cmp_buttons(const void *a, const void *b);
|
||||
void free_sway_mouse_binding(struct sway_mouse_binding *smb);
|
||||
|
||||
void load_swaybars();
|
||||
void terminate_swaybg(pid_t pid);
|
||||
|
||||
/**
|
||||
* Allocate and initialize default bar configuration.
|
||||
*/
|
||||
struct bar_config *default_bar_config(void);
|
||||
|
||||
/**
|
||||
* Global config singleton.
|
||||
*/
|
||||
extern struct sway_config *config;
|
||||
|
||||
/**
|
||||
* Config file currently being read.
|
||||
*/
|
||||
extern const char *current_config_path;
|
||||
|
||||
#endif
|
||||
|
|
@ -1,362 +0,0 @@
|
|||
#ifndef _SWAY_CONTAINER_H
|
||||
#define _SWAY_CONTAINER_H
|
||||
#include <sys/types.h>
|
||||
#include <wlc/wlc.h>
|
||||
#include <wlr/types/wlr_output.h>
|
||||
#include <stdint.h>
|
||||
#include "list.h"
|
||||
|
||||
typedef struct sway_container swayc_t;
|
||||
|
||||
extern swayc_t root_container;
|
||||
extern swayc_t *current_focus;
|
||||
|
||||
struct sway_view;
|
||||
|
||||
/**
|
||||
* Different kinds of containers.
|
||||
*
|
||||
* This enum is in order. A container will never be inside of a container below
|
||||
* it on this list.
|
||||
*/
|
||||
enum swayc_types {
|
||||
C_ROOT, /**< The root container. Only one of these ever exists. */
|
||||
C_OUTPUT, /**< An output (aka monitor, head, etc). */
|
||||
C_WORKSPACE, /**< A workspace. */
|
||||
C_CONTAINER, /**< A manually created container. */
|
||||
C_VIEW, /**< A view (aka window). */
|
||||
// Keep last
|
||||
C_TYPES,
|
||||
};
|
||||
|
||||
/**
|
||||
* Different ways to arrange a container.
|
||||
*/
|
||||
enum swayc_layouts {
|
||||
L_NONE, /**< Used for containers that have no layout (views, root) */
|
||||
L_HORIZ,
|
||||
L_VERT,
|
||||
L_STACKED,
|
||||
L_TABBED,
|
||||
L_FLOATING, /**< A psuedo-container, removed from the tree, to hold floating windows */
|
||||
|
||||
/* Awesome/Monad style auto layouts */
|
||||
L_AUTO_LEFT,
|
||||
L_AUTO_RIGHT,
|
||||
L_AUTO_TOP,
|
||||
L_AUTO_BOTTOM,
|
||||
|
||||
L_AUTO_FIRST = L_AUTO_LEFT,
|
||||
L_AUTO_LAST = L_AUTO_BOTTOM,
|
||||
|
||||
// Keep last
|
||||
L_LAYOUTS,
|
||||
};
|
||||
|
||||
enum swayc_border_types {
|
||||
B_NONE, /**< No border */
|
||||
B_PIXEL, /**< 1px border */
|
||||
B_NORMAL /**< Normal border with title bar */
|
||||
};
|
||||
|
||||
/**
|
||||
* Stores information about a container.
|
||||
*
|
||||
* The tree is made of these. Views are containers that cannot have children.
|
||||
*/
|
||||
struct sway_container {
|
||||
// TODO WLR: reconcile these
|
||||
wlc_handle handle;
|
||||
|
||||
union {
|
||||
struct sway_output *output;
|
||||
struct sway_view *view;
|
||||
} _handle;
|
||||
|
||||
/**
|
||||
* A unique ID to identify this container. Primarily used in the
|
||||
* get_tree JSON output.
|
||||
*/
|
||||
size_t id;
|
||||
|
||||
enum swayc_types type;
|
||||
enum swayc_layouts layout;
|
||||
enum swayc_layouts prev_layout;
|
||||
enum swayc_layouts workspace_layout;
|
||||
|
||||
/**
|
||||
* Width and height of this container, without borders or gaps.
|
||||
*/
|
||||
double width, height;
|
||||
|
||||
/**
|
||||
* Views may request geometry, which is stored in this and ignored until
|
||||
* the views are floated.
|
||||
*/
|
||||
int desired_width, desired_height;
|
||||
|
||||
/**
|
||||
* The coordinates that this view appear at, relative to the output they
|
||||
* are located on (output containers have absolute coordinates).
|
||||
*/
|
||||
double x, y;
|
||||
|
||||
/**
|
||||
* Cached geometry used to store view/container geometry when switching
|
||||
* between tabbed/stacked and horizontal/vertical layouts.
|
||||
*/
|
||||
struct wlc_geometry cached_geometry;
|
||||
|
||||
/**
|
||||
* False if this view is invisible. It could be in the scratchpad or on a
|
||||
* workspace that is not shown.
|
||||
*/
|
||||
bool visible;
|
||||
bool is_floating;
|
||||
bool is_focused;
|
||||
bool sticky; // floating view always visible on its output
|
||||
|
||||
// Attributes that mostly views have.
|
||||
char *name;
|
||||
char *class;
|
||||
char *instance;
|
||||
char *app_id;
|
||||
|
||||
// Used by output containers to keep track of swaybg child processes.
|
||||
pid_t bg_pid;
|
||||
|
||||
int gaps;
|
||||
|
||||
list_t *children;
|
||||
/**
|
||||
* Children of this container that are floated.
|
||||
*/
|
||||
list_t *floating;
|
||||
/**
|
||||
* Unmanaged view handles in this container.
|
||||
*/
|
||||
list_t *unmanaged;
|
||||
|
||||
/**
|
||||
* The parent of this container. NULL for the root container.
|
||||
*/
|
||||
struct sway_container *parent;
|
||||
/**
|
||||
* Which of this container's children has focus.
|
||||
*/
|
||||
struct sway_container *focused;
|
||||
/**
|
||||
* If this container's children include a fullscreen view, this is that view.
|
||||
*/
|
||||
struct sway_container *fullscreen;
|
||||
/**
|
||||
* If this container is a view, this may be set to the window's decoration
|
||||
* buffer (or NULL).
|
||||
*/
|
||||
struct border *border;
|
||||
enum swayc_border_types border_type;
|
||||
struct wlc_geometry border_geometry;
|
||||
struct wlc_geometry title_bar_geometry;
|
||||
struct wlc_geometry actual_geometry;
|
||||
int border_thickness;
|
||||
|
||||
/**
|
||||
* Number of master views in auto layouts.
|
||||
*/
|
||||
size_t nb_master;
|
||||
|
||||
/**
|
||||
* Number of slave groups (e.g. columns) in auto layouts.
|
||||
*/
|
||||
size_t nb_slave_groups;
|
||||
|
||||
/**
|
||||
* Marks applied to the container, list_t of char*.
|
||||
*/
|
||||
list_t *marks;
|
||||
};
|
||||
|
||||
enum visibility_mask {
|
||||
VISIBLE = true
|
||||
} visible;
|
||||
|
||||
struct sway_output;
|
||||
/**
|
||||
* Allocates a new output container.
|
||||
*/
|
||||
swayc_t *new_output(struct sway_output *sway_output);
|
||||
/**
|
||||
* Allocates a new workspace container.
|
||||
*/
|
||||
swayc_t *new_workspace(swayc_t *output, const char *name);
|
||||
/**
|
||||
* Allocates a new container and places a child into it.
|
||||
*
|
||||
* This is used from the split command, which creates a new container with the
|
||||
* requested layout and replaces the focused container in the tree with the new
|
||||
* one. Then the removed container is added as a child of the new container.
|
||||
*/
|
||||
swayc_t *new_container(swayc_t *child, enum swayc_layouts layout);
|
||||
/**
|
||||
* Allocates a new view container.
|
||||
*
|
||||
* Pass in a sibling view, or a workspace to become this container's parent.
|
||||
*/
|
||||
swayc_t *new_view(swayc_t *sibling, struct sway_view *view);
|
||||
/**
|
||||
* Allocates a new floating view in the active workspace.
|
||||
*/
|
||||
swayc_t *new_floating_view(wlc_handle handle);
|
||||
|
||||
void floating_view_sane_size(swayc_t *view);
|
||||
|
||||
/**
|
||||
* Frees an output's container.
|
||||
*/
|
||||
swayc_t *destroy_output(swayc_t *output);
|
||||
/**
|
||||
* Destroys a workspace container and returns the parent pointer, or NULL.
|
||||
*/
|
||||
swayc_t *destroy_workspace(swayc_t *workspace);
|
||||
/**
|
||||
* Destroys a container and all empty parents. Returns the topmost non-empty
|
||||
* parent container, or NULL.
|
||||
*/
|
||||
swayc_t *destroy_container(swayc_t *container);
|
||||
/**
|
||||
* Destroys a view container and all empty parents. Returns the topmost
|
||||
* non-empty parent container, or NULL.
|
||||
*/
|
||||
swayc_t *destroy_view(swayc_t *view);
|
||||
|
||||
/**
|
||||
* Finds a container based on test criteria. Returns the first container that
|
||||
* passes the test.
|
||||
*/
|
||||
swayc_t *swayc_by_test(swayc_t *container, bool (*test)(swayc_t *view, void *data), void *data);
|
||||
/**
|
||||
* Finds a parent container with the given swayc_type.
|
||||
*/
|
||||
swayc_t *swayc_parent_by_type(swayc_t *container, enum swayc_types);
|
||||
/**
|
||||
* Finds a parent with the given swayc_layout.
|
||||
*/
|
||||
swayc_t *swayc_parent_by_layout(swayc_t *container, enum swayc_layouts);
|
||||
/**
|
||||
* Finds the bottom-most focused container of a type.
|
||||
*/
|
||||
swayc_t *swayc_focus_by_type(swayc_t *container, enum swayc_types);
|
||||
/**
|
||||
* Finds the bottom-most focused container of a layout.
|
||||
*/
|
||||
swayc_t *swayc_focus_by_layout(swayc_t *container, enum swayc_layouts);
|
||||
|
||||
/**
|
||||
* Gets the swayc_t associated with a wlc_handle.
|
||||
*/
|
||||
swayc_t *swayc_by_handle(wlc_handle handle);
|
||||
/**
|
||||
* Gets the named swayc_t.
|
||||
*/
|
||||
swayc_t *swayc_by_name(const char *name);
|
||||
/**
|
||||
* Gets the active output's container.
|
||||
*/
|
||||
swayc_t *swayc_active_output(void);
|
||||
/**
|
||||
* Gets the active workspace's container.
|
||||
*/
|
||||
swayc_t *swayc_active_workspace(void);
|
||||
/**
|
||||
* Gets the workspace for the given view container.
|
||||
*/
|
||||
swayc_t *swayc_active_workspace_for(swayc_t *view);
|
||||
/**
|
||||
* Finds the container currently underneath the pointer.
|
||||
*/
|
||||
swayc_t *container_under_pointer(void);
|
||||
/**
|
||||
* Finds the first container following a callback.
|
||||
*/
|
||||
swayc_t *container_find(swayc_t *container, bool (*f)(swayc_t *, const void *), const void *data);
|
||||
|
||||
/**
|
||||
* Returns true if a container is fullscreen.
|
||||
*/
|
||||
bool swayc_is_fullscreen(swayc_t *view);
|
||||
/**
|
||||
* Returns true if this view is focused.
|
||||
*/
|
||||
bool swayc_is_active(swayc_t *view);
|
||||
/**
|
||||
* Returns true if the parent is an ancestor of the child.
|
||||
*/
|
||||
bool swayc_is_parent_of(swayc_t *parent, swayc_t *child);
|
||||
/**
|
||||
* Returns true if the child is a desecendant of the parent.
|
||||
*/
|
||||
bool swayc_is_child_of(swayc_t *child, swayc_t *parent);
|
||||
|
||||
/**
|
||||
* Returns true if this container is an empty workspace.
|
||||
*/
|
||||
bool swayc_is_empty_workspace(swayc_t *container);
|
||||
|
||||
/**
|
||||
* Returns the top most tabbed or stacked parent container. Returns NULL if
|
||||
* view is not in a tabbed/stacked layout.
|
||||
*/
|
||||
swayc_t *swayc_tabbed_stacked_ancestor(swayc_t *view);
|
||||
|
||||
/**
|
||||
* Returns the immediate tabbed or stacked parent container. Returns NULL if
|
||||
* view is not directly in a tabbed/stacked layout.
|
||||
*/
|
||||
swayc_t *swayc_tabbed_stacked_parent(swayc_t *view);
|
||||
|
||||
/**
|
||||
* Returns the gap (padding) of the container.
|
||||
*
|
||||
* This returns the inner gaps for a view, the outer gaps for a workspace, and
|
||||
* 0 otherwise.
|
||||
*/
|
||||
int swayc_gap(swayc_t *container);
|
||||
|
||||
/**
|
||||
* Maps a container's children over a function.
|
||||
*/
|
||||
void container_map(swayc_t *, void (*f)(swayc_t *, void *), void *);
|
||||
|
||||
/**
|
||||
* Set a view as visible or invisible.
|
||||
*
|
||||
* This will perform the required wlc calls as well; it is not sufficient to
|
||||
* simply toggle the boolean in swayc_t.
|
||||
*/
|
||||
void set_view_visibility(swayc_t *view, void *data);
|
||||
/**
|
||||
* Set the gaps value for a view.
|
||||
*/
|
||||
void set_gaps(swayc_t *view, void *amount);
|
||||
/**
|
||||
* Add to the gaps value for a view.
|
||||
*/
|
||||
void add_gaps(swayc_t *view, void *amount);
|
||||
|
||||
/**
|
||||
* Issue wlc calls to make the visibility of a container consistent.
|
||||
*/
|
||||
void update_visibility(swayc_t *container);
|
||||
|
||||
/**
|
||||
* Close all child views of container
|
||||
*/
|
||||
void close_views(swayc_t *container);
|
||||
|
||||
/**
|
||||
* Assign layout to a container. Needed due to workspace container specifics.
|
||||
* Workspace should always have either L_VERT or L_HORIZ layout.
|
||||
*/
|
||||
swayc_t *swayc_change_layout(swayc_t *container, enum swayc_layouts layout);
|
||||
|
||||
#endif
|
||||
|
|
@ -1,45 +0,0 @@
|
|||
#ifndef _SWAY_FOCUS_H
|
||||
#define _SWAY_FOCUS_H
|
||||
enum movement_direction {
|
||||
MOVE_LEFT,
|
||||
MOVE_RIGHT,
|
||||
MOVE_UP,
|
||||
MOVE_DOWN,
|
||||
MOVE_PARENT,
|
||||
MOVE_CHILD,
|
||||
MOVE_NEXT,
|
||||
MOVE_PREV,
|
||||
MOVE_FIRST
|
||||
};
|
||||
|
||||
#include "container.h"
|
||||
|
||||
// focused_container - the container found by following the `focused` pointer
|
||||
// from a given container to a container with `is_focused` boolean set
|
||||
// ---
|
||||
// focused_view - the container found by following the `focused` pointer from a
|
||||
// given container to a view.
|
||||
// ---
|
||||
|
||||
swayc_t *get_focused_container(swayc_t *parent);
|
||||
swayc_t *get_focused_view(swayc_t *parent);
|
||||
swayc_t *get_focused_float(swayc_t *ws);
|
||||
|
||||
// a special-case function to get the focused view, regardless
|
||||
// of whether it's tiled or floating
|
||||
swayc_t *get_focused_view_include_floating(swayc_t *parent);
|
||||
|
||||
bool set_focused_container(swayc_t *container);
|
||||
bool set_focused_container_for(swayc_t *ancestor, swayc_t *container);
|
||||
|
||||
// lock focused container/view. locked by windows with OVERRIDE attribute
|
||||
// and unlocked when they are destroyed
|
||||
|
||||
extern bool locked_container_focus;
|
||||
|
||||
// Prevents wss from being destroyed on focus switch
|
||||
extern bool suspend_workspace_cleanup;
|
||||
|
||||
bool move_focus(enum movement_direction direction);
|
||||
|
||||
#endif
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
#ifndef _SWAY_INPUT_H
|
||||
#define _SWAY_INPUT_H
|
||||
#include <libinput.h>
|
||||
#include "sway/server.h"
|
||||
#include "config.h"
|
||||
#include "list.h"
|
||||
|
||||
struct sway_input {
|
||||
list_t *input_devices;
|
||||
};
|
||||
|
||||
struct input_config *new_input_config(const char* identifier);
|
||||
|
||||
char* libinput_dev_unique_id(struct libinput_device *dev);
|
||||
|
||||
struct sway_input *sway_input_create(struct sway_server *server);
|
||||
|
||||
/**
|
||||
* Pointer used when reading input blocked.
|
||||
* Shared so that it can be cleared from commands.c when closing the block
|
||||
*/
|
||||
extern struct input_config *current_input_config;
|
||||
|
||||
#endif
|
||||
|
|
@ -1,102 +0,0 @@
|
|||
#ifndef _SWAY_KEY_STATE_H
|
||||
#define _SWAY_KEY_STATE_H
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#include "container.h"
|
||||
|
||||
/* Keyboard state */
|
||||
|
||||
// returns true if key has been pressed, otherwise false
|
||||
bool check_key(uint32_t key_sym, uint32_t key_code);
|
||||
|
||||
// returns true if key_sym matches latest released key.
|
||||
bool check_released_key(uint32_t key_sym);
|
||||
|
||||
// sets a key as pressed
|
||||
void press_key(uint32_t key_sym, uint32_t key_code);
|
||||
|
||||
// unsets a key as pressed
|
||||
void release_key(uint32_t key_sym, uint32_t key_code);
|
||||
|
||||
|
||||
/* Pointer state */
|
||||
|
||||
enum pointer_values {
|
||||
M_LEFT_CLICK = 272,
|
||||
M_RIGHT_CLICK = 273,
|
||||
M_SCROLL_CLICK = 274,
|
||||
M_SCROLL_UP = 275,
|
||||
M_SCROLL_DOWN = 276,
|
||||
};
|
||||
|
||||
enum pointer_mode {
|
||||
// Target
|
||||
M_FLOATING = 1,
|
||||
M_TILING = 2,
|
||||
// Action
|
||||
M_DRAGGING = 4,
|
||||
M_RESIZING = 8,
|
||||
};
|
||||
|
||||
struct pointer_button_state {
|
||||
bool held;
|
||||
// state at the point it was pressed
|
||||
int x, y;
|
||||
swayc_t *view;
|
||||
};
|
||||
|
||||
extern struct pointer_state {
|
||||
// mouse clicks
|
||||
struct pointer_button_state left;
|
||||
struct pointer_button_state right;
|
||||
struct pointer_button_state scroll;
|
||||
|
||||
// change in pointer position
|
||||
struct {
|
||||
int x, y;
|
||||
} delta;
|
||||
|
||||
// view pointer is currently over
|
||||
swayc_t *view;
|
||||
|
||||
// Pointer mode
|
||||
int mode;
|
||||
} pointer_state;
|
||||
|
||||
enum modifier_state {
|
||||
MOD_STATE_UNCHANGED = 0,
|
||||
MOD_STATE_PRESSED = 1,
|
||||
MOD_STATE_RELEASED = 2
|
||||
};
|
||||
|
||||
void pointer_position_set(double new_x, double new_y, bool force_focus);
|
||||
void center_pointer_on(swayc_t *view);
|
||||
|
||||
// on button release unset mode depending on the button.
|
||||
// on button press set mode conditionally depending on the button
|
||||
void pointer_mode_set(uint32_t button, bool condition);
|
||||
|
||||
// Update mode in mouse motion
|
||||
void pointer_mode_update(void);
|
||||
|
||||
// Reset mode on any keypress;
|
||||
void pointer_mode_reset(void);
|
||||
|
||||
void input_init(void);
|
||||
|
||||
/**
|
||||
* Check if state of mod changed from current state to new_state.
|
||||
*
|
||||
* Returns MOD_STATE_UNCHANGED if the state didn't change, MOD_STATE_PRESSED if
|
||||
* the state changed to pressed and MOD_STATE_RELEASED if the state changed to
|
||||
* released.
|
||||
*/
|
||||
uint32_t modifier_state_changed(uint32_t new_state, uint32_t mod);
|
||||
|
||||
/**
|
||||
* Update the current modifiers state to new_state.
|
||||
*/
|
||||
void modifiers_state_update(uint32_t new_state);
|
||||
|
||||
#endif
|
||||
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
#ifndef _SWAY_IPC_JSON_H
|
||||
#define _SWAY_IPC_JSON_H
|
||||
|
||||
#include <json-c/json.h>
|
||||
#include "config.h"
|
||||
#include "container.h"
|
||||
|
||||
json_object *ipc_json_get_version();
|
||||
json_object *ipc_json_describe_bar_config(struct bar_config *bar);
|
||||
json_object *ipc_json_describe_container(swayc_t *c);
|
||||
json_object *ipc_json_describe_container_recursive(swayc_t *c);
|
||||
json_object *ipc_json_describe_window(swayc_t *c);
|
||||
json_object *ipc_json_describe_input(struct libinput_device *device);
|
||||
|
||||
#endif
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
#ifndef _SWAY_IPC_SERVER_H
|
||||
#define _SWAY_IPC_SERVER_H
|
||||
#include "container.h"
|
||||
#include "config.h"
|
||||
#include "ipc.h"
|
||||
|
||||
void ipc_init(void);
|
||||
void ipc_terminate(void);
|
||||
struct sockaddr_un *ipc_user_sockaddr(void);
|
||||
|
||||
void ipc_event_workspace(swayc_t *old, swayc_t *new, const char *change);
|
||||
void ipc_event_barconfig_update(struct bar_config *bar);
|
||||
/**
|
||||
* Send IPC mode event to all listening clients
|
||||
*/
|
||||
void ipc_event_mode(const char *mode);
|
||||
/**
|
||||
* Send IPC window change event
|
||||
*/
|
||||
void ipc_event_window(swayc_t *window, const char *change);
|
||||
/**
|
||||
* Sends an IPC modifier event to all listening clients. The modifier event
|
||||
* includes a key 'change' with the value of state and a key 'modifier' with
|
||||
* the name of that modifier.
|
||||
*/
|
||||
void ipc_event_modifier(uint32_t modifier, const char *state);
|
||||
/**
|
||||
* Send IPC keyboard binding event.
|
||||
*/
|
||||
void ipc_event_binding_keyboard(struct sway_binding *sb);
|
||||
const char *swayc_type_string(enum swayc_types type);
|
||||
|
||||
#endif
|
||||
|
|
@ -1,85 +0,0 @@
|
|||
#ifndef _SWAY_LAYOUT_H
|
||||
#define _SWAY_LAYOUT_H
|
||||
|
||||
#include <wlc/wlc.h>
|
||||
#include "log.h"
|
||||
#include "list.h"
|
||||
#include "container.h"
|
||||
#include "focus.h"
|
||||
|
||||
extern list_t *scratchpad;
|
||||
|
||||
extern int min_sane_w;
|
||||
extern int min_sane_h;
|
||||
|
||||
// Set initial values for root_container
|
||||
void init_layout(void);
|
||||
|
||||
// Returns the index of child for its parent
|
||||
int index_child(const swayc_t *child);
|
||||
|
||||
// Adds child to parent, if parent has no focus, it is set to child
|
||||
// parent must be of type C_WORKSPACE or C_CONTAINER
|
||||
void add_child(swayc_t *parent, swayc_t *child);
|
||||
|
||||
// Adds child to parent at index, if parent has no focus, it is set to child
|
||||
// parent must be of type C_WORKSPACE or C_CONTAINER
|
||||
void insert_child(swayc_t *parent, swayc_t *child, int index);
|
||||
|
||||
// Adds child as floating window to ws, if there is no focus it is set to child.
|
||||
// ws must be of type C_WORKSPACE
|
||||
void add_floating(swayc_t *ws, swayc_t *child);
|
||||
|
||||
// insert child after sibling in parents children.
|
||||
swayc_t *add_sibling(swayc_t *sibling, swayc_t *child);
|
||||
|
||||
// Replace child with new_child in parents children
|
||||
// new_child will inherit childs geometry, childs geometry will be reset
|
||||
// if parents focus is on child, it will be changed to new_child
|
||||
swayc_t *replace_child(swayc_t *child, swayc_t *new_child);
|
||||
|
||||
// Remove child from its parent, if focus is on child, focus will be changed to
|
||||
// a sibling, or to a floating window, or NULL
|
||||
swayc_t *remove_child(swayc_t *child);
|
||||
|
||||
// 2 containers are swapped, they inherit eachothers focus
|
||||
void swap_container(swayc_t *a, swayc_t *b);
|
||||
|
||||
// 2 Containers geometry are swapped, used with `swap_container`
|
||||
void swap_geometry(swayc_t *a, swayc_t *b);
|
||||
|
||||
void move_container(swayc_t* container, enum movement_direction direction, int move_amt);
|
||||
void move_container_to(swayc_t* container, swayc_t* destination);
|
||||
void move_workspace_to(swayc_t* workspace, swayc_t* destination);
|
||||
|
||||
// Layout
|
||||
/**
|
||||
* Update child container geometries when switching between layouts.
|
||||
*/
|
||||
void update_layout_geometry(swayc_t *parent, enum swayc_layouts prev_layout);
|
||||
void update_geometry(swayc_t *view);
|
||||
void arrange_windows(swayc_t *container, double width, double height);
|
||||
void arrange_backgrounds(void);
|
||||
|
||||
swayc_t *get_focused_container(swayc_t *parent);
|
||||
swayc_t *get_swayc_in_direction(swayc_t *container, enum movement_direction dir);
|
||||
swayc_t *get_swayc_in_direction_under(swayc_t *container, enum movement_direction dir, swayc_t *limit);
|
||||
|
||||
void recursive_resize(swayc_t *container, double amount, enum wlc_resize_edge edge);
|
||||
|
||||
void layout_log(const swayc_t *c, int depth);
|
||||
void swayc_log(log_importance_t verbosity, swayc_t *cont, const char* format, ...) __attribute__((format(printf,3,4)));
|
||||
|
||||
/**
|
||||
* Get default layout.
|
||||
*/
|
||||
enum swayc_layouts default_layout(swayc_t *output);
|
||||
|
||||
bool is_auto_layout(enum swayc_layouts layout);
|
||||
int auto_group_start_index(const swayc_t *container, int index);
|
||||
int auto_group_end_index(const swayc_t *container, int index);
|
||||
size_t auto_group_count(const swayc_t *container);
|
||||
size_t auto_group_index(const swayc_t *container, int index);
|
||||
bool auto_group_bounds(const swayc_t *container, size_t group_index, int *start, int *end);
|
||||
|
||||
#endif
|
||||
|
|
@ -1,36 +0,0 @@
|
|||
#ifndef _SWAY_OUTPUT_H
|
||||
#define _SWAY_OUTPUT_H
|
||||
#include <time.h>
|
||||
#include <wayland-server.h>
|
||||
#include <wlr/types/wlr_output.h>
|
||||
#include "container.h"
|
||||
#include "focus.h"
|
||||
|
||||
struct sway_server;
|
||||
|
||||
struct sway_output {
|
||||
struct wlr_output *wlr_output;
|
||||
struct wl_listener frame;
|
||||
struct sway_server *server;
|
||||
struct timespec last_frame;
|
||||
};
|
||||
|
||||
// Position is absolute coordinates on the edge where the adjacent output
|
||||
// should be searched for.
|
||||
swayc_t *output_by_name(const char* name, const struct wlc_point *abs_pos);
|
||||
swayc_t *swayc_opposite_output(enum movement_direction dir, const struct wlc_point *abs_pos);
|
||||
swayc_t *swayc_adjacent_output(swayc_t *output, enum movement_direction dir, const struct wlc_point *abs_pos, bool pick_closest);
|
||||
|
||||
// Place absolute coordinates for given container into given wlc_point.
|
||||
void get_absolute_position(swayc_t *container, struct wlc_point *point);
|
||||
|
||||
// Place absolute coordinates for the center point of given container into
|
||||
// given wlc_point.
|
||||
void get_absolute_center_position(swayc_t *container, struct wlc_point *point);
|
||||
|
||||
// stable sort workspaces on this output
|
||||
void sort_workspaces(swayc_t *output);
|
||||
|
||||
void output_get_scaled_size(wlc_handle handle, struct wlc_size *size);
|
||||
|
||||
#endif
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
#ifndef _SWAY_WORKSPACE_H
|
||||
#define _SWAY_WORKSPACE_H
|
||||
|
||||
#include <wlc/wlc.h>
|
||||
#include <unistd.h>
|
||||
#include "list.h"
|
||||
#include "layout.h"
|
||||
|
||||
extern char *prev_workspace_name;
|
||||
|
||||
char *workspace_next_name(const char *output_name);
|
||||
swayc_t *workspace_create(const char*);
|
||||
swayc_t *workspace_by_name(const char*);
|
||||
swayc_t *workspace_by_number(const char*);
|
||||
bool workspace_switch(swayc_t*);
|
||||
swayc_t *workspace_output_next();
|
||||
swayc_t *workspace_next();
|
||||
swayc_t *workspace_output_prev();
|
||||
swayc_t *workspace_prev();
|
||||
swayc_t *workspace_for_pid(pid_t pid);
|
||||
|
||||
#endif
|
||||
|
|
@ -14,6 +14,7 @@ struct sway_output {
|
|||
struct timespec last_frame;
|
||||
|
||||
struct wl_listener frame;
|
||||
struct wl_listener output_destroy;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -47,8 +47,7 @@ struct sway_server {
|
|||
|
||||
struct sway_input_manager *input;
|
||||
|
||||
struct wl_listener output_add;
|
||||
struct wl_listener output_remove;
|
||||
struct wl_listener new_output;
|
||||
struct wl_listener output_frame;
|
||||
|
||||
struct wlr_xdg_shell_v6 *xdg_shell_v6;
|
||||
|
|
@ -56,6 +55,7 @@ struct sway_server {
|
|||
|
||||
struct wlr_xwayland *xwayland;
|
||||
struct wl_listener xwayland_surface;
|
||||
struct wl_listener xwayland_ready;
|
||||
|
||||
struct wlr_wl_shell *wl_shell;
|
||||
struct wl_listener wl_shell_surface;
|
||||
|
|
@ -67,8 +67,7 @@ bool server_init(struct sway_server *server);
|
|||
void server_fini(struct sway_server *server);
|
||||
void server_run(struct sway_server *server);
|
||||
|
||||
void output_add_notify(struct wl_listener *listener, void *data);
|
||||
void output_remove_notify(struct wl_listener *listener, void *data);
|
||||
void handle_new_output(struct wl_listener *listener, void *data);
|
||||
|
||||
void handle_xdg_shell_v6_surface(struct wl_listener *listener, void *data);
|
||||
void handle_xwayland_surface(struct wl_listener *listener, void *data);
|
||||
|
|
|
|||
|
|
@ -28,6 +28,8 @@ struct sway_xwayland_surface {
|
|||
struct wl_listener request_resize;
|
||||
struct wl_listener request_maximize;
|
||||
struct wl_listener request_configure;
|
||||
struct wl_listener unmap_notify;
|
||||
struct wl_listener map_notify;
|
||||
struct wl_listener destroy;
|
||||
|
||||
int pending_width, pending_height;
|
||||
|
|
@ -90,7 +92,27 @@ struct sway_view {
|
|||
void (*set_position)(struct sway_view *view,
|
||||
double ox, double oy);
|
||||
void (*set_activated)(struct sway_view *view, bool activated);
|
||||
void (*close)(struct sway_view *view);
|
||||
} iface;
|
||||
|
||||
// only used for unmanaged views (shell specific)
|
||||
struct wl_list unmanaged_view_link; // sway_root::unmanaged views
|
||||
};
|
||||
|
||||
const char *view_get_title(struct sway_view *view);
|
||||
|
||||
const char *view_get_app_id(struct sway_view *view);
|
||||
|
||||
const char *view_get_class(struct sway_view *view);
|
||||
|
||||
const char *view_get_instance(struct sway_view *view);
|
||||
|
||||
void view_set_size(struct sway_view *view, int width, int height);
|
||||
|
||||
void view_set_position(struct sway_view *view, double ox, double oy);
|
||||
|
||||
void view_set_activated(struct sway_view *view, bool activated);
|
||||
|
||||
void view_close(struct sway_view *view);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1,6 +1,20 @@
|
|||
#ifndef _SWAY_WORKSPACE_H
|
||||
#define _SWAY_WORKSPACE_H
|
||||
|
||||
#include "sway/container.h"
|
||||
|
||||
extern char *prev_workspace_name;
|
||||
|
||||
char *workspace_next_name(const char *output_name);
|
||||
swayc_t *workspace_create(const char *name);
|
||||
bool workspace_switch(swayc_t *workspace);
|
||||
|
||||
struct sway_container *workspace_by_number(const char* name);
|
||||
swayc_t *workspace_by_name(const char*);
|
||||
|
||||
struct sway_container *workspace_output_next(swayc_t *current);
|
||||
struct sway_container *workspace_next(swayc_t *current);
|
||||
struct sway_container *workspace_output_prev(swayc_t *current);
|
||||
struct sway_container *workspace_prev(swayc_t *current);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue