Commit Graph

71 Commits

Author SHA1 Message Date
Don Stewart
0ada17c34a HEADS UP: (logging format change). use a custom pretty printer, for an easier format to parse, than 'show' produces 2007-06-09 13:17:16 +00:00
Spencer Janssen
cf9828cbcd Fix unmap handling
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
2007-06-06 21:40:06 +00:00
Stefan O'Rear
e4e1724842 Remove no-longer-needed 'dimensions' state (-5 loc) 2007-06-04 04:47:15 +00:00
Stefan O'Rear
cd73165c63 Set WM_STATE, iconify invisible windows (+9 loc)
Note that this breaks compatibility with certain programs described as
"obsolete" in the ICCCM (1994).  See the command above the UnmapEvent handler
for details.
2007-06-04 04:23:43 +00:00
Don Stewart
9b429f4f41 whitespace 2007-06-04 01:55:32 +00:00
Don Stewart
ca896686a1 -Wall 2007-06-04 01:46:30 +00:00
Stefan O'Rear
f06d042b56 do not cache atom values within Xmonad, instead let Xlib worry about caching (a documented feature) 2007-06-04 01:39:38 +00:00
glasser
ddffd109ce Rename withWorkspace to withWindowSet. 2007-06-01 00:13:25 +00:00
Spencer Janssen
b069f84add Minor style change. 2007-05-30 18:10:06 +00:00
nickburlett
fc08bd48b4 log errors on executeFile in restart
I found it difficult to track down a problem in the restart code where xmonad was silently not restarting. This will log the error to stderr, which should show up in .xsession-errors
2007-05-30 17:10:24 +00:00
Don Stewart
c613073cb6 support per-screen gap settings. you can have different gaps on individual screens now 2007-05-28 03:15:01 +00:00
Don Stewart
1d2c5ca35a Use (Int,Int,Int,Int) for arbitrary gaps on any side of the screen 2007-05-28 02:51:35 +00:00
Don Stewart
bb4bd97c87 mod-b, toggle on or off the status bar gap 2007-05-27 12:59:28 +00:00
Don Stewart
ef5326ccff dead code 2007-05-27 07:26:52 +00:00
Spencer Janssen
0df8dffc78 restart: don't preserve old args 2007-05-22 06:03:57 +00:00
Spencer Janssen
9b52525417 Generalize withDisplay's type 2007-05-22 04:37:58 +00:00
Spencer Janssen
d074b1bcfd List --resume args first 2007-05-21 23:24:27 +00:00
Spencer Janssen
a9d7b7ef49 Experimental support for a beefier restart. 2007-05-21 19:46:53 +00:00
Spencer Janssen
270d80297f Catch the exception rather than explicitly checking the PATH 2007-05-21 19:19:00 +00:00
Spencer Janssen
3c2ad2509e Put restart in the X monad 2007-05-21 19:07:49 +00:00
Spencer Janssen
90dd7705a8 Show instances for WorkspaceId and ScreenId 2007-05-21 19:07:04 +00:00
Spencer Janssen
daefb508d7 Use Position for dimensions 2007-05-21 16:28:09 +00:00
Spencer Janssen
b59d4d1dc0 Make screen info dynamic: first step to supporting randr 2007-05-21 15:27:59 +00:00
Jason Creighton
02073c547b s/workspace/windowset/ 2007-05-21 04:03:30 +00:00
Don Stewart
77e46027ed HEADS UP: Rewrite StackSet as a Zipper
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
2007-05-20 07:00:53 +00:00
David Roundy
21cbab3f06 put doLayout in the X monad. 2007-05-12 21:53:01 +00:00
Spencer Janssen
67fe5ab219 setsid() before exec. Intended to fix issue #7 2007-05-14 04:45:47 +00:00
Don Stewart
7a56422491 since we just ignore type errors, no need to derive Show 2007-05-04 09:41:43 +00:00
Don Stewart
0928bb484a Constrain layout messages to be members of a Message class
Using Typeables as the only constraint on layout messages is a bit
scary, as a user can send arbitrary values to layoutMsg, whether they
make sense or not: there's basically no type feedback on the values you
supply to layoutMsg.

Folloing Simon Marlow's dynamically extensible exceptions paper, we use
an existential type, and a Message type class, to constrain valid
arguments to layoutMsg to be valid members of Message.

That is, a user writes some data type for messages their layout
algorithm accepts:

  data MyLayoutEvent = Zoom
                     | Explode
                     | Flaming3DGlassEffect
                     deriving (Typeable)

and they then add this to the set of valid message types:

  instance Message MyLayoutEvent

Done. We also reimplement the dynamic type check while we're here, to
just directly use 'cast', rather than expose a raw fromDynamic/toDyn.

With this, I'm much happier about out dynamically extensible layout
event subsystem.
2007-05-04 08:16:49 +00:00
Spencer Janssen
72e7bed426 Handle empty layout lists 2007-05-04 04:56:44 +00:00
Don Stewart
d0ef78e5c3 refactoring, style, comments on new layout code 2007-05-04 02:36:18 +00:00
David Roundy
ea1134db26 add support for extensible layouts. 2007-05-03 14:47:50 +00:00
Don Stewart
f0df95da72 comments. and stop tracing events to stderr 2007-05-03 07:58:21 +00:00
Spencer Janssen
08e514b28f Add Config.hs-boot, remove defaultLayoutDesc from XConf 2007-04-30 16:26:47 +00:00
Spencer Janssen
ecbff364c9 Comment only 2007-04-30 16:16:35 +00:00
Spencer Janssen
1e83de8cde Comment only 2007-04-30 16:15:11 +00:00
Spencer Janssen
5d086df912 Add XConf for values that don't change. 2007-04-30 05:47:15 +00:00
Jason Creighton
bdbca84bcd configurable border colors
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".
2007-04-30 04:38:59 +00:00
Don Stewart
bf0f487ca4 add 8 new QC tests, including tests of the layout algorithm 2007-04-19 04:08:33 +00:00
Spencer Janssen
2b6a5d25b6 WindowSet is better than WorkSpace 2007-04-19 01:54:30 +00:00
Don Stewart
b765cc9706 Parameterise StackSet by two index types, rather than breaking abstraction 2007-04-19 01:27:05 +00:00
Don Stewart
85a20da22c clean up tiling code a teensy bit, and comment on the interaction between focus, master, and cycling direction between the modes 2007-04-11 08:07:47 +00:00
Don Stewart
3e7b23030c clean up only 2007-04-11 06:56:07 +00:00
Don Stewart
c490333d12 Statically distinguish Workspace and Screen indices 2007-04-11 06:04:56 +00:00
Jason Creighton
0c95f0c143 moved screen <-> workspace mapping from XMonad to StackSet 2007-04-10 06:27:31 +00:00
Spencer Janssen
83600d109e Simplify rot 2007-04-09 22:35:00 +00:00
Spencer Janssen
a99841e554 Remove unused 'screen' field 2007-04-09 07:35:10 +00:00
Spencer Janssen
8c88e102b4 Document XState fields 2007-04-09 07:34:14 +00:00
Don Stewart
a0f7df2fa6 Use -funbox-strict-fields, rather than UNPACK pragmas. cleaner code. 2007-04-09 07:23:02 +00:00
Spencer Janssen
3a592d2df8 Use Tall and Wide for split screen layouts. This should be less confusing. 2007-04-03 05:06:10 +00:00