mirror of
https://github.com/swaywm/sway.git
synced 2025-11-15 06:59:50 -05:00
Merge branch 'master' into pid-workspaces
This commit is contained in:
commit
f4b882475e
156 changed files with 5391 additions and 2147 deletions
|
|
@ -13,11 +13,12 @@ enum ipc_command_type {
|
|||
IPC_GET_MARKS = 5,
|
||||
IPC_GET_BAR_CONFIG = 6,
|
||||
IPC_GET_VERSION = 7,
|
||||
IPC_GET_BINDING_MODES = 8,
|
||||
IPC_GET_CONFIG = 9,
|
||||
|
||||
// sway-specific command types
|
||||
IPC_GET_INPUTS = 100,
|
||||
IPC_GET_CLIPBOARD = 101,
|
||||
IPC_GET_SEATS = 102,
|
||||
IPC_GET_SEATS = 101,
|
||||
|
||||
// Events sent from sway to clients. Events have the highest bits set.
|
||||
IPC_EVENT_WORKSPACE = ((1<<31) | 0),
|
||||
|
|
|
|||
|
|
@ -24,4 +24,6 @@ int list_seq_find(list_t *list, int compare(const void *item, const void *cmp_to
|
|||
void list_stable_sort(list_t *list, int compare(const void *a, const void *b));
|
||||
// swap two elements in a list
|
||||
void list_swap(list_t *list, int src, int dest);
|
||||
// move item to end of list
|
||||
void list_move_to_end(list_t *list, void *item);
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -3,13 +3,19 @@
|
|||
#include <stdbool.h>
|
||||
#include <wlr/util/log.h>
|
||||
|
||||
#ifdef __GNUC__
|
||||
#define ATTRIB_PRINTF(start, end) __attribute__((format(printf, start, end)))
|
||||
#else
|
||||
#define ATTRIB_PRINTF(start, end)
|
||||
#endif
|
||||
|
||||
void _sway_abort(const char *filename, ...) ATTRIB_PRINTF(1, 2);
|
||||
#define sway_abort(FMT, ...) \
|
||||
_sway_abort("[%s:%d] " FMT, wlr_strip_path(__FILE__), __LINE__, ##__VA_ARGS__)
|
||||
_sway_abort("[%s:%d] " FMT, _wlr_strip_path(__FILE__), __LINE__, ##__VA_ARGS__)
|
||||
|
||||
bool _sway_assert(bool condition, const char* format, ...) ATTRIB_PRINTF(2, 3);
|
||||
#define sway_assert(COND, FMT, ...) \
|
||||
_sway_assert(COND, "[%s:%d] %s:" FMT, wlr_strip_path(__FILE__), __LINE__, __PRETTY_FUNCTION__, ##__VA_ARGS__)
|
||||
_sway_assert(COND, "[%s:%d] %s:" FMT, _wlr_strip_path(__FILE__), __LINE__, __PRETTY_FUNCTION__, ##__VA_ARGS__)
|
||||
|
||||
void error_handler(int sig);
|
||||
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@ void free_cmd_results(struct cmd_results *results);
|
|||
*
|
||||
* Free the JSON string later on.
|
||||
*/
|
||||
const char *cmd_results_to_json(struct cmd_results *results);
|
||||
char *cmd_results_to_json(struct cmd_results *results);
|
||||
|
||||
struct cmd_results *add_color(const char *name,
|
||||
char *buffer, const char *color);
|
||||
|
|
@ -95,7 +95,6 @@ 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;
|
||||
|
|
@ -107,13 +106,14 @@ 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_modifier;
|
||||
sway_cmd cmd_floating_scroll;
|
||||
sway_cmd cmd_focus;
|
||||
sway_cmd cmd_focus_follows_mouse;
|
||||
sway_cmd cmd_focus_wrapping;
|
||||
sway_cmd cmd_font;
|
||||
sway_cmd cmd_for_window;
|
||||
sway_cmd cmd_force_display_urgency_hint;
|
||||
sway_cmd cmd_force_focus_wrapping;
|
||||
sway_cmd cmd_fullscreen;
|
||||
sway_cmd cmd_gaps;
|
||||
|
|
@ -153,6 +153,7 @@ sway_cmd cmd_swaybg_command;
|
|||
sway_cmd cmd_swap;
|
||||
sway_cmd cmd_title_format;
|
||||
sway_cmd cmd_unmark;
|
||||
sway_cmd cmd_urgent;
|
||||
sway_cmd cmd_workspace;
|
||||
sway_cmd cmd_ws_auto_back_and_forth;
|
||||
sway_cmd cmd_workspace_layout;
|
||||
|
|
@ -208,8 +209,10 @@ sway_cmd input_cmd_natural_scroll;
|
|||
sway_cmd input_cmd_pointer_accel;
|
||||
sway_cmd input_cmd_repeat_delay;
|
||||
sway_cmd input_cmd_repeat_rate;
|
||||
sway_cmd input_cmd_scroll_button;
|
||||
sway_cmd input_cmd_scroll_method;
|
||||
sway_cmd input_cmd_tap;
|
||||
sway_cmd input_cmd_tap_button_map;
|
||||
sway_cmd input_cmd_xkb_layout;
|
||||
sway_cmd input_cmd_xkb_model;
|
||||
sway_cmd input_cmd_xkb_options;
|
||||
|
|
|
|||
|
|
@ -49,6 +49,7 @@ struct sway_mode {
|
|||
char *name;
|
||||
list_t *keysym_bindings;
|
||||
list_t *keycode_bindings;
|
||||
bool pango;
|
||||
};
|
||||
|
||||
struct input_config_mapped_from_region {
|
||||
|
|
@ -73,9 +74,11 @@ struct input_config {
|
|||
float pointer_accel;
|
||||
int repeat_delay;
|
||||
int repeat_rate;
|
||||
int scroll_button;
|
||||
int scroll_method;
|
||||
int send_events;
|
||||
int tap;
|
||||
int tap_button_map;
|
||||
|
||||
char *xkb_layout;
|
||||
char *xkb_model;
|
||||
|
|
@ -263,11 +266,10 @@ enum ipc_feature {
|
|||
IPC_FEATURE_EVENT_WINDOW = 2048,
|
||||
IPC_FEATURE_EVENT_BINDING = 4096,
|
||||
IPC_FEATURE_EVENT_INPUT = 8192,
|
||||
IPC_FEATURE_GET_CLIPBOARD = 16384,
|
||||
IPC_FEATURE_GET_SEATS = 32768,
|
||||
IPC_FEATURE_GET_SEATS = 16384,
|
||||
|
||||
IPC_FEATURE_ALL_COMMANDS =
|
||||
1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 | 16384 | 32768,
|
||||
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,
|
||||
|
|
@ -314,6 +316,7 @@ struct sway_config {
|
|||
char *font;
|
||||
size_t font_height;
|
||||
bool pango_markup;
|
||||
size_t urgent_timeout;
|
||||
|
||||
// Flags
|
||||
bool focus_follows_mouse;
|
||||
|
|
@ -332,6 +335,7 @@ struct sway_config {
|
|||
int gaps_outer;
|
||||
|
||||
list_t *config_chain;
|
||||
const char *current_config_path;
|
||||
const char *current_config;
|
||||
|
||||
enum sway_container_border border;
|
||||
|
|
@ -447,8 +451,14 @@ void merge_output_config(struct output_config *dst, struct output_config *src);
|
|||
void apply_output_config(struct output_config *oc,
|
||||
struct sway_container *output);
|
||||
|
||||
struct output_config *store_output_config(struct output_config *oc);
|
||||
|
||||
void apply_output_config_to_outputs(struct output_config *oc);
|
||||
|
||||
void free_output_config(struct output_config *oc);
|
||||
|
||||
void create_default_output_configs(void);
|
||||
|
||||
int workspace_output_cmp_workspace(const void *a, const void *b);
|
||||
|
||||
int sway_binding_cmp(const void *a, const void *b);
|
||||
|
|
@ -484,7 +494,4 @@ void config_update_font_height(bool recalculate);
|
|||
/* Global config singleton. */
|
||||
extern struct sway_config *config;
|
||||
|
||||
/* Config file currently being read */
|
||||
extern const char *current_config_path;
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -6,9 +6,10 @@
|
|||
#include "tree/view.h"
|
||||
|
||||
enum criteria_type {
|
||||
CT_COMMAND = 1 << 0,
|
||||
CT_ASSIGN_OUTPUT = 1 << 1,
|
||||
CT_COMMAND = 1 << 0,
|
||||
CT_ASSIGN_OUTPUT = 1 << 1,
|
||||
CT_ASSIGN_WORKSPACE = 1 << 2,
|
||||
CT_NO_FOCUS = 1 << 3,
|
||||
};
|
||||
|
||||
struct criteria {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,15 @@
|
|||
#ifndef SWAY_DEBUG_H
|
||||
#define SWAY_DEBUG_H
|
||||
|
||||
// Tree
|
||||
extern bool enable_debug_tree;
|
||||
void update_debug_tree();
|
||||
|
||||
// Damage
|
||||
extern const char *damage_debug;
|
||||
|
||||
// Transactions
|
||||
extern int txn_timeout_ms;
|
||||
extern bool txn_debug;
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1,4 +1,8 @@
|
|||
#include <wlr/types/wlr_surface.h>
|
||||
|
||||
struct sway_container;
|
||||
|
||||
void desktop_damage_surface(struct wlr_surface *surface, double lx, double ly,
|
||||
bool whole);
|
||||
|
||||
void desktop_damage_whole_container(struct sway_container *con);
|
||||
|
|
|
|||
28
include/sway/desktop/idle_inhibit_v1.h
Normal file
28
include/sway/desktop/idle_inhibit_v1.h
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
#ifndef _SWAY_DESKTOP_IDLE_INHIBIT_V1_H
|
||||
#define _SWAY_DESKTOP_IDLE_INHIBIT_V1_H
|
||||
#include <wlr/types/wlr_idle_inhibit_v1.h>
|
||||
#include <wlr/types/wlr_idle.h>
|
||||
#include "sway/server.h"
|
||||
|
||||
struct sway_idle_inhibit_manager_v1 {
|
||||
struct wlr_idle_inhibit_manager_v1 *wlr_manager;
|
||||
struct wl_listener new_idle_inhibitor_v1;
|
||||
struct wl_list inhibitors;
|
||||
|
||||
struct wlr_idle *idle;
|
||||
};
|
||||
|
||||
struct sway_idle_inhibitor_v1 {
|
||||
struct sway_idle_inhibit_manager_v1 *manager;
|
||||
struct sway_view *view;
|
||||
|
||||
struct wl_list link;
|
||||
struct wl_listener destroy;
|
||||
};
|
||||
|
||||
void idle_inhibit_v1_check_active(
|
||||
struct sway_idle_inhibit_manager_v1 *manager);
|
||||
|
||||
struct sway_idle_inhibit_manager_v1 *sway_idle_inhibit_manager_v1_create(
|
||||
struct wl_display *wl_display, struct wlr_idle *idle);
|
||||
#endif
|
||||
|
|
@ -6,34 +6,25 @@
|
|||
/**
|
||||
* Transactions enable us to perform atomic layout updates.
|
||||
*
|
||||
* When we want to make adjustments to the layout, we create a transaction.
|
||||
* A transaction contains a list of affected containers and their new state.
|
||||
* A transaction contains a list of containers and their new state.
|
||||
* A state might contain a new size, or new border settings, or new parent/child
|
||||
* relationships.
|
||||
*
|
||||
* Calling transaction_commit() makes sway notify of all the affected clients
|
||||
* with their new sizes. We then wait for all the views to respond with their
|
||||
* new surface sizes. When all are ready, or when a timeout has passed, we apply
|
||||
* the updates all at the same time.
|
||||
* Committing a transaction makes sway notify of all the affected clients with
|
||||
* their new sizes. We then wait for all the views to respond with their new
|
||||
* surface sizes. When all are ready, or when a timeout has passed, we apply the
|
||||
* updates all at the same time.
|
||||
*
|
||||
* When we want to make adjustments to the layout, we change the pending state
|
||||
* in containers, mark them as dirty and call transaction_commit_dirty(). This
|
||||
* create and commits a transaction from the dirty containers.
|
||||
*/
|
||||
|
||||
struct sway_transaction;
|
||||
|
||||
/**
|
||||
* Create a new transaction.
|
||||
* Find all dirty containers, create and commit a transaction containing them,
|
||||
* and unmark them as dirty.
|
||||
*/
|
||||
struct sway_transaction *transaction_create(void);
|
||||
|
||||
/**
|
||||
* Add a container's pending state to the transaction.
|
||||
*/
|
||||
void transaction_add_container(struct sway_transaction *transaction,
|
||||
struct sway_container *container);
|
||||
|
||||
/**
|
||||
* Submit a transaction to the client views for configuration.
|
||||
*/
|
||||
void transaction_commit(struct sway_transaction *transaction);
|
||||
void transaction_commit_dirty(void);
|
||||
|
||||
/**
|
||||
* Notify the transaction system that a view is ready for the new layout.
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ struct sway_cursor {
|
|||
} previous;
|
||||
struct wlr_xcursor_manager *xcursor_manager;
|
||||
|
||||
const char *image;
|
||||
struct wl_client *image_client;
|
||||
|
||||
struct wl_listener motion;
|
||||
|
|
@ -37,4 +38,7 @@ void cursor_send_pointer_motion(struct sway_cursor *cursor, uint32_t time_msec,
|
|||
void dispatch_cursor_button(struct sway_cursor *cursor, uint32_t time_msec,
|
||||
uint32_t button, enum wlr_button_state state);
|
||||
|
||||
void cursor_set_image(struct sway_cursor *cursor, const char *image,
|
||||
struct wl_client *client);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
#include <wlr/types/wlr_layer_shell.h>
|
||||
#include <wlr/types/wlr_seat.h>
|
||||
#include <wlr/util/edges.h>
|
||||
#include "sway/input/input-manager.h"
|
||||
|
||||
struct sway_seat_device {
|
||||
|
|
@ -52,6 +53,24 @@ struct sway_seat {
|
|||
int32_t touch_id;
|
||||
double touch_x, touch_y;
|
||||
|
||||
// Operations (drag and resize)
|
||||
enum {
|
||||
OP_NONE,
|
||||
OP_MOVE,
|
||||
OP_RESIZE,
|
||||
} operation;
|
||||
|
||||
struct sway_container *op_container;
|
||||
enum wlr_edges op_resize_edge;
|
||||
uint32_t op_button;
|
||||
bool op_resize_preserve_ratio;
|
||||
double op_ref_lx, op_ref_ly; // cursor's x/y at start of op
|
||||
double op_ref_width, op_ref_height; // container's size at start of op
|
||||
double op_ref_con_lx, op_ref_con_ly; // container's x/y at start of op
|
||||
|
||||
uint32_t last_button;
|
||||
uint32_t last_button_serial;
|
||||
|
||||
struct wl_listener focus_destroy;
|
||||
struct wl_listener new_container;
|
||||
struct wl_listener new_drag_icon;
|
||||
|
|
@ -83,7 +102,7 @@ void seat_set_focus_warp(struct sway_seat *seat,
|
|||
struct sway_container *container, bool warp);
|
||||
|
||||
void seat_set_focus_surface(struct sway_seat *seat,
|
||||
struct wlr_surface *surface);
|
||||
struct wlr_surface *surface, bool unfocus);
|
||||
|
||||
void seat_set_focus_layer(struct sway_seat *seat,
|
||||
struct wlr_layer_surface *layer);
|
||||
|
|
@ -118,17 +137,6 @@ struct sway_container *seat_get_focus_inactive_view(struct sway_seat *seat,
|
|||
struct sway_container *seat_get_active_child(struct sway_seat *seat,
|
||||
struct sway_container *container);
|
||||
|
||||
/**
|
||||
* Return the immediate child of container which was most recently focused, with
|
||||
* fallback to selecting the child in the parent's `current` (rendered) children
|
||||
* list.
|
||||
*
|
||||
* This is useful for when a tabbed container and its children are destroyed but
|
||||
* still being rendered, and we have to render an appropriate child.
|
||||
*/
|
||||
struct sway_container *seat_get_active_current_child(struct sway_seat *seat,
|
||||
struct sway_container *container);
|
||||
|
||||
/**
|
||||
* Iterate over the focus-inactive children of the container calling the
|
||||
* function on each.
|
||||
|
|
@ -145,4 +153,15 @@ bool seat_is_input_allowed(struct sway_seat *seat, struct wlr_surface *surface);
|
|||
|
||||
void drag_icon_update_position(struct sway_drag_icon *icon);
|
||||
|
||||
void seat_begin_move(struct sway_seat *seat, struct sway_container *con,
|
||||
uint32_t button);
|
||||
|
||||
void seat_begin_resize(struct sway_seat *seat, struct sway_container *con,
|
||||
uint32_t button, enum wlr_edges edge);
|
||||
|
||||
void seat_end_mouse_operation(struct sway_seat *seat);
|
||||
|
||||
void seat_pointer_notify_button(struct sway_seat *seat, uint32_t time_msec,
|
||||
uint32_t button, enum wlr_button_state state);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -9,14 +9,12 @@ struct sway_server;
|
|||
|
||||
void ipc_init(struct sway_server *server);
|
||||
|
||||
void ipc_terminate(void);
|
||||
|
||||
struct sockaddr_un *ipc_user_sockaddr(void);
|
||||
|
||||
void ipc_event_workspace(struct sway_container *old,
|
||||
struct sway_container *new, const char *change);
|
||||
void ipc_event_window(struct sway_container *window, const char *change);
|
||||
void ipc_event_barconfig_update(struct bar_config *bar);
|
||||
void ipc_event_mode(const char *mode);
|
||||
void ipc_event_mode(const char *mode, bool pango);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -38,6 +38,16 @@ struct sway_output {
|
|||
} events;
|
||||
};
|
||||
|
||||
/**
|
||||
* Contains a surface's root geometry information. For instance, when rendering
|
||||
* a popup, this will contain the parent view's position and size.
|
||||
*/
|
||||
struct root_geometry {
|
||||
double x, y;
|
||||
int width, height;
|
||||
float rotation;
|
||||
};
|
||||
|
||||
void output_damage_whole(struct sway_output *output);
|
||||
|
||||
void output_damage_surface(struct sway_output *output, double ox, double oy,
|
||||
|
|
@ -54,4 +64,37 @@ void output_damage_whole_container(struct sway_output *output,
|
|||
struct sway_container *output_by_name(const char *name);
|
||||
|
||||
void output_enable(struct sway_output *output);
|
||||
|
||||
bool output_has_opaque_lockscreen(struct sway_output *output,
|
||||
struct sway_seat *seat);
|
||||
|
||||
struct sway_container *output_get_active_workspace(struct sway_output *output);
|
||||
|
||||
void output_render(struct sway_output *output, struct timespec *when,
|
||||
pixman_region32_t *damage);
|
||||
|
||||
bool output_get_surface_box(struct root_geometry *geo,
|
||||
struct sway_output *output, struct wlr_surface *surface, int sx, int sy,
|
||||
struct wlr_box *surface_box);
|
||||
|
||||
void output_surface_for_each_surface(struct wlr_surface *surface,
|
||||
double ox, double oy, struct root_geometry *geo,
|
||||
wlr_surface_iterator_func_t iterator, void *user_data);
|
||||
|
||||
void output_view_for_each_surface(struct sway_view *view,
|
||||
struct sway_output *output, struct root_geometry *geo,
|
||||
wlr_surface_iterator_func_t iterator, void *user_data);
|
||||
|
||||
void output_layer_for_each_surface(struct wl_list *layer_surfaces,
|
||||
struct root_geometry *geo, wlr_surface_iterator_func_t iterator,
|
||||
void *user_data);
|
||||
|
||||
void output_unmanaged_for_each_surface(struct wl_list *unmanaged,
|
||||
struct sway_output *output, struct root_geometry *geo,
|
||||
wlr_surface_iterator_func_t iterator, void *user_data);
|
||||
|
||||
void output_drag_icons_for_each_surface(struct wl_list *drag_icons,
|
||||
struct sway_output *output, struct root_geometry *geo,
|
||||
wlr_surface_iterator_func_t iterator, void *user_data);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
26
include/sway/scratchpad.h
Normal file
26
include/sway/scratchpad.h
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
#ifndef _SWAY_SCRATCHPAD_H
|
||||
#define _SWAY_SCRATCHPAD_H
|
||||
|
||||
#include "tree/container.h"
|
||||
|
||||
/**
|
||||
* Move a container to the scratchpad.
|
||||
*/
|
||||
void scratchpad_add_container(struct sway_container *con);
|
||||
|
||||
/**
|
||||
* Remove a container from the scratchpad.
|
||||
*/
|
||||
void scratchpad_remove_container(struct sway_container *con);
|
||||
|
||||
/**
|
||||
* Show or hide the next container on the scratchpad.
|
||||
*/
|
||||
void scratchpad_toggle_auto(void);
|
||||
|
||||
/**
|
||||
* Show or hide a specific container on the scratchpad.
|
||||
*/
|
||||
void scratchpad_toggle_container(struct sway_container *con);
|
||||
|
||||
#endif
|
||||
|
|
@ -23,12 +23,14 @@ struct sway_server {
|
|||
|
||||
struct wlr_compositor *compositor;
|
||||
struct wlr_data_device_manager *data_device_manager;
|
||||
struct wlr_idle *idle;
|
||||
|
||||
struct sway_input_manager *input;
|
||||
|
||||
struct wl_listener new_output;
|
||||
|
||||
struct wlr_idle *idle;
|
||||
struct sway_idle_inhibit_manager_v1 *idle_inhibit_manager_v1;
|
||||
|
||||
struct wlr_layer_shell *layer_shell;
|
||||
struct wl_listener layer_shell_surface;
|
||||
|
||||
|
|
@ -45,10 +47,7 @@ struct sway_server {
|
|||
bool debug_txn_timings;
|
||||
|
||||
list_t *transactions;
|
||||
|
||||
// When a view is being destroyed and is waiting for a transaction to
|
||||
// complete it will be stored here.
|
||||
list_t *destroying_containers;
|
||||
list_t *dirty_containers;
|
||||
};
|
||||
|
||||
struct sway_server server;
|
||||
|
|
@ -57,10 +56,12 @@ struct sway_server server;
|
|||
bool server_privileged_prepare(struct sway_server *server);
|
||||
bool server_init(struct sway_server *server);
|
||||
void server_fini(struct sway_server *server);
|
||||
bool server_start_backend(struct sway_server *server);
|
||||
void server_run(struct sway_server *server);
|
||||
|
||||
void handle_new_output(struct wl_listener *listener, void *data);
|
||||
|
||||
void handle_idle_inhibitor_v1(struct wl_listener *listener, void *data);
|
||||
void handle_layer_shell_surface(struct wl_listener *listener, void *data);
|
||||
void handle_xdg_shell_v6_surface(struct wl_listener *listener, void *data);
|
||||
void handle_xdg_shell_surface(struct wl_listener *listener, void *data);
|
||||
|
|
|
|||
|
|
@ -11,26 +11,8 @@ void remove_gaps(struct sway_container *c);
|
|||
void add_gaps(struct sway_container *c);
|
||||
|
||||
/**
|
||||
* Arrange layout for all the children of the given container, and add them to
|
||||
* the given transaction.
|
||||
*
|
||||
* Use this function if you need to arrange multiple sections of the tree in one
|
||||
* transaction.
|
||||
*
|
||||
* You must set the desired state of the container before calling
|
||||
* arrange_windows, then don't change any state-tracked properties in the
|
||||
* container until you've called transaction_commit.
|
||||
* Arrange layout for all the children of the given container.
|
||||
*/
|
||||
void arrange_windows(struct sway_container *container,
|
||||
struct sway_transaction *transaction);
|
||||
|
||||
/**
|
||||
* Arrange layout for the given container and commit the transaction.
|
||||
*
|
||||
* This function is a wrapper around arrange_windows, and handles creating and
|
||||
* committing the transaction for you. Use this function if you're only doing
|
||||
* one arrange operation.
|
||||
*/
|
||||
void arrange_and_commit(struct sway_container *container);
|
||||
void arrange_windows(struct sway_container *container);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -68,6 +68,9 @@ struct sway_container_state {
|
|||
struct sway_container *parent;
|
||||
list_t *children;
|
||||
|
||||
struct sway_container *focused_inactive_child;
|
||||
bool focused;
|
||||
|
||||
// View properties
|
||||
double view_x, view_y;
|
||||
double view_width, view_height;
|
||||
|
|
@ -132,6 +135,11 @@ struct sway_container {
|
|||
|
||||
struct sway_container *parent;
|
||||
|
||||
// Indicates that the container is a scratchpad container.
|
||||
// Both hidden and visible scratchpad containers have scratchpad=true.
|
||||
// Hidden scratchpad containers have a NULL parent.
|
||||
bool scratchpad;
|
||||
|
||||
float alpha;
|
||||
|
||||
struct wlr_texture *title_focused;
|
||||
|
|
@ -144,6 +152,10 @@ struct sway_container {
|
|||
|
||||
bool destroying;
|
||||
|
||||
// If true, indicates that the container has pending state that differs from
|
||||
// the current.
|
||||
bool dirty;
|
||||
|
||||
struct {
|
||||
struct wl_signal destroy;
|
||||
// Raised after the tree updates, but before arrange_windows
|
||||
|
|
@ -297,4 +309,30 @@ bool container_is_floating(struct sway_container *container);
|
|||
*/
|
||||
void container_get_box(struct sway_container *container, struct wlr_box *box);
|
||||
|
||||
/**
|
||||
* Move a floating container by the specified amount.
|
||||
*/
|
||||
void container_floating_translate(struct sway_container *con,
|
||||
double x_amount, double y_amount);
|
||||
|
||||
/**
|
||||
* Move a floating container to a new layout-local position.
|
||||
*/
|
||||
void container_floating_move_to(struct sway_container *con,
|
||||
double lx, double ly);
|
||||
|
||||
/**
|
||||
* Mark a container as dirty if it isn't already. Dirty containers will be
|
||||
* included in the next transaction then unmarked as dirty.
|
||||
*/
|
||||
void container_set_dirty(struct sway_container *container);
|
||||
|
||||
bool container_has_urgent_child(struct sway_container *container);
|
||||
|
||||
/**
|
||||
* If the container is involved in a drag or resize operation via a mouse, this
|
||||
* ends the operation.
|
||||
*/
|
||||
void container_end_mouse_operation(struct sway_container *container);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -14,10 +14,11 @@ enum movement_direction {
|
|||
};
|
||||
|
||||
enum resize_edge {
|
||||
RESIZE_EDGE_LEFT,
|
||||
RESIZE_EDGE_RIGHT,
|
||||
RESIZE_EDGE_TOP,
|
||||
RESIZE_EDGE_BOTTOM,
|
||||
RESIZE_EDGE_NONE = 0,
|
||||
RESIZE_EDGE_LEFT = 1,
|
||||
RESIZE_EDGE_RIGHT = 2,
|
||||
RESIZE_EDGE_TOP = 4,
|
||||
RESIZE_EDGE_BOTTOM = 8,
|
||||
};
|
||||
|
||||
struct sway_container;
|
||||
|
|
@ -34,6 +35,8 @@ struct sway_root {
|
|||
|
||||
struct wl_list outputs; // sway_output::link
|
||||
|
||||
list_t *scratchpad; // struct sway_container
|
||||
|
||||
struct {
|
||||
struct wl_signal new_container;
|
||||
} events;
|
||||
|
|
|
|||
|
|
@ -26,6 +26,8 @@ enum sway_view_prop {
|
|||
};
|
||||
|
||||
struct sway_view_impl {
|
||||
void (*get_constraints)(struct sway_view *view, double *min_width,
|
||||
double *max_width, double *min_height, double *max_height);
|
||||
const char *(*get_string_prop)(struct sway_view *view,
|
||||
enum sway_view_prop prop);
|
||||
uint32_t (*get_int_prop)(struct sway_view *view, enum sway_view_prop prop);
|
||||
|
|
@ -35,6 +37,7 @@ struct sway_view_impl {
|
|||
void (*set_tiled)(struct sway_view *view, bool tiled);
|
||||
void (*set_fullscreen)(struct sway_view *view, bool fullscreen);
|
||||
bool (*wants_floating)(struct sway_view *view);
|
||||
bool (*has_client_side_decorations)(struct sway_view *view);
|
||||
void (*for_each_surface)(struct sway_view *view,
|
||||
wlr_surface_iterator_func_t iterator, void *user_data);
|
||||
void (*close)(struct sway_view *view);
|
||||
|
|
@ -68,6 +71,11 @@ struct sway_view {
|
|||
bool border_bottom;
|
||||
bool border_left;
|
||||
bool border_right;
|
||||
bool using_csd;
|
||||
|
||||
struct timespec urgent;
|
||||
bool allow_request_urgent;
|
||||
struct wl_event_source *urgent_timer;
|
||||
|
||||
bool destroying;
|
||||
|
||||
|
|
@ -102,6 +110,8 @@ struct sway_xdg_shell_v6_view {
|
|||
struct wl_listener request_resize;
|
||||
struct wl_listener request_maximize;
|
||||
struct wl_listener request_fullscreen;
|
||||
struct wl_listener set_title;
|
||||
struct wl_listener set_app_id;
|
||||
struct wl_listener new_popup;
|
||||
struct wl_listener map;
|
||||
struct wl_listener unmap;
|
||||
|
|
@ -116,6 +126,8 @@ struct sway_xdg_shell_view {
|
|||
struct wl_listener request_resize;
|
||||
struct wl_listener request_maximize;
|
||||
struct wl_listener request_fullscreen;
|
||||
struct wl_listener set_title;
|
||||
struct wl_listener set_app_id;
|
||||
struct wl_listener new_popup;
|
||||
struct wl_listener map;
|
||||
struct wl_listener unmap;
|
||||
|
|
@ -134,6 +146,7 @@ struct sway_xwayland_view {
|
|||
struct wl_listener set_title;
|
||||
struct wl_listener set_class;
|
||||
struct wl_listener set_window_type;
|
||||
struct wl_listener set_hints;
|
||||
struct wl_listener map;
|
||||
struct wl_listener unmap;
|
||||
struct wl_listener destroy;
|
||||
|
|
@ -208,6 +221,9 @@ uint32_t view_get_window_type(struct sway_view *view);
|
|||
|
||||
const char *view_get_shell(struct sway_view *view);
|
||||
|
||||
void view_get_constraints(struct sway_view *view, double *min_width,
|
||||
double *max_width, double *min_height, double *max_height);
|
||||
|
||||
uint32_t view_configure(struct sway_view *view, double lx, double ly, int width,
|
||||
int height);
|
||||
|
||||
|
|
@ -304,4 +320,8 @@ void view_update_marks_textures(struct sway_view *view);
|
|||
*/
|
||||
bool view_is_visible(struct sway_view *view);
|
||||
|
||||
void view_set_urgent(struct sway_view *view, bool enable);
|
||||
|
||||
bool view_is_urgent(struct sway_view *view);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ struct sway_workspace {
|
|||
struct sway_view *fullscreen;
|
||||
struct sway_container *floating;
|
||||
list_t *output_priority;
|
||||
bool urgent;
|
||||
};
|
||||
|
||||
extern char *prev_workspace_name;
|
||||
|
|
@ -47,4 +48,6 @@ struct sway_container *workspace_for_pid(pid_t pid);
|
|||
|
||||
void workspace_record_pid(pid_t pid);
|
||||
|
||||
void workspace_detect_urgent(struct sway_container *workspace);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -16,11 +16,29 @@ struct swaybar_pointer {
|
|||
int x, y;
|
||||
};
|
||||
|
||||
enum x11_button {
|
||||
NONE,
|
||||
LEFT,
|
||||
MIDDLE,
|
||||
RIGHT,
|
||||
SCROLL_UP,
|
||||
SCROLL_DOWN,
|
||||
SCROLL_LEFT,
|
||||
SCROLL_RIGHT,
|
||||
BACK,
|
||||
FORWARD,
|
||||
};
|
||||
|
||||
enum hotspot_event_handling {
|
||||
HOTSPOT_IGNORE,
|
||||
HOTSPOT_PROCESS,
|
||||
};
|
||||
|
||||
struct swaybar_hotspot {
|
||||
struct wl_list link;
|
||||
int x, y, width, height;
|
||||
void (*callback)(struct swaybar_output *output,
|
||||
int x, int y, uint32_t button, void *data);
|
||||
enum hotspot_event_handling (*callback)(struct swaybar_output *output,
|
||||
int x, int y, enum x11_button button, void *data);
|
||||
void (*destroy)(void *data);
|
||||
void *data;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -71,8 +71,10 @@ void status_error(struct status_line *status, const char *text);
|
|||
bool status_handle_readable(struct status_line *status);
|
||||
void status_line_free(struct status_line *status);
|
||||
bool i3bar_handle_readable(struct status_line *status);
|
||||
void i3bar_block_send_click(struct status_line *status,
|
||||
struct i3bar_block *block, int x, int y, uint32_t button);
|
||||
enum hotspot_event_handling i3bar_block_send_click(struct status_line *status,
|
||||
struct i3bar_block *block, int x, int y, enum x11_button button);
|
||||
void i3bar_block_free(struct i3bar_block *block);
|
||||
enum x11_button wl_button_to_x11_button(uint32_t button);
|
||||
enum x11_button wl_axis_to_x11_button(uint32_t axis, wl_fixed_t value);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -19,10 +19,33 @@ enum auth_state {
|
|||
AUTH_STATE_INVALID,
|
||||
};
|
||||
|
||||
struct swaylock_colorset {
|
||||
uint32_t input;
|
||||
uint32_t cleared;
|
||||
uint32_t verifying;
|
||||
uint32_t wrong;
|
||||
};
|
||||
|
||||
struct swaylock_colors {
|
||||
uint32_t background;
|
||||
uint32_t bs_highlight;
|
||||
uint32_t key_highlight;
|
||||
uint32_t separator;
|
||||
struct swaylock_colorset inside;
|
||||
struct swaylock_colorset line;
|
||||
struct swaylock_colorset ring;
|
||||
struct swaylock_colorset text;
|
||||
};
|
||||
|
||||
struct swaylock_args {
|
||||
uint32_t color;
|
||||
struct swaylock_colors colors;
|
||||
enum background_mode mode;
|
||||
char *font;
|
||||
uint32_t radius;
|
||||
uint32_t thickness;
|
||||
bool ignore_empty;
|
||||
bool show_indicator;
|
||||
bool daemonize;
|
||||
};
|
||||
|
||||
struct swaylock_password {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue