Guile Really-Improved 3 Window Manager Fork of i3-wm with guile configuration
Go to file
Michael Stapelberg 3721c598bd Bugfix: Set the cursor via the Xlib connection if XCursor is supported
This fixes a race where we created cursors on the Xlib connection, flushed,
then used the cursor on the XCB connection. Even though we flushed, the X
server did not process the requests yet and therefore returned a BadCursor
error.

This bugfix uses the Xlib connection for setting the root window cursor which
will ensure that the requests are properly serialized.

An easy test for this (on my machine) is the following ~/.xsession:
    xsetroot -cursor_name cross
    exec i3
If you see a cross cursor instead of the pointer, the race happens. You’ll see
a error_code=6 error in your ~/.xsession-errors.
2011-07-29 13:13:51 +02:00
debian debian: add missing τεχ build dependencies for the refcard 2011-07-24 22:57:55 +02:00
docs docs/userguide: explain the split command 2011-07-29 01:12:19 +02:00
i3-config-wizard i3-config-wizard: use a managed, floating (dialog) window. fixes focus problems 2011-07-27 13:28:32 +02:00
i3-input makefiles: build subdirs (Thanks Kacper) 2011-07-25 00:31:35 +02:00
i3-msg makefiles: build subdirs (Thanks Kacper) 2011-07-25 00:31:35 +02:00
i3-nagbar i3-nagbar: correctly check for errors when connecting to X11 2011-07-27 13:30:12 +02:00
include Bugfix: Set the cursor via the Xlib connection if XCursor is supported 2011-07-29 13:13:51 +02:00
man bump version number (no, we’re not releasing yet) 2011-07-24 00:14:26 +02:00
render-tree add proof-of-concept perl script to render the tree to SVG 2011-02-21 20:00:56 +01:00
src Bugfix: Set the cursor via the Xlib connection if XCursor is supported 2011-07-29 13:13:51 +02:00
testcases migrate-config: convert old 'with container' commands to 'focus parent; $command' (+test) (Thanks Marcus) 2011-07-27 14:36:22 +02:00
tests implement TAILQ_SWAP (only for consecutive elements, order relevant) and use it 2011-02-15 02:21:23 +01:00
website website: add userguide 2009-06-26 13:49:18 +02:00
yajl-fallback/yajl Make code compatible with yajl 2.0 *and* 1.0 2011-04-27 19:52:53 +02:00
.gitignore i3-config-wizard: use a managed, floating (dialog) window. fixes focus problems 2011-07-27 13:28:32 +02:00
CMDMODE docs: merge spelling and grammar fixes by sasha (Thanks!) 2010-03-21 01:50:10 +01:00
DEPENDS update DEPENDS file 2011-07-23 23:53:31 +02:00
GOALS Add GOALS file with anti-autotools 2009-02-09 20:56:29 +01:00
LICENSE Add vim hints, copyright notice to each file, add LICENSE, retab! everything 2009-02-14 02:33:31 +01:00
Makefile makefiles: build subdirs (Thanks Kacper) 2011-07-25 00:31:35 +02:00
PACKAGE-MAINTAINER update PACKAGE-MAINTAINER, mention i3-migrate-config-to-v4.pl and i3-config-wizard 2011-07-24 00:08:46 +02:00
README.tree first step of the big refactoring ("tree" branch). 2010-04-13 13:17:39 +02:00
RELEASE-NOTES-3.a-bf1 Add release notes to git, welcome 3.a-bf1 :-) 2009-05-03 17:24:07 +02:00
RELEASE-NOTES-3.b debian: update changelog 2009-06-26 04:42:58 +02:00
RELEASE-NOTES-3.c Add release notes for 3.γ 2009-08-19 14:00:49 +02:00
RELEASE-NOTES-3.d Update changelog / release-notes 2009-11-09 20:54:16 +01:00
RELEASE-NOTES-4.0 use the window class Firefox instead of the debian-specific Iceweasel 2011-07-24 22:17:31 +02:00
RELEASE-NOTES-tree-pr1 add release notes for tree-pr3 2011-05-28 22:12:47 +02:00
RELEASE-NOTES-tree-pr2 add release notes for tree-pr3 2011-05-28 22:12:47 +02:00
RELEASE-NOTES-tree-pr3 add release notes for tree-pr3 2011-05-28 22:12:47 +02:00
RELEASE-NOTES-tree-pr4 add release notes for tree-pr4 2011-07-15 19:08:41 +02:00
TODO Update TODO file 2009-04-19 20:45:28 +02:00
common.mk Makefile: don’t set PREFIX/SYSCONFDIR (necessary for OpenBSD ports framework) (Thanks madroach) 2011-07-23 22:24:23 +02:00
dump-asy.pl ipc: adapt dump-asy.pl for the new orientation format 2011-01-08 00:45:10 +01:00
gtk-tree-watch.pl perl: use get_tree instead of get_workspaces 2010-11-21 21:42:28 +01:00
i3-migrate-config-to-v4.pl migrate-config: convert old 'with container' commands to 'focus parent; $command' (+test) (Thanks Marcus) 2011-07-27 14:36:22 +02:00
i3-wsbar Reset the color to the default color, don't harcode white. 2011-07-23 22:19:30 +02:00
i3.config default config: start i3bar -d by default 2011-07-27 13:32:27 +02:00
i3.config.keycodes add v4 comment to i3.config.keycodes, remove userguide comment from i3-config-wizard 2011-07-11 19:48:51 +02:00
i3.desktop Add a .desktop-file containing xsession information for freedesktop compliant login managers 2009-04-19 22:29:04 +02:00
i3.welcome docs: merge spelling and grammar fixes by sasha (Thanks!) 2010-03-21 01:50:10 +01:00
logo.svg Add logo to git. Thanks to steckdenis, yellowiscool and farvardin! 2009-08-04 01:40:05 +02:00
pseudo-doc.doxygen Put documentation for each function in the header files, doxygen-compatible 2009-04-07 19:02:07 +02:00

README.tree

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

README file for the "tree" branch of i3
=======================================

This is a *massive* refactoring of i3. It was driven by thinking about whether
a different data structure could make things easier (for users and developers).
The old data structure of a table provided relatively flexible layouts but was
*very* hard to implement.

The new data structure is a tree. You can have horizontally and vertically split
containers. Each container can contain either nothing yet (waiting for a window
or for the user to put more containers in it), one or more containers or exactly
one window. RandR Outputs and workspaces are not treated specially, but they
are just containers inside the tree.

This structure allows for easy serialization, meaning multiple things:
- we can store and reload the layout for inplace restarts (this is already working)
- we can store parts of the layout and load them at any position in our tree
  (partly working)
  - we can load a layout specifying the physical positions of RandR outputs
    for pathologic screen setups
  - we can load a default layout for each workspace to specify the position
    of dock clients
- we can use test-driven development to a much higher degree because we have
  access to the whole tree

Ripping out the core data structures of i3 and replacing them of course has
some side-effects, which I will describe here (the list may not be complete,
new side-effects may not be known yet):
- Empty containers are allowed. They can swallow windows based on certain
  criteria. We can implement session-saving this way.
- Assignments (put windows on certain workspaces, put workspaces on certain
  outputs) are just special cases of the point above.
- Window decorations are now always rendered on the parent window. This means
  we dont have to carry around ugly Stack_Windows any more.
- Operations always (?) operate on containers, so you can make a container
  (containing multiple windows) fullscreen or floating (for example) and no
  longer just single windows.
- All X11 requests are now pushed to X11 in a separate step (rendering is one
  step, updating X11 another). This makes talking to X11 a lot less error-prone
  and allows for simpler code.

======================
SOME WORDS OF WARNING:
======================

The current state of the branch is not nearly the quality you know of i3. It
is in flux, changes and crashes are to be expected. Many features do not work
yet. It is only suitable if you want to help developing or have a look at what
is coming. Do *NOT* use it for production! You have been warned.