Commit Graph

222 Commits

Author SHA1 Message Date
Michael Stapelberg fb4ee17b05 Merge branch 'master' into next 2012-08-04 16:10:37 +02:00
Michael Stapelberg 74510c59c7 floating_fix_coordinates: properly deal with negative positions 2012-08-04 16:09:16 +02:00
Michael Stapelberg de94f6da1a Introduce splith/splitv layouts, remove orientation
With this commit, the "default" layout is replaced by the splith and
splitv layouts. splith is equivalent to default with orientation
horizontal and splitv is equivalent to default with orientation
vertical.

The "split h" and "split v" commands continue to work as before, they
split the current container and you will end up in a split container
with layout splith (after "split h") or splitv (after "split v").

To change a splith container into a splitv container, use either "layout
splitv" or "layout toggle split". The latter command is used in the
default config as mod+l (previously "layout default"). In case you have
"layout default" in your config file, it is recommended to just replace
it by "layout toggle split", which will work as "layout default" did
before when pressing it once, but toggle between horizontal/vertical
when pressing it repeatedly.

The rationale behind this commit is that it’s cleaner to have all
parameters that influence how windows are rendered in the layout itself
rather than having a special parameter in combination with only one
layout. This enables us to change existing split containers in all cases
without breaking existing features (see ticket #464). Also, users should
feel more confident about whether they are actually splitting or just
changing an existing split container now.

As a nice side-effect, this commit brings back the "layout toggle"
feature we once had in i3 version 3 (see the userguide).

AFAIK, it is safe to use in-place restart to upgrade into versions
after this commit (switching to an older version will break your layout,
though).

Fixes #464
2012-08-04 03:13:24 +02:00
Pavel Löbl d13ba7ca53 Fix floating precision bug
When calculating coordinates we should multiply at first otherwise
we lose precision when i3 is compiled without sse2 support.

The following code prints "Res1: 348 Res2: 349" when compiled with
-O0 -mno-sse2 and "Res1: 349 Res2: 349" with -O0 -msee2.

Note that -msse2 is default flag on 64bit OSes.

int main() {
  double a = 349.0 / 768;
  double b = 349.0 * 768;
  int res1 = a * 768;
  int res2 = b / 768;
  printf("Res1: %d Res2: %d\n", res1, res2);
  return 0;
}

Thanks guys for helping me to hunt down this one.
2012-05-06 14:13:59 +02:00
Michael Stapelberg 206b96202c Use (void) instead of () for functions without args (Thanks fernandotcl)
See also:
http://article.gmane.org/gmane.linux.kernel/1268792

The C compiler will handle (void) as "no arguments" and () as "variadic
function" (equivalent to (...)) which might lead to subtle errors, such
as the one which was fixed with commit 0ea64ae4.
2012-03-31 10:53:04 +02:00
Michael Stapelberg e09e077b76 Merge branch 'master' into next 2012-03-21 20:24:29 +01:00
Michael Stapelberg afed6da0e5 Bugfix: Fix restart with for_window floating configuration (Thanks garga)
Fixes: #668

Calling tree_close with dont_kill_parent=true will avoid it from closing the
workspace if it’s empty (and it’s temporarily empty, because 'floating disable'
detaches, then re-attaches the window).
2012-03-21 20:14:50 +01:00
D Thompson 82146fcebf Implement support for user configuration of constraints on floating window dimensions. 2012-02-16 18:31:28 +00:00
Michael Stapelberg 4f98bbf5ff Bugfix: Obey workspace_layout when re-inserting floating containers (+test) (Thanks aksr)
The code wasn’t using con_attach and therefore didn’t obey workspace_layout.

Fixes: #631
2012-02-07 17:41:00 -05:00
Michael Stapelberg 077d2433a7 Bugfix: Fix coordinates when the rect of an output changes (Thanks Paul)
Fixes #623
2012-01-21 15:07:53 +00:00
Michael Stapelberg cb4c9b9d27 Bugfix: Position floating windows exactly where their geometry specified (Thanks B-Con)
Fixes #619
2012-01-21 14:20:55 +00:00
Michael Stapelberg 96c491a488 Bugfix: Fix assignments of floating windows to (yet) unused workspaces (Thanks zeus)
The problem was that the workspace was considered empty for a brief period of
time when entering floating mode. This happened when you assigned Gimp to a
workspace which is not in use yet.
2012-01-08 12:28:49 +00:00
Michael Stapelberg 4fba2d5f91 Bugfix: Correctly check boundaries and reassign floating windows when moving (Thanks xpt)
Fixes: #592
2011-12-18 17:24:27 +00:00
Michael Stapelberg ed66a30410 mark parameters const 2011-11-10 19:17:36 +00:00
Michael Stapelberg 9d15a00ba8 introduce sasprintf() in libi3, use it everywhere 2011-10-23 13:16:56 +01:00
Michael Stapelberg 42d355f2b7 normalize modelines/headers across src/*.c 2011-10-22 23:40:02 +01:00
Michael Stapelberg 1717b88174 Merge branch 'master' into next 2011-09-22 20:11:44 +01:00
Michael Stapelberg 4dbda73114 Bugfix: Correctly revert focus to other floating windows when closing a floating window
Uncovered by the testsuite \o/
2011-09-22 20:10:51 +01:00
Michael Stapelberg e6a854a742 Remove obsolete code for floating focus 2011-09-17 19:29:06 +01:00
Michael Stapelberg 7a38d8ac56 Merge branch 'master' into next 2011-09-17 14:13:05 +01:00
Michael Stapelberg 983a679537 Bugfix: Honor the X11 window border when calculating dimensions for floating windows 2011-09-17 14:10:35 +01:00
Michael Stapelberg f6eaa8a580 Bugfix: Don’t use top border height twice when calculating dimensions for floating windows 2011-09-17 14:09:57 +01:00
Michael Stapelberg ad568aa8c1 Merge branch 'master' into next 2011-09-14 23:00:02 +01:00
Michael Stapelberg 6b541d382b Bugfix: Don’t fix floating coordinates when reassigning (fixes flickering)
This fixes flickering when moving floating windows between different monitors.
2011-09-14 22:58:51 +01:00
Michael Stapelberg 16188af8bf Merge branch 'master' into next 2011-08-28 15:47:35 +02:00
Michael Stapelberg 5618875df8 Bugfix: Make 'floating enable' check for dock windows (Thanks edelkind)
Fixes #501
2011-08-28 15:46:50 +02:00
Michael Stapelberg 6c42a179ec Merge branch 'master' into next 2011-08-27 13:03:20 +02:00
Michael Stapelberg 4c01dbd726 Bugfix: Don’t always focus floating windows (fixes focus stealing with assignments) (+test) (Thanks aksr) 2011-08-27 13:02:44 +02:00
Michael Stapelberg 75c11cb894 Merge branch 'master' into next 2011-08-24 23:00:12 +02:00
Michael Stapelberg 698d97cd02 Bugfix: Correctly warp floating windows when using the 'move' command 2011-08-24 22:59:46 +02:00
Michael Stapelberg 37a40671c9 Merge branch 'master' into next 2011-08-24 22:43:31 +02:00
Michael Stapelberg 62e9eab4e5 Merge branch 'master' into next
Conflicts:
	src/floating.c
2011-08-24 22:43:15 +02:00
Michael Stapelberg 7558c1ddbd Bugfix: Correctly handle current_output == NULL
Fixes t/66-assign.t
2011-08-24 22:41:17 +02:00
Peter Bui a33bfa81d2 Move centering code to before sanity check 2011-08-24 22:27:15 +02:00
Michael Stapelberg c527497a4b Merge branch 'master' into next 2011-08-24 16:58:47 +02:00
Michael Stapelberg 247e115835 Bugfix: Correctly place floating windows on their appropriate output (Thanks kraM)
Fixes #452

This might also fix problems with Firefox where Firefox only displays a white
window (my guess is that it mapped a floating window outside of the actually
visible area for some reason).
2011-08-24 16:57:35 +02:00
Mateusz Poszwa 42db9de7ec Add new_float config option.
This option sets the default border style for containers automatically put into floating mode.

Fixes #264
2011-08-09 09:29:53 +02:00
Michael Stapelberg cd5e74bd8e Bugfix: Call tree_render() before starting the dragging when dragging a floating window (Thanks eeemsi)
Fixes #462
2011-08-06 18:53:39 +02:00
Michael Stapelberg bc98185f85 Bugfix: Handle (and free) the last_motion_notify 2011-07-31 21:21:45 +02:00
Michael Stapelberg 22de7593c5 Bugfix: free() the grab_pointer reply 2011-07-31 19:52:58 +02:00
Michael Stapelberg 6c35a0b93b handle the xcb_grab_pointer reply 2011-07-31 19:48:39 +02:00
Michael Stapelberg ed30043950 Bugfix: Also abort drag_pointer after XCB_KEY_PRESS / XCB_KEY_RELEASE (Thanks eeemsi) 2011-07-28 21:01:34 +02:00
Michael Stapelberg 1585d942ea Make workspace_layout handle all cons at workspace level, not only the first one (+test)
This makes opening new windows on workspace level and moving windows to the
right/left more like in the old i3.
2011-06-02 17:21:38 +02:00
Michael Stapelberg 03cc490f0e Bugfix: fix crash when disabling floating mode 2011-05-16 20:51:29 +02:00
Michael Stapelberg 167bdd26b7 Argument for 'kill' for killing a specific window (now default) or the whole client (+test)
Use 'kill window' to kill a specific window (for example only one specific
popup), use 'kill client' to kill the whole application (or X11 connection to
be specific).
2011-05-13 20:41:03 +02:00
Michael Stapelberg e73c171e0d Bugfix: assign BORDER_BOTTOM instead of BORDER_RIGHT (Thanks Jan) 2011-05-06 13:09:50 +02:00
Michael Stapelberg 7e51f626ef Bugfix: Before rendering, attach the con to its floating_con
Otherwise, the rendering will produce negative coordinates.
2011-05-02 11:06:13 +02:00
Michael Stapelberg b2754fd679 Bugfix: When re-assigning floating windows to a different output, use the last focused workspace, not the first 2011-05-02 11:05:50 +02:00
Michael Stapelberg d28008aa63 Bugfix: Correctly render decorations in tabbed containers (don’t overlap)
This fixes a regression introduced in b644fb5f26.
2011-05-01 18:48:30 +02:00
Michael Stapelberg 3d5af35fa4 Bugfix: Center floating windows with invalid coordinates on current ws 2011-04-18 19:36:10 +02:00
Michael Stapelberg f613df48d2 Bugfix: Check if a floating window’s coordinates are within a different workspace when managing (Thanks Merovius)
Fixes: #297
2011-04-18 19:28:03 +02:00
Michael Stapelberg 60532a90e7 Bugfix: Assign floating cons to correct workspace when moving between monitors (Thanks dothebart)
Fixes: #371
2011-04-18 18:44:39 +02:00
Michael Stapelberg 21c7a69812 optimization: when moving floating windows, render/push only the floatingcon 2011-04-01 22:40:12 +02:00
Michael Stapelberg 0639a7d95b Make i3 compatible with the very latest xcb
This involves:
 • Compiling with xcb-util instead of xcb-{atom,aux} (they merged the libraries)
 • Not using xcb-{event,property} anymore (code removed upstream)
 • Not using the predefined WINDOW, CARDINEL, … atoms (removed upstream)
 • Using the new xcb_icccm_* data types/functions instead of just xcb_*
   (for example xcb_icccm_get_wm_hints instead of xcb_get_wm_hints)

Also I refactored the atoms to use x-macros.
2011-03-18 14:39:27 +01:00
Michael Stapelberg b484ed5f9d When making floating cons tiling, re-insert next to the next focused *tiling* con (Thanks mseed)
Fixes: #337 and #350
2011-03-14 23:50:29 +01:00
Michael Stapelberg f162e7efaa refactor font caching to just save the ID instead of mainting a cache with pattern→id-mapping 2011-03-10 23:20:17 +01:00
Michael Stapelberg 51ff0f80a6 Obey minimum size when resizing floating windows
Fixes #285
2011-03-06 14:15:46 +01:00
Michael Stapelberg 4514146ed9 Use the combined geometry of children when setting a split container to floating (+testcase) (Thanks mseed)
Fixes #332
2011-03-06 02:39:15 +01:00
Michael Stapelberg caa1ac1a9f Use the original geometry for floating windows 2011-03-03 16:22:22 +01:00
Michael Stapelberg b484b9ab32 Don’t create floating containers from whole workspaces when they are empty (Thanks mseed)
This fixes #327
2011-03-03 14:55:02 +01:00
Michael Stapelberg 33c2b4e582 Bugfix: Correctly fix the percent values for resizing when making a floating con tiling (Thanks mseed) (+testcase) 2011-02-28 23:59:56 +01:00
Michael Stapelberg d80105103c Bugfix: Re-attach floating cons to the right container (Thanks mseed)
This fixes #315.
2011-02-28 17:23:50 +01:00
Michael Stapelberg a5e075c154 Automatically close empty parent cons when making their last child floating (Thanks mseed)
This fixes #313
2011-02-14 16:43:41 +01:00
Michael Stapelberg 7b01bc5eb7 Bugfix: use the global root variable, don’t get the first one (Thanks quaec)
The case of an X11 server having multiple displays is handled correctly by the
code in src/mainx.c. However, due to some functions not being correctly
refactored and still getting the first screen (and also the first root window)
from the XCB connection, i3 was operating on the wrong root window.
2011-01-28 00:41:53 +01:00
Michael Stapelberg f462a9a215 re-insert floating cons next to the currently focused con of the appropriate workspace 2011-01-27 16:04:17 +01:00
Michael Stapelberg 2f5d111936 when re-inserting a floating con, start with a more fair percent value 2011-01-27 15:53:14 +01:00
Fernando Tarlá Cardoso Lemos 07eb20851f Fix floating mode according to the new requirements.
At all times any given non-leaf container should have the sum of
the percentages of its children == 1.0, otherwise we'll crash on
an assertion failure.
2011-01-27 13:00:14 +01:00
Fernando Tarlá Cardoso Lemos bc82fc7e9f This parameter is no longer needed.
The algorithm is now always the same, doesn't matter if we're
adding or removing a container to/from its parent.
2011-01-27 13:00:14 +01:00
Michael Stapelberg 81ff1f976d Bugfix: Don’t send fake configure notify with not yet rendered rect for floating windows
This fixes a bug where opening the Xpdf find dialog when Xpdf is in fullscreen
mode would crash Xpdf due to a zero-width and zero-height ConfigureNotify rect.
2011-01-21 21:01:02 +01:00
Michael Stapelberg 83f6e445a0 Bugfix: Don’t use ->old_parent for floating cons (Thanks eelvex)
Instead, we attach them to their workspace when toggling back to tiling. This
makes more sense; afterall, floating clients are always directly below a
CT_WORKSPACE container.
2011-01-08 00:44:03 +01:00
Michael Stapelberg e4bb6d859e Bugfix: Correctly maintain focus when setting a workspace to floating 2011-01-08 00:10:30 +01:00
Michael Stapelberg 2d05c3a37d Fix dragging floating containers / click handling 2010-12-31 01:38:17 +01:00
Michael Stapelberg daf00a932f For floating mode on workspace level, create a container around the content (Thanks Merovius)
Like when setting a workspace to stacked, we need to create a new container
around the content and set *that* to floating.
2010-12-30 23:09:18 +01:00
Michael Stapelberg 529bdf833f floating.c: remove obsolete code, fix indenting 2010-11-29 22:23:49 +01:00
Fernando Tarlá Cardoso Lemos ea1e9b20be Get rid of the remaining hardcoded height. 2010-11-15 12:25:06 +01:00
Michael Stapelberg a27af52706 fix floating focus behaviour, extend testcase 2010-11-14 22:35:44 +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 945632ddcb Implement setting the WM_NAME of i3 container windows for debugging 2010-11-14 16:41:46 +01:00
Michael Stapelberg ad9be5402a Implement support for WM_CLIENT_LEADER 2010-11-12 23:46:03 +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 bd9e5c0bc4 parser: implement explicit "mode floating"/"mode tiling" 2010-06-30 15:54:34 +02:00
Michael Stapelberg 2f4210d3cf floating: use con_fix_percent 2010-06-28 22:36:08 +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 69e1975e29 split up toggle_floating_mode into floating_enable and floating_disable 2010-06-28 21:40:17 +02:00
Michael Stapelberg 143622d2d7 Reposition floating windows while dragging 2010-05-31 23:01:08 +02:00
Michael Stapelberg 71e0e49c0e Implement mode toggle 2010-05-31 22:48:28 +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 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
Axel Wagner 9cb35383a8 Implement proportional floating-resize. 2010-03-13 13:22:39 +01:00
Axel Wagner 0f5256dc72 Floating resize uses arbitrary corners
This closes ticket #121
2010-03-12 03:11:20 +01:00
Michael Stapelberg 7c1be83692 Update comment (Thanks Merovius) 2010-03-12 02:59:16 +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 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 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 65cae2cad1 Bugfix: Don’t put dock clients into floating mode (Thanks xeen) 2010-01-01 16:19:42 +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 f87b98e0a7 Take into account the window’s base_{width,height} when resizing (Thanks Mirko) 2009-12-12 22:27:57 +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 095de9eaab Bugfix: partly revert f3880928, client->workspace was not updated (Thanks msi) 2009-09-29 01:07:51 +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 e4813d009a Bugfix: Correctly handle unmap-notify events when resizing (Thanks Mirko) 2009-09-07 21:18:44 +02:00
Michael Stapelberg c7ba95e79d Implement resizing floating clients with Mod1 + right mouse button 2009-08-22 07:49:28 +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 aaccc0e62c Bugfix: Correctly check coordinates for resizing floating windows (Thanks Mirko) 2009-06-26 12:14:20 +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 07bebdf841 Correctly re-assign floating clients to the destination workspace when moving 2009-06-24 17:12:12 +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 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 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 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 00c6bdeb0b Implement changing focus via keyboard between floating clients, fix several floating bugs 2009-06-14 01:04:59 +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 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 0cb5d7448d Implement clients going automatically into floating 2009-05-31 00:31:18 +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 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 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