Commit Graph

1391 Commits

Author SHA1 Message Date
Don Stewart
3202fa0673 refactor using whenX 2007-05-22 04:31:16 +00:00
Spencer Janssen
07a354e5a3 Add preliminary randr support 2007-05-22 04:02:28 +00:00
Neil Mitchell
c4dd126200 Update the Catch checking to the new interface for StackSet 2007-05-22 01:54:22 +00:00
Spencer Janssen
e300df5425 Remove the magic '2' 2007-05-21 23:45:35 +00:00
Spencer Janssen
d074b1bcfd List --resume args first 2007-05-21 23:24:27 +00:00
Spencer Janssen
ff975f6d40 Move special case 'view' code into 'windows'.
This is ugly right now -- I promise to clean it up later.
2007-05-21 21:56:46 +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
127fd0b309 Read instance for StackSet 2007-05-21 18:45:04 +00:00
Spencer Janssen
c8cfc1faca Remove redundant fromIntegrals 2007-05-21 16:51:23 +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
Don Stewart
b1345e037c modify 2007-05-21 11:57:50 +00:00
Don Stewart
ea80d2a71f Move xinerama current/visible/hidden workspace logic into StackSet directly. 2007-05-21 05:52:53 +00:00
Jason Creighton
02073c547b s/workspace/windowset/ 2007-05-21 04:03:30 +00:00
Jason Creighton
5c44fa79fd focusWindow: always view the containing workspace first 2007-05-21 03:55:51 +00:00
Don Stewart
d28d4251e0 explicit export list for StackSet 2007-05-21 02:52:50 +00:00
Don Stewart
d3d058345d comment only 2007-05-20 09:08:46 +00:00
Jason Creighton
b757a526db only hide old workspace on view if the old workspace is not visible (Xinerama) 2007-05-21 03:14:35 +00:00
Spencer Janssen
1c4b0a51d8 Fix mod-j/k bindings 2007-05-21 03:02:53 +00:00
Spencer Janssen
2e5084319a Be explicit about suspicious System.Mem import 2007-05-20 16:57:41 +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
Spencer Janssen
f9af744b1e Read is not needed for StackSet 2007-05-16 05:42:33 +00:00
Jason Creighton
4206c4bae9 variable number of windows in master area 2007-05-16 03:14:37 +00:00
Spencer Janssen
810c19d7f2 Use camelCase, please. 2007-05-16 01:44:54 +00:00
David Roundy
3cc55de0f4 beautify tile 2007-05-15 15:40:11 +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
David Roundy
54ee507cca keep focus stack. 2007-05-10 13:16:37 +00:00
Jason Creighton
378aa87173 bump LOC limit to 550 2007-05-10 03:27:31 +00:00
Spencer Janssen
47ae5e4ea5 Remove broken prop_promoterotate, replace it with prop_promote_raise_id 2007-05-08 21:19:07 +00:00
Spencer Janssen
c4030d45e2 Disable shift_reversible until focus issues are decided. 2007-05-08 21:09:52 +00:00
Spencer Janssen
f5b0df6a73 Disable delete.push until focus issues are decided 2007-05-08 20:49:21 +00:00
Spencer Janssen
c5c958dc2c Remove unsafe fromJust 2007-05-08 16:38:22 +00:00
Neil Mitchell
626d25bb3a Add the initial Catch testing framework for StackSet 2007-05-08 15:46:21 +00:00
Neil Mitchell
97141b9a07 Work around the fact that Yhc gets defaulting a bit wrong 2007-05-08 12:49:49 +00:00
Spencer Janssen
4afb251f41 Make tests typecheck 2007-05-08 15:24:49 +00:00
Spencer Janssen
a846eb18ff Remove unsafe use of head 2007-05-08 15:21:16 +00:00
Spencer Janssen
f03ca10714 Make 'index' return Nothing, rather than error 2007-05-08 15:12:00 +00:00
Spencer Janssen
ba9e15e772 Use 'drop 1' rather than tail, skip equality check. 2007-05-08 15:09:43 +00:00
Spencer Janssen
70fe61971b Redundant parens 2007-05-08 15:04:12 +00:00
Spencer Janssen
1276edc861 StackSet.view: ignore invalid indices 2007-05-08 14:39:51 +00:00
Neil Mitchell
27f1f50071 Change the swap function so its Haskell 98, by using list-comps instead of pattern-guards. 2007-05-08 12:31:58 +00:00
Don Stewart
9f4fd822b6 Arbitrary instance for StackSet must set random focus on each workspace
When focus was separated from the stack order on each workspace, we
forgot to update the Arbitrary instance to set random focus. As spotted
by David R, this then invalidates 4 of our QC properties. In particular,
the property involving where focus goes after a random transient
(annoying behaviour) appeared to be correct, but wasn't, due to
inadequate coverage.

This patch sets focus to a random window on each workspace. As a result,
we now catch the focus/raise/delete issue people have been complaining
about.

Lesson: make sure your QuickCheck generators are doing what you think
they are.
2007-05-08 05:11:26 +00:00
David Roundy
ab27c7d48d make quickcheck tests friendlier to read. 2007-05-05 17:54:15 +00:00
Jason Creighton
ab0f3be0af make Properties.hs exit with failure on test failure 2007-05-05 17:43:57 +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