Commit Graph

1826 Commits

Author SHA1 Message Date
Michael Stapelberg 1a40641462 workspace.{c,h}: remove obsolete code 2010-11-29 22:32:19 +01:00
Michael Stapelberg 5625a2f17f log.c: fix indenting 2010-11-29 22:28:23 +01:00
Michael Stapelberg 38b231b848 handlers.c: remove obsolete code 2010-11-29 22:25:55 +01:00
Michael Stapelberg 529bdf833f floating.c: remove obsolete code, fix indenting 2010-11-29 22:23:49 +01:00
Fernando Tarlá Cardoso Lemos 371ec037b8 Fix click to focus. 2010-11-29 22:09:05 +01:00
Michael Stapelberg b0e41cb0a2 Bugfix: Don’t attach floating clients to 'nodes' when restoring (Thanks EelVex) 2010-11-29 21:46:00 +01:00
Michael Stapelberg 0f0d01336b Bugfix: Correctly attach floating Cons to a different workspace, extend testcase 2010-11-29 20:39:56 +01:00
Michael Stapelberg ad825913b4 Bugfix: Fix crash when moving a floating Con to a different workspace, add testcase (Thanks EelVex) 2010-11-29 20:20:44 +01:00
Michael Stapelberg b0068de3d7 Bugfix: Transfer 'percent' factor when splitting, add testcase for resizing 2010-11-29 11:24:12 +01:00
Michael Stapelberg a0cd3c2bab Include 'percent' in tree JSON, use C-locale when dumping, update testcase 2010-11-29 11:10:17 +01:00
Michael Stapelberg ee45c92564 Implement resizing (still buggy)
Committing basic resizing functionality. We need testcases for the bugs and
then eliminate them.
2010-11-29 10:56:16 +01:00
Michael Stapelberg a86d8ab329 use con_num_children() 2010-11-28 22:45:39 +01:00
Michael Stapelberg 85b7e60bac Bugfix: Use separate child_mapped instead of checking state->initial (makes t/02-fullscreen.t pass)
This is necessary for windows which are mapped later, for example when there is
a fullscreen window in front of everything.
2010-11-28 22:09:26 +01:00
Michael Stapelberg 17caaf1159 Correctly update the _NET_WM_STATE hint when *not* going into fullscreen (when already in fullscreen) 2010-11-28 22:07:54 +01:00
Michael Stapelberg 49308d5026 Bugfix: don’t update focus when moving mouse over stacked/tabbed decorations (Thanks fernandotcl) 2010-11-28 21:07:08 +01:00
Michael Stapelberg 61e3415ddc Bugfix: Add deco_height to bsr.y (to configure the floatingcon correctly). Fixes t/12-floating-resize.t 2010-11-28 20:43:35 +01:00
Michael Stapelberg 2dba7ec1ec Bugfix for the last commit (broke some moving situations), update testcase 2010-11-28 20:15:47 +01:00
Michael Stapelberg 780b0ddbbc look & feel: when moving, descend if the container in target direction is a split-container 2010-11-28 18:35:11 +01:00
Michael Stapelberg 4fcd2f6e7e Bugfix: Fix focus when moving Cons
When having two v-splits on a horizontal desktop:
----------------
|  t1   |  t3  |
|-------|------|
|  t2   |  t4  |
----------------
…focus is on t2, and you move it into the right v-split (move after h), the
focus was not properly updated. That is, inside the right v-split, focus was
correct, but the workspace focus was still pointing to the left v-split.
2010-11-28 18:05:53 +01:00
Michael Stapelberg 4f1260ffe8 Also store/load window_rect when restarting 2010-11-28 17:20:29 +01:00
Michael Stapelberg 871da48b56 Bugfix: Only set to_focus when focused is actually 1 2010-11-28 17:20:16 +01:00
Michael Stapelberg 511cbec49b look and feel: when moving a Con is not possible, split a workspace level
This allows you to open three cons, then move the last one to the right (like
in previous i3 releases).
2010-11-28 14:45:14 +01:00
Michael Stapelberg 81044a7104 Correctly restore focus when restarting (Thanks fernandotcl) 2010-11-28 14:27:44 +01:00
Michael Stapelberg f7fff5cec1 update indenting of src/util.c 2010-11-28 14:14:34 +01:00
Michael Stapelberg 32cc7134aa re-enable ipc_shutdown() when restarting 2010-11-28 14:11:44 +01:00
Michael Stapelberg ab8400fff9 Bugfix: Use setsid() to avoid SIGINT for child processes 2010-11-28 14:03:43 +01:00
Michael Stapelberg 02b786509b Upon ConfigureRequests, send a generated ConfigureNotify (Thanks fernandotcl)
This fixes problems with GVim in stacking mode for example.
2010-11-28 13:19:49 +01:00
Michael Stapelberg d60e8c56dc little style fixes, add vim modeline 2010-11-28 13:02:29 +01:00
Fernando Tarlá Cardoso Lemos 69fc6449dc libXcursor support (themed cursors). 2010-11-28 13:01:45 +01:00
Michael Stapelberg 3bab222aa7 Bugfix: Re-attach windows in correct order when switching layout (Thanks fernandotcl) 2010-11-28 01:51:16 +01:00
Michael Stapelberg d0de3f403d Bugfix: Restore focus after changing layout (Thanks fernandotcl) 2010-11-28 01:39:47 +01:00
Michael Stapelberg 2c157283ea fix third argument to strncat(), use smalloc(), use strlen(".old")+1 2010-11-28 01:22:10 +01:00
Fernando Tarlá Cardoso Lemos 0a17fe973c Make the restart path configurable. 2010-11-28 01:18:10 +01:00
Michael Stapelberg 622b51a1ea Fix switching containers by moving the mouse over their decorations when in the same container 2010-11-28 01:13:18 +01:00
Michael Stapelberg 6fe0e58a64 Bugfix: Also render decorations of nearby cons when getting an ExposeEvent (Thanks fernandotcl) 2010-11-28 00:52:24 +01:00
Michael Stapelberg 0cfebcb5b6 remove some debug messages 2010-11-27 18:05:45 +01:00
Michael Stapelberg 2c3e5dbc65 Bugfix: unmap windows in a separate step to avoid focus problems with fullscreen windows
This fixes an ugly bug with Adobe Flash in fullscreen mode, for example on
YouTube. See comments in the diff for some explanation.
2010-11-27 17:45:23 +01:00
Michael Stapelberg d47a1edf22 Bugfix: configure windows before mapping, correctly store window_rect instead of rect 2010-11-27 16:44:45 +01:00
Michael Stapelberg 3f3fa08b15 more debug for ClientMessages 2010-11-27 16:44:32 +01:00
Michael Stapelberg 6431d3d187 fix indention 2010-11-27 16:44:20 +01:00
Fernando Tarlá Cardoso Lemos 1d52bf179b Run the autostart commands. 2010-11-26 23:30:27 +01:00
Fernando Tarlá Cardoso Lemos 2faac65237 Always add to the focus list, fixes crash. 2010-11-26 23:26:53 +01:00
Michael Stapelberg 77d0d42ed2 look and feel: create split container when switching workspace layout
Quote from the source:
  When the container type is CT_WORKSPACE, the user wants to change the
  whole workspace into stacked/tabbed mode. To do this and still allow
  intuitive operations (like level-up and then opening a new window), we
  need to create a new split container. */
2010-11-26 23:08:12 +01:00
Michael Stapelberg c3981e12d3 Bugfix: use bufcopy instead of buf (Thanks fernando) 2010-11-26 22:38:05 +01:00
Michael Stapelberg 65bd71b213 remove some obsolete code 2010-11-26 22:15:09 +01:00
Michael Stapelberg b2db9ac797 Bugfix: always reset state->initial to false, not only for different stacking order
As initial may be set to true again after initializing the window, we need to
ensure that it is properly cleared. Otherwise, this leads to ghost windows when
unmapping (such as the Xpdf about dialog) due to i3 issuing MapWindow after an
Unmap happened but before i3 actually received/handled the UnmapNotify.
2010-11-26 20:15:08 +01:00
Michael Stapelberg 97bc8f4b86 Bugfix: Don’t draw decorations of CT_FLOATING_CONs 2010-11-26 19:24:14 +01:00
Michael Stapelberg db3002fce0 Implement click on stack/tab decoration to focus 2010-11-26 18:57:15 +01:00
Michael Stapelberg df7788386d re-indent click function 2010-11-26 18:48:27 +01:00
Michael Stapelberg 962fe075b9 Bugfix: Upon ExposEvents, redraw decoration also for the window itself
In the meantime, windows can have decorations (borders) on their own frame, too.
2010-11-26 18:37:34 +01:00
Michael Stapelberg e744b48b30 Bugfix: When handling an EnterNotify for a child window, access the correct con->layout 2010-11-26 18:18:40 +01:00
Michael Stapelberg 4d7c24b92c Bugfix: Correctly count variables when parsing the configfile (Thanks dbp) 2010-11-26 11:25:51 +01:00
Michael Stapelberg 1de97a1f1f correctly sort numbered workspaces (+testcase)
Numbered workspaces (workspaces with a name containing only digits) will be
inserted in the correct order now. Named workspaces are always sorted after
numbered workspaces and in the order of creation.
2010-11-21 23:35:49 +01:00
Michael Stapelberg fab8b84db7 ipc: fix current_workspace 2010-11-21 22:12:34 +01:00
Michael Stapelberg a71d782da9 fix indention of src/ipc.c 2010-11-21 22:03:55 +01:00
Fernando Tarlá Cardoso Lemos ae22fe065f Send change:empty too. 2010-11-21 21:36:33 +01:00
Fernando Tarlá Cardoso Lemos e2517bd48c Unlink the resolved path. 2010-11-21 21:36:30 +01:00
Fernando Tarlá Cardoso Lemos 767dcea7ba Send the workspace focus change event. 2010-11-21 21:36:28 +01:00
Fernando Tarlá Cardoso Lemos 5d830e7a27 Ported over some message types from -next. 2010-11-21 21:36:19 +01:00
Michael Stapelberg 2d280469af Bugfix: Don’t draw borders for fullscreen windows 2010-11-21 17:00:10 +01:00
Michael Stapelberg 09b5b17830 Bugfix: Don’t attach tiling containers to floating containers
This bug happened when there were only floating containers on a workspace and a
new tiling window was to be opened.
2010-11-21 16:49:59 +01:00
Michael Stapelberg f53fafe100 ipc: s/floating-nodes/floating_nodes for consistency 2010-11-21 16:34:45 +01:00
Michael Stapelberg 39fa1d724a bugfix: don’t treat workspace as empty if they only have floating windows (+testcase) 2010-11-20 20:16:15 +01:00
Michael Stapelberg db651679c5 Bugfix: Properly ignore UnmapNotify events (especially for floating windows)
This fixes the bug which caused floating windows to be visible even when
switching to a different workspace.

Instead of ignoring a specific sequence, we now set an ignore_unmap counter for
each container. (So, should containers be closed too early or stay open even if
they should be closed, we probably need to have a closer look at the counter.
At the moment, it is increased by one on reparenting and unmapping (for
workspace changes) and decremented by one on each UnmapNotify event).

This system is better because a sequence does not describe a single unmap or
reparent request but a request to X11 on the network layer -- which can contain
multiple requests.
2010-11-20 19:11:43 +01:00
Michael Stapelberg 131a2f8765 debugging: implement a NOP command which just spits out its argument
You can use this in testcases to mark specific sections:
  $i3->command('nop before trying to crash')->recv;
leads to the following output in the i3 logfile:
  -------------------------------------------------
    NOP: before trying to crash
  -------------------------------------------------
2010-11-20 18:40:25 +01:00
Michael Stapelberg 576de246d8 Bugfix: when no windows to focus, return the workspace instead of NULL 2010-11-20 18:38:24 +01:00
Fernando Tarlá Cardoso Lemos 5ebb3b4832 Port the IPC socket creation code from -next. 2010-11-15 14:00:48 +01:00
Fernando Tarlá Cardoso Lemos bfa12a5819 Port the path resolution and config loading code from -next. 2010-11-15 14:00:46 +01:00
Michael Stapelberg c0c7d04264 When in tabbed mode, nail the orientation to horizontal
This is intuitive for the user as he can use the left/right keys to switch.
Also, we need to nail the orientation because you can be in either vertical or
horizontal mode when you enter the tabbed layout (like with the stacking
layout).
2010-11-15 13:55:10 +01:00
Fernando Tarlá Cardoso Lemos 8048cb2e12 Render the tabbed mode correctly. 2010-11-15 12:27:16 +01:00
Fernando Tarlá Cardoso Lemos ea1e9b20be Get rid of the remaining hardcoded height. 2010-11-15 12:25:06 +01:00
Fernando Tarlá Cardoso Lemos 69f29b2b8e Use the configured font to draw the decorations. 2010-11-15 12:24:16 +01:00
Michael Stapelberg cbd53e8a7f bugfix: check if the client leader is a managed window (Thanks fernandotcl) 2010-11-14 23:55:53 +01:00
Michael Stapelberg 76c07900c2 take into account x11 border_width settings (fixes uxterm border issue) 2010-11-14 23:44:13 +01:00
Michael Stapelberg 39b378b0a4 don’t allow useless splits, change orientation of existing split container instead 2010-11-14 23:18:39 +01:00
Michael Stapelberg e8b5a802e2 Bugfix: only set clients to floating which have a leader that is not their own window (Thanks fernandotcl) 2010-11-14 22:49:05 +01:00
Michael Stapelberg a27af52706 fix floating focus behaviour, extend testcase 2010-11-14 22:35:44 +01:00
Michael Stapelberg d401703135 Bugfix: use rectangles instead of a polygon to avoid strange rendering errors
With the polygon, when using pidgin, having the buddy list in the middle of the
screen, 200 px width, full screen high, then opening the manage accounts
window, the decorations of the buddy list were visible on the accounts window.
2010-11-14 21:17:27 +01:00
Michael Stapelberg 33eb00d6ae automatically set windows with client_leader to floating 2010-11-14 20:15:51 +01:00
Michael Stapelberg 055bd18142 Bugfix: after the first UnmapNotify, unignore the event 2010-11-14 20:15:12 +01:00
Michael Stapelberg d760a1c7b2 Bugfix: don’t kill parent when currently in tree_close() for a child of this parent 2010-11-14 20:14:09 +01:00
Michael Stapelberg f0efb3737e don’t remove floating container twice (it’s already removed in con_detach) 2010-11-14 20:11:46 +01:00
Michael Stapelberg 5d7344af8a resize/unmap container x11 windows on demand (makes background images visible again) 2010-11-14 18:52:40 +01:00
Michael Stapelberg 945632ddcb Implement setting the WM_NAME of i3 container windows for debugging 2010-11-14 16:41:46 +01:00
Michael Stapelberg e85bb09017 set withdrawn/normal state when unmapping/mapping (for xprop/java) 2010-11-14 13:53:47 +01:00
Michael Stapelberg a415d56048 parser: return a proper JSON reply on parse errors 2010-11-14 01:45:05 +01:00
Michael Stapelberg 7c6f2dbfc6 Rendering fixes for stacking mode 2010-11-13 22:39:59 +01:00
Michael Stapelberg 4cd6dd0303 port fernando’s custom background color patch 2010-11-13 20:07:49 +01:00
Fernando Tarlá Cardoso Lemos 53b98fdc7e Paint the window decorations using the theme. 2010-11-13 19:17:08 +01:00
Michael Stapelberg dc10c67060 Bugfix: Close containers which are empty due to a move (Thanks fernando) 2010-11-13 14:55:11 +01:00
Michael Stapelberg 432073dbe5 implement support for WM_TRANSIENT_FOR, expand testcase 2010-11-13 01:19:21 +01:00
Michael Stapelberg ad9be5402a Implement support for WM_CLIENT_LEADER 2010-11-12 23:46:03 +01:00
Baptiste Daroussin 1bb6906c56 Fix build on freebsd (uint32_t unknown if stdint.h not
included)
2010-11-12 23:11:36 +01:00
Michael Stapelberg 8f7bd538d8 implement configure requests, adapt testcase
testcase does not pass 100% due to clients not being reparented correctly yet.
2010-11-12 21:41:10 +01:00
Michael Stapelberg 0723876429 only re-position floating clients mapped to (0, 0), add pixels for decoration 2010-11-12 20:55:43 +01:00
Michael Stapelberg 57e602a97c respect position in geometry of floating windows 2010-11-12 20:55:26 +01:00
Michael Stapelberg e07fee4472 parser: don’t exit(1) on invalid command, use better error message 2010-11-12 20:22:55 +01:00
Michael Stapelberg 0e264cb5c4 implement different border styles
Wow, that actually was easy :).
2010-11-12 19:37:43 +01:00
Michael Stapelberg 66dc8883fd make borders around every container configurable for debugging 2010-11-12 19:37:32 +01:00
Michael Stapelberg d248f35267 include border style in ipc tree dump 2010-11-12 19:16:38 +01:00
Michael Stapelberg ea4e3e7682 parser: bugfix: initialize match when parsing new command 2010-11-12 19:07:48 +01:00
Michael Stapelberg 6eb7f2a01d lexer/parser: implement 'border' command 2010-11-12 18:41:54 +01:00
Michael Stapelberg c6c084faa5 don’t close workspaces which are still visible (multi-monitor) 2010-11-12 17:34:13 +01:00
Michael Stapelberg c1d574f84e enumerate workspaces when initializing outputs 2010-11-12 17:33:59 +01:00
Michael Stapelberg 5c2758af26 Implement support for size hints (including test case) 2010-10-11 21:32:29 +02:00
Michael Stapelberg 0925e8b7dc Implement sticky windows
The implementation works like this:
Containers can have a 'sticky-group' attribute. Imagine two different
containers (on two different workspaces) which have the same sticky-group.
Now you open a window in the first container. When you switch to the
other workspace, the window will be re-assigned to the other container.

An obvious problem which is not covered with the code at the moment is
having two containers with the same sticky-group visible at the same time.
2010-09-01 18:11:01 +02:00
Michael Stapelberg 4d12e18571 remove proof-of-concept code in main.c 2010-08-21 18:36:51 +02:00
Lourens Rozema 8159ffaa06 Bugfix for the kill command (used a.o. in test 18). Call to match_init is to be used i.o. a simple memset() to zero. Otherwise the boolean dock field doesn't get initalized to -1. 2010-08-21 18:28:37 +02:00
Lourens Rozema ebe878d24c Indent clean up. 2010-08-21 18:27:12 +02:00
Michael Stapelberg 160c12ed9a recognize dock windows (and support matching them) 2010-08-15 12:18:27 +02:00
Michael Stapelberg d066341261 ipc/parser: commands can now return custom JSON replies
Also, finally add include/cmdparse.h
2010-07-17 15:15:37 +02:00
Michael Stapelberg 189635a5dc Bugfix: Even when not going one level up, we need to travel down the whole focus stack 2010-07-17 15:08:22 +02:00
Michael Stapelberg 099df7f438 Bugfix: Keep focus on the current workspace when moving containers, add testcase 2010-07-17 13:27:34 +02:00
Michael Stapelberg 49add4f3e4 Bugfix: Don’t go further when switching focus on a CT_WORKSPACE 2010-07-17 01:56:16 +02:00
Michael Stapelberg 69e5c0f6ce Treat stacking containers as if they are in vertical orientation, add testcase 2010-07-17 01:27:47 +02:00
Michael Stapelberg 09c6b587d3 close empty parent containers, add testcase 2010-07-17 00:54:47 +02:00
Michael Stapelberg 33572b8c4b s/con->parent/parent to make it more readable
(and necessary for the next commit)
2010-07-17 00:54:03 +02:00
Michael Stapelberg 7415f14448 Add more documentation to functions/header files 2010-07-13 11:35:05 +02:00
Michael Stapelberg 60bdf87862 Bugfix: Push all following window stacking orders to X11 when the order of a single pair changed 2010-07-11 23:41:02 +02:00
Michael Stapelberg 1459ae6bf2 Bugfix: raise fullscreen containers before rendering their content 2010-07-11 23:40:50 +02:00
Michael Stapelberg a79d33fc7f Remove some dead code (to be re-implemented), rename nc.c to main.c 2010-07-11 22:12:25 +02:00
Michael Stapelberg 61f9a79347 use decimal coordinates in debug message 2010-07-11 22:01:25 +02:00
Michael Stapelberg 1a0fcea48e ipc: add member 'focused' to every container 2010-07-04 22:17:18 +02:00
Michael Stapelberg 66480d3725 Bugfix: Don’t try to focus the container itself when closing 2010-07-04 22:16:54 +02:00
Michael Stapelberg b186446fb7 Bugfix: Correctly restore focus after close (and add testcase) 2010-07-04 19:50:44 +02:00
Michael Stapelberg 49ed703299 Bugfix: Insert new containers at the right position (and add testcase) 2010-07-03 17:42:36 +02:00
Michael Stapelberg 64306e813e Bugfix: Ignore sequences of mapping/unmapping windows to avoid getting enter_notifies 2010-07-02 20:33:26 +02:00
Michael Stapelberg 5d0f17d53d bugfix: correctly focus follow up window when closing floating windows 2010-06-30 22:37:57 +02:00
Michael Stapelberg 6d152103f5 parser: implement move 2010-06-30 22:23:32 +02:00
Michael Stapelberg 565ef78b12 parser: implement resize command 2010-06-30 19:47:23 +02:00
Michael Stapelberg bd9e5c0bc4 parser: implement explicit "mode floating"/"mode tiling" 2010-06-30 15:54:34 +02:00
Michael Stapelberg 2da4173144 parser: implement "reload" 2010-06-30 15:31:29 +02:00
Michael Stapelberg ea30fdc327 parser: call tree_close_con() instead of tree_close() when run interactively 2010-06-30 15:27:18 +02:00
Michael Stapelberg 4eace6f886 Go down the tree when moving windows, add testcase for moving 2010-06-29 19:05:31 +02:00
Michael Stapelberg 948378fa55 floating: correctly kill floating containers when closing 2010-06-28 22:37:35 +02:00
Michael Stapelberg 2f4210d3cf floating: use con_fix_percent 2010-06-28 22:36:08 +02:00
Michael Stapelberg 574e6b51d1 re-implement click to focus 2010-06-28 22:26:23 +02:00
Michael Stapelberg c33d352fd2 floating: re-implement floating_modifier + left/right mouse button to drag/resize 2010-06-28 22:23:32 +02:00
Michael Stapelberg 84e78c6dba automatically set dialog windows to floating 2010-06-28 21:40:36 +02:00
Michael Stapelberg 69e1975e29 split up toggle_floating_mode into floating_enable and floating_disable 2010-06-28 21:40:17 +02:00
Michael Stapelberg 6897e15e72 Implement mark/goto, modify testcase 2010-06-02 23:32:05 +02:00
Michael Stapelberg 780e773a6a split containers do not directly accepts windows (they only have children) 2010-06-02 22:35:37 +02:00
Michael Stapelberg 5bff638ea0 bugfix: the layout command needs to change the layout of the parent container 2010-06-02 18:58:52 +02:00
Michael Stapelberg 32be3af109 Re-implement support for the urgency hint, extend t/13-urgent.t
The actual rendering will follow
2010-06-02 17:55:10 +02:00
Michael Stapelberg 7c3e88ad93 parser: implement matching on the window id 2010-06-02 17:20:32 +02:00
Michael Stapelberg 14a312c152 more debug output 2010-06-02 17:04:26 +02:00
Michael Stapelberg 1c5adc6c35 Don’t ignore sequence in UnmapNotify, there might be multiple windows in one sequence
This would lead to i3 thinking that a new window was already managed if it
has the same X-ID as the old window. Instead, we need to fix the EnterNotify
problem in a different way.
2010-06-02 17:03:26 +02:00
Michael Stapelberg a7d2c5942a Clear event mask while reparenting
This way, we can avoid to ignore UnmapNotify events generated by reparenting.
It is generally considerable to have as little ignored events as possible
due to side-effects.
2010-06-02 17:02:10 +02:00
Michael Stapelberg cea8f91e18 parser: implement 'layout' 2010-06-01 23:20:57 +02:00
Michael Stapelberg b467242d69 Make splitting a container which was already split a noop 2010-06-01 22:45:18 +02:00
Michael Stapelberg 0ce62a755e "Re-parent" floating clients whose old_parent is being closed (makes t/27 pass) 2010-06-01 21:36:02 +02:00
Michael Stapelberg 712605e69f ipc: include floating-nodes in tree reply 2010-06-01 20:50:23 +02:00
Michael Stapelberg a25dc3e988 Implement focus command (and extend t/21-next-prev.t to test it) 2010-06-01 18:49:43 +02:00
Michael Stapelberg 67a6bd5589 bugfix: allocate one more zero-byte to definitely get a zero-terminated string 2010-06-01 18:46:14 +02:00
Michael Stapelberg 935b8e05ff Implement correct removal of floating containers 2010-05-31 23:16:20 +02:00
Michael Stapelberg b14fa457e7 fix: to always abort we need to assert(false) 2010-05-31 23:08:16 +02:00
Michael Stapelberg 143622d2d7 Reposition floating windows while dragging 2010-05-31 23:01:08 +02:00
Michael Stapelberg 246d4627be re-enable sending fake configure notifies 2010-05-31 23:00:36 +02:00
Michael Stapelberg 71e0e49c0e Implement mode toggle 2010-05-31 22:48:28 +02:00
Michael Stapelberg e67c712f31 cleanup: introduce CT_WORKSPACE as type to avoid having to check parent->type 2010-05-31 00:11:11 +02:00
Michael Stapelberg a45dc6b3ad Update _NET_WM_STATE after fullscreen state changes 2010-05-26 23:21:37 +02:00
Michael Stapelberg be357a1aaa Set up _NET_WM_SUPPORTED and window manager name again
This fixes MPlayer fullscreen mode
2010-05-15 00:28:10 +02:00
Michael Stapelberg 2d52ecf071 Add parameter to reparent windows instead of killing them when closing a container
Necessary because when windows are unmapped, they are not necessary to
be killed (an application can unmap it temporarily).
2010-05-15 00:16:59 +02:00
Michael Stapelberg def41582d1 re-render the three after calling parse_cmd 2010-05-14 23:41:17 +02:00
Michael Stapelberg 8c5d824fa8 Ignore UnmapNotify events generated by reparenting 2010-05-14 23:37:56 +02:00
Michael Stapelberg 7adf921bc3 use the new parser for handling keybindings 2010-05-11 23:04:47 +02:00
Michael Stapelberg 5eae706427 grammar: s/layout_mode/window_mode 2010-05-11 23:04:21 +02:00
Michael Stapelberg c75a6732bf Implement 'restore' in new parser 2010-05-11 23:00:31 +02:00
Michael Stapelberg a0e33c1d68 implement 'move' command in the new parser 2010-05-11 22:46:49 +02:00
Michael Stapelberg 98dbe63e35 Implement exec, exit, level, restart (without testcases for now) 2010-05-10 10:12:35 +02:00
Michael Stapelberg 6a1c34d2c5 Implement 'split' 2010-05-10 09:33:10 +02:00
Michael Stapelberg 145ebc7584 Implement 'prev', extend testcase 2010-05-10 09:08:31 +02:00
Michael Stapelberg d8307f4b4a implement 'next' in the new command parser (testcase unfinished) 2010-05-10 00:06:24 +02:00
Michael Stapelberg f10a3d9b75 bugfix: really return focus list in IPC tree dump (instead of nodes list) 2010-05-10 00:00:43 +02:00
Michael Stapelberg 09523f36f5 also re-render the tree for commands using the new parser 2010-05-09 23:24:03 +02:00
Michael Stapelberg 65e9036837 bugfix: don’t clean up workspace when switching to the same workspace 2010-05-09 23:20:49 +02:00
Michael Stapelberg 0ea85c1b9d implement 'fullscreen' command 2010-04-17 19:29:44 +02:00
Michael Stapelberg b0f47b25a0 throw out some old code from manage.c, cleanups 2010-04-17 18:26:46 +02:00
Michael Stapelberg 7f3a77ac6a loglevel bitmasks needs to be larger because we got more than 32 files 2010-04-17 17:46:11 +02:00
Michael Stapelberg b93413ca49 remove old fullscreen code 2010-04-17 17:43:50 +02:00
Michael Stapelberg 6bf55dc356 implement con_toggle_fullscreen 2010-04-17 17:40:41 +02:00
Michael Stapelberg c4d87e2f81 handle destroynotify events 2010-04-17 17:27:53 +02:00
Michael Stapelberg d973f30fc2 push X11 changes after a window is mapped 2010-04-17 16:43:34 +02:00
Michael Stapelberg 68542f3c22 When assigning children to containers, reset their x window state 2010-04-17 16:41:20 +02:00
Michael Stapelberg 53dcebfd8a put container in fullscreen mode if the fullscreen state is set when mapping 2010-04-17 14:21:34 +02:00
Michael Stapelberg c56867792a handle client messages (fullscreen window state) 2010-04-17 13:54:45 +02:00
Michael Stapelberg 22f38ebde4 clear current_match when dropping state 2010-04-17 12:57:06 +02:00
Michael Stapelberg 77ec4219c9 make floating an enum (we need three states, not only two) 2010-04-16 22:57:21 +02:00
Michael Stapelberg 8d05039b04 move match_* to match.c 2010-04-16 22:51:25 +02:00
Michael Stapelberg bb220b27d7 check for empty matches 2010-04-16 22:50:20 +02:00
Michael Stapelberg e0b7ae872e move con_focus to con.c 2010-04-16 21:04:36 +02:00
Michael Stapelberg 4796798074 better debug messages 2010-04-16 21:02:34 +02:00
Michael Stapelberg 138a790cd0 clean up old workspace when switching (makes test 2 of t/16-*.t pass) 2010-04-16 20:59:21 +02:00
Michael Stapelberg 2534f21940 ignore sequence of unmapnotify events (generates enternotify events) 2010-04-16 20:56:49 +02:00
Michael Stapelberg 93600ce0fd implement con_id for matching containers, extend testcase 2010-04-16 15:30:07 +02:00
Michael Stapelberg 769501420d add first version of a new flex/bison based command parser 2010-04-14 20:26:56 +02:00
Michael Stapelberg 24725cd94a re-add fullscreen mode 2010-04-13 20:51:43 +02:00
Michael Stapelberg 8959c5005f cleanups 2010-04-13 19:33:40 +02:00
Michael Stapelberg 8e5a831e27 re-add focus follows mouse handling 2010-04-13 18:43:37 +02:00
Michael Stapelberg eec762ea8f more reformatting/cleanups 2010-04-13 17:52:23 +02:00
Michael Stapelberg dd7acf73e9 re-add support for legacy window titles (WM_NAME) 2010-04-13 17:46:54 +02:00
Michael Stapelberg fd8735a6fd correctly update/display window title/class 2010-04-13 17:22:34 +02:00
Michael Stapelberg bcfb0d2505 more reformatting 2010-04-13 16:48:42 +02:00
Michael Stapelberg 4206db2839 workspace.c: update header, reformat 2010-04-13 16:43:08 +02:00
Michael Stapelberg 6aa6fa0af0 correctly focus workspaces 2010-04-13 16:41:23 +02:00
Michael Stapelberg c145f7e529 first step of the big refactoring ("tree" branch).
From here on, we can track changes. It made no sense to put the
development up to this point into git.
2010-04-13 13:17:39 +02:00
Michael Stapelberg 41b6631f68 Bugfix: null-terminate buffer 2010-03-26 03:04:54 +01:00
Michael Stapelberg a542515f9e Fix memory leaks 2010-03-26 01:52:39 +01:00
Michael Stapelberg 7bd4ea3699 randr: Don’t enable outputs with mode 0x0
Just a sanity check for some possibly broken drivers.
2010-03-26 01:52:08 +01:00
Michael Stapelberg a151fd95a8 remove newlines 2010-03-26 00:28:30 +01:00
Michael Stapelberg 6fd56757f0 Bugfix: Assign all workspace to new outputs as new outputs get available (Thanks badboy) 2010-03-26 00:13:28 +01:00
Michael Stapelberg 1b8299002e Bugfix: Translate keysyms to keycodes before entering mode (Thanks fallen) 2010-03-25 21:18:46 +01:00
Michael Stapelberg 6699d54640 Fix rendering of workspace names after "reload" (Thanks fallen) 2010-03-25 19:08:37 +01:00
Michael Stapelberg 469f22caeb Bugfix: Correctly switch workspace when using the "jump" command (Thanks fallen) 2010-03-25 18:07:40 +01:00
Michael Stapelberg 2c42c0c760 Bugfix: Correctly check bitmask for floating_modifier 2010-03-25 02:53:53 +01:00
Michael Stapelberg 46e7cf5fe1 Handle destroy notify events like unmap notify events
This helps for windows which are immediately destroyed instead of
unmapped, like when starting i3status | ./foobar | dzen2 -dock
and foobar does not exist (i3status and dzen2 will get a SIGPIPE).
2010-03-24 16:52:16 +01:00
Michael Stapelberg e90e80c87d Bugfix: fix state of keypresses in sighandler (like in i3-input) 2010-03-24 16:10:47 +01:00
Michael Stapelberg 7eea1067f8 Bugfix: correctly translate coordinates for floating windows when outputs change 2010-03-24 16:09:43 +01:00
Michael Stapelberg 0f7ac09c7b Bugfix: Don’t unmap windows when current workspace gets reassigned
Steps to reproduce were:
1) xrandr --output VGA1 --auto --left-of LVDS1
2) open a terminal on VGA1
3) xrandr --output VGA1 --off
2010-03-24 16:06:21 +01:00
Michael Stapelberg 56139f3656 Bugfix: only restore focus if the workspace is focused, not if it is visible 2010-03-23 14:43:35 +01:00
Michael Stapelberg 42b638eac0 Bugfix: Don’t enter BIND_A2WS_COND state too early (Thanks fallen) 2010-03-22 15:12:37 +01:00
Michael Stapelberg 77efb29d9f ipc: send a workspace event when the urgency flag changes 2010-03-20 03:09:42 +01:00
Michael Stapelberg 35a791f7e6 ipc: also send workspace event when initializing a workspace for an output 2010-03-20 02:56:23 +01:00
Michael Stapelberg 46bd9ac58a Bugfix: correctly re-assign dock clients when output goes inactive 2010-03-20 02:52:06 +01:00
Michael Stapelberg aec40126b4 ipc: implement output event 2010-03-19 22:40:43 +01:00
Michael Stapelberg 4ce0d6f014 ipc: implement GET_OUTPUTS 2010-03-19 22:24:52 +01:00
Michael Stapelberg a607eae53a ipc: include the urgent flag in the workspaces reply 2010-03-19 22:01:21 +01:00
Michael Stapelberg fdcbec248a Start dock clients on the output they request to be started on according to their geometry
Use dzen2’s -xs option to use this, or specify the coordinates using
-x manually.
2010-03-19 21:44:36 +01:00
Michael Stapelberg 3c8c426011 Disable RandR if no outputs are found (Thanks fallen) 2010-03-19 18:51:19 +01:00
Michael Stapelberg ee76b2ebf6 Bugfix: When disabling RandR/Xinerama, give a name to the pseudo-output (Thanks fallen) 2010-03-19 18:51:01 +01:00
Michael Stapelberg af00df9321 Use DLOG for debug messages instead of printf (Thanks kruM) 2010-03-19 18:48:36 +01:00
Michael Stapelberg 0bb1b718d1 Fix compilation with the old xcb keysyms api 2010-03-19 16:02:33 +01:00
Michael Stapelberg 91b6c69eae little style fix for the last commit 2010-03-19 01:43:11 +01:00
Helgi Kristvin Sigurbjarnarson 62c4532329 Bugfix: Take window out of fullscreen before entering floating mode. 2010-03-19 01:24:33 +01:00
Michael Stapelberg 1680071555 randr: use effective CRTC width/height, not its mode (Thanks moemoe)
This fixes setups which use panning and cloning.
2010-03-17 15:56:26 +01:00
Michael Stapelberg a604af6340 make pointer follow the focus when moving to a different screen also for floating windows 2010-03-17 03:18:13 +01:00
Michael Stapelberg b47d0a8932 Bugfix: configure floating windows above tiling windows when moving them to another workspaces (Thanks Sasha) 2010-03-17 00:36:08 +01:00
Michael Stapelberg f7a1a9fb20 ipc: correctly shutdown IPC sockets when exiting/restarting 2010-03-16 02:44:47 +01:00
Michael Stapelberg f9e6f8ba4b Bugfix: Correctly stack windows when new windows are opened while in fullscreen mode
This fixes ticket #195.
2010-03-15 22:17:00 +01:00
Michael Stapelberg c738b2e454 Don’t use SYNC key bindings for Mode_switch but re-grab keys
Before this commit, i3 used key bindings in SYNC mode for bindings
like Mode_switch + <a> and replayed the key if the current state
did not include Mode_switch. This had some problems:

1) The WM needed to acknowledge much more key presses than you
   actually had bindings for, thus making the system a bit laggy
   sometimes.
2) Users of layouts who constantly type in the third level (like
   russian layouts) did not get their cyrillic symbols correctly
   (they were not replayed right), neither did the keybindings
   work in both modes.

So, the current implementation uses the following approach: XKB
provides an event which contains the current state (including
the current level). i3 signs up for this event and upon receival,
it re-maps the bindings using Mode_switch (enables them when the
level goes to the third level and disables them as soon as the
level goes back to normal). This fixes both problems.
2010-03-14 22:40:58 +01:00
Michael Stapelberg 2df1fb8ac8 Implement disabling the internal workspace bar 2010-03-14 12:59:45 +01:00
Michael Stapelberg 2df374ca4c Add configuration option to turn off workspace bar 2010-03-13 19:15:28 +01:00
Michael Stapelberg b6088b803e ipc: correctly set "focused" for workspaces
Didn’t work on empty workspaces before
2010-03-13 16:27:03 +01:00
Axel Wagner 9cb35383a8 Implement proportional floating-resize. 2010-03-13 13:22:39 +01:00
Michael Stapelberg 3db4890683 ipc: implement events, cleanup the code a bit 2010-03-12 21:05:05 +01:00
Michael Stapelberg d86531b958 ipc: return logical workspace numbers, not internal ones 2010-03-12 15:59:38 +01:00
Michael Stapelberg d6f726283c ipc: also send a reply for COMMAND messages 2010-03-12 15:29:44 +01:00
Michael Stapelberg 5a3d1b38e8 ipc: Correctly deal with SIGPIPE/failing write()s
If a client disconnects while i3 still wants to write the reply, this
could lead to exits of i3 before.
2010-03-12 15:02:00 +01:00
Axel Wagner 0f5256dc72 Floating resize uses arbitrary corners
This closes ticket #121
2010-03-12 03:11:20 +01:00
Michael Stapelberg 9ed5e00107 ipc: change active to visible, introduce focused
visible == currently visible on the output it is on
(multiple workspaces can be visible at the same time)
focused == has the focus (only one workspace can be focused)
2010-03-12 03:01:34 +01:00
Michael Stapelberg 7c1be83692 Update comment (Thanks Merovius) 2010-03-12 02:59:16 +01:00
Michael Stapelberg 5f370b494c bugfix: don’t remap stack windows errnously when changing workspaces
This fixes ticket #193 (long-standing rendering bug).
2010-03-12 00:41:40 +01:00
Michael Stapelberg 93a9f3c244 Bugfix: Don’t mess up x/y coordinates in configurerequests for floating windows
This was the cause for ticket #93, which actually has a false
conclusion for the reason of this bug.

This code needs to be refactored.
2010-03-11 23:34:29 +01:00
Michael Stapelberg e11ca75407 ipc: add active flag 2010-03-11 16:48:48 +01:00
Michael Stapelberg 9a9ba1b859 ipc: implement GET_WORKSPACES message type
This is the foundation to use dzen2 or similar as a complete
replacement for the internal workspaces bar.

A testcase is included, more documentation about the IPC interface
will follow.
2010-03-11 15:58:39 +01:00
Michael Stapelberg f7c8e76782 Select containers above or near the whole snapped width/height
This fixes ticket #100, and is best explained using a little example.
Consider the following layout:

+---+---+
|   | X |
+---+---+
|   X   |
+---+---+

Where X marks a window, so you have an empty container in the upper
left, the container on the bottom is snapped to the right. Before
this commit, nothing would happen when focusing "above". After
this commit, the upper window gets focused.
2010-03-11 00:15:34 +01:00
Michael Stapelberg a70f4353b7 Fix predict_text_width by using xcb_query_text_extents
This fixes ticket #173, at least for the rendering errors.
I don’t really know why I implemented predict_text_width like it
was before (querying the whole table and pulling out information
one by one). Maybe I have overlooked xcb_query_text_extents. In
any case, it works better now.
2010-03-10 23:27:24 +01:00
Michael Stapelberg bd76e994b8 Re-add old Xinerama code for the poor nvidia users
Add --force-xinerama when starting i3 to use Xinerama instead of RandR.
This should *ONLY* be done if you have no other choice (nvidia’s
binary driver uses twinview and does not expose the monitor information
through RandR).
2010-03-09 21:25:54 +01:00
Michael Stapelberg 4dfe61c2d4 Fixes for the last commit: check outputs instead of workspaces, correctly reset state when switching workspaces, little style fixes 2010-03-08 11:15:31 +01:00
Axel Wagner 9c77b0f9a1 Implement screen-spanning fullscreen-mode (command: 'fg')
This closes ticket #188
2010-03-08 11:15:31 +01:00
Michael Stapelberg 85308715ea Turn nested functions into real functions or macros
This enables compilation with llvm-clang and thus closes ticket #101.
While it makes the code more ugly, I don’t see a beautiful solution
which would enable us to stay with the more elegant solution of
nested functions and still allow compilation with any other compiler
than gcc.
2010-03-07 19:00:34 +01:00
Michael Stapelberg 46642d0e45 For num_clients == 0, the last fix is also valid 2010-03-06 16:58:20 +01:00
Michael Stapelberg afc922ef57 Avoid more errors by not trying to re-create a stack win with height == 0 2010-03-06 16:51:17 +01:00
Michael Stapelberg e9ef672c36 Don’t render if no stack_window has been opened
This could happen when you have only one client in a stacking/tabbed
container. While not being a critical bug, this avoids X errors.
2010-03-06 16:34:07 +01:00
Michael Stapelberg 6be76e4c56 Remove trailing whitespace 2010-03-05 23:26:45 +01:00
Thorsten Töpper 4e9c6515f3 Changing to stacking/tabbing toggles mode to default if already in stacking/tiling. 2010-03-05 23:25:34 +01:00
Michael Stapelberg f1a011c014 Clear urgency hints set by i3 (see HEAD~2) 2010-03-05 20:03:38 +01:00
Michael Stapelberg c367eaa369 put windows with WM_CLIENT_LEADER on the workspace of their leader
This fixes ticket #163
2010-03-05 18:01:32 +01:00
Michael Stapelberg 40475b250f Allow unsetting WM_CLIENT_LEADER (XCB_NONE is not an invalid value) 2010-03-05 17:42:50 +01:00
Michael Stapelberg 8d648b4e37 Update function names, variable names and documentation for the RandR changes 2010-03-05 16:18:41 +01:00
Michael Stapelberg 8b192ac7ed Bugfix: Correctly hide/show workspaces when enabling new outputs, correctly handle focus (Thanks Merovius) 2010-03-05 15:22:12 +01:00
Michael Stapelberg 718d62a3cd Bugfix: Fix clone mode with new RandR code (Thanks Merovius) 2010-03-05 14:32:48 +01:00
Michael Stapelberg d73f1748db Remove superfluous definitions (Thanks Merovius) 2010-03-05 01:59:52 +01:00
Michael Stapelberg 85437877e8 fix comment (Thanks Merovius) 2010-03-05 00:09:52 +01:00
Michael Stapelberg 3cfe1b35e0 Update fullscreen client position/size when an output changes (Thanks Merovius)
This fixes #187.
2010-03-03 09:32:31 +01:00
Michael Stapelberg 0ec3481c69 draw consistent borders for each frame in a tabbed/stacked container
The condition was a relict from older rendering code, I think.
This fixes #172.
2010-03-03 08:49:07 +01:00
Michael Stapelberg 187c72fa96 sighandler: only display on active outputs 2010-03-03 08:48:57 +01:00
Michael Stapelberg e5f222e03e Save a resize_client() when handling the size hints 2010-03-03 01:23:38 +01:00
Michael Stapelberg 7839b7a4fe Bugfix: checked for wrong flag in size hints 2010-03-03 01:23:38 +01:00
Michael Stapelberg 5dbcb0158f When in fullscreen mode, focus whole screens instead of denying to focus (Thanks dothebart)
This fixes ticket #169.
2010-03-02 15:45:48 +01:00
Michael Stapelberg e3e7ebe23a Bugfix: only return active screens in get_screen_most 2010-03-02 15:45:03 +01:00
Michael Stapelberg 4e69bd65c0 Move autostart after creating the IPC socket in start process (Thanks Sasha)
This fixes ticket #179.
2010-03-02 15:30:23 +01:00
Michael Stapelberg b53c5861a2 Restore geometry of all windows before exiting/restarting (Thanks Sasha)
This fixes ticket #185
2010-03-02 15:25:08 +01:00
Michael Stapelberg d08ec00329 use scalloc instead of some places where calloc was still used 2010-03-02 14:42:24 +01:00
Michael Stapelberg aae824b1f3 Change workspace assignments to use the RandR output name instead of <screen> 2010-03-02 13:35:43 +01:00
Michael Stapelberg 818e02ef35 huge change: implement RandR instead of Xinerama
Thanks to Merovius for doing a proof of concept on this one and
being a driving force behind the idea.

Using RandR instead of Xinerama means that we are now able to use
the full potential of the modern way of configuring screens. That
means, i3 now has an idea of the outputs your graphic driver
provides, which allowed us to get rid of the ugly way of detecting
changes in the screen configuration which we used before. Now, your
workspaces should not be confused when changing output modes anymore.

Also, instead of having ugly heuristics to assign your workspaces
to (the screen at position X or the second screen in the list of
screens) you will be able to just specify an output name.

As this change basically touches everything, you should be prepared
for bugs. Please test and report them!
2010-03-02 12:47:21 +01:00
Michael Stapelberg 6f72970ece add xcb_set_window_rect which configures a window according to a Rect 2010-02-28 20:35:30 +01:00
Michael Stapelberg 7caf98dd18 Move update_if_necessary to util.c, will be necessary later 2010-02-28 18:39:11 +01:00
Michael Stapelberg e209fd7d3a docs: the comparison is size and position, not only size (Thanks Merovius) 2010-02-22 07:09:17 +01:00
Michael Stapelberg 4fcbb7980e work around clients setting 0xFFFF as resize increments
I am not sure if behaviour is specified for this case, but as the
workaround is not really a big deal, why bother…
2010-02-20 20:32:43 +01:00
Michael Stapelberg 432f06a21e Add missing carriage return (Thanks fallen) 2010-02-16 19:55:04 +01:00
Michael Stapelberg e225742415 Make the warning about $terminal being deprecated an error (Thanks fallen) 2010-02-16 19:25:07 +01:00
Michael Stapelberg e78bb02082 parser: ignore errors 2010-02-14 16:59:22 +01:00
Michael Stapelberg 2af2bc36c9 Document the new options 2010-02-13 19:58:43 +01:00
Michael Stapelberg 64cf88403d lexer/parser: proper error messages
Error messages now look like this:

13.02.2010 19:42:30 - ERROR:
13.02.2010 19:42:30 - ERROR: CONFIG: syntax error, unexpected <word>,
expecting default/stacking/tabbed or stack-limit
13.02.2010 19:42:30 - ERROR: CONFIG: in file "inv", line 15:
13.02.2010 19:42:30 - ERROR: CONFIG:   new_container foobar
13.02.2010 19:42:30 - ERROR: CONFIG:                 ^^^^^^
13.02.2010 19:42:30 - ERROR:
2010-02-13 19:42:54 +01:00
Michael Stapelberg 79a4e30488 parser: enable verbose error messages, add aliases to tokens 2010-02-13 15:27:43 +01:00
Michael Stapelberg e446747812 Also warp the pointer when moving a window to a another visible workspace (Thanks Thomas) 2010-02-12 16:19:58 +01:00
Michael Stapelberg 87f8c501da Bugfix: Correctly do boundary checking/moving to other workspaces when moving floating clients via keyboard (Thanks sasha) 2010-02-12 13:06:59 +01:00
Michael Stapelberg 0b6b8e8380 Bugfix: Use both parts of WM_CLASS (it contains instance and class) (Thanks fallen)
Actually, WM_CLASS contains two null-terminated strings, so we cannot
use asprintf() to get its value but rather use strdup() to get both
of them. Both values are compared when a client is matched against
a wm_class/title combination (for assignments for example).
2010-02-12 12:12:25 +01:00
Michael Stapelberg 88b9700cdb Invert logic for the last commit
This makes it more clear that the option is meant to be a special
case (it *disables* part of the focus handling). Also, when
initializing the config data structure with zeros, it will get
initialized with the right value.

Furthermore, the config file parser now also accepts various values
which represent "true", not only numbers.
2010-01-29 21:58:50 +01:00
Kim Silkebækken (lokaltog) 7f10970fc7 Added focus_follows_mouse config option 2010-01-29 21:58:50 +01:00
Kim Silkebækken (lokaltog) 36909c6e3b Fixed cursor code in create_window(), allowing the cursor to be changed 2010-01-26 11:28:38 +01:00
Kim Silkebækken (lokaltog) 148547c765 Fixed cursor orientation when resizing 2010-01-26 11:28:37 +01:00
Michael Stapelberg 7270b74732 Implement resize command for floating clients 2010-01-23 18:57:29 +01:00
Michael Stapelberg fde11f9a5c Bugfix: Don’t leak IPC socket to launched processes 2010-01-23 00:34:29 +01:00
Cedric Staub c606d93630 Feature: Cycle through workspaces
On command pw/nw, cycle through all workspaces (starting from
previous/next one) until we reach the current one again.
2010-01-19 12:10:45 +01:00
Michael Stapelberg d949a335e6 bugfix: lexer: return to INITIAL state (Thanks dirkson)
'floating_modifier' after 'workspace' did not work because of wrong
state
2010-01-08 18:56:01 +01:00
Michael Stapelberg af0b33bcc3 Bugfix: if a font provides no per-char info for width, fall back to the default (Thanks Ciprian) 2010-01-07 14:38:00 +01:00
Michael Stapelberg b6de565445 Bugfix: Use ev_loop_new instead of ev_default_loop because the latter one blocks SIGCHLD (Thanks Ciprian)
SIGCHLD was inherited to child processes started by i3 and not
all of them unblocked it (shells generally did, though), leading to
zombie processes.
2010-01-07 13:36:52 +01:00
Michael Stapelberg 44191d5ffc sighandler: last little style fixes 2010-01-03 22:07:39 +01:00
Michael Stapelberg 2b1a132c39 grab the pointer inside the signal handler popup 2010-01-03 22:02:07 +01:00
Michael Stapelberg be33c8e599 Check return code of sigaction() 2010-01-03 21:55:22 +01:00
Michael Stapelberg a69dfb3f06 Remove expose event mask, expose events will not be generated in any case 2010-01-03 21:55:02 +01:00
Michael Stapelberg 7b2363776a Use DLOG instead of LOG, remove unnecessary debug statement 2010-01-03 21:54:47 +01:00
Michael Stapelberg 0c35573e51 some little style changes 2010-01-03 21:54:26 +01:00
Michael Stapelberg 8afdf54078 Update copyright to 2010 2010-01-03 21:53:30 +01:00
Jan-Erik Rediger 614b360bd4 added popup for handling SIGSEGV or SIGFPE
the popup is placed on each of the virtual screens
the user can decide to restart or quit i3
in case of an exit a core-dump is generated
2010-01-03 21:32:50 +01:00
Michael Stapelberg 715983024d ewmh: Don’t push workspaces with width=0 and height=0 (Thanks Atsutane, badboy)
Even though i3 cannot know the width/height of some workspaces as
long as they are not initialized (say you used workspace 1 and 3,
but not workspace 2), some applications require this information.
In this case, it was Firefox which intersects the available workareas
(see mozilla/gfx/src/gtk/nsScreenGtk.cpp) and did not position some
windows correctly when being confronted with zero-width/height
workspaces.
2010-01-03 18:36:50 +01:00
Michael Stapelberg 7c130fb540 Obey the XDG Base Directory Specification for config file paths
This means you can now put your i3 config into
$XDG_CONFIG_HOME/i3/config, which probably is ~/.config/i3/config
if not set otherwise.
2010-01-03 16:58:41 +01:00
Michael Stapelberg ba2dd3a3eb Bugfix: Containers could lose their snap state (Thanks Atsutane)
When being on a different workspace than the one where the snapped
container is, the function to cleanup cols/rows would clean up too
much.
2010-01-01 22:40:50 +01:00
Michael Stapelberg 092f3139d8 Remove superfluous #include <assert.h> (Thanks badboy) 2010-01-01 17:30:27 +01:00
Michael Stapelberg 65cae2cad1 Bugfix: Don’t put dock clients into floating mode (Thanks xeen) 2010-01-01 16:19:42 +01:00
Michael Stapelberg 75aac5bc02 ewmh: implement support for _NET_WORKAREA (rdesktop can use that)
Please note that rdesktop’s -g workarea option will not work on
64-bit systems at the moment because of a bug in rdesktop (see the
rdesktop-devel mailing list).
2009-12-31 17:48:41 +01:00
Michael Stapelberg e7e9e8e49d ewmh: correctly set _NET_ACTIVE_WINDOW 2009-12-25 15:19:39 +01:00
Michael Stapelberg 0641e6a1a3 ewmh: correctly set _NET_CURRENT_DESKTOP to the number of the active workspace 2009-12-25 15:05:17 +01:00
Michael Stapelberg ba82a3e63b Bugfix: Fix NULL pointer dereference in workspaces which have preferred screens but were not used yet (Thanks badboy) 2009-12-23 00:39:03 +01:00
Michael Stapelberg 3e53ecf69e retab! src/container.c 2009-12-22 23:43:05 +01:00
Michael Stapelberg 848d9c1b01 Make containers containing exactly one window behave like default containers
Starting from this commit, a borderless window will always be
borderless if it is the only window in a container. For example,
you can have Firefox borderless in a tabbed container and as soon
as the download manager or a viewer gets opened, the container
will be rendered like a normal tabbed container.

This solves the user-interface dilemma of borderless/1-px-border
windows inside stacked/tabbed containers, at least for this special
case. Thanks to Merovius for this suggestion.
2009-12-22 23:40:06 +01:00
Michael Stapelberg 9df64a8d0a Correctly exit when another window manager is already running
This is implemented by checking if setting the redirect mask returned
an error or not.
2009-12-22 11:29:24 +01:00
Michael Stapelberg e900a8d23d xinerama: correctly put windows which are assigned to a specific screen on that screen when it becomes available (Thanks badboy) 2009-12-21 22:30:08 +01:00
Michael Stapelberg 0b5554c762 xinerama: change some log messages to errors 2009-12-21 20:41:02 +01:00
Michael Stapelberg 6ef0d1fa79 Touch each log message and classify it as DLOG (debug), ELOG (error) or LOG (verbose) 2009-12-19 22:40:23 +01:00
Michael Stapelberg 37d795c81d Add new options -V for verbose mode and -d <loglevel> for debug log levels 2009-12-19 22:40:23 +01:00
Michael Stapelberg 4226cc61de add log.c/log.h which contain all the log related macros and functions 2009-12-19 22:40:23 +01:00
Michael Stapelberg 937048d47b Distribute rest space between windows as long as possible. (Thanks msi)
When having 8 windows in a container which has 766 px available,
you ended up losing 0,75 px per window which would quickly sum up.
Now, the rest space (6 px in this example) is distributed in units
of one pixel to as many windows as possible.
2009-12-13 17:02:22 +01:00
Michael Stapelberg f87b98e0a7 Take into account the window’s base_{width,height} when resizing (Thanks Mirko) 2009-12-12 22:27:57 +01:00
Michael Stapelberg 8d8804221b Partly revert 4ba26659, it was just wrong. 2009-12-12 21:42:56 +01:00
Michael Stapelberg c6c0862e24 Bugfix: Correctly check for fullscreen windows when mapping new clients
CUR_CELL only works if you currently are in that container (not for
windows which are assigned to invisible workspaces, for example).
2009-12-12 21:31:41 +01:00
Michael Stapelberg 4afe65eea2 Bugfix: Correctly place new windows below fullscreen windows (Thanks Moredread)
This bug could happen if you have floating and tiling windows (for
example Firefox in tiling mode and its Open dialog in autmatically
floating mode) and you opened a new tiling window while in fullscreen.

i3 would then place the window below the floating windows, but
floating clients are above fullscreen windows. Thus, the client
would be placed above the fullscreen window.
2009-12-12 21:29:07 +01:00
Michael Stapelberg ffe925f733 Bugfix: Fix assignments to not yet visible workspaces
This was broken by commit 5a1668db3
2009-12-12 18:43:30 +01:00
Michael Stapelberg 17082ef5b7 Bugfix: close file handle after parsing 2009-12-11 17:57:42 +01:00
Michael Stapelberg e5c4fa6c1c Include unistd.h for usleep() 2009-12-08 20:55:17 +01:00
Michael Stapelberg ddf3119552 Bugfix: Don’t resize client after base_height changes if client is in fullscreen mode 2009-12-08 20:52:19 +01:00
Michael Stapelberg befd7f6f22 Bugfix: Use more precise floating point arithmetic (Thanks helgiks)
This prevents errors in rounding leading to an unoccupied space of
-1 which in turn leads to infinity when calculating the new size
of a container after resizing.
2009-12-08 11:48:25 +01:00
Michael Stapelberg 1a53cc067b When no screens are found, don’t hog the CPU. Also, wait longer for screens (10 seconds).
Instead of just going on, i3 will exit cleanly now, putting an
appropriate message into the logfile.
2009-12-07 16:31:49 +01:00
Michael Stapelberg ec2e5e8364 Bugfix: Fix two problems in resizing floating windows with right mouse button (Thanks Mirko)
Minimum width/height was not consistent with the limit for grabbing
and resizing a window at its border.
If one of both was violated (width < min_width for example), none
of them were updated.
2009-11-26 22:17:38 +01:00
Michael Stapelberg 5a1668db36 Bugfix: Render containers after setting the client active (Thanks Mirko)
This lead to race conditions when the window did not change its title
after mapping and was displayed in a tabbed container.
2009-11-26 21:32:53 +01:00
Michael Stapelberg 5329ed0158 Bugfix: Resize client after updating base_height/base_width (Thanks Merovius)
This fixes the problem that urxvt/xterm "lost" a line of space before
being resized the first time.
2009-11-23 09:42:38 +01:00
Michael Stapelberg d2a88f7089 Bugfix: Don’t ignore urgency flag when the client wants to clean it (Thanks Syntropy) 2009-11-23 08:35:40 +01:00
Michael Stapelberg 4ba26659fd Bugfix: Fix stack-limit cols, handle stack-limit cols on tabbed containers (Thanks jace) 2009-11-22 22:48:08 +01:00
Michael Stapelberg 4ace0d2138 config: delete old parser, new lexer/parser is the default by now 2009-11-22 20:25:33 +01:00
Michael Stapelberg 52945486fd Bugfix: Also fix horizontal resizing
The same problem as in the commit before this one was present. Additionally,
the dock_clients and internal bar were not taken into account everywhere.
2009-11-22 14:32:40 +01:00
Michael Stapelberg 2c8b041500 Bugfix: Correctly calculate width when resizing (Thanks Merovius) 2009-11-22 14:05:35 +01:00
Michael Stapelberg 29464dc791 Bugfix: Don’t set the urgency flag if the window is currently active 2009-11-20 15:55:54 +01:00
Michael Stapelberg c0256edd2e Bugfix: Accept underscores in bindsym (Thanks jace) 2009-11-20 15:33:38 +01:00
Michael Stapelberg c5da7bd266 Bugfix: Fix resizing of floating windows in borderless/1-px-border mode (Thanks Grauwolf)
Calculations were wrong (they simply didn’t take into account that
there is more than one border style, the code was from before we
implemented that…). We cannot directly set child_rect to the coordinates
as resize_client takes rect and calculates the child_rect, so we need
the new lines of code for this bugfix in any case (rect needs to be
updated).
2009-11-18 22:53:17 +01:00
Michael Stapelberg 82c32616e1 Bugfix: Correctly clear the urgency hint if a window gets unmapped without clearing the hint 2009-11-18 20:20:54 +01:00
Michael Stapelberg 6a5bdf6f8e Bugfix: Also allow WORDs as workspace names (Thanks Grauwolf) 2009-11-18 19:53:57 +01:00
Michael Stapelberg fb04388289 Bugfix: Don’t hide window titles in tabbing mode (Thanks badboy) 2009-11-15 17:35:15 +01:00
Michael Stapelberg d266474f97 Remove the terminal option from config.
The welcome message is displayed using xmessage(1), not using your
terminal. Thus, it makes no sense to have this option anymore. Also,
the new lex/yacc parser cannot correctly handle the situation:
normal variables are expanded before parsing the file. As a replacement,
you can use:
  set $terminal /usr/bin/urxvt
2009-11-13 20:36:59 +01:00
Michael Stapelberg aa2e0d7d14 Bugfix: Correctly replay pointer if the click handler does not trigger (Thanks merovius) 2009-11-13 20:22:23 +01:00
Michael Stapelberg d48a515752 Bugfix: Correctly switch border types for floating windows (Thanks msi) 2009-11-13 19:55:34 +01:00
Michael Stapelberg 51b937741d Bugfix: Don’t draw window title when titlebar is disabled (Thanks msi) 2009-11-13 19:46:07 +01:00
Michael Stapelberg c0c4dd2978 Disable XKB instead of quitting with an error (Thanks sur5r)
This is necessary for running i3 in Xvnc for example.
2009-11-13 00:30:42 +01:00
Michael Stapelberg 4b1bb7d19a Add ctrl as synonym for control 2009-11-12 20:28:09 +01:00
Michael Stapelberg 47ebb9e1dd Fix compilation warning on OpenBSD (Thanks bapt) 2009-11-10 00:07:40 +01:00
Michael Stapelberg bf728be09b parser: Use right parameter, suppress warning about expected shift/reduce conflict 2009-11-09 22:36:26 +01:00
Michael Stapelberg f2dcc36333 Bugfix: WHITESPACE was missing in front of the workspace name (Thanks Mirko) 2009-11-08 21:43:47 +01:00
Michael Stapelberg 316f62dfda Fix rendering of 1-px-border windows which require background filling 2009-11-08 13:04:14 +01:00
Michael Stapelberg f1ecf08df5 s/for(/for (/ 2009-11-08 12:45:33 +01:00
Michael Stapelberg 64c99cb235 Implement configuration setting to change the default border of windows 2009-11-08 12:43:01 +01:00
Michael Stapelberg 876417f49d Bugfix: Don’t access wrong parameter (Thanks atsutane) 2009-11-07 16:51:10 +01:00
Michael Stapelberg 037605e34c Use nicer colors for focused_inactive by default 2009-11-06 18:41:17 +01:00
Michael Stapelberg 5583dfa5e4 parser: Solve last shift/reduce conflicts 2009-11-06 17:26:17 +01:00
Michael Stapelberg 8e1945a990 parser: solve shift/reduce conflict by moving WHITESPACE token to the right place 2009-11-06 17:19:01 +01:00
Michael Stapelberg 6aab45e7a4 configfile: make whitespace optional for modes (Thanks tsdh) 2009-11-06 15:42:03 +01:00
Michael Stapelberg 3b05d9df60 Bugfix: Cleanup stack window also when in tabbing mode (Thanks litemotiv) 2009-11-04 22:37:43 +01:00
Michael Stapelberg dd086864ce Apply fix of the previous commit also for columns 2009-11-04 22:12:15 +01:00
Michael Stapelberg 2a0278b519 Bugfix: Switch layout mode after initializing all containers in a new row 2009-11-04 22:10:26 +01:00
Michael Stapelberg 2a0b1adab9 Also support xcb-keysyms < 0.3.4 when using bindsym (Thanks ch3ka) 2009-11-02 23:15:08 +01:00
Michael Stapelberg 0d327b7d17 Fix compilation warning 2009-11-02 23:14:21 +01:00
Michael Stapelberg de3ca5c600 Bugfix: Ignore trailing/leading whitespaces when defining a mode (Thanks badboy)
…and shame on you for trailing/leading whitespace :).
2009-11-02 23:13:22 +01:00
Michael Stapelberg a817519c0d Bugfix: Prevent a division through zero (Thanks xeen) 2009-10-29 00:33:20 +01:00
Michael Stapelberg 16d33ec9df Bugfix: Correctly re-assign dock_clients to the first screen when their screen disappears
This could lead to a null-pointer dereference when closing dock
clients that got lost.
2009-10-28 15:37:34 +01:00
Michael Stapelberg fe2e4991d8 Bugfix: Use the right pointer for bar.* colors (Thanks shatter) 2009-10-23 23:13:38 +02:00
Michael Stapelberg 15d83d472b Fix debug message in cfgparse.y (Thanks shatter) 2009-10-23 22:57:35 +02:00
Michael Stapelberg 80551834d2 Bugfix: Allow dock clients to reconfigure their height (Thanks Grauwolf) 2009-10-23 16:07:03 +02:00
Michael Stapelberg da97b89b31 Bugfix: Don’t allow moving/resizing of fullscreen windows (Thanks xeen) 2009-10-13 08:26:35 +02:00
Michael Stapelberg 04884ab8cd Bugfix: Fix NULL pointer dereference when reconfiguring screens
This did not happen all the time. It seems like you need to have a
container which is in stacking/tabbing mode on the screen which
is being reconfigured. (when doing xrandr --output VGA1 --off for
example)
2009-10-12 18:31:31 +02:00
Michael Stapelberg 2b679c6b9e Fix HEAD^ 2009-10-11 14:30:57 +02:00
Michael Stapelberg d4ff702f19 Bugfix: Also apply the fix of 74ccdb4 when re-querying xinerama screens (Thanks Scytale) 2009-10-11 14:28:27 +02:00
Michael Stapelberg 3779f9292f Bugfix: IPC: Correctly handle the case when multiple messages get received at once via the socket
When the sending application was so fast (*cough*) that the messages
could get queued by the kernel, it may happen that we receive multiple
messages at once.
2009-10-07 21:49:24 +02:00
Michael Stapelberg ad84c07c8a Bugfix: Correctly position bar window when using xrandr --below or --above (Thanks Mirko, dirkson) 2009-10-07 20:52:53 +02:00
Michael Stapelberg 44c4c9d5a6 Bugfix: Go to the target workspace before changing focus on goto command (Thanks yurifury) 2009-10-07 20:41:21 +02:00
Michael Stapelberg df58981b57 Bugfix: Correctly restore the focus to the root screen after unmapping the last client (Thanks Rasi)
Sometimes, it may happen that the focus is "nowhere" and thus the
user is stuck. This was often the case with opera, sometimes with
pcmanfm. See ticket #118.
2009-10-07 20:26:13 +02:00
Michael Stapelberg f72161d0c2 Bugfix: parser: Correctly generate colorpixels from hex codes 2009-10-01 12:29:27 +02:00
Michael Stapelberg 6aa0f965d2 Fix warnings in lexer/parser 2009-09-29 22:47:37 +02:00
Michael Stapelberg c4df9f1d95 Bugfix: Correctly initialize workspaces when initializing > 1 workspace (Thanks Mirko) 2009-09-29 22:25:08 +02:00
Michael Stapelberg 2b70e05ee9 Refactor workspaces to be stored in a TAILQ instead of an array
This fixes many problems we were having with a dynamically growing
array because of the realloc (pointers inside the area which was
allocated were no longer valid as soon as the realloc moved the
memory to another address).

Again, this is a rather big change, so expect problems and enable
core-dumps.
2009-09-29 19:45:41 +02:00
Michael Stapelberg 5a77081c55 Bugfix: When rendering, skip containers which are not yet initialized
This is necessary now, because when creating a new row, several
containers have to be created. Since the implementation of the default
mode for containers, this also involves rendering the layout. However,
when rendering the layout, all of the containers are potentially
accessed…
2009-09-29 12:26:53 +02:00
Michael Stapelberg 9ec6ea61de Bugfix: Don’t crash when changing workspace when there is more than one column 2009-09-29 12:21:07 +02:00
Michael Stapelberg ff0e9bb954 Bugfix: Fix parsing symbols which contain numbers, like F1 or 1 for bindsym (Thanks Rasi) 2009-09-29 11:32:57 +02:00
Michael Stapelberg 095de9eaab Bugfix: partly revert f3880928, client->workspace was not updated (Thanks msi) 2009-09-29 01:07:51 +02:00
Michael Stapelberg bfd704c523 Fix syntax for resize command 2009-09-29 00:54:27 +02:00
Michael Stapelberg d230b2bb1a Bugfix: Create new workspace when there are no free existing ones to assign (Thanks msi)
As the workspaces are now created dynamically, we cannot rely on
the workspaces to be there when we need them without creating them.
On the other hand, this eliminates the case that there are no workspaces
to assign to a new screen, because now we can just create one.
2009-09-28 18:02:11 +02:00
Michael Stapelberg e101940c5e Implement options to change the default mode of containers
The following new directives have been implemented for the configuration
file:

	new_container <default|stacking|tabbed>
	new_container stack-limit <cols|rows> <value>

Note that they require using the new lexer/parser, which you can
do by passing -l to i3 when starting.
2009-09-27 23:08:27 +02:00
Michael Stapelberg fa868ed61c Bugfix: parser: limit of 10 workspaces is gone 2009-09-27 23:05:07 +02:00
Michael Stapelberg 226664d288 Remove debug message 2009-09-27 23:04:41 +02:00
Michael Stapelberg 058d9cc3a2 Handle ipc_socket like ipc-socket
We should use underscores to be consistent
2009-09-27 20:44:24 +02:00
Michael Stapelberg 8f67eba044 Implement modes. Modes allow you to use different keybindings and switch between them.
For example, you can create a mode which will let you resize windows
with some easy to use keys. So, instead of binding a combination
of your homerow and modifiers to resize, like this:

	bind Mod4+44 resize right +10
	bind Mod4+45 resize right -10
	...

You can instead define a new mode:

	mode "resize" {
		bind 44 resize right +10
		bind 45 resize right -10
		...
		bind 36 mode default
	}

	bindsym Mod4+r mode resize

So, if you press Mod4+r now, your keybindings will be set to the ones
defined in your resize mode above. You can then use your homerow
(without any other modifier) to resize the current column/row and
press enter to go back to the default mode when you are done.

Note that using this option requires you to enable the new lexer/parser
by passing the -l flag to i3 when starting.
2009-09-27 18:45:39 +02:00
Michael Stapelberg 97d949d16c Bugfix: Correctly re-grab keys when using the new lexer 2009-09-27 18:45:17 +02:00
Michael Stapelberg d916e075c3 parser: Implement parsing mode sections
Wait for further commits before they are actually used.
2009-09-27 17:02:13 +02:00
Michael Stapelberg 051caf571d retab! cfgparse.y 2009-09-27 17:02:05 +02:00
Michael Stapelberg 55f4e5ab68 Add vim modeline to lexer/parser 2009-09-27 17:01:06 +02:00
Michael Stapelberg c2a42dd503 lexer: Allow whitespace before comments 2009-09-27 17:00:37 +02:00
Michael Stapelberg 9b1699f4c4 Add documentation for workspace_get() 2009-09-27 15:20:47 +02:00
Michael Stapelberg f38809288a Make number of workspaces dynamic (no longer limited by 10)
Warning: This is not yet thoroughly tested, so be prepared to
encounter some segfaults. Please enable logging and coredumps,
so we can fix bugs quickly.
2009-09-27 14:00:54 +02:00
Michael Stapelberg a55d0b77fe Implement resize command
Syntax: resize <left|right|up|down> [+|-]<pixels>
2009-09-26 17:18:50 +02:00
Michael Stapelberg 7be41492c6 Obey the client’s border_width setting (Thanks shatter)
xterm by default sets a border_width of 2. This was not taken into
account when determining the size of the window by i3. Still, you
probably want to set this to 0 in your .Xresources as the pixels
are just lost.
2009-09-26 13:47:48 +02:00
Michael Stapelberg b898058105 Fix some compilation warnings (Thanks mxf) 2009-09-26 13:30:32 +02:00
Michael Stapelberg 2493c4b232 Bugfix: Fix resizing on second monitor (Thanks litemotiv)
We now use the virtual screen’s size/position instead of the X root
window for the grabwin (grabwin = the area in which the pointer may
move when resizing).
2009-09-25 18:08:37 +02:00
Michael Stapelberg f4ec7fdfe9 Implement stack-limit for further defining how stack windows should look
Using this command, you can limit the amount of columns or rows for
a stacking container. This allows for better usage of screen estate
when using stacking containers with many clients.

Examples:
  i3-msg "stack-limit cols 2"
You will now have a stack window which has two columns of windows.
2009-09-22 18:07:59 +02:00
Michael Stapelberg d3752007ed Remove old code 2009-09-22 18:07:48 +02:00
Michael Stapelberg d9ca8e8d1a Move handler for clicking to its own file 2009-09-22 18:07:25 +02:00
Michael Stapelberg 3ada8f326c Implement vim-like marks
Commands are 'mark' and 'goto'. Both can be used either directly,
like 'mark a' and 'goto a', or interactively (just 'mark'). For
interactive mode, i3-input must be installed and in your PATH.
2009-09-20 16:54:29 +02:00
Michael Stapelberg 0e8b87e9da lexer: Implement workspace <number> "<name>" 2009-09-19 19:39:06 +02:00
Michael Stapelberg 0ed2d62263 lexer: return HEX instead of NUMBER when parsing colors 2009-09-19 19:34:02 +02:00
Michael Stapelberg b1ebbde153 Merge branch 'lex' into next 2009-09-19 19:06:57 +02:00
Michael Stapelberg ca472559b9 Finish configfile parsing with lexer, implement -l to use the lexer.
Every user is encouraged to use -l to switch to the new lexer and
see if there are any problems.
2009-09-19 19:05:15 +02:00
Michael Stapelberg 775d3a0d91 Make gcc happy about some possibly uninitialized variables (Thanks badboy)
This warning only showed up with CFLAGS=-O2.
The variables in question could never be uninitialized because
they were definitely set, have a look at the code. But anyways,
less warnings is always a good thing ;-).
2009-09-15 16:58:10 +02:00
Michael Stapelberg 207ad0a7df Implement most code to actually set the configuration settings 2009-09-13 22:13:28 +02:00
Michael Stapelberg 7fda4a2c32 Make variable expansion work with the new parsing 2009-09-13 21:32:58 +02:00
Michael Stapelberg 2986636e03 Fix some parsing problems, retab! 2009-09-13 18:40:35 +02:00
Michael Stapelberg 268bf71222 Implement option -p to test if the lexer/parser can parse your configfile (specify -c before) 2009-09-13 14:54:27 +02:00
Michael Stapelberg 9dd975e974 Add first version of lexer/parser to git, update Makefile 2009-09-13 14:16:39 +02:00
Michael Stapelberg 30ad7e93e7 Bugfix: Re-distribute free space when closing rows which were horizontally resized 2009-09-12 19:58:39 +02:00
Michael Stapelberg ce40f79c47 Implement right mouse button + dragging to resize tiling clients aswell 2009-09-12 19:51:50 +02:00
Michael Stapelberg 6f2638f526 Bugfix: Correctly warp pointer *after* rendering the layout
This is necessary because otherwise the window into which the
pointer is warped still is at its old position, so that the pointer
will effectively be warped onto the wrong screen in case of moving
a window to another screen.
2009-09-12 18:46:52 +02:00
Michael Stapelberg 739f4f35aa Compilation fix for the last commit 2009-09-12 18:34:03 +02:00
Michael Stapelberg 3b59f5829f Bugfix: Correctly initialize workspaces for floating clients, too 2009-09-12 18:18:41 +02:00
Michael Stapelberg 4d01a02dba Bugfix: Correctly initialize workspace when moving clients (Thanks tsdh) 2009-09-12 18:15:32 +02:00
Michael Stapelberg cef5778097 Bugfix: Fix clicking on stack windows in tabbed mode (Thanks Atsutane) 2009-09-10 21:05:29 +02:00
Michael Stapelberg bf043cd2bd Some little style adjustments for badboy’s patch 2009-09-10 18:48:16 +02:00
Jan-Erik Rediger 40bc7c93d0 Implement command to toggle border style
Use 'bt' to toggle from normal to 1-px, borderless and back.
2009-09-10 18:44:27 +02:00
Michael Stapelberg ff1ae52e6b Fix compilation warning because of missing braces 2009-09-10 16:29:23 +02:00
Michael Stapelberg 9f02fb7a3a Bugfix: Don’t handle WM_HINTS if it is not set (Thanks mxf) 2009-09-10 16:27:50 +02:00
Michael Stapelberg e4813d009a Bugfix: Correctly handle unmap-notify events when resizing (Thanks Mirko) 2009-09-07 21:18:44 +02:00
Michael Stapelberg 2ff2a6a315 Implement the urgency hint for windows/workspaces
Thanks to Mikael for bringing it to my mind. This change introduces
two new color classes, client.urgent and bar.urgent. By default,
urgent clients are drawn in red (colors by Atsutane).
2009-09-06 22:40:11 +02:00
Michael Stapelberg e893902585 Implement horizontal resize 2009-09-06 16:50:45 +02:00
Michael Stapelberg a81108c527 Bugfix: Initialize screens correctly when not using Xinerama (Thanks Mikael) 2009-09-05 19:17:59 +02:00
Michael Stapelberg ca8a194c56 Bugfix: Correctly grab the right mouse button for resizing windows (Thanks xeen) 2009-09-05 17:32:26 +02:00
Michael Stapelberg a8352a8988 Merge patches for OpenBSD compatibility 2009-09-02 22:25:50 +02:00
Michael Stapelberg ae2371ee58 Implement long options (--version, --no-autostart, --help, --config) 2009-09-02 22:14:09 +02:00
Michael Stapelberg 67dcd9df28 Bugfix: In stacked/tabbed mode we need the regular border color (Thanks badboy) 2009-09-02 21:59:31 +02:00
Michael Stapelberg 100cc6b717 Bugfix: If the pointer is outside of the screen when starting, fall back to the first screen (Thanks mxf) 2009-08-31 20:27:44 +02:00
Michael Stapelberg 2b49c6086d Bugfix: Don’t display unnamed workspaces with %d: (Thanks Mirko) 2009-08-29 11:06:34 +02:00
Michael Stapelberg d333b8534d Bugfix: Draw black border instead of background-color around clients with {width,height}_increment (Thanks xeen) 2009-08-29 11:03:14 +02:00
Michael Stapelberg 39457338e4 Bugfix: Don’t crash if the numlock symbol cannot be found (Thanks xeen) 2009-08-27 21:34:07 +02:00
Michael Stapelberg 39f002e0b1 Bugfix: Don’t call resize_client if the width/height increment properties did not change
This avoids an endless loop, preventing clients to go to fullscreen
2009-08-25 23:16:17 +02:00
Michael Stapelberg 55b1bf4582 Bugfix: Correctly use base_width/base_height and size increment hints, correctly send fake configure notify events 2009-08-23 21:49:38 +02:00
Michael Stapelberg 8c4e2e48f4 Don’t round up if the corrected height/width is the same as the old one 2009-08-23 20:30:17 +02:00
Michael Stapelberg d9d4d9fff1 Implement tabbing
Use command "T" to switch to tabbing
2009-08-22 09:07:23 +02:00
Michael Stapelberg c7ba95e79d Implement resizing floating clients with Mod1 + right mouse button 2009-08-22 07:49:28 +02:00
Michael Stapelberg 012f618c85 Bugfix: Map window when it got the fullscreen hint set 2009-08-21 12:19:04 +02:00
Michael Stapelberg 0b7a27ea79 initialize last_keycode 2009-08-19 14:37:34 +02:00
Michael Stapelberg 4b3ea4d524 Bugfix: Don’t crash when clients set an invalid leader hint 2009-08-19 10:56:42 +02:00
Michael Stapelberg 44d9111d65 More log cleanups 2009-08-11 15:23:58 +02:00
Michael Stapelberg 556f180290 Bugfix: Fix screen wrapping, cleanup some log messages
Before this fix, you could go upwards and select the screen which
was at the rightmost because it also was the one topmost (if all
screen’s top position is equal).
2009-08-11 15:02:30 +02:00
Michael Stapelberg dd134a74ef Implement support for width_inc and height_inc of size hints
This fixes the problem where you saw old window contents when resizing
a window (due to opening new windows or similar), especially in terminals.
2009-08-11 14:08:04 +02:00
Michael Stapelberg d8380c6101 Bugfix: Don’t initialize screen twice when not using Xinerama (Thanks badboy) 2009-08-11 12:38:52 +02:00
Michael Stapelberg b9636ceeec Set WM_STATE_WITHDRAWN when unmapping, unmap windows when destroying (Thanks xeen)
Seems like java apps need it. Also, you probably want to use XToolkit,
when you have to work with java apps:

export AWT_TOOLKIT=XToolkit
2009-08-11 12:16:10 +02:00
Michael Stapelberg 51df900312 Bugfix: Fix focused but inactive window color when using multiple monitors 2009-08-08 21:45:29 +02:00
Michael Stapelberg ceb3670d65 Reduce number of configuration requests and thus flickering
This reduces flickering when opening new windows and especially moving
existing windows in tiling mode. Especially noticable on multi-monitor
setups.
2009-08-08 21:31:42 +02:00
Michael Stapelberg f72576a290 Fix rendering of window decorations in stacking mode (there was a 1px-line too much) 2009-08-08 20:20:06 +02:00
Michael Stapelberg 47a798ac4a Implement assignments of workspaces to screens, big cleanup of workspace code
Please test this! Plug in screens, unplug them, use your video projector,
change resolutions, etc.

To use the assignments, use the following syntax:
workspace <number> [screen <screen>] [name]

Where screen can be one of:
<number> (It is not provided that these numbers stay constant, so use with care)
<x>x<y> (Coordinates where the screen starts, so 1280 will be fine to match the
	 screen right of the main screen if your main screen is 1280 pixels
	 width. However, 1281 will not match)
<x>
x<y>

Some examples follow:

 workspace 1 screen 0
 workspace 1 screen 1
 workspace 1 screen 1280x0
 workspace 2 screen 1280
 workspace 3 screen x0
 workspace 3 screen 1 www
 workspace 4 screen 0 mail
2009-08-08 19:51:51 +02:00
Michael Stapelberg 6192975a04 Bugfix: Don’t crash when the font is specified after the workspace names in configfile (Thanks xiaodong) 2009-08-07 15:48:13 +02:00
Michael Stapelberg 7cdaa1b277 Implement support for using key symbols in configuration file
Use "bindsym" instead of "bind". You have to use the names of keys
as in xmodmap. To get a list of currently bounud symbols, use
xmodmap -pke

Technical quirk: Xlib generated MappingNotify events upon
XkbMapNotify events (from XKB, as the name says). XCB does not yet
have support for XKB, thus we need to select and handle the event
by ourself. Hopefully, this will change in the future.
2009-08-07 15:35:12 +02:00
Michael Stapelberg 3bd724f08d Bugfix: Track the user’s pointer over the root window and update current workspace (Thanks xeen)
When not having any windows on the first workspace, switching to the
second workspace using your mouse was not registered by i3.
2009-08-06 00:59:48 +02:00
Michael Stapelberg 20875494ee Bugfix: Correctly unmap stack windows and don’t re-map them too early 2009-08-06 00:38:12 +02:00
Michael Stapelberg 35d811db82 Bugfix: Change to default mode if there was no client selected
Another bug fixed by having testcases :-)
2009-08-06 00:16:58 +02:00
Michael Stapelberg 5d14dca41d Implement correct rendering of floating windows (decoration color) 2009-08-05 19:59:58 +02:00
Michael Stapelberg 78b9e7f5ce Bugfix: dock clients need to have borderless = true 2009-08-05 19:28:21 +02:00
Michael Stapelberg 22e4f03553 Implement ws (with screen) to focus the next screen (wsl for example) 2009-08-05 19:24:21 +02:00
Michael Stapelberg 9222bea3b2 Implement borderless / 1-px-bordered windows
Use bn (normal), bp (1-px), bb (borderless) as commands to change the
border style of the currently focused window. Feel free to use i3-msg
to do this.
2009-08-05 18:33:44 +02:00
Michael Stapelberg 3114d6821d Add support for WM_CLIENT_LEADER, put floating windows mapping to (0x0) to center of leader/workspace 2009-08-05 00:39:55 +02:00
Michael Stapelberg af3972aa9f Bugfix: Recognize clicks as client clicks (opposed to border_clicks) when clients send them for their parent window
See comment, happened for example with xfontsel. You normally got
to see the resize bar (when having >1 column, of course).
2009-08-04 22:47:42 +02:00
Michael Stapelberg 4c373c2128 Fix clicking on workspaces in internal bar (with named workspaces) (Thanks bapt) 2009-08-04 22:27:01 +02:00
Michael Stapelberg 19abb63393 s/Mod1/floating_modifier (Thanks badboy) 2009-08-02 22:58:23 +02:00
Michael Stapelberg 7cfe520755 Bugfix: Don’t hide assigned clients to inactive but visible workspaces (Thanks xeen) 2009-08-02 22:31:52 +02:00
Michael Stapelberg a753684ac5 cache text_width for named workspaces, fix memory leak 2009-08-02 21:32:35 +02:00
Michael Stapelberg e7bf93163d Make path configurable 2009-07-28 22:09:53 +02:00
Michael Stapelberg a43846ea27 Initial implementation of IPC via UNIX domain sockets 2009-07-28 20:51:29 +02:00
Michael Stapelberg 1befbb2a50 Use errx() instead of an own die() function 2009-07-28 14:03:50 +02:00
Michael Stapelberg e6198ad6c8 Some little fixes for bapt’s patch, use predict_text_width, support UTF8, pre-render workspace names 2009-07-28 13:55:09 +02:00
Bapt ddcb11baba Implements configurable named workspaces 2009-07-28 13:08:03 +02:00
Michael Stapelberg 33e536113d Bugfix: Fix NULL-pointer dereferencing introduced by commit 874941 (Thanks tsdh) 2009-07-28 00:44:57 +02:00
Michael Stapelberg 76664df3df Bugfix: Make assignments work again (Thanks badboy) 2009-07-26 02:12:45 +02:00
Michael Stapelberg 270922bf61 Bugfix: Don’t crash on floating windows, set focus correctly 2009-07-25 22:53:33 +02:00
Michael Stapelberg 1e095ece84 Merge branch 'next' of zekjur:/git/i3 into next 2009-07-25 22:31:01 +02:00
Michael Stapelberg 163c9ad7db Map window/its decoration *after* calling render_layout()
Thus, no more flickering because the window was first mapped and then
moved. Especially users of multiple monitors should be happy now ;-).
Rather radical change, though, so be prepared for problems.
2009-07-25 22:29:28 +02:00
Michael Stapelberg ed60b31fd0 Implement predict_text_width, which will be needed for named workspaces 2009-07-24 19:49:06 +02:00
Michael Stapelberg ce501c9de9 Some fixes/reformatting for bapt’s patch 2009-07-23 20:36:48 +02:00
bapt 40750e227d Implements a reload command 2009-07-23 18:46:21 +02:00
Michael Stapelberg 9db8535b4c Some little fixes (mostly formatting) for bapt’s patch 2009-07-22 00:16:16 +02:00
Bapt 3e262913e8 Implements next-previous workspace 2009-07-21 23:50:08 +02:00
Michael Stapelberg ffcc8bbc3a Implement putting clients into floating mode at a specific workspace
This changes syntax of the assign command a bit. Old configurations
will continue to work. See the userguide.
2009-07-21 16:43:20 +02:00
Michael Stapelberg 008a2665c1 Bugfix: Strip trailing whitespace when parsing assignments (Thanks bapt) 2009-07-21 16:05:43 +02:00
Michael Stapelberg b893ec9987 Bugfix: Repeatedly try to find screens if none are available (Thanks mxf)
When rotating your screens (xrandr --output LVDS1 --rotate right), sometimes
the X server returned no screens which lead to an exit(1) of i3. Now, i3
tries to find screens for up to 5 seconds and only quits afterwards.
2009-07-21 15:59:11 +02:00
Michael Stapelberg 87494107b3 Bugfix: Correctly redecorate clients when changing focus (Thanks msi)
When moving your cursor from one tiling window to another tiling
window via a floating client, the old tiling window was not re-
decorated correctly
2009-07-21 15:49:08 +02:00
Michael Stapelberg 5b51c8c6f0 optimization: Render on pixmaps and copy the result on Stack_Wins
This should speed up the rendering of Stack_Wins with many window
decorations and it should considerably reduce flicker.
2009-07-17 18:32:40 +02:00
Michael Stapelberg 0434b6ea3d Bugfix: That last push was one step too fast. Forgot to check parameter. 2009-06-29 22:23:24 +02:00
Michael Stapelberg 91aeed0442 Resolve documentation FIXMEs, remove an unnecessary struct 2009-06-29 22:20:35 +02:00
Michael Stapelberg 0305c1dc0e Bugfix: Use ->workspace instead of ->container 2009-06-28 01:58:00 +02:00
Michael Stapelberg acf1eb0c92 Don’t allow floating clients to reconfigure themselves when in fullscreen (Thanks Volker) 2009-06-28 01:52:06 +02:00
Michael Stapelberg eae0b18dbd Use better error messages for s* (Thanks Curtis) 2009-06-27 10:54:34 +02:00
Michael Stapelberg 28c4b045d6 Merge branch 'next' (3.β is stable now) 2009-06-26 13:27:06 +02:00
Michael Stapelberg aaccc0e62c Bugfix: Correctly check coordinates for resizing floating windows (Thanks Mirko) 2009-06-26 12:14:20 +02:00
Michael Stapelberg dd053c254b Bugfix: When a window is fullscreen, put new windows after that one in focus stack (Thanks Volker) 2009-06-26 04:39:59 +02:00
Michael Stapelberg ab48d714cf Bugfix: Don’t lose focus when putting windows into floating 2009-06-26 04:34:36 +02:00
Michael Stapelberg 8f87c212be Bugfix: When moving, first check boundaries, then check for col-/rowspan (Thanks Mirko) 2009-06-26 04:21:30 +02:00
Michael Stapelberg 27a418f454 Bugfix: Correctly remove fullscreen floating clients when unmapping (Thanks Volker) 2009-06-26 04:15:21 +02:00
Michael Stapelberg 8659419ef6 Bugfix: Correctly handle moving fullscreen client onto another screen (Thanks dirkson) 2009-06-25 13:46:47 +02:00
Michael Stapelberg aa2f20ce26 Bugfix: Correctly handle floating windows when unmapping, fix focus bug when moving 2009-06-25 13:31:58 +02:00
Michael Stapelberg b16ab02cc7 Bugfix: Correctly initialize screens when Xinerama is disabled (Thanks Moredread) 2009-06-24 23:50:04 +02:00
Michael Stapelberg 777eedf0f4 Bugfix: Fix selecting col-/rowspanned containers 2009-06-24 21:10:12 +02:00
Michael Stapelberg 62c8d58d82 Implement the configuration option floating_modifier and document it 2009-06-24 20:31:00 +02:00
Michael Stapelberg 675d28dd54 Bugfix: Check screen for NULL, free client memory correctly (Thanks dirkson) 2009-06-24 19:22:09 +02:00
Michael Stapelberg 61b1279f67 Bugfix: Don’t invalidate container pointer and access it when unmapping 2009-06-24 19:05:33 +02:00
Michael Stapelberg 7773a3e5dd Ensure a minimum size of 25px when resizing windows 2009-06-24 18:31:43 +02:00
Michael Stapelberg 607b1d071e Use drag_pointer from floating.c for the resize handler 2009-06-24 17:40:34 +02:00
Michael Stapelberg ee217523f1 Bugfix: resizing: boundary checking (Thanks Mirko) 2009-06-24 17:24:09 +02:00
Michael Stapelberg 07bebdf841 Correctly re-assign floating clients to the destination workspace when moving 2009-06-24 17:12:12 +02:00
Michael Stapelberg 7ed967c96f Ensure that the focus is set correctly when moving floating clients 2009-06-24 00:35:05 +02:00
Michael Stapelberg 125faef1f4 Correctly move floating clients to other workspaces on visible screens 2009-06-24 00:34:03 +02:00
Michael Stapelberg 0aed552bae Bugfix: Remove/add floating clients to workspace->floating_clients when moving to other workspaces 2009-06-23 23:17:06 +02:00
Michael Stapelberg 81e9d8282a Bugfix: load current_col/current_row from workspace when setting focus (Thanks Mirko)
In the case of floating clients which have no container, the values
were still the ones from your old workspace, which was a problem if
your dimensions didn’t match…
2009-06-23 23:10:04 +02:00
Michael Stapelberg 4f31709b1d floating: enforce minimum size of 50x20 when resizing (Thanks Mirko) 2009-06-23 22:42:54 +02:00
Michael Stapelberg cba36914a8 Implement selecting the next tiling/floating window (using "focus")
Also update documentation (manpage, userguide).
To make the code easier to read/write when checking if a client is
floating, introduce client_is_floating().
2009-06-21 16:14:15 +02:00
Michael Stapelberg a5489d6546 Use a nested event loop which polls and saves motion notify events for later
This should speed up resizing/dragging quite a bit, thus fixing ticket #51
2009-06-21 13:44:44 +02:00
Michael Stapelberg 8140619d5b Implement reconfiguration of floating clients 2009-06-21 13:29:48 +02:00
Michael Stapelberg 0e8b3c3401 Bugfix: floating: open windows with correct width/height 2009-06-21 13:18:54 +02:00
Michael Stapelberg 2751eedae5 Bugfix: Floating: open windows at their requested position 2009-06-21 13:12:42 +02:00
Michael Stapelberg 6ca9210335 Bugfix: Properly integrate libxcb’s event loop into libev.
Fixes a race condition with GIMP (where it configured its window,
sent the map request and waited for the window to get mapped, but
i3 didn’t get the event until another one was sent (key binding for
example)).

The new solution is much better as it properly hands off all
the work to xcb_poll_for_event.

Inspired by awesome, which uses the same mechanism. Thanks.
2009-06-21 13:05:54 +02:00
Michael Stapelberg ce97e23913 Remove getting colorpixels from the X server, saves code and round-trips. Requires truecolor displays.
If anyone has a serious (!) use for non-truecolor displays and
problems with i3’s colors after this commit, please send a mail.
2009-06-20 18:05:24 +02:00
Michael Stapelberg 83d3146b65 Bugfix: Correctly raise the currently focused client when going into stack mode 2009-06-20 00:31:57 +02:00
Michael Stapelberg 8e19f8dabf floating: Don’t let clients become hidden under stack windows or fulscreen clients (Thanks Mirko) 2009-06-19 23:18:43 +02:00
Michael Stapelberg 5c0496a3ef Bugfix: Make sure floating clients are alwalys above tiling clients (Thanks Mirko) 2009-06-19 22:57:19 +02:00
Michael Stapelberg 589a73c8ea Bugfix: Correctly check for floating mode in the buttonpress handler (Thanks Mirko) 2009-06-19 22:48:18 +02:00
Michael Stapelberg ba070fcc6c Bugfix: Obey colspan/rowspan when checking if containers can be snapped to the right/bottom (Thanks Mirko)
This fixes ticket #54.
2009-06-19 22:40:25 +02:00
Michael Stapelberg 93ff4159c1 Bugfix: Obey colspan/rowspan when checking if containers can be snapped to the right/bottom (Thanks Mirko)
This fixes ticket #54.
2009-06-19 22:39:03 +02:00
Michael Stapelberg 325d1b301f Implement the special workspace ~ for assignments, which will set clients floating automatically 2009-06-19 20:20:00 +02:00
Michael Stapelberg bcd479ca92 floating: nested functions make the callbacks a lot more easier & beautiful 2009-06-19 19:43:01 +02:00
Michael Stapelberg 89c0caaec4 Implement a command for hiding all floating windows (and showing them again) 2009-06-19 13:59:29 +02:00
Michael Stapelberg 5c48444b4e Implement the possibility to set a workspace open clients automatically in floating mode
Use "wwt" (with workspace: toggle floating) in your configuration file
2009-06-19 13:20:10 +02:00
Michael Stapelberg 4135aaad7c Implement moving of floating clients 2009-06-19 12:57:21 +02:00
Michael Stapelberg 51402b05f5 Bugfix: Correctly initialize automatically floating clients (some rendering issues) 2009-06-19 12:34:31 +02:00
Michael Stapelberg a6d7f5451d Also set DIALOG, UTILITY and SPLASH windows floating automatically 2009-06-19 12:05:55 +02:00
Michael Stapelberg a2a8cd85d6 Bugfix: Don’t crash when programs set NULL hints (xev(1) for example)
This only happened if you had some assignment configured
2009-06-19 11:05:00 +02:00
Michael Stapelberg 1c02ddb4a7 Bugfix: Fix assignment of clients to other workspaces (Thanks badboy)
The problem was that the old_focused pointer was pointing to an element
of a different list. Using CIRCLEQ_APPEND_AFTER is not a good idea on
with such an element…
2009-06-18 01:25:46 +02:00
Michael Stapelberg 00c6bdeb0b Implement changing focus via keyboard between floating clients, fix several floating bugs 2009-06-14 01:04:59 +02:00
Michael Stapelberg e6d9c7bb9e Bugfix: Don’t use the minimum amount of pixels for dock clients which don’t set size hints 2009-06-13 12:30:28 +02:00
Michael Stapelberg 56af58eb0b Bugfix: Put floating clients into the focus stack (Thanks Mirko) 2009-06-13 12:20:39 +02:00
Michael Stapelberg 02fa3c2cb8 Bugfix: Correctly initialize the new atom, don’t float dock windows 2009-06-13 12:18:16 +02:00
Michael Stapelberg 13002dc04e Bugfix: Actually reconfigure unmapped windows when they request it
Before, we only sent a fake message. While this was sufficient for the
client side most of the time, it didn’t allow us to open floating
windows with the correct size.
2009-06-12 23:47:04 +02:00
Michael Stapelberg 052190ad05 Handle transient hint and window class dialog to mark clients as floating 2009-06-12 22:59:23 +02:00
Michael Stapelberg cb12e205d9 Bugfix: When toggling floating, the copied size is the client’s size, not the total size 2009-06-12 22:55:56 +02:00
Michael Stapelberg 6e5406167c Bugfix: Use the correct size for the modifiers (Thanks Moredread!) 2009-06-11 03:30:56 +02:00
Michael Stapelberg 70be57352c Fix memleak in config parsing (variables weren’t freed) 2009-06-11 03:30:42 +02:00
Michael Stapelberg 55f0aa8f28 Add a proper error message if connection to the X server can’t be established 2009-06-11 03:30:26 +02:00
Michael Stapelberg d70ea03356 Remove some dead code, add default paths to switch() to make static analyzers happy
Check was done with scan-build from the LLVM suite. The remaining reports are false
positives and have been reported to llvm:

http://llvm.org/bugs/show_bug.cgi?id=4358
http://llvm.org/bugs/show_bug.cgi?id=4359
2009-06-10 19:59:36 +02:00
Michael Stapelberg 2f334c3f59 Bugfix: Don’t set focus when unmapping clients if the workspace is not active (Thanks Mirko)
This fixes ticket #53 because current workspace was set to the
workspace which was deleted.
2009-06-07 19:09:39 +02:00
Michael Stapelberg fb63c2ed58 Implement moving floating clients using Mod1+Left mouse button 2009-06-03 13:54:13 +02:00
Michael Stapelberg 036728c4d7 Use the size when mapping the window as size for floating (correct size for tool windows) 2009-06-02 14:24:37 +02:00
Michael Stapelberg 3f925a56d3 Fix warning about dereferencing type-punned pointers 2009-06-01 21:12:13 +02:00
Michael Stapelberg 553db28664 Switch to libev for the event loop to build a base for IPC stuff. Please test! 2009-06-01 20:59:40 +02:00
Michael Stapelberg e689be983b Implement variables in configfile.
This implements ticket #42.

Syntax is "set $key value". All further instances of $key will be
replaced with value before parsing each line of the configfile.
2009-06-01 16:19:06 +02:00
Michael Stapelberg 170ba60191 Bugfix: Rendering of the bottom border line was still off by one 2009-06-01 15:35:59 +02:00
Michael Stapelberg 2a67630aa6 Optimization: Get the colorpixels when loading configuration, make use of the new config struct
Instead of building arrays of colorpixels we can simply use a pointer
to a struct Colortriple. Furthermore, by getting the colorpixels when
loading the configuration, we save a lot of function calls in the
main code.
2009-06-01 15:14:45 +02:00
Michael Stapelberg c73bb1feaa Draw the border lines in the window decoration correctly 2009-05-31 18:37:47 +02:00
Michael Stapelberg 517c47ca95 Don’t check twice for client.focused, change all places were colorcodes are used 2009-05-31 17:18:49 +02:00
Michael Stapelberg 0cb5d7448d Implement clients going automatically into floating 2009-05-31 00:31:18 +02:00
Michael Stapelberg 706c44509e retab! src/config.c 2009-05-30 22:24:05 +02:00
Michael Stapelberg cbc3880007 Use a more efficient struct for storing colors, validate/parse them more easily 2009-05-30 22:20:32 +02:00
Atsutane 65bcf170ed Introduced color setting. 2009-05-30 17:59:04 +02:00
Michael Stapelberg 2d5b1f0a37 Bugfix: Send fake configure notify events when moving clients (Thanks Volker)
This fixes ticket #47
2009-05-30 11:49:50 +02:00
Michael Stapelberg fccbdea925 Bugfix: Correctly set focus when switching to a workspace with floating clients
This fixes ticket #45
2009-05-30 11:41:49 +02:00
Michael Stapelberg b1eb93326f Bugfix: Correctly cleanup stack_windows when setting clients to floating
This fixes ticket #44
2009-05-30 11:35:32 +02:00
Michael Stapelberg ac6561019b Don’t kill workspaces on which you currently are when changing screen configuration 2009-05-27 18:46:58 +02:00
Michael Stapelberg d4fb34abdd Bugfix: Don’t ignore enter_notify events for clients on different screens (Thanks Mirko)
This fixes ticket #41.
2009-05-27 18:19:14 +02:00
Michael Stapelberg 2ed621aec9 Bugfix: Forgot to update client’s workspace pointer (Thanks Mirko) 2009-05-27 12:28:51 +02:00
Michael Stapelberg 94ee39d1ce Bugfix: Forgot to update client’s workspace pointer (Thanks Mirko) 2009-05-27 12:27:29 +02:00
Michael Stapelberg bcd68d9ca1 Bugfix: Fix crash when focusing/moving on an empty workspace (Thanks Mirko) 2009-05-27 12:15:23 +02:00
Michael Stapelberg b0cf3ec026 Document binding on Mode_switch in userguide, be more verbose in config 2009-05-26 17:37:56 +02:00
Michael Stapelberg 9c3b37f2d1 Bugfix: Cleanup the table after putting clients into floating mode 2009-05-26 17:16:51 +02:00
Michael Stapelberg 94cead993c Don’t process autostart when restarting (new parameter -a) 2009-05-26 17:09:34 +02:00
Michael Stapelberg b58e2fa8ed Move toggle_fullscreen to client.c 2009-05-26 16:49:57 +02:00
Michael Stapelberg ac5c2fcf19 Bugfix: Fix fullscreen for floating clients, fix window name updates for floating clients 2009-05-26 16:46:50 +02:00
Michael Stapelberg 5b8e2ecb18 Implement floating (please test and find bugs)
Details which are missing: A command to hide/show all floating clients,
moving/resizing clients with your mouse holding Mod1 (click anywhere
in the client, not just on its borders), resize/move by keyboard, select
next/previous client by keyboard
2009-05-23 16:34:03 +02:00
Michael Stapelberg 7fde55578d Bugfix: Correctly handle mode_switch state bit, more debugging output for states
We abuse (1 << 8) as mode_switch bit, which is in the range of the
filtered state bits (see previous commit). Therefore, we need to
filter first and then check for mode_switch.

Furthermore, we used 0x2 before, which was just wrong. So, use our
bitmask, not the normal one (0x2).
2009-05-19 15:24:17 +02:00
Michael Stapelberg d98c514f82 Bugfix: Correctly handle mode_switch state bit, more debugging output for states
We abuse (1 << 8) as mode_switch bit, which is in the range of the
filtered state bits (see previous commit). Therefore, we need to
filter first and then check for mode_switch.

Furthermore, we used 0x2 before, which was just wrong. So, use our
bitmask, not the normal one (0x2).
2009-05-19 15:22:50 +02:00
Michael Stapelberg 5038b3c592 Bugfix: keypress: Only use the lower 8 bits of the mask so that mouse buttons are filtered out (Thanks Mirko)
Sometimes, when the mouse button gets stuck, state contains the bit for
BUTTON_MASK_1 (or other buttons). We filter them out to continue processing
keys correctly.
2009-05-19 13:52:23 +02:00
Michael Stapelberg 77ab4c0b10 Bugfix: keypress: Only use the lower 8 bits of the mask so that mouse buttons are filtered out (Thanks Mirko)
Sometimes, when the mouse button gets stuck, state contains the bit for
BUTTON_MASK_1 (or other buttons). We filter them out to continue processing
keys correctly.
2009-05-19 13:51:03 +02:00
Michael Stapelberg 1089fb7311 Bugfix: Don’t crash when above dock windows (Thanks Mirko) 2009-05-17 10:54:12 +02:00
Michael Stapelberg b35599004a Move the manage_*-functions into their own file as they got quite large 2009-05-16 18:25:04 +02:00
Michael Stapelberg d5d44e66a2 Bugfix: Re-assign dock windows to different workspaces when a workspace is deleted
Killing a dock client and having destroyed workspace 1 before (or the workspace
on which the dock client was started when it was not auto-started) crashed i3 before
this bugfix.
2009-05-16 18:12:35 +02:00
Michael Stapelberg e79cca8f72 Implement putting clients onto specific workspaces ("assign" in the configfile)
This closes ticket #39
2009-05-16 17:32:36 +02:00
Michael Stapelberg 610fabf873 Bugfix: Correctly handle col-/rowspanned containers when setting focus (Thanks Ned)
This fixes ticket #34
2009-05-09 20:00:20 +02:00
Michael Stapelberg 4cc8d53706 Bugfix: Correctly handle col-/rowspanned containers when setting focus (Thanks Ned)
This fixes ticket #34
2009-05-09 19:59:36 +02:00
Michael Stapelberg b7f94e9b5d Fix a bug in window placement introduced by the last commit 2009-05-09 19:13:37 +02:00
Michael Stapelberg 3c6c5dff92 Fix a bug in window placement introduced by the last commit 2009-05-09 19:13:14 +02:00
Michael Stapelberg 1256730b4b Bugfix: Fix display/resizing of colspanned containers 2009-05-09 18:43:50 +02:00
Michael Stapelberg 3ccc0d7794 Bugfix: Fix display/resizing of colspanned containers 2009-05-09 18:43:02 +02:00
Michael Stapelberg 5b4f10eaca Bugfix: Store width_factor/height_factor per workspace, not per container
This is a relatively big change, however all cases should be handled by
now.

Because the function to do graphical resizing got rather large, I’ve created
a new file src/resize.c for it.

This fixes ticket #35.
2009-05-09 17:50:51 +02:00
Michael Stapelberg 8e1990f058 Bugfix: Store width_factor/height_factor per workspace, not per container
This is a relatively big change, however all cases should be handled by
now.

Because the function to do graphical resizing got rather large, I’ve created
a new file src/resize.c for it.

This fixes ticket #35.
2009-05-09 17:48:35 +02:00
Michael Stapelberg 18da0a3017 Bugfix: Force reconfiguration of all windows on workspaces which needed to be re-assigned (Thanks Mirko)
When you disable a Xinerama screen (think of removing a video projector),
the workspaces of that screen need to be re-assigned to another screen.
Previously, the clients affected by this re-assignment did not get re-
configured, which made them appear on the next screen which got configured
at the position of the old one again if you did not switch to the reassigned
workspace before.

So, to reproduce it:
xrandr --output VGA --mode 1280x1024 --right-of LVDS
move windows to the new workspace
xrandr --output VGA --off
xrandr --output VGA --mode 1280x1024 --right-of LVDS

This fixes ticket #36
2009-05-09 13:04:34 +02:00
Michael Stapelberg d24e47a0f3 Bugfix: Force reconfiguration of all windows on workspaces which needed to be re-assigned (Thanks Mirko)
When you disable a Xinerama screen (think of removing a video projector),
the workspaces of that screen need to be re-assigned to another screen.
Previously, the clients affected by this re-assignment did not get re-
configured, which made them appear on the next screen which got configured
at the position of the old one again if you did not switch to the reassigned
workspace before.

So, to reproduce it:
xrandr --output VGA --mode 1280x1024 --right-of LVDS
move windows to the new workspace
xrandr --output VGA --off
xrandr --output VGA --mode 1280x1024 --right-of LVDS

This fixes ticket #36
2009-05-09 13:01:23 +02:00
Michael Stapelberg 8c6c4270a9 Bugfix: Don’t raise clients in fullscreen mode, send correct position to clients in fullscreen mode (Thanks ch3ka, mist)
This fixes #38 which only happened for clients which actively tried
to reconfigure themselves.
2009-05-08 23:23:47 +02:00
Michael Stapelberg 89076ea7cf Bugfix: Don’t raise clients in fullscreen mode, send correct position to clients in fullscreen mode (Thanks ch3ka, mist)
This fixes #38 which only happened for clients which actively tried
to reconfigure themselves.
2009-05-08 23:22:40 +02:00
Michael Stapelberg 4b77d93c2e Bugfix: Resize all containers in the column instead of only the active one (Thanks Ned)
This fixes ticket #33.
2009-05-07 13:51:34 +02:00
Michael Stapelberg a2ac022208 Bugfix: Resize all containers in the column instead of only the active one (Thanks Ned)
This fixes ticket #33.
2009-05-07 13:46:34 +02:00
Michael Rudolf 3400f0e6bd Implement autostart using "exec" in config
Syntax is "exec <application>", like when creating a binding.
Multiple entries are possible, applications are started in
the specified order.
2009-05-05 20:14:02 +02:00
Michael Stapelberg 3a2b546c9e Implement a command to travel the focusstack. This can be used like a jumpback.
However, it is a bit more flexible obviously. You can specify the
offset of the window you want to go to, to implement workflows like
the following:
 * Jump to mutt
 * Jump to irssi
 * Jump back ("focus 2" would be the command)
2009-05-05 17:25:56 +02:00
Michael Stapelberg 56d637a665 Add debug message for jumping 2009-05-05 16:57:21 +02:00
Michael Stapelberg f72214725c Implement jumping to windows by matching their class / title 2009-05-05 16:53:22 +02:00
Michael Stapelberg e295ab302b Implement storing WM_CLASS of each client 2009-05-05 16:53:22 +02:00
Michael Stapelberg 12fa69329a Change syntax of jump to col,row instead of row,col to make it consistent with the internal data structures, document it in commandmode 2009-05-05 16:47:06 +02:00
Michael Stapelberg 79e5d5f29d Some small style changes to make urs’ code consistent 2009-05-05 16:47:05 +02:00
Urs Ganse efbe2dfeaa Added a "jump" command to directly focus a container.
Syntax is "jump <ws> <row> <col>".
This is quite handy for clients that you always keep
in the same spot, and like to jump to quite often. The
irc client would be an example.
2009-05-05 16:47:05 +02:00
Michael Stapelberg 4a6a748561 Bugfix: Reconfigure bar window when changing resolutions (Thanks Mirko) 2009-05-03 22:59:50 +02:00
Michael Stapelberg c3c05db579 Bugfix: Fix crash on new clients (Thanks Mirko) 2009-05-03 22:18:33 +02:00
Michael Stapelberg d4642ac7d8 Fix a bug caused by not absolutely raising windows (revision 95f4085bc) 2009-05-03 16:41:53 +02:00
Michael Stapelberg c27c7fc020 Bugfix: Insert windows at correct position/set focus correctly when moving between containers 2009-05-03 16:24:12 +02:00
Michael Stapelberg a0d23c53b3 Bugfix: Re-distribute free space when closing customly resized containers, re-evaluate for other containers
This fixes ticket #4
2009-05-03 14:29:58 +02:00
Michael Stapelberg eab895ac9e Bugfix: Correctly restore focus when leaving fullscreen mode 2009-05-03 02:13:11 +02:00
Michael Stapelberg 95f4085bcd Raise clients only relatively to the one which was focused before.
This should fix ticket #31.
2009-05-03 00:23:12 +02:00
Michael Stapelberg 99054fb50f Bugfix: Fix drag&drop in GTK applications (firefox, thunderbird)
Thanks to Daniel Wäber’s contribution to wmii:
http://code.suckless.org/hg/wmii/rev/f4f25de0de54
2009-05-02 20:51:55 +02:00
Michael Stapelberg e91f399609 Bugfix: Correctly restart i3 when not using its absolute path 2009-05-01 16:10:02 +02:00
Michael Stapelberg c689b93bce Bugfix: Don’t crash when asprintf() can’t print the window name (Thanks ch3ka)
Apparantly, under some conditions (using LANG=en_US.UTF-8, other locale
variables unset), asprintf() says "Invalid or incomplete multibyte or
wide character" when given a string in COMPOUND_TEXT encoding.

For now, we properly handle asprintf-errors (this should have been
before), but there might be a better solution.
2009-04-28 22:41:00 +02:00
Michael Stapelberg aefae99a11 Bugfix: That should be xcb_keycode_t, not xcb_keysym_t 2009-04-19 21:40:49 +02:00
Michael Stapelberg 69c9db4016 Add conditional for the 0.3.3 → 0.3.4 API fix in libxcb-keysyms 2009-04-19 21:37:34 +02:00
Michael Stapelberg 982e453251 Don’t rely on libxcb-wm any longer, as it got removed in libxcb 0.3.4
See http://cgit.freedesktop.org/xcb/util/commit/?id=4c9a707f472e49bc3005354db265a0214071d46b
2009-04-19 20:44:34 +02:00
Michael Stapelberg 6ccee82368 Fix for the fix: Don’t substract height twice 2009-04-18 01:13:57 +02:00
Michael Stapelberg 49d5bdbb08 Bugfix: Correctly adjust state when transferring fullscreen windows to other workspaces (Thanks Mirko)
This fixes ticket #27.
Furthermore, it is ensured that only one client at a time is in fullscreen mode.
2009-04-17 21:01:33 +02:00
Michael Stapelberg 12cc8b78af Bugfix: Calculation of width in fake_absoute_configure_notify was wrong for windows with aspect ratio (Thanks Mirko) 2009-04-17 19:08:38 +02:00
Michael Stapelberg 36bacc151e Bugfix: Fullscreen configure notifies mustn’t use absolute position/size 2009-04-16 11:08:11 +02:00
Michael Stapelberg 65b858b9c5 Bugfix: Fix unmapping of dock windows (Thanks Mirko) 2009-04-13 23:27:47 +02:00
Michael Stapelberg a2d20b6848 Bugfix: Send clients their absolute position/size in generated configure events, not relative
This fixes ticket #26.
2009-04-11 22:37:48 +02:00
Michael Stapelberg b7e8a63474 Bugfix: Fix warping of cursor when only switching screen, not workspace 2009-04-11 20:55:16 +02:00
Michael Stapelberg 7133974306 Bugfix: Don’t only check for the currently active screen, but check for all screens (Thanks Mirko) 2009-04-11 19:06:26 +02:00
Michael Stapelberg bb8727cf27 Bugfix: Perform some bounds checking for snapped containers in fix_colrowspan (Thanks jchome)
This fixes ticket #22
2009-04-11 14:52:11 +02:00
Michael Stapelberg bcbe800720 Bugfix: Store dock clients per screen, not per workspace.
This fixes ticket #12
2009-04-11 14:29:15 +02:00
Michael Stapelberg 8cc1fcf536 General small cleanups 2009-04-11 14:08:19 +02:00
Michael Stapelberg e3516d72f5 Bugfix: Don’t change to workspaces on different screens when scrolling through them (Thanks Mirko)
This fixes ticket #19
2009-04-11 11:54:30 +02:00
Michael Stapelberg 0216e84327 Bugfix: Warp pointer to the right window
This fixes ticket #20
2009-04-11 11:36:58 +02:00
Michael Stapelberg aace42cd7a Bugfix: Don’t crash anymore when moving focus to another screen (Thanks, Mirko!)
This fixes ticket #24. The crash appeared only under special conditions:
- The screen on which you switch to must be empty or at least not as
  full as the screen on which you were before.
- You switch focus using your mouse.
- You previously selected a column/row which is not availably on the
  destination screen (for example (1,1) and switching to an empty
  screen).
2009-04-10 21:29:25 +02:00
Michael Stapelberg ee5cb143c0 Oops. Don’t kill the current workspace 2009-04-09 12:13:14 +02:00
Michael Stapelberg 72d82f3993 Bugfix: Delete empty workspaces even when they’re not the active workspace
This fixes ticket #23
2009-04-09 11:19:56 +02:00
Michael Stapelberg 4bd7667445 Bugfix: Correctly set focus when switching between screens 2009-04-08 13:48:37 +02:00
Michael Stapelberg bd9de8189b Put documentation for each function in the header files, doxygen-compatible
Thanks to psychoschlumpf for the hint. Having comments in the headers
makes it easier to get the big picture when not being interested in the
source.

The doxygen file extracts as much as it can into HTML files. Please note
that this is not official/supported documentation, but rather being nice
to people who have to/want to use doxygen (I don’t).

Let me paste the header of the doxygen file:

  You can use this file with doxygen to create a pseudo-documentation
  automatically from source. doxygen-comments are not used very extensively
  in i3, mostly for the reason that it clutters the source code and has no
  real use (doxygen’s output looks really ugly).

  So, if you want to use it, here you go. This is however not a supported
  document, and I recommend you have a look at the docs/ folder or at
  http://i3.zekjur.net/ for more, real documentation.
2009-04-07 19:02:07 +02:00
Michael Stapelberg cb7b7a73d2 Bugfix: Set focus to the client which was previously focused instead of the next client when moving windows
This fixes ticket #21
2009-04-07 16:48:42 +02:00
Michael Stapelberg 28aa13d831 Bugfix: Don’t set focus if it is not necessary.
This fixes ticket #13
2009-04-01 12:50:42 +02:00
Michael Stapelberg 755540817e Implement scrolling on stack windows and on the bar. This implements ticket #18 2009-04-01 12:31:13 +02:00
Michael Stapelberg 75a35319c9 Bugfix: Correctly remove client from container when moving to another workspace
This fixes ticket #16
2009-04-01 12:02:22 +02:00
Michael Stapelberg 0520714aa0 Remove comment as popup menus in dzen2 get triggered by enter notify and focus is not needed 2009-04-01 11:51:11 +02:00
Michael Stapelberg b4e337027e Bugfix: Apply workspaces to screens when Xinerama is turned off (Thanks Igor, Urs) 2009-03-31 19:17:31 +02:00
Michael Stapelberg fcc5ce516b Bugfix: Don’t free xinerama-reply if it is NULL, implement FREE()-macro (Thanks Igor) 2009-03-30 08:27:53 +02:00
Michael Stapelberg a8478efa34 Bugfix: Correctly filter out the numlock state bit (doesn’t get cleared for some reason)
This fixes ticket #14
2009-03-27 15:24:52 +01:00
Michael Stapelberg 9077831ed3 Bugfix: When entering a stack window with the mouse, set the focus to the active client
Fixes ticket #17
2009-03-26 23:00:26 +01:00
Michael Stapelberg e0f7e253ff Bugfix: Fix memory leak 2009-03-20 17:31:34 +01:00
Michael Stapelberg eb2ceb95bf Cleanup makefiles, add version to i3 -v and i3 startup 2009-03-15 23:15:16 +01:00
Michael Stapelberg 21f7b7a724 Disable horizontal resizing for the release version, it still has bugs 2009-03-15 21:31:35 +01:00
Michael Stapelberg 3d260f8e50 Bugfix: re-decorate old client when switching screens 2009-03-15 21:13:15 +01:00
Michael Stapelberg 74465a562a Bugfix: Only actively change focus if this is the current container 2009-03-15 20:52:43 +01:00
Michael Stapelberg 3a994e4bf7 Implement clicking on the bar to switch workspaces 2009-03-15 17:49:25 +01:00
Michael Stapelberg 76effaf29a Bugfix: Fix rounding problems when positioning proportional windows 2009-03-15 17:35:16 +01:00
Michael Stapelberg c02dd93bcc Bugfix: Query WM_NORMAL_HINTS when managing a window to handle proportional hints which were set before mapping 2009-03-15 12:24:49 +01:00
Michael Stapelberg cb9c7078be Implement kill-command to kill the current window, document it 2009-03-14 22:09:36 +01:00
Michael Stapelberg cc0b060628 Implement exit command, document it in manpage, add it to defaultconfig (Mod1+Shift+e) 2009-03-14 21:31:22 +01:00
Michael Stapelberg 80e2bf708d Send configure notify after putting a client into fullscreen mode, log at a central place 2009-03-14 17:37:11 +01:00
Michael Stapelberg 4ad1edc5eb Remove unused variable (fixes warning) 2009-03-13 11:20:21 +01:00
Michael Stapelberg e3085b4f75 Fix fullscreen for xpdf (at least on debian, with proper _NET_WM_STATE hints)
xpdf sets the _NET_WM_STATE before actually mapping the window. i3 only checked
for changes of this hint, but not if it is already set when intially managing
the window.

Note that you need to patch your xpdf to support _NET_WM_STATE, because, while
only being reported at 2004, upstream still did not merge the patch *grrr*
See this debian bug report:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=247602
Or directly download the patch from:
http://bugs.debian.org/cgi-bin/bugreport.cgi?msg=61;filename=31_fullscreen.dpatch;att=1;bug=247602
2009-03-13 04:51:17 +01:00
Michael Stapelberg 9c755dcb0d Fix compilation 2009-03-13 04:51:09 +01:00
Michael Stapelberg 14834c3530 Fake more configure notifies (makes xpdf work better) 2009-03-13 00:39:16 +01:00
Michael Stapelberg 755709c86d Bugfix: Completely ignore legacy hints as soon as the client uses _NET_WM_NAME 2009-03-12 16:44:44 +01:00
Michael Stapelberg e1252b51da Move i3lock in its own repository 2009-03-11 22:21:50 +01:00
Michael Stapelberg cc2c63b860 Handle legacy window titles by rendering them not unicode-compatible. 2009-03-11 21:31:54 +01:00
Michael Stapelberg 17bcdd8b0f Implement cleaning up the list of ignored events 2009-03-11 20:06:30 +01:00
Michael Stapelberg 12970211c4 Fix misnomer (window_type_handler → handle_window_type), resolve TODO 2009-03-11 19:39:32 +01:00
Michael Stapelberg 969d6f202e Move i3lock to src/i3lock, import dmenu-3.9 as i3menu 2009-03-11 19:03:24 +01:00
Michael Stapelberg c0aa9cac61 Implement moving containers, implement moving windows to the top if top-most, change config to use Mod3 2009-03-11 18:56:31 +01:00
Michael Stapelberg 49b56166dc Implement moving clients to the left if they are leftmost 2009-03-11 01:55:10 +01:00
Michael Stapelberg 9c0d5b6e5e Bugfix: Redecorate the last focused window of the container we are switching into 2009-03-11 00:56:39 +01:00
Michael Stapelberg ec290cbfa9 Bugfix: Don’t handle mouse click events inside the titlebar 2009-03-11 00:45:49 +01:00
Michael Stapelberg 38c8541807 Bugfix: Change the event mask to ignore enter notifies when rendering the layout and changing workspaces 2009-03-11 00:20:56 +01:00
Michael Stapelberg 408b2bdb39 Bugfix: Eliminate race condition, fix dock windows
There was a race condition when mapping a window and not setting the event mask
before. Therefore, the ReparentNotify and (more important) the UnmapNotify generated
by reparenting were not received, thus leaving the awaiting_useless_unmap variable
of the client "true". To just make it work, in previous commits the DestroyNotify
handler was introduced. Fortunately, with fixing this race condition by first
setting the event mask and mapping the window afterwards, we can remove this handler.

As for the dock windows, there were quite some occurences were client->container
was used without checking if the client is inside a container at all.

Furthermore, the client’s strut containing the space to reserve at the screen edge
is now checked and the desired height is set to the window’s height if the strut
contains 0 or if no strut was specified at all.
2009-03-10 20:56:25 +01:00
Michael Stapelberg 434345aa30 Ignore notify events which are not in mode XCB_NOTIFY_MODE_NORMAL 2009-03-10 11:26:52 +01:00
Michael Stapelberg 441f406a4b Fix warning (typecast) 2009-03-10 09:51:00 +01:00
Michael Stapelberg c025678177 Major change: Redirect events instead of handle the notifies.
By specifying XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT, the window manager
will get map request events instead of map notify events, and therefore
can act sooner (the window won’t be positioned on the screen and moved
afterwards).

Furthermore, this fixes some problems with GIMP/VLC (and probably others)
which caused endless loops.

Also, events which should be ignored are now saved in a queue rather than
saving just the last event. This should eliminate race conditions.

Note that there is a new FIXME in src/handlers.c. Some windows generate
unmap notify events when reparenting while others don’t. We need to
understand, document and implement a more correct way to handle this.
2009-03-10 00:51:15 +01:00
Michael Stapelberg d38636439c Fix warning 2009-03-09 17:50:00 +01:00
Michael Stapelberg b800408a97 Bugfix: Handle all events when dragging to resize, correctly set OVERRIDE_REDIRECT 2009-03-09 08:50:33 +01:00
Michael Stapelberg 3a34cfc603 Bugfix: Draw bar at the correct position, handle expose events for bars 2009-03-09 08:24:05 +01:00
Michael Stapelberg 00f08cba75 Bugfix: Correctly free containers, the bug was not freeing when not moving 2009-03-09 08:14:00 +01:00
Michael Stapelberg 71993c9b48 Implement wrapping left/right/up/down across screens 2009-03-09 07:39:19 +01:00
Michael Stapelberg 38d903aea5 Update comment 2009-03-09 07:18:04 +01:00
Michael Stapelberg cc78664f9d Bugfix: Use memcmp() instead of strcmp(), use new_len * 2 to check all bytes 2009-03-09 07:02:47 +01:00
Michael Stapelberg 2cf3a9dd96 Bugfix: Correctly free containers when shrinking the table 2009-03-09 06:49:11 +01:00
Michael Stapelberg 65595c61a8 Bugfix: Don’t strcmp() if client->name == NULL 2009-03-09 06:41:04 +01:00
Michael Stapelberg 6df039c3b5 Convert window title to UCS-2 when updating it, don’t update it if it didn’t change 2009-03-09 06:26:32 +01:00
Michael Stapelberg 4f8e704017 s/atomar/atomic 2009-03-08 21:01:06 +01:00
Michael Stapelberg cefc1dabac Bugfix: Use a new variable called new_position and initialize it correctly when resizing 2009-03-08 20:59:49 +01:00
Michael Stapelberg 71221baca0 Fix race condition when updating client->name 2009-03-08 20:04:01 +01:00
Michael Stapelberg 9e74378dd0 Bugfix: Use _NET_WM_NAME (UTF-8) rather than WM_NAME (COMPOUND_TEXT). Only render client titles, if they are set 2009-03-08 19:07:33 +01:00
Michael Stapelberg 4e12c9b39c Fix the warning on SUS-compatible systems (char**) and on NetBSD (const char**) 2009-03-08 17:47:45 +01:00
Michael Stapelberg f85990b27a Fix warnings, update DEPENDS, update Makefile for NetBSD 2009-03-08 17:30:17 +01:00
Michael Stapelberg 6f630a3335 Implement UTF-8-clean window titles 2009-03-08 00:49:11 +01:00
Michael Stapelberg 35c04b448a Don’t start a terminal on startup 2009-03-07 05:50:19 +01:00
Michael Stapelberg 1f3ce94027 Bugfix: Correctly place new windows while other windows are in fullscreen mode 2009-03-07 05:49:13 +01:00
Michael Stapelberg 6abcc5f656 Fix some bugs found by using raster’s wm_torture 2009-03-07 02:44:46 +01:00
Michael Stapelberg a411ed24cb Bugfix: Correctly check for empty containers and unmap the stack_win 2009-03-06 19:08:59 +01:00
Michael Stapelberg 017a0c0d08 Don’t set focus outside of the current container 2009-03-06 17:13:20 +01:00
Michael Stapelberg 97f23f549b Bugfix: decorate_window() needs a flush of course 2009-03-06 17:02:43 +01:00
Michael Stapelberg bf92a0c617 Don’t switch focus when in fullscreen mode 2009-03-06 16:53:47 +01:00
Michael Stapelberg 4259e58655 Bugfix: One warning was left 2009-03-06 16:36:05 +01:00
Michael Stapelberg ee1f64a94e Bugfix: return value was missing 2009-03-06 16:21:39 +01:00
Michael Stapelberg fc3338d3c1 Bugfix: Missing flush after render_container() 2009-03-06 06:56:13 +01:00
Michael Stapelberg 96ac9f9066 Implement slog() and the LOG() macro, convert printf() to LOG() 2009-03-06 06:46:43 +01:00
Michael Stapelberg 0831f3e129 Implement handling the size hints so that aspect ratio is used correctly, fix rendering on stacks 2009-03-06 06:06:19 +01:00
Michael Stapelberg 3684abec1a Bugfix: Fix rendering (needed a flush) 2009-03-05 20:07:57 +01:00
Michael Stapelberg d2d6c0de12 Enable switching to containers when the current container has only one client 2009-03-05 19:47:16 +01:00
Michael Stapelberg c5dffde101 Bugfix: Correct boundary checking for increasing col/rowspan 2009-03-05 17:24:04 +01:00
Michael Stapelberg 906914fe61 Bugfix: Rendering of colspan/rowspan was wrong 2009-03-05 17:17:37 +01:00
Michael Stapelberg 76c201f940 Bugfix: Correctly set currently_focused when clients are destroyed 2009-03-05 17:08:57 +01:00
Michael Stapelberg 841ad55f4a Move HAS_CHANGED into a function 2009-03-05 16:23:26 +01:00
Michael Stapelberg e643d34ddc Use unchecked versions for more speed 2009-03-05 03:33:15 +01:00
Michael Stapelberg 56393c823e Make colorpixels independent from clients 2009-03-05 02:58:12 +01:00
Michael Stapelberg e4627bcaed Don’t re-initialize Xinerama on every configurenotify. This needs to be fixed properly. 2009-03-05 02:17:10 +01:00
Michael Stapelberg 1343b77dbb Bugfix: Some memory leaks / invalid accesses 2009-03-05 01:48:30 +01:00
Michael Stapelberg 17bca23a8c Implement a focus stack, correctly free table columns/rows 2009-03-05 01:20:13 +01:00
Michael Stapelberg bde67a179e Implement wrapping, selecting containers is now Mod1+Ctrl+h/j/k/l 2009-03-04 23:45:44 +01:00
Michael Stapelberg 91f98cc597 Implement auto-destroying of empty workspaces 2009-03-04 22:52:36 +01:00
Michael Stapelberg 8b34eb5fc2 Bugfix: Reconfigure all clients in stacking, correctly ignore events, event when for the root window 2009-03-04 22:41:04 +01:00
Michael Stapelberg 0344ca3f36 Bugfix: Border presses weren’t correctly handled 2009-03-04 21:56:27 +01:00
Michael Stapelberg 03e48b8bfe Bugfix: Reconfigure x/y of stack_windows when necessary 2009-03-04 21:49:29 +01:00
Michael Stapelberg 8fe84697f3 Bugfix: Correctly destroy and remove stack_windows when the container is cleaned up 2009-03-04 21:30:02 +01:00
Michael Stapelberg 0ce298250b Bugfix: Correctly initialize new containers 2009-03-04 21:00:32 +01:00
Michael Stapelberg 3090f03ed2 Bugfix: Fix several bugs in table_cleanup() 2009-03-04 20:41:54 +01:00
Michael Stapelberg a3f47fa6f0 Bugfix: Rendering error when resizing a column near a stacked column 2009-03-04 18:50:52 +01:00
Michael Stapelberg bd9b90d285 Fix datatype for cursor 2009-03-04 18:09:04 +01:00
Michael Stapelberg f90563011f Implement option parsing (-c <configfile>) 2009-03-04 16:06:39 +01:00
Michael Stapelberg a02b861826 Use "conn" for xcb_connection and "event" for xcb_event_* variables everywhere 2009-03-04 15:45:12 +01:00
Michael Stapelberg 45827607dc Use default cursor (XC_left_ptr) for all windows 2009-03-04 15:28:50 +01:00
Michael Stapelberg f45e706c48 Merge font.c into xcb.c 2009-03-04 14:52:04 +01:00
Michael Stapelberg bb83dd6727 Implement switching to different screens when focusing left/right/up/down at the edge of a screen 2009-03-04 13:06:14 +01:00
Michael Stapelberg 05747c4a1c Implement an internal bar which displays the workspaces 2009-03-04 12:09:43 +01:00
Michael Stapelberg 3d774ba021 Implement clicking on titlebars in stack windows to focus 2009-03-04 09:31:00 +01:00
Michael Stapelberg 415b5cc0e8 Load configuration file from ~/.i3/config or /etc/i3/config 2009-03-04 09:16:18 +01:00
Michael Stapelberg 3c6d4f7663 Don’t put the client’s X11 ID into the titlebar 2009-03-04 09:02:49 +01:00
Michael Stapelberg 3911d18982 Implement moving windows to other workspaces 2009-03-04 08:59:03 +01:00
Michael Stapelberg 6653c3a686 Save unnecessary redecorations 2009-03-04 08:05:49 +01:00
Michael Stapelberg 3b50615a71 Implement Xinerama screen changes 2009-03-03 23:51:02 +01:00
Michael Stapelberg 1157229888 Bugfix: Don’t raise the active window when there is a fullscreen client 2009-03-03 04:25:32 +01:00
Michael Stapelberg a12ca34d1c Bugfixes: Various fixes when cleaning up the table/rendering 2009-03-03 03:40:57 +01:00
Michael Stapelberg 16a514b9c1 Use a different color for focused windows in not focused containers, includes bugfixes for re-decoration 2009-03-03 02:28:26 +01:00
Michael Stapelberg 1d9dc05b91 Little cleanups 2009-03-03 02:05:35 +01:00
Michael Stapelberg dd325879d1 Bugfix: Override client’s moves/resizes in configure_notify_event 2009-03-03 01:14:11 +01:00
Michael Stapelberg be21e784d9 Bugfix: Don’t crash when we’re already in stacking mode and go into stacking 2009-03-02 03:33:29 +01:00
Michael Stapelberg ac6567c0a6 Documentation update: Make some comments more understandable, more docs 2009-03-01 22:00:54 +01:00
Michael Stapelberg 6868534fcb Draw stacking borders correctly 2009-03-01 03:55:29 +01:00
Michael Stapelberg df402bacf7 Bugfix: Use HAS_CHANGED on all occurences 2009-03-01 01:56:20 +01:00
Michael Stapelberg cb6ea9861d Bugfix: Fix various bugs when switching workspaces 2009-02-28 22:11:48 +01:00
Michael Stapelberg 4ad7f8fb1a Bugfix: Correctly reconfigure clients when it’s necessary 2009-02-28 15:47:51 +01:00
Michael Stapelberg 327a53c849 More Debug-output 2009-02-28 13:44:43 +01:00
Michael Stapelberg 61c089e982 Bugfix: Raise the stack win when its size changes 2009-02-28 13:03:44 +01:00
Michael Stapelberg b651b132bc Update TODO, fix parsing in commandmode for moving windows to workspaces vs. switching 2009-02-28 02:46:36 +01:00
Michael Stapelberg d8d4d0182d Revert 43d471b9ab and apply correct bugfix:
Before, all clients were reconfigured to just raise them, when focus should
be set. However, this generated lots of notify events, which in turn lead
to an endless loop of setting focus, reconfiguring, setting focus, …
2009-02-28 02:40:07 +01:00
Michael Stapelberg 74c973e8c6 Bugfix: Insert the new client after the currently active one, not always at the end 2009-02-28 02:24:38 +01:00
Michael Stapelberg cdb92e6a49 Correctly disable buffering for stdout 2009-02-28 02:17:55 +01:00
Michael Stapelberg 43d471b9ab Bugfix: Raise clients only when needed 2009-02-28 02:15:14 +01:00
Michael Stapelberg 67fbec2061 Bugfix: Correctly unmap/remap the stack_win when a container becomes empty 2009-02-28 01:38:53 +01:00
Michael Stapelberg 30d386138b Bugfix: Correctly update window titles when in stacking 2009-02-28 01:23:09 +01:00
Michael Stapelberg 4fb4c579f8 Bugfix: Only ignore enter_notify events for the parent windows when in stacking 2009-02-28 01:19:50 +01:00
Michael Stapelberg d8a6f41e39 Bugfix: Set focus when table was shrinked and CUR_CELL might have been shrinked 2009-02-28 01:12:05 +01:00
Michael Stapelberg e4b637b67b Bugfix: Fix two bugs in fullscreen mode 2009-02-28 01:01:06 +01:00
Michael Stapelberg 10c5702a78 Implement restart-command to restart i3 without having to end your session 2009-02-27 22:40:48 +01:00
Michael Stapelberg 248b2e27b9 Bugfix: Boundary checking for current_row and current_col when shrinking table 2009-02-26 22:23:41 +01:00
Michael Stapelberg aea8cb9c25 Bugfix: Unset fullscreen_client when closed 2009-02-26 01:10:41 +01:00
Michael Stapelberg 1335e4a4c9 Grab XCB_GRAB_SYNC and replay the event so it doesn’t get lost 2009-02-25 19:11:49 +01:00
Michael Stapelberg c859174965 Bugfix: Don’t call set_focus when to_focus is NULL 2009-02-25 17:44:17 +01:00
Michael Stapelberg cb71af7dc2 Bugfix: Free()d wrong variable 2009-02-25 17:35:33 +01:00
Michael Stapelberg 0edc523885 Bugfix: Correctly map/unmap stack windows 2009-02-25 02:05:08 +01:00
Michael Stapelberg 90fa720c6f Bugfix: when a window is unmapped, correctly pass focus to the next one and cleanup the table 2009-02-25 01:44:34 +01:00
Michael Stapelberg e77ebb6c71 Implement configuration file parsing 2009-02-25 00:50:30 +01:00
Michael Stapelberg dadace2fa3 Implement automatic cleaning of the table 2009-02-24 20:29:30 +01:00
Michael Stapelberg aa18ca0889 More documentation, cleanups, and a cache for get_colorpixel() 2009-02-24 14:18:08 +01:00
Michael Stapelberg 2dcf4ad62f Bugfix: That has to be _reply 2009-02-24 13:35:35 +01:00
Michael Stapelberg 36aec13860 Cleanups, documentation 2009-02-24 01:24:28 +01:00
Michael Stapelberg 0e3a378c39 Implement stacking 2009-02-24 00:30:04 +01:00
Michael Stapelberg 6e81d1c5e4 s/…/./ where it makes sense 2009-02-23 17:23:57 +01:00
Michael Stapelberg 07b92c2792 Don’t assign ->container for dock-windows 2009-02-23 03:44:10 +01:00
Michael Stapelberg 8b0bc8c3ff Implement vertical resize 2009-02-23 03:27:59 +01:00
Michael Stapelberg 404f19a376 Beautify handle_key_press 2009-02-23 02:55:10 +01:00
Michael Stapelberg 656bdc5090 Implement colspan for resizing 2009-02-23 02:23:16 +01:00
Michael Stapelberg 695494606d Fix: Calculation of unoccupied space has to depend on current row/col 2009-02-23 02:09:24 +01:00
Michael Stapelberg fe0485f9e5 Fix some movement/rendering bugs 2009-02-23 01:41:26 +01:00
Michael Stapelberg 1a0817eb39 Correctly handle _NET_WM_WINDOW_TYPE == _NET_WM_WINDOW_TYPE_DOCK (for dzen2 -dock) 2009-02-23 00:18:13 +01:00
Michael Stapelberg 62c2848211 Document save set 2009-02-18 22:44:14 +01:00
Michael Stapelberg d88c49682f Linux needs -D_GNU_SOURCE for some functions, so enable it in Makefile 2009-02-16 03:35:16 +01:00
Michael Stapelberg 6b1069cd47 Implement horizontal resizing 2009-02-16 03:28:07 +01:00
Michael Stapelberg 7216738778 Implement exit_if_null using variadic macros, fix compilation 2009-02-15 22:52:33 +01:00
Michael Stapelberg 28ea379c10 Update TODO and header-comments 2009-02-15 03:07:29 +01:00
Michael Stapelberg 9595ead9d4 OK, it could still be improved ;-) 2009-02-15 02:56:59 +01:00
Michael Stapelberg 742cef2881 Finalize font.c 2009-02-15 02:52:52 +01:00
Michael Stapelberg 0917cdda36 Cleanup load_font(), make it caching 2009-02-15 02:40:03 +01:00
Michael Stapelberg 26944bea99 Use c99 2009-02-15 02:30:18 +01:00
Michael Stapelberg 658c302031 Bugfix: Correctly disable Xinerama, use TAILQ_HEAD_INITIALIZER where possible 2009-02-15 02:12:14 +01:00
Michael Stapelberg 09cd7bd2d0 Implement Xinerama (workspaces have a specific screen) 2009-02-15 01:58:09 +01:00
Michael Stapelberg 18543c6bce Implement fullscreen mode (Mod1+f) 2009-02-14 20:12:50 +01:00
Michael Stapelberg d06fe8bc9e Bugfix: Correctly handle unmap, don’t apply attribute XCB_EVENT_MASK_BUTTON_PRESS
Those two fix problems seen with mplayer
2009-02-14 19:55:18 +01:00
Michael Stapelberg 9e4b7f35ca Don’t use current workspace 2009-02-14 08:39:50 +01:00
Michael Stapelberg df7621d5a5 Implement fullscreen (_NET_WM_STATE_FULLSCREEN) 2009-02-14 08:38:07 +01:00
Michael Stapelberg 031cf4ccda More error checking, bugfix for mplayer (use visual CopyFromParent) 2009-02-14 03:46:20 +01:00
Michael Stapelberg fb4c851e2a Add vim hints, copyright notice to each file, add LICENSE, retab! everything 2009-02-14 02:33:31 +01:00
Michael Stapelberg 8881068dc3 Various code improvements 2009-02-14 02:19:04 +01:00
Michael Stapelberg 4589c26558 Environment filtering is not needed. Instead, open applications through SHELL, double-fork 2009-02-14 01:36:12 +01:00
Michael Stapelberg 651bcc375f Adjust RFC/TODO, forgot _GNU_SOURCE in layout.c 2009-02-13 19:15:32 +01:00
Michael Stapelberg 82dd64ff24 Move stuff to include/ and src/ 2009-02-13 19:09:25 +01:00