Commit Graph

39 Commits

Author SHA1 Message Date
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 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 e5c4fa6c1c Include unistd.h for usleep() 2009-12-08 20:55:17 +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 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 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 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 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 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 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 a81108c527 Bugfix: Initialize screens correctly when not using Xinerama (Thanks Mikael) 2009-09-05 19:17:59 +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 d8380c6101 Bugfix: Don’t initialize screen twice when not using Xinerama (Thanks badboy) 2009-08-11 12:38:52 +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 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 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 b16ab02cc7 Bugfix: Correctly initialize screens when Xinerama is disabled (Thanks Moredread) 2009-06-24 23:50:04 +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 4a6a748561 Bugfix: Reconfigure bar window when changing resolutions (Thanks Mirko) 2009-05-03 22:59:50 +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 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 3a994e4bf7 Implement clicking on the bar to switch workspaces 2009-03-15 17:49:25 +01:00
Michael Stapelberg 71993c9b48 Implement wrapping left/right/up/down across screens 2009-03-09 07:39:19 +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 1343b77dbb Bugfix: Some memory leaks / invalid accesses 2009-03-05 01:48:30 +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 05747c4a1c Implement an internal bar which displays the workspaces 2009-03-04 12:09:43 +01:00
Michael Stapelberg 3b50615a71 Implement Xinerama screen changes 2009-03-03 23:51:02 +01:00
Michael Stapelberg cb71af7dc2 Bugfix: Free()d wrong variable 2009-02-25 17:35:33 +01:00
Michael Stapelberg 28ea379c10 Update TODO and header-comments 2009-02-15 03:07:29 +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