Commit graph

344 commits

Author SHA1 Message Date
Ryan Dwyer
6ceb1d33fd Fix assign to workspace 2018-07-27 09:21:55 +10:00
Ryan Dwyer
a90f2dbde9 Refactor view_map
* Move workspace selection into separate function
* Instead of keeping a `prev_focus` variable, do the check in
`should_focus` (ie. views can only take focus if they're mapped into the
active workspace)
* Fix assign-to-output - it previously set `prev_focus` but should be
`target_sibling`
* Remove call to `workspace_switch` as we'll only ever focus the view if
it's in the active workspace
2018-07-26 19:18:47 +10:00
Ryan Dwyer
27a20a4884 Allow containers to be fullscreen 2018-07-26 08:27:07 +10:00
Pascal Pascher
384c55c0b4 more style fixes, reorder config.h include 2018-07-25 13:43:21 +02:00
Pascal Pascher
f95cb9a7c1 reverted includes of "sway/config.h" and replaced with "config.h" from meson build 2018-07-25 13:32:20 +02:00
Pascal Pascher
79a45d4a40 more style fixes, included "sway/config.h" where needed 2018-07-25 12:17:10 +02:00
Pascal Pascher
2bf893248a style fixes, exclude sway/desctop/xwayland.c when enable_xwayland: false 2018-07-24 23:37:41 +02:00
Pascal Pascher
24ad1c3983 Added meson option "enable_xwayland" (default: true) to enable/disable xwayland support 2018-07-24 22:16:06 +02:00
Drew DeVault
f4b882475e Merge branch 'master' into pid-workspaces 2018-07-23 20:31:11 -04:00
Ryan Dwyer
81e8f31cc6 Implement scratchpad
Implements the following commands:

* move scratchpad
* scratchpad show
* [criteria] scratchpad show

Also fixes these:

* Fix memory leak when executing command with criteria
(use `list_free(views)` instead of `free(views)`)
* Fix crash when running `move to` with no further arguments
2018-07-23 08:24:32 +10:00
Ryan Dwyer
011d1ebfa4 Consider view's min/max sizes when resizing 2018-07-22 23:10:19 +10:00
Ryan Dwyer
9fbe13b9be Implement floating_modifier and mouse operations for floating views
This implements the following:

* `floating_modifier` configuration directive
* Drag a floating window by its title bar
* Hold mod + drag a floating window from anywhere
* Resize a floating view by dragging the border
* Resize a floating view by holding mod and right clicking anywhere on
the view
* Resize a floating view and keep aspect ratio by holding shift while
resizing using either method
* Mouse cursor turns into resize when hovering floating border or corner
2018-07-22 23:10:19 +10:00
Ryan Dwyer
54b00d351e Implement assign to output
Eg. assign [class="Firefox"] output foo
2018-07-19 22:36:38 +10:00
frsfnrrg
b3014f7b16 Fix uninitialized pointer in view_unmap
Otherwise, sway crashes due to uninitialized pointer
dereference when AddressSanitizer is active.
2018-07-17 10:42:48 -04:00
Brian Ashworth
10fc7a5b49
Merge branch 'master' into default-floating-border 2018-07-16 22:12:29 -04:00
Ryan Dwyer
9cbff272cb Remove superfluous IPC urgent events
When an xwayland view is mapped, the IPC urgent event was being sent on
every surface commit.

I had intentionally ommitted the check because I figured an urgent
surface could update its urgent timestamp by sending urgent a second
time. But that's not how it works in xwayland's case, and it makes for
more complicated code.
2018-07-17 10:27:03 +10:00
Ryan Dwyer
75c699db62 Implement default_floating_border command and adjust CSD behaviour 2018-07-17 10:14:33 +10:00
Drew DeVault
d6bd314dff
Merge pull request #2276 from RyanDwyer/urgency
Implement urgency base functionality
2018-07-16 15:39:08 -07:00
Ryan Dwyer
e2f28c023c Focus view before running criteria when mapping 2018-07-16 22:27:11 +10:00
Ryan Dwyer
fc2484095a Implement no_focus command 2018-07-16 22:18:12 +10:00
Ryan Dwyer
5f0a4bb6a4 Update workspace urgent state when views close or move workspaces 2018-07-16 13:15:35 +10:00
Ryan Dwyer
f86087d78f Fix urgency IPC events 2018-07-16 08:19:25 +10:00
Ryan Dwyer
315d5311b2 Implement urgency base functionality
Introduces a command to manually set urgency, as well as rendering of
urgent views, sending the IPC event, removing urgency after focused for
one second, and matching urgent views via criteria.
2018-07-16 08:19:25 +10:00
Ryan Dwyer
2032f85d94 Simplify transactions by utilising a dirty flag on containers
This PR changes the way we handle transactions to a more simple method.
The new method is to mark containers as dirty from low level code
(eg. arranging, or container_destroy, and eventually seat_set_focus),
then call transaction_commit_dirty which picks up those containers and
runs them through a transaction. The old methods of using transactions
(arrange_and_commit, or creating one manually) are now no longer
possible.

The highest-level code (execute_command and view implementation
handlers) will call transaction_commit_dirty, so most other code just
needs to set containers as dirty. This is done by arranging, but can
also be done by calling container_set_dirty.
2018-07-14 23:14:55 +10:00
emersion
9b16227ec3 Don't disable borders for xwayland floating views 2018-07-12 20:01:33 +01:00
emersion
60fdb71a1f Updates for swaywm/wlroots#1116 2018-07-11 18:37:17 -04:00
Ryan Dwyer
f2d1cf3ceb Implement floating_minimum_size and floating_maximum_size 2018-07-11 22:16:48 +10:00
emersion
63b4bf5000
Update for swaywm/wlroots#1126 2018-07-09 22:54:30 +01:00
Ryan Dwyer
0046eed969 Fix titles when container titles contain UTF-8 characters
The title and marks textures would have their height set from the
config's computed max font height, but the textures were not regenerated
when the config's max font height changed which made a gap appear.
Rather than making it regenerate the title textures every time the
config font height was changed, I've changed it to just make the
textures the height of the title itself and fill any gap when rendering.

Also, the title_width and marks_width variables have been renamed to
make it more obvious that they are in output-buffer-local coordinates.

Fixes #1936.
2018-07-07 15:49:51 +10:00
emersion
9a9d9116be
Make view_update_* update live props as well 2018-07-06 19:33:10 +01:00
Dominique Martinet
785ed4383b view_map: free criterias as the list it is 2018-07-05 08:13:10 +09:00
Ryan Dwyer
fc826b921f Call view_set_tiled for mapping non-floating views
Fixes #2209.
2018-07-05 09:04:15 +10:00
Ryan Dwyer
f156a25e64 Only call view_set_tiled when switching floating mode
Otherwise it repeatedly sets the view's border to the config's default.
2018-07-04 20:10:47 +10:00
Drew DeVault
acd79e1505 Implement pid->workspace tracking
When you spawn a process with the exec command, sway now notes the
workspace you had focused and the pid of the child process, then assigns
that workspace to the child when its window appears.

Some of this is carried over from sway 0.15, but with some major
refactoring and centralization of state.
2018-07-01 09:58:18 -04:00
Dominique Martinet
9ea4cc13a0 sway views: add helpers to get view and layer from wlr_surface 2018-06-30 22:31:14 +09:00
Ryan Dwyer
e396af853b Merge remote-tracking branch 'upstream/master' into atomic 2018-06-30 22:46:25 +10:00
Rostislav Pehlivanov
e0d0e8f840 Revert "Don't unmaximize floating views"
This reverts commit 97672295ed.
2018-06-30 11:10:47 +01:00
emersion
4de28bba68
Fix floating views not receiving frame events
That happened when they were in tabbed or stacked containers.

Fixes #2161
2018-06-30 09:49:51 +01:00
Ryan Dwyer
e6829c5991 Move unsetting of view->surface into view_unmap 2018-06-27 17:54:57 +10:00
Ryan Dwyer
be86d3aba6 Remove transaction_add_damage
Instead, damage each container when applying the transaction.
2018-06-27 17:46:03 +10:00
Ryan Dwyer
50190bc760 Rename view's free callback to destroy 2018-06-26 13:18:33 +10:00
Ryan Dwyer
7a922c65aa Damage output when a fullscreen view unmaps
Also moved the arranging into view_unmap to avoid excessive code
duplication.
2018-06-26 13:15:45 +10:00
Ryan Dwyer
9b15e81cff Fix potential crash when fullscreen view unmaps
It happened when a view is a grandchild or deeper of the workspace, is
fullscreen, and unmaps. The workspace would not be included in the
transaction and its pointer to the fullscreen view was left dangling.
2018-06-25 16:41:31 +10:00
Ryan Dwyer
38398e2d77 Implement atomic layout updates for tree operations
This implements atomic layout updates for when views map, reparent or
unmap.
2018-06-23 16:24:11 +10:00
Ryan Dwyer
bb66e6d578 Refactor everything that needs to arrange windows
* The arrange_foo functions are now replaced with arrange_and_commit, or
with manually created transactions and arrange_windows x2.
* The arrange functions are now only called from the highest level
functions rather than from both high level and low level functions.
* Due to the previous point, view_set_fullscreen_raw and
view_set_fullscreen are both merged into one function again.
* Floating and fullscreen are now working with transactions.
2018-06-09 10:11:25 +10:00
Ryan Dwyer
f9e6d703d2 Make main properties be the pending state 2018-06-09 10:08:43 +10:00
Ryan Dwyer
59c9488701 WIP: Atomic layout updates ground work 2018-06-09 10:08:43 +10:00
Konstantin Pospelov
e6baac4297 Fix view title update order
This commit fixes the function call order to make sure that the title
texture is updated using the relevant global font size.
2018-06-03 00:32:18 +03:00
Ryan Dwyer
3f1cfd547e Fix top border when a view is initially floating
Fixes #2085.
2018-06-02 11:45:16 +10:00
Ryan Dwyer
a2c1cb9072 Fix mpv damage issue when unfullscreening into floating 2018-06-01 23:14:58 +10:00
Ryan Dwyer
f24087d104 Fix fullscreen position 2018-06-01 23:14:58 +10:00
Ryan Dwyer
97672295ed Don't unmaximize floating views 2018-06-01 23:14:58 +10:00
Ryan Dwyer
70f5d6fcf3 Rename container_set_geometry_from_view 2018-06-01 23:14:58 +10:00
Ryan Dwyer
e4e912ea91 Store swayc coordinates as layout-local 2018-06-01 23:14:58 +10:00
Ryan Dwyer
02de2a6f65 Rename set_maximized functions to set_tiled 2018-06-01 23:14:58 +10:00
Ryan Dwyer
13a4b0512e Fix unfullscreening a floating view 2018-06-01 23:14:58 +10:00
Ryan Dwyer
aaba7642b3 Replace is_floating boolean with function 2018-06-01 23:14:58 +10:00
Ryan Dwyer
1f2e399ade Implement floating 2018-06-01 23:14:58 +10:00
Ryan Dwyer
9df1432f56 Refactor parse_title_format
Don't read properties until needed, and do it with less lines of code.
2018-05-28 12:03:43 +10:00
Ryan Dwyer
d3dd7e5bae Rename view_get_type to view_get_shell 2018-05-27 22:02:00 +10:00
Ryan Dwyer
51865c00c8 Add %app_id to title_format 2018-05-27 09:50:38 +10:00
Drew DeVault
ab74c95d56
Merge pull request #2036 from RyanDwyer/workspace-switch-on-map
Switch workspace if required when mapping a view
2018-05-25 08:47:08 -04:00
Ryan Dwyer
f32a002401 Switch workspace if required when mapping a view
If a view is created on a workspace that wasn't visible, switch to it.

Fixes #1879.
2018-05-25 22:28:01 +10:00
Ryan Dwyer
db38b9bbf3 Clean up container title functions
* Add and use lenient_strcat and lenient_strncat functions
* Rename `concatenate_child_titles` function as that's no longer what it
does
* Rename `container_notify_child_title_changed` because we only need to
notify that the tree structure has changed, not titles
* Don't notify parents when a child changes its title
* Update ancestor titles when changing a container's layout
	* Eg. create nested tabs and change the inner container to stacking
* No need to store tree presentation in both container->name and
formatted_title
2018-05-25 21:07:59 +10:00
Ryan Dwyer
f6c3682c05 Use constants for titlebar dimensions 2018-05-22 08:27:42 +10:00
Ryan Dwyer
664169fbf1 Implement stacked layout 2018-05-22 08:27:24 +10:00
Brian Ashworth
0273c6438c Fix hide_edge_borders smart for tabs and stacks 2018-05-21 13:18:18 -04:00
Ryan Dwyer
5ab4930185 Fix tab border issues 2018-05-21 20:16:56 +10:00
Ryan Dwyer
efc07fb3d4 Don't track damage for views on inactive tabs 2018-05-21 20:16:56 +10:00
Ryan Dwyer
c08f9bf257 Implement tabbed layout 2018-05-21 20:16:56 +10:00
Ryan Dwyer
c4ea2b51f6 Fix hide_edge_borders constraints
When checking if a border is on the edge, the check should be done
against the workspace rather than the output.
2018-05-21 13:59:01 +10:00
Ryan Dwyer
ebb0d051db Fix many border opacity issues 2018-05-17 08:29:14 +10:00
Ryan Dwyer
69ac7f73e7 Destroy marks textures when view destroyed 2018-05-17 08:29:14 +10:00
Ryan Dwyer
b351d0a64a Set textures to null when destroying 2018-05-17 08:29:14 +10:00
Ryan Dwyer
5384fdcbc6 Don't show marks which start with an underscore 2018-05-17 08:29:14 +10:00
Ryan Dwyer
0e2cc0af30 Implement show_marks 2018-05-17 08:29:14 +10:00
Ryan Dwyer
fc96f004d2 Don't steal focus when a view changes its title
Fixes #1989
2018-05-16 20:29:04 +10:00
Ryan Dwyer
22d38600d0 Implement marks 2018-05-15 11:18:27 +10:00
Brian Ashworth
9ba0dca7ba
Merge branch 'master' into fix-1975 2018-05-14 09:06:23 -04:00
emersion
95a10dd4f3
Kill wl_shell 2018-05-14 13:26:10 +01:00
Brian Ashworth
3488fbc859 Fix y and height for a hidden top normal border 2018-05-14 01:46:53 -04:00
Brian Ashworth
34b864fb17
Merge branch 'master' into fix-1975 2018-05-14 00:28:21 -04:00
Brian Ashworth
6ff7c52736 Fix titles and detect edges for hide_edge_borders 2018-05-14 00:20:34 -04:00
Ryan Dwyer
92b8497a0b Fix crash when launching programs from dmenu 2018-05-14 11:48:15 +10:00
Ryan Dwyer
bffcb496cc Revert "Revert "Merge pull request #1953 from RyanDwyer/criteria-focused""
This reverts commit ac0e62584f.

This reimplements the criteria __focused__ commit in preparation for
fixing a known bug.
2018-05-14 11:38:09 +10:00
Ryan Dwyer
1e9aaa54a8 Revert "Revert "Merge pull request #1943 from RyanDwyer/criteria-improvements""
This reverts commit 32a572cecf.

This reimplements the criteria overhaul in preparation for fixing a
known bug.
2018-05-14 11:38:09 +10:00
Drew DeVault
b2dec12368
Merge pull request #1970 from emersion/xdg-shell-stable
Add xdg-shell stable support
2018-05-13 13:45:15 -04:00
emersion
88d9d43b36
Add xdg-shell stable support 2018-05-13 16:38:56 +01:00
Heghedus Razvan
789a877b37 Fix crash when using pango markup font
The characters & < > ' " needs to be escaped when using pango markup

Signed-off-by: Heghedus Razvan <heghedus.razvan@gmail.com>
2018-05-13 17:53:45 +03:00
Brian Ashworth
2adf23c2a3 Only count views for hide_edge_borders smart 2018-05-12 12:56:26 -04:00
Brian Ashworth
ec60e24f75
Merge branch 'master' into edge-borders 2018-05-12 12:43:34 -04:00
Brian Ashworth
e3625d8f33 Count descendant views for hide_edge_borders smart 2018-05-12 12:37:48 -04:00
Drew DeVault
32a572cecf Revert "Merge pull request #1943 from RyanDwyer/criteria-improvements"
This reverts commit 3e1bf721c6, reversing
changes made to 2217518bd5.
2018-05-12 08:52:54 -04:00
Drew DeVault
ac0e62584f Revert "Merge pull request #1953 from RyanDwyer/criteria-focused"
This reverts commit 2511adffc2, reversing
changes made to 3e1bf721c6.
2018-05-12 08:52:48 -04:00
Ryan Dwyer
4717c71da5
Merge branch 'master' into fix-crash-on-fullscreen 2018-05-12 17:52:51 +10:00
Ryan Dwyer
94e42f9857 Implement __focused__ criteria 2018-05-12 12:34:12 +10:00
Brian Ashworth
3db7fc2bb2 Implement hide_edge_borders 2018-05-11 18:44:56 -04:00
Dudemanguy911
935bda0f33 fix crash on fullscreen toggle 2018-05-11 07:42:56 -05:00
Ryan Dwyer
3b0c26d149 Overhaul criteria implementation
The criteria struct now uses properties for each token type rather than
the list_t list of tokens. The reason for this is that different token
types have different data types: pcre, string and number to name a few.
This solution should be more flexible moving forward. A bonus of this is
that criteria is now easier to understand when looking at the struct
definition.

The criteria parser has been rewritten because the previous one didn't
support valueless pairs (eg. [class="foo" floating]).

Criteria now has types. Types at the moment are CT_COMMAND,
CT_ASSIGN_WORKSPACE and CT_ASSIGN_OUTPUT. i3 uses types as well.
Previously the assign command was creating a criteria with 'move to
workspace <name>' as its command, but this caused the window to appear
briefly on the focused workspace before being moved to the assigned
workspace. It now creates the view directly in the assigned workspace.

Each view will only execute a given criteria once. This is achieved by
storing a list of executed criteria in the view. This is the same
strategy used by i3.

Escaping now works properly. Previously you could do things like
[class="Fire\"fox"] and the stored value would be 'Fire\"fox', but it
should be (and now is) 'Fire"fox'.

The public functions in criteria.c are now all prefixed with criteria_.

Xwayland views now listen to the set_title, set_class and
set_window_type events and criteria will be run when these happen. XDG
shell has none of these events so it continues to update the title in
handle_commit.

Each view type's get_prop function has been split into get_string_prop
and get_int_prop because some properties like the X11 window ID and
window type are numeric.

The following new criteria tokens are now supported:

* id (X11 window ID)
* instance
* tiling
* workspace
2018-05-11 09:38:53 +10:00
emersion
bec80f1551
Damage borders when damaging view 2018-05-10 23:03:50 +01:00
Ryan Dwyer
936226845f Add extra check for view title being NULL 2018-05-05 22:29:37 +10:00
Ryan Dwyer
5d6d24e71a Move code for re-arranging after font height change into a common place 2018-05-05 22:29:37 +10:00
Ryan Dwyer
da7d6642d3 Refactor parse_title_format() 2018-05-05 22:29:37 +10:00
Ryan Dwyer
228c478e8d Implement title_format
This implements the title_format command, with a new placeholder %shell
which gets substituted with the view type (xwayland, xdg_shell_v6 or
wl_shell).

Example config:

    for_window [title=".*"] title_format %title (class=%class instance=%instance shell=%shell)
2018-05-05 22:29:37 +10:00
Ryan Dwyer
b667298a0a Render titles 2018-05-03 15:12:00 +10:00
Dillen Meijboom
b45e2bd95e Fixed #1888 GCC cannot compile due to uninitialized variables (#1889) 2018-05-02 10:40:45 +01:00
Ryan Dwyer
83952c5201 Restore view_update_position() 2018-05-01 07:46:57 -04:00
Ryan Dwyer
fa5de2876e Move docblock and fix indenting of switch/case. 2018-05-01 07:46:57 -04:00
Ryan Dwyer
630ba30e3c Implement borders
Implements rendering of borders. Title text is still to do.

Implements the following configuration directives:

* client.focused
* client.focused_inactive
* client.unfocused
* client.urgent
* border
* default_border
2018-05-01 07:46:57 -04:00
Ryan Dwyer
91f97fc21a Fix segfault in view_unmap()
If the last remaining view on a workspace is unmapped and the workspace
is not visible, parent will be a C_OUTPUT. Call the arrange_output()
function in this case.
2018-05-01 17:18:20 +10:00
Ryan Dwyer
167c2e1aa9 Refactor arrange_windows()
Replaces arrange_windows() with arrange_root(), arrange_output(),
arrange_workspace() and arrange_children_of().

Also makes fullscreen views save and restore their dimensions, which
allows it to preserve any custom resize and is also a requirement for
floating views once they are implemented.
2018-04-28 11:26:14 +10:00
Ryan Dwyer
dfc26c664f Update wording about unmanaged/unmapped views 2018-04-24 20:14:22 +10:00
Ryan Dwyer
30a7488936 Add assert to view_execute_criteria() 2018-04-24 20:08:32 +10:00
Ryan Dwyer
72767e1cc3 Implement criteria commands
Implements the following commands:

* for_window [...] <cmdlist>
* assign [...] <workspace>
2018-04-24 20:08:32 +10:00
emersion
a41057714f
Update for wlroots#885 2018-04-21 19:12:49 +01:00
Ryan Dwyer
72beae209b Fullscreen fixes. 2018-04-18 00:10:32 +10:00
Ryan Dwyer
cc4da245a8 Fix views unmapping their own fullscreen windows. 2018-04-17 11:06:03 +10:00
Ryan Dwyer
c685ef081f Create sway_workspace struct. 2018-04-17 09:31:34 +10:00
Ryan Dwyer
bfd5834f4c Feedback for fullscreen. 2018-04-17 08:11:50 +10:00
Ryan Dwyer
52420cc24d Implement fullscreen. 2018-04-16 20:36:40 +10:00
emersion
516f5454ad
Simplify damage tracking functions, use them in layer shell 2018-04-06 11:45:40 -04:00
emersion
290c916290
Send surface enter/leave events to view children 2018-04-06 10:26:32 -04:00
emersion
88e3e5ea5d
Fix wl_output enter/leave events
Fixes #1739
2018-04-06 00:10:17 -04:00
emersion
6b9b03f09f
Remove outdated TODO 2018-04-05 18:33:18 -04:00
emersion
f5e5b1819b
Track damage of xdg-shell-v6 popups 2018-04-05 16:48:11 -04:00
emersion
45f93e1650
Accumulate damage from subsurfaces 2018-04-05 15:20:45 -04:00
emersion
dcd15a2d3d
Implement shell views 2018-04-05 11:40:39 -04:00
Tony Crisci
481a8275c1 address feedback 2018-04-03 19:23:59 -04:00
Tony Crisci
b4c5f79725 move view and workspace destructors to container.c 2018-04-03 12:25:19 -04:00
Tony Crisci
2992b72d61 change reap container approach 2018-04-02 22:37:21 -04:00
Tony Crisci
2c165e1288 fix more close segfaults 2018-04-02 21:01:33 -04:00
emersion
a4a241697a
Merge branch 'wlroots' into view-redesign 2018-04-02 15:30:58 -04:00
emersion
2f64ce86c4
Xwayland unmanaged views aren't views anymore 2018-04-02 14:35:43 -04:00
emersion
61fabede14
Address review comments 2018-04-02 10:57:45 -04:00
emersion
1d68f9ecca
Add sway_view_impl 2018-03-31 18:07:44 -04:00
emersion
b2c2ee693b
Introduce common functions to create, map, unmap, destroy views 2018-03-31 17:49:40 -04:00
emersion
a776ecbb86
Add lite damage tracking
This skips the renderer if nothing has changed, and renders
everything otherwise.
2018-03-30 17:16:35 -04:00
Drew DeVault
49379dd0fc Fix workspace deletion edge cases 2018-03-30 13:49:34 -04:00
Tony Crisci
dc8c9fbeb6 Revert "Merge pull request #1653 from swaywm/revert-1647-refactor-tree"
This reverts commit 472e81f35d, reversing
changes made to 6b7841b11f.
2018-03-29 23:41:33 -04:00
Drew DeVault
d0c7f66e95
Revert "Refactor tree" 2018-03-29 23:29:29 -04:00
Tony Crisci
92c58b1e63 rename container_for_each_descendent 2018-03-29 23:08:59 -04:00
Tony Crisci
874f009866 move tree includes to their own directory 2018-03-29 14:21:42 -04:00
Drew DeVault
8ad26c8afd Send surface enter/leave events 2018-02-25 17:23:36 -05:00
Tony Crisci
0e3eae4baa view interface 2018-01-21 09:09:53 -05:00