Commit Graph

423 Commits

Author SHA1 Message Date
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
45c3341e09 Add docs to include/ipc.h 2009-07-28 20:58:56 +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
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
bapt
40750e227d Implements a reload command 2009-07-23 18:46:21 +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
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
91aeed0442 Resolve documentation FIXMEs, remove an unnecessary struct 2009-06-29 22:20:35 +02:00
Lars Hartmann
58cbce0380 updated doxygen docu, added FIXMEs, fixed headers to 80chars width. 2009-06-29 21:54:51 +02:00
Michael Stapelberg
28c4b045d6 Merge branch 'next' (3.β is stable now) 2009-06-26 13:27:06 +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
62c8d58d82 Implement the configuration option floating_modifier and document it 2009-06-24 20:31:00 +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
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
626e6b2b6f Bugfix: yuck! FREE() used a wrong check, effectively never free()ing memory 2009-06-21 13:44:14 +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
325d1b301f Implement the special workspace ~ for assignments, which will set clients floating automatically 2009-06-19 20:20:00 +02:00
Michael Stapelberg
89c0caaec4 Implement a command for hiding all floating windows (and showing them again) 2009-06-19 13:59:29 +02:00
Michael Stapelberg
5c48444b4e Implement the possibility to set a workspace open clients automatically in floating mode
Use "wwt" (with workspace: toggle floating) in your configuration file
2009-06-19 13:20:10 +02:00
Michael Stapelberg
4135aaad7c Implement moving of floating clients 2009-06-19 12:57:21 +02:00
Michael Stapelberg
a6d7f5451d Also set DIALOG, UTILITY and SPLASH windows floating automatically 2009-06-19 12:05:55 +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
052190ad05 Handle transient hint and window class dialog to mark clients as floating 2009-06-12 22:59:23 +02:00
Michael Stapelberg
b13a43159f Static analyzers: Add noreturn attribute to die() 2009-06-11 03:37:13 +02:00
Michael Stapelberg
e689be983b Implement variables in configfile.
This implements ticket #42.

Syntax is "set $key value". All further instances of $key will be
replaced with value before parsing each line of the configfile.
2009-06-01 16:19:06 +02:00
Michael Stapelberg
2a67630aa6 Optimization: Get the colorpixels when loading configuration, make use of the new config struct
Instead of building arrays of colorpixels we can simply use a pointer
to a struct Colortriple. Furthermore, by getting the colorpixels when
loading the configuration, we save a lot of function calls in the
main code.
2009-06-01 15:14:45 +02:00
Michael Stapelberg
0cb5d7448d Implement clients going automatically into floating 2009-05-31 00:31:18 +02:00
Michael Stapelberg
54fb9435f8 Add header for config.h, retab! the file 2009-05-30 22:22:58 +02:00
Michael Stapelberg
cbc3880007 Use a more efficient struct for storing colors, validate/parse them more easily 2009-05-30 22:20:32 +02:00
Atsutane
65bcf170ed Introduced color setting. 2009-05-30 17:59:04 +02:00
Michael Stapelberg
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
b58e2fa8ed Move toggle_fullscreen to client.c 2009-05-26 16:49:57 +02:00
Michael Stapelberg
5b8e2ecb18 Implement floating (please test and find bugs)
Details which are missing: A command to hide/show all floating clients,
moving/resizing clients with your mouse holding Mod1 (click anywhere
in the client, not just on its borders), resize/move by keyboard, select
next/previous client by keyboard
2009-05-23 16:34:03 +02:00
Michael Stapelberg
b35599004a Move the manage_*-functions into their own file as they got quite large 2009-05-16 18:25:04 +02:00
Michael Stapelberg
e79cca8f72 Implement putting clients onto specific workspaces ("assign" in the configfile)
This closes ticket #39
2009-05-16 17:32:36 +02:00
Michael Stapelberg
1256730b4b Bugfix: Fix display/resizing of colspanned containers 2009-05-09 18:43:50 +02:00
Michael Stapelberg
3ccc0d7794 Bugfix: Fix display/resizing of colspanned containers 2009-05-09 18:43:02 +02:00
Michael Stapelberg
5b4f10eaca Bugfix: Store width_factor/height_factor per workspace, not per container
This is a relatively big change, however all cases should be handled by
now.

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

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

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

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

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

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

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

This fixes ticket #36
2009-05-09 13:01:23 +02:00
Michael Rudolf
3400f0e6bd Implement autostart using "exec" in config
Syntax is "exec <application>", like when creating a binding.
Multiple entries are possible, applications are started in
the specified order.
2009-05-05 20:14:02 +02:00
Michael Stapelberg
f72214725c Implement jumping to windows by matching their class / title 2009-05-05 16:53:22 +02:00
Michael Stapelberg
e295ab302b Implement storing WM_CLASS of each client 2009-05-05 16:53:22 +02:00
Michael Stapelberg
a0d23c53b3 Bugfix: Re-distribute free space when closing customly resized containers, re-evaluate for other containers
This fixes ticket #4
2009-05-03 14:29:58 +02:00
Michael Stapelberg
eab895ac9e Bugfix: Correctly restore focus when leaving fullscreen mode 2009-05-03 02:13:11 +02:00
Michael Stapelberg
99054fb50f Bugfix: Fix drag&drop in GTK applications (firefox, thunderbird)
Thanks to Daniel Wäber’s contribution to wmii:
http://code.suckless.org/hg/wmii/rev/f4f25de0de54
2009-05-02 20:51:55 +02:00
Michael Stapelberg
e91f399609 Bugfix: Correctly restart i3 when not using its absolute path 2009-05-01 16:10:02 +02:00
Michael Stapelberg
982e453251 Don’t rely on libxcb-wm any longer, as it got removed in libxcb 0.3.4
See http://cgit.freedesktop.org/xcb/util/commit/?id=4c9a707f472e49bc3005354db265a0214071d46b
2009-04-19 20:44:34 +02:00
Michael Stapelberg
a2d20b6848 Bugfix: Send clients their absolute position/size in generated configure events, not relative
This fixes ticket #26.
2009-04-11 22:37:48 +02:00
Michael Stapelberg
bcbe800720 Bugfix: Store dock clients per screen, not per workspace.
This fixes ticket #12
2009-04-11 14:29:15 +02:00
Michael Stapelberg
8cc1fcf536 General small cleanups 2009-04-11 14:08:19 +02:00
Michael Stapelberg
bd9de8189b Put documentation for each function in the header files, doxygen-compatible
Thanks to psychoschlumpf for the hint. Having comments in the headers
makes it easier to get the big picture when not being interested in the
source.

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

Let me paste the header of the doxygen file:

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

  So, if you want to use it, here you go. This is however not a supported
  document, and I recommend you have a look at the docs/ folder or at
  http://i3.zekjur.net/ for more, real documentation.
2009-04-07 19:02:07 +02:00
Michael Stapelberg
28aa13d831 Bugfix: Don’t set focus if it is not necessary.
This fixes ticket #13
2009-04-01 12:50:42 +02:00
Michael Stapelberg
755540817e Implement scrolling on stack windows and on the bar. This implements ticket #18 2009-04-01 12:31:13 +02:00
Michael Stapelberg
fcc5ce516b Bugfix: Don’t free xinerama-reply if it is NULL, implement FREE()-macro (Thanks Igor) 2009-03-30 08:27:53 +02:00
Michael Stapelberg
a8478efa34 Bugfix: Correctly filter out the numlock state bit (doesn’t get cleared for some reason)
This fixes ticket #14
2009-03-27 15:24:52 +01:00
Michael Stapelberg
3a994e4bf7 Implement clicking on the bar to switch workspaces 2009-03-15 17:49:25 +01:00
Michael Stapelberg
cb9c7078be Implement kill-command to kill the current window, document it 2009-03-14 22:09:36 +01:00
Michael Stapelberg
cc0b060628 Implement exit command, document it in manpage, add it to defaultconfig (Mod1+Shift+e) 2009-03-14 21:31:22 +01:00
Michael Stapelberg
14834c3530 Fake more configure notifies (makes xpdf work better) 2009-03-13 00:39:16 +01:00
Michael Stapelberg
755709c86d Bugfix: Completely ignore legacy hints as soon as the client uses _NET_WM_NAME 2009-03-12 16:44:44 +01:00
Michael Stapelberg
cc2c63b860 Handle legacy window titles by rendering them not unicode-compatible. 2009-03-11 21:31:54 +01:00
Michael Stapelberg
12970211c4 Fix misnomer (window_type_handler → handle_window_type), resolve TODO 2009-03-11 19:39:32 +01:00
Michael Stapelberg
c0aa9cac61 Implement moving containers, implement moving windows to the top if top-most, change config to use Mod3 2009-03-11 18:56:31 +01:00
Michael Stapelberg
49b56166dc Implement moving clients to the left if they are leftmost 2009-03-11 01:55:10 +01:00
Michael Stapelberg
38c8541807 Bugfix: Change the event mask to ignore enter notifies when rendering the layout and changing workspaces 2009-03-11 00:20:56 +01:00
Michael Stapelberg
408b2bdb39 Bugfix: Eliminate race condition, fix dock windows
There was a race condition when mapping a window and not setting the event mask
before. Therefore, the ReparentNotify and (more important) the UnmapNotify generated
by reparenting were not received, thus leaving the awaiting_useless_unmap variable
of the client "true". To just make it work, in previous commits the DestroyNotify
handler was introduced. Fortunately, with fixing this race condition by first
setting the event mask and mapping the window afterwards, we can remove this handler.

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

Furthermore, the client’s strut containing the space to reserve at the screen edge
is now checked and the desired height is set to the window’s height if the strut
contains 0 or if no strut was specified at all.
2009-03-10 20:56:25 +01:00
Michael Stapelberg
c025678177 Major change: Redirect events instead of handle the notifies.
By specifying XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT, the window manager
will get map request events instead of map notify events, and therefore
can act sooner (the window won’t be positioned on the screen and moved
afterwards).

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

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

Note that there is a new FIXME in src/handlers.c. Some windows generate
unmap notify events when reparenting while others don’t. We need to
understand, document and implement a more correct way to handle this.
2009-03-10 00:51:15 +01:00
Michael Stapelberg
71993c9b48 Implement wrapping left/right/up/down across screens 2009-03-09 07:39:19 +01:00
Michael Stapelberg
6df039c3b5 Convert window title to UCS-2 when updating it, don’t update it if it didn’t change 2009-03-09 06:26:32 +01:00
Michael Stapelberg
4e12c9b39c Fix the warning on SUS-compatible systems (char**) and on NetBSD (const char**) 2009-03-08 17:47:45 +01:00
Michael Stapelberg
f85990b27a Fix warnings, update DEPENDS, update Makefile for NetBSD 2009-03-08 17:30:17 +01:00
Michael Stapelberg
6f630a3335 Implement UTF-8-clean window titles 2009-03-08 00:49:11 +01:00
Michael Stapelberg
a411ed24cb Bugfix: Correctly check for empty containers and unmap the stack_win 2009-03-06 19:08:59 +01:00
Michael Stapelberg
891ec20755 Use __FUNCTION__ in LOG() 2009-03-06 16:48:30 +01:00
Michael Stapelberg
96ac9f9066 Implement slog() and the LOG() macro, convert printf() to LOG() 2009-03-06 06:46:43 +01:00
Michael Stapelberg
0831f3e129 Implement handling the size hints so that aspect ratio is used correctly, fix rendering on stacks 2009-03-06 06:06:19 +01:00
Michael Stapelberg
906914fe61 Bugfix: Rendering of colspan/rowspan was wrong 2009-03-05 17:17:37 +01:00
Michael Stapelberg
56393c823e Make colorpixels independent from clients 2009-03-05 02:58:12 +01:00
Michael Stapelberg
17bca23a8c Implement a focus stack, correctly free table columns/rows 2009-03-05 01:20:13 +01:00
Michael Stapelberg
03e48b8bfe Bugfix: Reconfigure x/y of stack_windows when necessary 2009-03-04 21:49:29 +01:00
Michael Stapelberg
bd9b90d285 Fix datatype for cursor 2009-03-04 18:09:04 +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
415b5cc0e8 Load configuration file from ~/.i3/config or /etc/i3/config 2009-03-04 09:16:18 +01:00
Michael Stapelberg
3911d18982 Implement moving windows to other workspaces 2009-03-04 08:59:03 +01:00
Michael Stapelberg
3b50615a71 Implement Xinerama screen changes 2009-03-03 23:51:02 +01:00
Michael Stapelberg
16a514b9c1 Use a different color for focused windows in not focused containers, includes bugfixes for re-decoration 2009-03-03 02:28:26 +01:00
Michael Stapelberg
dd325879d1 Bugfix: Override client’s moves/resizes in configure_notify_event 2009-03-03 01:14:11 +01:00
Michael Stapelberg
3f662eaed5 Bugfix: Forgot to change the number of atoms correctly 2009-03-02 03:35:25 +01:00
Michael Stapelberg
ac6567c0a6 Documentation update: Make some comments more understandable, more docs 2009-03-01 22:00:54 +01:00
Michael Stapelberg
cb6ea9861d Bugfix: Fix various bugs when switching workspaces 2009-02-28 22:11:48 +01:00
Michael Stapelberg
d8a6f41e39 Bugfix: Set focus when table was shrinked and CUR_CELL might have been shrinked 2009-02-28 01:12:05 +01:00
Michael Stapelberg
10c5702a78 Implement restart-command to restart i3 without having to end your session 2009-02-27 22:40:48 +01:00
Michael Stapelberg
e77ebb6c71 Implement configuration file parsing 2009-02-25 00:50:30 +01:00
Michael Stapelberg
dadace2fa3 Implement automatic cleaning of the table 2009-02-24 20:29:30 +01:00
Michael Stapelberg
aa18ca0889 More documentation, cleanups, and a cache for get_colorpixel() 2009-02-24 14:18:08 +01:00
Michael Stapelberg
36aec13860 Cleanups, documentation 2009-02-24 01:24:28 +01:00
Michael Stapelberg
0e3a378c39 Implement stacking 2009-02-24 00:30:04 +01:00
Michael Stapelberg
fe0485f9e5 Fix some movement/rendering bugs 2009-02-23 01:41:26 +01:00
Michael Stapelberg
1a0817eb39 Correctly handle _NET_WM_WINDOW_TYPE == _NET_WM_WINDOW_TYPE_DOCK (for dzen2 -dock) 2009-02-23 00:18:13 +01:00
Michael Stapelberg
6b1069cd47 Implement horizontal resizing 2009-02-16 03:28:07 +01:00
Michael Stapelberg
7216738778 Implement exit_if_null using variadic macros, fix compilation 2009-02-15 22:52:33 +01:00
Michael Stapelberg
742cef2881 Finalize font.c 2009-02-15 02:52:52 +01:00
Michael Stapelberg
0917cdda36 Cleanup load_font(), make it caching 2009-02-15 02:40:03 +01:00
Michael Stapelberg
09cd7bd2d0 Implement Xinerama (workspaces have a specific screen) 2009-02-15 01:58:09 +01:00
Michael Stapelberg
18543c6bce Implement fullscreen mode (Mod1+f) 2009-02-14 20:12:50 +01:00
Michael Stapelberg
d06fe8bc9e Bugfix: Correctly handle unmap, don’t apply attribute XCB_EVENT_MASK_BUTTON_PRESS
Those two fix problems seen with mplayer
2009-02-14 19:55:18 +01:00
Michael Stapelberg
df7621d5a5 Implement fullscreen (_NET_WM_STATE_FULLSCREEN) 2009-02-14 08:38:07 +01:00
Michael Stapelberg
fb4c851e2a Add vim hints, copyright notice to each file, add LICENSE, retab! everything 2009-02-14 02:33:31 +01:00
Michael Stapelberg
8881068dc3 Various code improvements 2009-02-14 02:19:04 +01:00
Michael Stapelberg
4589c26558 Environment filtering is not needed. Instead, open applications through SHELL, double-fork 2009-02-14 01:36:12 +01:00
Michael Stapelberg
82dd64ff24 Move stuff to include/ and src/ 2009-02-13 19:09:25 +01:00