parent
a686fb07ae
commit
8231f99c12
@ -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,42 +0,0 @@
|
||||
#ifndef _SWAY_CRITERIA_H
|
||||
#define _SWAY_CRITERIA_H
|
||||
|
||||
#include "container.h"
|
||||
#include "list.h"
|
||||
|
||||
/**
|
||||
* Maps criteria (as a list of criteria tokens) to a command list.
|
||||
*
|
||||
* A list of tokens together represent a single criteria string (e.g.
|
||||
* '[class="abc" title="xyz"]' becomes two criteria tokens).
|
||||
*
|
||||
* for_window: Views matching all criteria will have the bound command list
|
||||
* executed on them.
|
||||
*
|
||||
* Set via `for_window <criteria> <cmd list>`.
|
||||
*/
|
||||
struct criteria {
|
||||
list_t *tokens; // struct crit_token, contains compiled regex.
|
||||
char *crit_raw; // entire criteria string (for logging)
|
||||
|
||||
char *cmdlist;
|
||||
};
|
||||
|
||||
int criteria_cmp(const void *item, const void *data);
|
||||
void free_criteria(struct criteria *crit);
|
||||
|
||||
// Pouplate list with crit_tokens extracted from criteria string, returns error
|
||||
// string or NULL if successful.
|
||||
char *extract_crit_tokens(list_t *tokens, const char *criteria);
|
||||
|
||||
// Returns list of criteria that match given container. These criteria have
|
||||
// been set with `for_window` commands and have an associated cmdlist.
|
||||
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);
|
||||
|
||||
// Returns true if any criteria in the given list matches this container
|
||||
bool criteria_any(swayc_t *cont, list_t *criteria);
|
||||
|
||||
#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
|
Loading…
Reference in new issue