Commit Graph

271 Commits

Author SHA1 Message Date
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
434345aa30 Ignore notify events which are not in mode XCB_NOTIFY_MODE_NORMAL 2009-03-10 11:26:52 +01:00
Michael Stapelberg
441f406a4b Fix warning (typecast) 2009-03-10 09:51:00 +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
d38636439c Fix warning 2009-03-09 17:50:00 +01:00
Michael Stapelberg
b800408a97 Bugfix: Handle all events when dragging to resize, correctly set OVERRIDE_REDIRECT 2009-03-09 08:50:33 +01:00
Michael Stapelberg
3a34cfc603 Bugfix: Draw bar at the correct position, handle expose events for bars 2009-03-09 08:24:05 +01:00
Michael Stapelberg
38d903aea5 Update comment 2009-03-09 07:18:04 +01:00
Michael Stapelberg
cc78664f9d Bugfix: Use memcmp() instead of strcmp(), use new_len * 2 to check all bytes 2009-03-09 07:02:47 +01:00
Michael Stapelberg
65595c61a8 Bugfix: Don’t strcmp() if client->name == NULL 2009-03-09 06:41:04 +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
4f8e704017 s/atomar/atomic 2009-03-08 21:01:06 +01:00
Michael Stapelberg
cefc1dabac Bugfix: Use a new variable called new_position and initialize it correctly when resizing 2009-03-08 20:59:49 +01:00
Michael Stapelberg
71221baca0 Fix race condition when updating client->name 2009-03-08 20:04:01 +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
6abcc5f656 Fix some bugs found by using raster’s wm_torture 2009-03-07 02:44:46 +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
017a0c0d08 Don’t set focus outside of the current container 2009-03-06 17:13:20 +01:00
Michael Stapelberg
97f23f549b Bugfix: decorate_window() needs a flush of course 2009-03-06 17:02:43 +01:00
Michael Stapelberg
4259e58655 Bugfix: One warning was left 2009-03-06 16:36:05 +01:00
Michael Stapelberg
ee1f64a94e Bugfix: return value was missing 2009-03-06 16:21:39 +01:00
Michael Stapelberg
fc3338d3c1 Bugfix: Missing flush after render_container() 2009-03-06 06:56:13 +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
76c201f940 Bugfix: Correctly set currently_focused when clients are destroyed 2009-03-05 17:08:57 +01:00
Michael Stapelberg
e643d34ddc Use unchecked versions for more speed 2009-03-05 03:33:15 +01:00
Michael Stapelberg
56393c823e Make colorpixels independent from clients 2009-03-05 02:58:12 +01:00
Michael Stapelberg
e4627bcaed Don’t re-initialize Xinerama on every configurenotify. This needs to be fixed properly. 2009-03-05 02:17:10 +01:00
Michael Stapelberg
1343b77dbb Bugfix: Some memory leaks / invalid accesses 2009-03-05 01:48:30 +01:00
Michael Stapelberg
17bca23a8c Implement a focus stack, correctly free table columns/rows 2009-03-05 01:20:13 +01:00
Michael Stapelberg
8b34eb5fc2 Bugfix: Reconfigure all clients in stacking, correctly ignore events, event when for the root window 2009-03-04 22:41:04 +01:00
Michael Stapelberg
0344ca3f36 Bugfix: Border presses weren’t correctly handled 2009-03-04 21:56:27 +01:00
Michael Stapelberg
03e48b8bfe Bugfix: Reconfigure x/y of stack_windows when necessary 2009-03-04 21:49:29 +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
3d774ba021 Implement clicking on titlebars in stack windows to focus 2009-03-04 09:31:00 +01:00
Michael Stapelberg
3b50615a71 Implement Xinerama screen changes 2009-03-03 23:51:02 +01:00
Michael Stapelberg
1d9dc05b91 Little cleanups 2009-03-03 02:05:35 +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
6868534fcb Draw stacking borders correctly 2009-03-01 03:55:29 +01:00
Michael Stapelberg
cb6ea9861d Bugfix: Fix various bugs when switching workspaces 2009-02-28 22:11:48 +01:00
Michael Stapelberg
d8d4d0182d Revert 43d471b9ab and apply correct bugfix:
Before, all clients were reconfigured to just raise them, when focus should
be set. However, this generated lots of notify events, which in turn lead
to an endless loop of setting focus, reconfiguring, setting focus, …
2009-02-28 02:40:07 +01:00
Michael Stapelberg
67fbec2061 Bugfix: Correctly unmap/remap the stack_win when a container becomes empty 2009-02-28 01:38:53 +01:00
Michael Stapelberg
30d386138b Bugfix: Correctly update window titles when in stacking 2009-02-28 01:23:09 +01:00
Michael Stapelberg
4fb4c579f8 Bugfix: Only ignore enter_notify events for the parent windows when in stacking 2009-02-28 01:19:50 +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
aea8cb9c25 Bugfix: Unset fullscreen_client when closed 2009-02-26 01:10:41 +01:00
Michael Stapelberg
1335e4a4c9 Grab XCB_GRAB_SYNC and replay the event so it doesn’t get lost 2009-02-25 19:11:49 +01:00
Michael Stapelberg
c859174965 Bugfix: Don’t call set_focus when to_focus is NULL 2009-02-25 17:44:17 +01:00
Michael Stapelberg
90fa720c6f Bugfix: when a window is unmapped, correctly pass focus to the next one and cleanup the table 2009-02-25 01:44:34 +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
6e81d1c5e4 s/…/./ where it makes sense 2009-02-23 17:23:57 +01:00
Michael Stapelberg
07b92c2792 Don’t assign ->container for dock-windows 2009-02-23 03:44:10 +01:00
Michael Stapelberg
8b0bc8c3ff Implement vertical resize 2009-02-23 03:27:59 +01:00
Michael Stapelberg
404f19a376 Beautify handle_key_press 2009-02-23 02:55:10 +01:00
Michael Stapelberg
695494606d Fix: Calculation of unoccupied space has to depend on current row/col 2009-02-23 02:09:24 +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
28ea379c10 Update TODO and header-comments 2009-02-15 03:07:29 +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
9e4b7f35ca Don’t use current workspace 2009-02-14 08:39:50 +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
82dd64ff24 Move stuff to include/ and src/ 2009-02-13 19:09:25 +01:00