Commit Graph

745 Commits

Author SHA1 Message Date
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