Age | Commit message (Collapse) | Author |
|
darcs-hash:20070610012237-72aca-4c5873773e58103f57f7a0b232da58c269248fa7
|
|
darcs-hash:20070610123746-32816-e5a1b61d81fa52f608d7936f900431bd6620c3c7
|
|
darcs-hash:20070610061932-9c5c1-9a08992ef555f086007474e64d5ae9d835e9677e
|
|
(-3 loc)
darcs-hash:20070609185835-e3110-1eaa534465f66313044477acd9cae1bbbcf61950
|
|
darcs-hash:20070609185835-e3110-4561eca8bf83e9d05d90cdd75bc1ddce5855087f
|
|
easier format to parse, than 'show' produces
darcs-hash:20070609131716-9c5c1-ac6b3d7e8193b16ca9ae65f32d5373090107eca1
|
|
According to the ICCCM, clients should send a synthetic unmap event when they
initiate an unmap. The old code waited for these synthetic unmaps to unmanage
windows. However, certain 'obsolete' clients do not send synthetic unmaps
(notably xpdf's find dialog). These windows entered a zombified state: xmonad
does not manage them, yet they are still mapped and raised on screen.
The new algorithm (derived from wmii):
- track windows that are mapped on screen
- track the number of expected unmap events for each window, increment every
time 'hide' is called on a window that is not mapped.
- decrement the expected unmap counter on each unmap event
- treat an unmap event as genuine (ie. unmap the window) when:
- the event is synthetic (per ICCCM)
- OR there are no expected unmap events for this window
darcs-hash:20070606214006-a5988-7c2eced85319ff506a9b7c9dc86d5946ca0da8e5
|
|
so XMonadContrib can use them
darcs-hash:20070606005056-b9aa7-96a3bb09f8e6dabd707eed7b5f19d733e5e1778e
|
|
darcs-hash:20070606024857-9c5c1-0928bbc41b568e787e705e85ada9000547f2c790
|
|
darcs-hash:20070605083735-9c5c1-1ab5acbd611914caa7b5cdf1f2df338c0ee616f8
|
|
darcs-hash:20070605081452-9c5c1-a384f89e9ed89678c96aee108a1b1e85cbff9d06
|
|
When resuming, we were (implicitly) relying on 'scan' to find all
windows, and reset their event masks and WM_STATE. When we moved to
Iconfified hidden workspaces, 'scan' would only find and reset states on
the current workspace.
The result being that hidden workspace windows no longer received
enterNotify events.
Fix this by traversing the StackSet serialised during a restart, setting
the intial X states for each window, whether visible or hidden.
darcs-hash:20070605043040-9c5c1-642f02a61a3e1d4679fde9c38eeb10aec53ea455
|
|
darcs-hash:20070604203659-a5988-30920debba664beddd1581efffbdc33143d5ce15
|
|
darcs-hash:20070604162450-a5988-e2d405b329d5f0dd0b33321f577dd63d3119b6d0
|
|
darcs-hash:20070604050914-a5988-600a4ba6f2f294b0ce56b16e8887d493789f29c7
|
|
darcs-hash:20070604044715-e3110-7bd7ba2b78f80046e2148fb37aa0f5fe3eca08c6
|
|
Note that this breaks compatibility with certain programs described as
"obsolete" in the ICCCM (1994). See the command above the UnmapEvent handler
for details.
darcs-hash:20070604042343-e3110-4766eafca2875091189159f6a1df29eac3c21387
|
|
darcs-hash:20070604035637-9c5c1-a5be67b987c402fe384f7a3c5c3443aabdf62885
|
|
(a documented feature)
darcs-hash:20070604013938-e3110-8dc84f03278c55076a5cf83013974689c4861ffc
|
|
darcs-hash:20070603234730-a5988-d156b988188c622428ef60456c7e48bd739e5f64
|
|
darcs-hash:20070603212055-a5988-154f62e30303e2ab406201d08318d070a914baa3
|
|
Xmonad now implements resize requests in a consistent manner.
* If the window is FLOATING, we implement the program's request, and
correctly update the StackSet; so it will keep the new size. This
should work correctly even for non-current windows.
* Otherwise, we ignore the request. As per ICCCM, we send a fake
ConfigureNotify containing the new (unchanged) geometry. This is
perfectly ICCCM compliant, and if it breaks your client, it's your
own fault.
This patch requires setConfigureEvent, which is added to X11-extras by
a patch approximately contemporaneous with this one.
darcs-hash:20070603203153-e3110-48f345cd3686f06fbe8ba30a6d851e7c8f44fe98
|
|
darcs-hash:20070602040647-b9aa7-d7bad13c4919882368872a88f04a678308162be6
|
|
darcs-hash:20070601015137-b9aa7-51c6b9ec428c2d16d65b196384fa2ce953dda245
|
|
darcs-hash:20070531085308-9c5c1-73ed940708aa9a369b0345c0d2b2a4708a231e67
|
|
This is a first attempting at a floating layer:
mod-button1: move window
mod-button2: swapMaster
mod-button3: resize window
mod-t: make floating window tiled again
Moving or resizing a window automatically makes it floating.
Known issues:
Hard to manage stacking order. You can promote a window to move it to the top,
(which you can do with mod-button2) but it should be easier than that.
Moving a window by dragging it to a different Xinerama screen does not move it
to that workspace.
Code is ugly.
darcs-hash:20070531044733-b9aa7-c96d5263e1d3447e91f436920f4d047050ce55d9
|
|
darcs-hash:20070528031835-9c5c1-34c9fc2931a6daa8fc3e63385782f43b097e293f
|
|
screens now
darcs-hash:20070528031501-9c5c1-beaadbacb5efc1ce5998aba41fbb3b2c68cdf0d1
|
|
darcs-hash:20070528025135-9c5c1-3c0f63ac557da57cd268cd0129b9ce90692631e4
|
|
darcs-hash:20070527125928-9c5c1-a16246810db9d4abfe81d0d5814721b64f59a14c
|
|
darcs-hash:20070527072106-9c5c1-48830bdd83fd4823fdabce0961dafb3bea416bf6
|
|
darcs-hash:20070522043116-9c5c1-034fa6854b4ad99316fcc0f85904bec62ef1549b
|
|
darcs-hash:20070522040228-a5988-1ae9fc6bd773b32bc4a4c43aeab556857929fef4
|
|
darcs-hash:20070521194653-a5988-b6725cc0d73fc6b726dc41284eef9303a7e59a1e
|
|
darcs-hash:20070521152759-a5988-736e7caea5252a77bb01d7631cce0db4287ff6f2
|
|
darcs-hash:20070521040330-b9aa7-5a36f8a4f90cc4116ffa3532a14bf405bfb942bb
|
|
In order to give a better account of how focus and master interact, and
how each operation affects focus, we reimplement the StackSet type as a
two level nested 'Zipper'. To quote Oleg:
A Zipper is essentially an `updateable' and yet pure functional
cursor into a data structure. Zipper is also a delimited
continuation reified as a data structure.
That is, we use the Zipper as a cursor which encodes the window which is
in focus. Thus our data structure tracks focus correctly by
construction! We then get simple, obvious semantics for e.g. insert, in
terms of how it affects focus/master. Our transient-messes-with-focus
bug evaporates. 'swap' becomes trivial.
By moving focus directly into the stackset, we can toss some QC
properties about focus handling: it is simply impossible now for focus
to go wrong. As a benefit, we get a dozen new QC properties for free,
governing how master and focus operate.
The encoding of focus in the data type also simplifies the focus
handling in Operations: several operations affecting focus are now
simply wrappers over StackSet.
For the full story, please read the StackSet module, and the QC
properties.
Finally, we save ~40 lines with the simplified logic in Operations.hs
For more info, see the blog post on the implementation,
http://cgi.cse.unsw.edu.au/~dons/blog/2007/05/17#xmonad_part1b_zipper
darcs-hash:20070520070053-9c5c1-241f7ee7793f5db2b9e33d375965cdc21b26cbd7
|
|
darcs-hash:20070504045644-a5988-68a6d650bacab936f893b96bf866696da3f73436
|
|
darcs-hash:20070504015043-b9aa7-a9e8a52b54a21ba00fba0b13a3ec1cc150b1aae5
|
|
darcs-hash:20070503144750-72aca-f44bca4573837e12fc1f89333b55e04abd52787c
|
|
darcs-hash:20070503032040-a5988-f30dac176a6db3139e07c8b29bbc31d27c67d410
|
|
darcs-hash:20070430162647-a5988-70420c2db283eb1585c96d977e5ac5ca3d0d1532
|
|
darcs-hash:20070430054715-a5988-a74f5e2868f47443a69b0cd821fa690e43a4a7e1
|
|
This also fixes a bug where xmonad was assuming a 24-bit display, and just
using, eg, 0xff0000 as an index into a colormap without querying the X server
to determine the proper pixel value for "red".
darcs-hash:20070430043859-b9aa7-9467ff583ec95144e5baa088e4b1536a725e7bc6
|
|
XKeysymToKeycode() returns zero if the keysym is undefined. Zero also happens
to be the value of AnyKey.
darcs-hash:20070428180046-b9aa7-79b768917b225267fa13fffda0738b53504aa722
|
|
darcs-hash:20070424013357-b9aa7-aed2e5623aa5d0f804d131974fc9b6c21c7a2ce1
|
|
darcs-hash:20070424010352-a5988-411c7bc6d019f772b412e230cfc19aa06041ca7c
|
|
darcs-hash:20070419032244-b9aa7-b3a4ef75d313d5c960775a75ddc91dbdae6485c7
|
|
darcs-hash:20070410062731-b9aa7-e1768a3fe6c0e3c749400dffc4a5a5e33e6a08c4
|
|
darcs-hash:20070409073836-a5988-5ab0dc0ff9723b13fe2216b937e05bc6e784008a
|