aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/ipc.h5
-rw-r--r--include/list.h2
-rw-r--r--include/log.h10
-rw-r--r--include/sway/commands.h4
-rw-r--r--include/sway/config.h11
-rw-r--r--include/sway/criteria.h5
-rw-r--r--include/sway/debug.h8
-rw-r--r--include/sway/desktop.h4
-rw-r--r--include/sway/desktop/transaction.h33
-rw-r--r--include/sway/input/seat.h11
-rw-r--r--include/sway/server.h5
-rw-r--r--include/sway/tree/arrange.h22
-rw-r--r--include/sway/tree/container.h21
-rw-r--r--include/sway/tree/view.h10
-rw-r--r--include/sway/tree/workspace.h4
-rw-r--r--include/swaybar/bar.h15
-rw-r--r--include/swaybar/status_line.h4
-rw-r--r--include/swaylock/swaylock.h24
18 files changed, 126 insertions, 72 deletions
diff --git a/include/ipc.h b/include/ipc.h
index 8172c782..0010718b 100644
--- a/include/ipc.h
+++ b/include/ipc.h
@@ -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),
diff --git a/include/list.h b/include/list.h
index 7eead4ac..5a0d7d80 100644
--- a/include/list.h
+++ b/include/list.h
@@ -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
diff --git a/include/log.h b/include/log.h
index a9748127..dd526143 100644
--- a/include/log.h
+++ b/include/log.h
@@ -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);
diff --git a/include/sway/commands.h b/include/sway/commands.h
index 6d17144a..1e93e2a3 100644
--- a/include/sway/commands.h
+++ b/include/sway/commands.h
@@ -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;
@@ -153,6 +152,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 +208,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;
diff --git a/include/sway/config.h b/include/sway/config.h
index ac668c24..f660a269 100644
--- a/include/sway/config.h
+++ b/include/sway/config.h
@@ -75,9 +75,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;
@@ -271,11 +273,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,
@@ -341,6 +342,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;
@@ -496,7 +498,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
diff --git a/include/sway/criteria.h b/include/sway/criteria.h
index bd3ca0ac..6a8337c5 100644
--- a/include/sway/criteria.h
+++ b/include/sway/criteria.h
@@ -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 {
diff --git a/include/sway/debug.h b/include/sway/debug.h
index 2430d319..38d4eccd 100644
--- a/include/sway/debug.h
+++ b/include/sway/debug.h
@@ -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
diff --git a/include/sway/desktop.h b/include/sway/desktop.h
index f1ad759a..348fb187 100644
--- a/include/sway/desktop.h
+++ b/include/sway/desktop.h
@@ -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);
diff --git a/include/sway/desktop/transaction.h b/include/sway/desktop/transaction.h
index 7ab80eb8..cee4afed 100644
--- a/include/sway/desktop/transaction.h
+++ b/include/sway/desktop/transaction.h
@@ -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.
- */
-
-struct sway_transaction;
-
-/**
- * Create a new transaction.
- */
-struct sway_transaction *transaction_create(void);
-
-/**
- * Add a container's pending state to the transaction.
+ * 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.
*/
-void transaction_add_container(struct sway_transaction *transaction,
- struct sway_container *container);
/**
- * Submit a transaction to the client views for configuration.
+ * Find all dirty containers, create and commit a transaction containing them,
+ * and unmark them as dirty.
*/
-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.
diff --git a/include/sway/input/seat.h b/include/sway/input/seat.h
index 0e440701..1f7792ba 100644
--- a/include/sway/input/seat.h
+++ b/include/sway/input/seat.h
@@ -119,17 +119,6 @@ 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.
*/
diff --git a/include/sway/server.h b/include/sway/server.h
index a3e32898..a017d1c4 100644
--- a/include/sway/server.h
+++ b/include/sway/server.h
@@ -47,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;
diff --git a/include/sway/tree/arrange.h b/include/sway/tree/arrange.h
index 58235642..d6abcc81 100644
--- a/include/sway/tree/arrange.h
+++ b/include/sway/tree/arrange.h
@@ -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
diff --git a/include/sway/tree/container.h b/include/sway/tree/container.h
index 728daa84..ca7a3288 100644
--- a/include/sway/tree/container.h
+++ b/include/sway/tree/container.h
@@ -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;
@@ -144,6 +147,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 +304,18 @@ bool container_is_floating(struct sway_container *container);
*/
void container_get_box(struct sway_container *container, struct wlr_box *box);
+/**
+ * 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);
+
#endif
diff --git a/include/sway/tree/view.h b/include/sway/tree/view.h
index 7dc8ac46..e270f851 100644
--- a/include/sway/tree/view.h
+++ b/include/sway/tree/view.h
@@ -35,6 +35,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 +69,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;
@@ -304,4 +310,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
diff --git a/include/sway/tree/workspace.h b/include/sway/tree/workspace.h
index c72a4ac0..bc95317a 100644
--- a/include/sway/tree/workspace.h
+++ b/include/sway/tree/workspace.h
@@ -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;
@@ -42,4 +43,7 @@ void workspace_output_add_priority(struct sway_container *workspace,
struct sway_container *workspace_output_get_highest_available(
struct sway_container *ws, struct sway_container *exclude);
+
+void workspace_detect_urgent(struct sway_container *workspace);
+
#endif
diff --git a/include/swaybar/bar.h b/include/swaybar/bar.h
index af478f33..f1ff25b2 100644
--- a/include/swaybar/bar.h
+++ b/include/swaybar/bar.h
@@ -16,11 +16,24 @@ struct swaybar_pointer {
int x, y;
};
+enum x11_button {
+ NONE,
+ LEFT,
+ MIDDLE,
+ RIGHT,
+ SCROLL_UP,
+ SCROLL_DOWN,
+ SCROLL_LEFT,
+ SCROLL_RIGHT,
+ BACK,
+ FORWARD,
+};
+
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);
+ int x, int y, enum x11_button button, void *data);
void (*destroy)(void *data);
void *data;
};
diff --git a/include/swaybar/status_line.h b/include/swaybar/status_line.h
index bf12a842..2eaf8140 100644
--- a/include/swaybar/status_line.h
+++ b/include/swaybar/status_line.h
@@ -72,7 +72,9 @@ 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);
+ 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
diff --git a/include/swaylock/swaylock.h b/include/swaylock/swaylock.h
index cf80a6ba..950cfaaf 100644
--- a/include/swaylock/swaylock.h
+++ b/include/swaylock/swaylock.h
@@ -19,9 +19,31 @@ 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;
};