Commit Graph

705 Commits

Author SHA1 Message Date
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 d55e4ece83 Bugfix: configure floating windows above tiling windows when moving them to another workspaces (Thanks Sasha) 2010-03-17 00:39:38 +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 ba512668e3 Bugfix: Correctly stack windows when new windows are opened while in fullscreen mode
This fixes ticket #195.
2010-03-15 22:18:26 +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 bb7c6e7549 Use LOG instead of DLOG/ELOG 2010-03-12 00:50:31 +01:00
Michael Stapelberg 061f8f1375 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-12 00:50:31 +01:00
Michael Stapelberg 56b08ab4fc 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-12 00:50:31 +01:00
Michael Stapelberg 9714f24971 bugfix: don’t remap stack windows errnously when changing workspaces
This fixes ticket #193 (long-standing rendering bug).
2010-03-12 00:50:31 +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 f20a446423 s/DLOG/LOG (Thanks ccount) 2010-02-14 13:22:32 +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 cd929f1199 Bugfix: Correctly do boundary checking/moving to other workspaces when moving floating clients via keyboard (Thanks sasha) 2010-02-12 15:56:47 +01:00
Michael Stapelberg 3d13d53ae7 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 15:56:19 +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 f399c3ef9d Bugfix: Don’t leak IPC socket to launched processes 2010-01-23 00:35:10 +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 aaf46bfc55 bugfix: lexer: return to INITIAL state (Thanks dirkson)
'floating_modifier' after 'workspace' did not work because of wrong
state
2010-01-08 18:56:53 +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 1dcb4a39fd Use LOG instead of DLOG (next branch feature only) 2010-01-07 19:25:01 +01:00
Michael Stapelberg d1a0e930a8 Bugfix: if a font provides no per-char info for width, fall back to the default (Thanks Ciprian) 2010-01-07 14:38:50 +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 86b0dab7ea 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:39:45 +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 505eaaf349 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:43:02 +01:00