aboutsummaryrefslogtreecommitdiffstats
path: root/sway/ipc-server.c
Commit message (Collapse)AuthorAge
* swaybar: show hidden bar on key eventLibravatar Ian Fan2018-10-14
| | | | | | Since wayland does not currently allow swaybar to create global keybinds, this is handled within sway and sent to the bar using a custom event, so as not to pollute existing events, called bar_state_update.
* Make sway/ipc-server.c POSIX 2001 compliantLibravatar sghctoma2018-09-26
| | | | | | | This commit replaces the non-standard SOCK_NONBLOCK and SOCK_CLOEXEC flags with two fcntl calls. This makes the file POSIX 2001 compliant, thus it is no longer necessary to conditionally define, or use internal (__BSD_VISIBLE) feature test macros.
* Allow running commands on containers without focusing themLibravatar Ryan Dwyer2018-09-23
| | | | | | | | | | | | | | This adds a `con` argument to `execute_command` which allows you to specify the container to execute the command on. In most cases it leaves it as `NULL` which makes it use the focused node. We only set it when executing `for_window` criteria such as when a view maps. This means we don't send unnecessary IPC focus events, and fixes a crash when the criteria command is `move scratchpad` (because we can't give focus to a hidden scratchpad container). Each of the shell map handlers now check to see if the view has a workspace. It won't have a workspace if criteria has moved it to the scratchpad.
* Implement type safe arguments and demote sway_containerLibravatar Ryan Dwyer2018-09-05
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit changes the meaning of sway_container so that it only refers to layout containers and view containers. Workspaces, outputs and the root are no longer known as containers. Instead, root, outputs, workspaces and containers are all a type of node, and containers come in two types: layout containers and view containers. In addition to the above, this implements type safe variables. This means we use specific types such as sway_output and sway_workspace instead of generic containers or nodes. However, it's worth noting that in a few places places (eg. seat focus and transactions) referring to them in a generic way is unavoidable which is why we still use nodes in some places. If you want a TL;DR, look at node.h, as well as the struct definitions for root, output, workspace and container. Note that sway_output now contains a workspaces list, and workspaces now contain a tiling and floating list, and containers now contain a pointer back to the workspace. There are now functions for seat_get_focused_workspace and seat_get_focused_container. The latter will return NULL if a workspace itself is focused. Most other seat functions like seat_get_focus and seat_set_focus now accept and return nodes. In the config->handler_context struct, current_container has been replaced with three pointers: node, container and workspace. node is the same as what current_container was, while workspace is the workspace that the node resides on and container is the actual container, which may be NULL if a workspace itself is focused. The global root_container variable has been replaced with one simply called root, which is a pointer to the sway_root instance. The way outputs are created, enabled, disabled and destroyed has changed. Previously we'd wrap the sway_output in a container when it is enabled, but as we don't have containers any more it needs a different approach. The output_create and output_destroy functions previously created/destroyed the container, but now they create/destroy the sway_output. There is a new function output_disable to disable an output without destroying it. Containers have a new view property. If this is populated then the container is a view container, otherwise it's a layout container. Like before, this property is immutable for the life of the container. Containers have both a `sway_container *parent` and `sway_workspace *workspace`. As we use specific types now, parent cannot point to a workspace so it'll be NULL for containers which are direct children of the workspace. The workspace property is set for all containers, except those which are hidden in the scratchpad as they have no workspace. In some cases we need to refer to workspaces in a container-like way. For example, workspaces have layout and children, but when using specific types this makes it difficult. Likewise, it's difficult for a container to get its parent's layout when the parent could be another container or a workspace. To make it easier, some helper functions have been created: container_parent_layout and container_get_siblings. container_remove_child has been renamed to container_detach and container_replace_child has been renamed to container_replace. `container_handle_fullscreen_reparent(con, old_parent)` has had the old_parent removed. We now unfullscreen the workspace when detaching the container, so this function is simplified and only needs one argument now. container_notify_subtree_changed has been renamed to container_update_representation. This is more descriptive of its purpose. I also wanted to be able to call it with whatever container was changed rather than the container's parent, which makes bubbling up to the workspace easier. There are now state structs per node thing. ie. sway_output_state, sway_workspace_state and sway_container_state. The focus, move and layout commands have been completely refactored to work with the specific types. I considered making these a separate PR, but I'd be backporting my changes only to replace them again, and it's easier just to test everything at once.
* prevent ub caused by misaligned stores/loadsLibravatar taiyu2018-09-02
|
* Merge pull request #2513 from RyanDwyer/rename-root-outputsLibravatar Drew DeVault2018-08-26
|\ | | | | Rename sway_root.outputs to sway_root.all_outputs
| * Rename sway_root.outputs to sway_root.all_outputsLibravatar Ryan Dwyer2018-08-25
| | | | | | | | | | | | | | | | This list includes disabled outputs. When sway_container is demoted, we'll need to store the root's children (ie. enabled outputs) in the sway_root. It makes sense to put these in a list called `outputs`, so I'm renaming the existing list in advance.
* | Remove layout.cLibravatar Ryan Dwyer2018-08-26
|/ | | | | | | | | | | | | | | | | | | | | | | | | When we have type safety we'll need to have functions for workspace_add_tiling and so on. This means the existing container functions will be just for containers, so they are being moved to container.c. At this point layout.c doesn't contain much else, so I've relocated everything and removed the file. * container_swap and its static functions have been moved to the swap command and made static. * container_recursive_resize has been moved to the resize command and made static. * The following have been moved to container.c: * container_handle_fullscreen_reparent * container_insert_child * container_add_sibling * container_add_child * container_remove_child * container_replace_child * container_split * enum movement_direction and sway_dir_to_wlr have been moved to util.c. Side note: Several commands included layout.h which then included root.h. With layout.h gone, root.h has to be included by those commands.
* Implement iterators per container typeLibravatar Ryan Dwyer2018-08-18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This introduces the following `for_each` functions: * root_for_each_workspace * root_for_each_container * output_for_each_workspace * output_for_each_container * workspace_for_each_container And introduces the following `find` functions: * root_find_output * root_find_workspace * root_find_container * output_find_workspace * output_find_container * workspace_find_container * container_find_child And removes the following functions: * container_descendants * container_for_each_descendant * container_find This change is preparing the way for demoting sway_container. Eventually these functions will accept and return sway_outputs, sway_workspaces and sway_containers (meaning a C_CONTAINER or C_VIEW). This change also makes it easy to handle abnormalities like the workspace floating list, root's scratchpad list and (once implemented) root's saved workspaces list for when there's no connected outputs.
* Remove container_for_each_descendant_bfsLibravatar Ryan Dwyer2018-08-11
| | | | | | | The function was not used. Also renames container_for_each_descendant_dfs to just container_for_each_descendant.
* ipc: remove extraneous valuesLibravatar Ian Fan2018-08-01
| | | | Removes IPC_EVENT_MODIFIER and IPC_EVENT_INPUT, which were sway-specific and unused
* ipc: add tick eventLibravatar Ian Fan2018-08-01
|
* ipc: always include old property in workspace eventsLibravatar Ian Fan2018-08-01
|
* ipc: add binding eventLibravatar Ian Fan2018-08-01
|
* ipc: add shutdown eventLibravatar Ian Fan2018-08-01
|
* Make focus part of transactionsLibravatar Ryan Dwyer2018-07-15
| | | | | | | | | | | | Rather than maintain copies of the entire focus stack, this PR transactionises the focus by introducing two new properties to the container state and using those when rendering. * `bool focused` means this container has actual focus. Only one container should have this equalling true in its current state. * `struct sway_container *focus_inactive_child` points to the immediate child that was most recently focused (eg. for tabbed and stacked containers).
* Add get_config message type to ipcLibravatar Ian Fan2018-07-10
|
* Add get_binding_modes message type to ipcLibravatar Ian Fan2018-07-10
|
* Update for swaywm/wlroots#1126Libravatar emersion2018-07-09
|
* Merge branch 'master' into leaksLibravatar emersion2018-07-06
|\
| * Implement mode --pango_markupLibravatar Brian Ashworth2018-07-05
| |
* | cmd_results_to_json: return copied string and properly free the jsonLibravatar Dominique Martinet2018-07-05
| | | | | | | | | | | | | | The only user of this function would copy the string right away to get rid of the const flag anyway, and freeing a const string afterwards might work but is not meant to be done according to the json-c API.
* | ipc-server: free clients at destroyLibravatar Dominique Martinet2018-07-05
|/
* ipc-server: add display destroy listener and remove ipc_terminateLibravatar Dominique Martinet2018-07-04
| | | | | | | | | | | | | | | | | | | | | | | | | wl_event_source_remove() is illegal after display has been destroyed, so just destroy everything when we still can. ==20392==ERROR: AddressSanitizer: heap-use-after-free on address 0x607000001240 at pc 0x00000048e86e bp 0x7ffe4b557e00 sp 0x7ffe4b557df0 READ of size 8 at 0x607000001240 thread T0 #0 0x48e86d in wl_list_insert ../common/list.c:149 #1 0x7fdf673d4d7d in wl_event_source_remove src/event-loop.c:487 #2 0x41b742 in ipc_terminate ../sway/ipc-server.c:94 #3 0x40b1ad in main ../sway/main.c:440 #4 0x7fdf6664c18a in __libc_start_main ../csu/libc-start.c:308 #5 0x409359 in _start (/opt/wayland/bin/sway+0x409359) 0x607000001240 is located 48 bytes inside of 72-byte region [0x607000001210,0x607000001258) freed by thread T0 here: #0 0x7fdf692c4880 in __interceptor_free (/lib64/libasan.so.5+0xee880) #1 0x7fdf673d371a in wl_display_destroy src/wayland-server.c:1097 previously allocated by thread T0 here: #0 0x7fdf692c4c48 in malloc (/lib64/libasan.so.5+0xeec48) #1 0x7fdf673d4d9e in wl_event_loop_create src/event-loop.c:522 #2 0x40acb2 in main ../sway/main.c:363 #3 0x7fdf6664c18a in __libc_start_main ../csu/libc-start.c:308
* ipc-server: fix more use-after-frees on ipc_send_reply errorLibravatar Dominique Martinet2018-07-02
| | | | | | | Since ipc_send_reply frees the client on error, we need to check the return value properly as we access client later on Found through static analysis.
* ipc-server: minor code cleanupLibravatar Dominique Martinet2018-07-02
| | | | | | | No logic change here, this one is mostly to please static analyzer: - client->fd can never be -1 (and if it could, close() a few lines below would have needed the same check) - we never send permission denied error (dead code)
* ipc-server: fix double-free on send error in ipc_send_eventLibravatar Dominique Martinet2018-07-02
| | | | | | | | | ipc_send_reply already does client disconnect on error, so we shouldn't do it again. We also need to process current index again as disconnect removes client from the list we currently are processing (this is an indexed "list") Found through static analysis.
* Switch output storing from list_t to wl_listLibravatar Brian Ashworth2018-06-06
|
* Store sway_outputs so that they can be reenabledLibravatar Brian Ashworth2018-06-06
|
* Make command block implementation genericLibravatar Brian Ashworth2018-06-02
|
* Implement IPC_GET_MARKSLibravatar Brian Ashworth2018-05-22
|
* Implement IPC get_seats commandLibravatar Ryan Dwyer2018-05-12
|
* Fix gcc string truncation warningsLibravatar Dominique Martinet2018-04-13
|
* address feedbackLibravatar Tony Crisci2018-04-05
|
* dont send ipc events when there are no listenersLibravatar Tony Crisci2018-04-05
|
* rename input-manager functionsLibravatar Tony Crisci2018-04-02
|
* rename seat functionsLibravatar Tony Crisci2018-04-02
|
* Merge pull request #1669 from emersion/workspace-pointer-eventsLibravatar Drew DeVault2018-03-30
|\ | | | | Fix pointer events for hidden workspaces
| * Fix segfaults when focusing a workspaceLibravatar emersion2018-03-30
| |
* | IPC fixesLibravatar Drew DeVault2018-03-30
|/
* Merge remote-tracking branch 'origin/wlroots' into swaybar-layersLibravatar Drew DeVault2018-03-30
|\
| * Revert "Merge pull request #1653 from swaywm/revert-1647-refactor-tree"Libravatar Tony Crisci2018-03-29
| | | | | | | | | | This reverts commit 472e81f35d689d67cda241acafda91c688d61046, reversing changes made to 6b7841b11ff4cd35f54d69dc92029855893e5ce0.
| * Revert "Refactor tree"Libravatar Drew DeVault2018-03-29
| |
| * rename container functionsLibravatar Tony Crisci2018-03-29
| |
* | Move declaration into loopLibravatar Drew DeVault2018-03-29
| |
* | Exit ipc_get_workspace_callback earlyLibravatar Drew DeVault2018-03-29
| |
* | Implement modesLibravatar Drew DeVault2018-03-29
| |
* | Do some small cleanupLibravatar Drew DeVault2018-03-29
| | | | | | | | | | | | | | - Fix workspace events (security config isn't in use so it wasn't being sent) - Kill status bar process when swaybar exits - Don't rearrange windows on every layer surface commit
* | Add bar configuration commandsLibravatar Drew DeVault2018-03-29
| |
* | Implement enough IPC for swaybar to workLibravatar Drew DeVault2018-03-29
|/