chiark / gitweb /
disorder
11 years agoCorrect sense of parse_rights().
Richard Kettlewell [Sun, 15 Jun 2008 15:50:35 +0000 (16:50 +0100)]
Correct sense of parse_rights().

11 years agoMake logevent keys consistently use '_' again.
Richard Kettlewell [Sun, 15 Jun 2008 15:46:27 +0000 (16:46 +0100)]
Make logevent keys consistently use '_' again.

11 years agoDisobedience checks server version and expects rights-changed
Richard Kettlewell [Sun, 15 Jun 2008 15:01:33 +0000 (16:01 +0100)]
Disobedience checks server version and expects rights-changed
notifications if server is version 4.1 or better.

11 years agoBuild fixes for GCC 4.1
Richard Kettlewell [Sun, 15 Jun 2008 14:39:54 +0000 (15:39 +0100)]
Build fixes for GCC 4.1

11 years agoSend clients a rights-changed message when their rights change.
Richard Kettlewell [Sun, 15 Jun 2008 13:19:11 +0000 (14:19 +0100)]
Send clients a rights-changed message when their rights change.

11 years agouser-* event log messages for benefit of admin users. Still need a
Richard Kettlewell [Sun, 15 Jun 2008 12:08:16 +0000 (13:08 +0100)]
user-* event log messages for benefit of admin users.  Still need a
message telling a user their own rights have changed.

11 years agoadd a TODO
Richard Kettlewell [Sun, 15 Jun 2008 11:42:04 +0000 (12:42 +0100)]
add a TODO

11 years agoChoose next/prev/cancel button teleport focus back to the main view,
Richard Kettlewell [Sun, 15 Jun 2008 11:38:52 +0000 (12:38 +0100)]
Choose next/prev/cancel button teleport focus back to the main view,
so that typahead find still works.

11 years agotypo fix
Richard Kettlewell [Sat, 14 Jun 2008 19:39:50 +0000 (20:39 +0100)]
typo fix

11 years agoSaner ^F behaviour.
Richard Kettlewell [Sat, 14 Jun 2008 19:29:48 +0000 (20:29 +0100)]
Saner ^F behaviour.

11 years agoTypeahead find for Disobedience searching. This is implemented by
Richard Kettlewell [Sat, 14 Jun 2008 19:23:05 +0000 (20:23 +0100)]
Typeahead find for Disobedience searching.  This is implemented by
hackily redirecting most keyboard events sent to the main view to the
search entry.

^F focuses it, which is probably wrong given you can type into it
anyway.  ^G moves to the next match, which is why ^F focusing is
wrong, because ^G breaks when you're focused on the search entry.

The next/prev buttons (and ^G) now loop when you reach the end.

11 years agoqueue() now uses the resolved name if available. This is looked up in
Richard Kettlewell [Sat, 14 Jun 2008 17:27:14 +0000 (18:27 +0100)]
queue() now uses the resolved name if available.  This is looked up in
the usual lookup.c way, so it raises a lookup-completed event on
completion and therefore causes the choose screen to be updated using
the correct name for the track.

11 years agoUpdate choose screen when a rescan completes (and drive initial fill
Richard Kettlewell [Sat, 14 Jun 2008 17:15:51 +0000 (18:15 +0100)]
Update choose screen when a rescan completes (and drive initial fill
off this).

11 years agoSuppress GTK's built-in (in this case nonfunctional) typeahead find
Richard Kettlewell [Sat, 14 Jun 2008 14:53:24 +0000 (15:53 +0100)]
Suppress GTK's built-in (in this case nonfunctional) typeahead find

11 years agosearch box has moved!
Richard Kettlewell [Sat, 14 Jun 2008 14:49:50 +0000 (15:49 +0100)]
search box has moved!

11 years agoAuto-collapse rows that were only expanded to display search results.
Richard Kettlewell [Sat, 14 Jun 2008 14:47:10 +0000 (15:47 +0100)]
Auto-collapse rows that were only expanded to display search results.
If you manually collapse such a row (even if you then expand it before
changing the search terms) neither it nor any of its ancestors will be
auto-collapsed.  See code comments for further discussion.

11 years agochoose_populate() always raise choose-more-tracks rather than only
Richard Kettlewell [Sat, 14 Jun 2008 14:42:13 +0000 (15:42 +0100)]
choose_populate() always raise choose-more-tracks rather than only
raising choose-inserted-tracks if it inserted new rows.  The search
auto-expansion logic depends on being notified after all the
expansions it requested are completed, not just the ones that actually
created new rows.

11 years agoAccount choose_list_in_flight correctly.
Richard Kettlewell [Sat, 14 Jun 2008 13:25:22 +0000 (14:25 +0100)]
Account choose_list_in_flight correctly.

11 years agoDon't steal ^A from search text entry widget
Richard Kettlewell [Sat, 14 Jun 2008 13:16:41 +0000 (14:16 +0100)]
Don't steal ^A from search text entry widget

11 years agoBetter visual feedback in users window: the apply button is
Richard Kettlewell [Sat, 14 Jun 2008 12:52:34 +0000 (13:52 +0100)]
Better visual feedback in users window: the apply button is
desensitized if it will not work an an error message is constantly
displayed.  If there are multiple errors you only get one, but they go
in vertical order of text entry fields.

11 years agomore TODOs
Richard Kettlewell [Sat, 14 Jun 2008 11:48:39 +0000 (12:48 +0100)]
more TODOs

11 years agoSorting for Disobedience track chooser. A rewrite: we now do a single
Richard Kettlewell [Fri, 13 Jun 2008 13:51:31 +0000 (14:51 +0100)]
Sorting for Disobedience track chooser.  A rewrite: we now do a single
concurrent pass over the new data and the existing tree rows,
inserting and deleting as required, maintaining sort order at all
times.

11 years agoMove track sorting to its own function. Only choose_populate() uses
Richard Kettlewell [Fri, 13 Jun 2008 13:01:57 +0000 (14:01 +0100)]
Move track sorting to its own function.  Only choose_populate() uses
it currently (and has some work left); the CGI will be modified to use
it in due course.

11 years agoUpdate choose rows when lookups complete. Makes lengths appear
Richard Kettlewell [Fri, 13 Jun 2008 10:41:33 +0000 (11:41 +0100)]
Update choose rows when lookups complete.  Makes lengths appear
essentially immediately (at least with a fast local server) rather
than after a delay.

11 years agoInfrastructure for marking the playing track in a different color; not
Richard Kettlewell [Fri, 13 Jun 2008 10:40:53 +0000 (11:40 +0100)]
Infrastructure for marking the playing track in a different color; not
currently enabled.

11 years agoRearrange choose columns. The track name column is now last by
Richard Kettlewell [Fri, 13 Jun 2008 10:02:05 +0000 (11:02 +0100)]
Rearrange choose columns.  The track name column is now last by
default so that if it gets too wide you don't lose the others.  It is
also marked as the expander column, so the expander widgets appear in
a more sensible place.

11 years agoDelay search initiation for a bit after the last keypress, to avoid
Richard Kettlewell [Fri, 13 Jun 2008 09:58:37 +0000 (10:58 +0100)]
Delay search initiation for a bit after the last keypress, to avoid
lots of bogus searches being started before the user has finished
typing.

11 years agoMake next/prev search result buttons work.
Richard Kettlewell [Fri, 13 Jun 2008 09:26:41 +0000 (10:26 +0100)]
Make next/prev search result buttons work.

Gentler color for search results.

11 years agoTODOs for choose-search.c
Richard Kettlewell [Thu, 12 Jun 2008 19:34:29 +0000 (20:34 +0100)]
TODOs for choose-search.c

11 years agoMake all search results visible.
Richard Kettlewell [Thu, 12 Jun 2008 19:27:42 +0000 (20:27 +0100)]
Make all search results visible.

11 years agoStart reimplenting search in Disobedience choose tabs. Results are
Richard Kettlewell [Thu, 12 Jun 2008 16:24:47 +0000 (17:24 +0100)]
Start reimplenting search in Disobedience choose tabs.  Results are
highlighted correctly but only if they are already visible.  Focus is
still a bit wonky and ^A doesn't reliably go to the right place.

11 years agoTidy up
Richard Kettlewell [Thu, 12 Jun 2008 15:18:18 +0000 (16:18 +0100)]
Tidy up

11 years agoEliminate choosedata structure, using extra treestore columns instead.
Richard Kettlewell [Thu, 12 Jun 2008 15:17:29 +0000 (16:17 +0100)]
Eliminate choosedata structure, using extra treestore columns instead.

11 years agoadd a TODO
Richard Kettlewell [Thu, 12 Jun 2008 13:05:00 +0000 (14:05 +0100)]
add a TODO

11 years agoPlaying checkbox in Disobedience choose tab is now only visible for
Richard Kettlewell [Thu, 12 Jun 2008 12:49:06 +0000 (13:49 +0100)]
Playing checkbox in Disobedience choose tab is now only visible for
tracks, and can be used to add the track to the queue.

11 years agoDisplay track length and playing state in Disobedience choose tab. We
Richard Kettlewell [Thu, 12 Jun 2008 12:25:14 +0000 (13:25 +0100)]
Display track length and playing state in Disobedience choose tab.  We
enable rules in this tab to allow for easy reading across now that
there's more than one column.

11 years agoSaner selection choice for popup menus.
Richard Kettlewell [Thu, 12 Jun 2008 11:35:40 +0000 (12:35 +0100)]
Saner selection choice for popup menus.
- if the clicked row is already selected, leave the selection as it is
- if the click is not on any row, leave the selection as it is
- if the clicked row is not selected, select ONLY that row

11 years agoDisobedience choose 'select all' now only selects tracks (and
Richard Kettlewell [Thu, 12 Jun 2008 11:28:45 +0000 (12:28 +0100)]
Disobedience choose 'select all' now only selects tracks (and
deselects directories).

11 years agoSet edit menu sensitivity when it is shown rather than when we change tab.
Richard Kettlewell [Thu, 12 Jun 2008 10:57:34 +0000 (11:57 +0100)]
Set edit menu sensitivity when it is shown rather than when we change tab.

11 years agoComplete choose tab popup support (also middle-click).
Richard Kettlewell [Thu, 12 Jun 2008 10:40:32 +0000 (11:40 +0100)]
Complete choose tab popup support (also middle-click).

11 years agoStart on popup menu for Disobedience choose tab. Mostly this is
Richard Kettlewell [Thu, 12 Jun 2008 10:18:39 +0000 (11:18 +0100)]
Start on popup menu for Disobedience choose tab.  Mostly this is
restructing; the per-tab callbacks for the edit menu are now shared
with the popup menu, eliminating a lot of fiddly shims, and various
things are split out into their own files.

11 years agoStart rewriting Disobedience choose tab using native tree. Much
Richard Kettlewell [Thu, 12 Jun 2008 09:32:34 +0000 (10:32 +0100)]
Start rewriting Disobedience choose tab using native tree.  Much
simpler so far though there is a shopping list of TODOs left yet.

11 years agoDocumentation update
Richard Kettlewell [Wed, 11 Jun 2008 17:18:19 +0000 (18:18 +0100)]
Documentation update

11 years agoDrag and drop queue rearrangement. Currently you can only move one
Richard Kettlewell [Wed, 11 Jun 2008 17:10:29 +0000 (18:10 +0100)]
Drag and drop queue rearrangement.  Currently you can only move one
track at a time, which is a regression, but it's what the built-in
support gives us, unfortunately.

11 years agoDon't allocate per-queue tabtype. In fact the allocate version broken
Richard Kettlewell [Wed, 11 Jun 2008 15:55:14 +0000 (16:55 +0100)]
Don't allocate per-queue tabtype.  In fact the allocate version broken
intermittently (because GTK+ stupidly hides pointers from the GC) but
the change is to stop allocating altogether rather than to use
g_malloc().

11 years agoUpdate queues by rearranging rows, rather than by blowing them away
Richard Kettlewell [Wed, 11 Jun 2008 14:17:19 +0000 (15:17 +0100)]
Update queues by rearranging rows, rather than by blowing them away
and reinstalling them.

Also, ensure that the queue never shows the playing track as in the
queue (by refetching until a good answer arrives).

11 years agoMake queue columns reorderable
Richard Kettlewell [Wed, 11 Jun 2008 12:00:05 +0000 (13:00 +0100)]
Make queue columns reorderable

11 years agoPlay tracks from popup in new tracks list. The same code would work
Richard Kettlewell [Wed, 11 Jun 2008 11:40:02 +0000 (12:40 +0100)]
Play tracks from popup in new tracks list.  The same code would work
for recent if anyone wanted it, but it seems odd to want to play
just-played tracks, so it's not used for that currently.

11 years agoRestore scratching from popup menu.
Richard Kettlewell [Wed, 11 Jun 2008 11:35:53 +0000 (12:35 +0100)]
Restore scratching from popup menu.

11 years agoRemove tracks now works again. queue_entry pointers are now stashed
Richard Kettlewell [Wed, 11 Jun 2008 11:31:12 +0000 (12:31 +0100)]
Remove tracks now works again.  queue_entry pointers are now stashed
in the list store, making this rather easier.

11 years agoDisobedience memory/widget debugging stuff has thoroughly rotted, so
Richard Kettlewell [Wed, 11 Jun 2008 10:50:02 +0000 (11:50 +0100)]
Disobedience memory/widget debugging stuff has thoroughly rotted, so
rip it out.

11 years agoLeave a comment about iffy icon sensivity; it's definitely setting the
Richard Kettlewell [Wed, 11 Jun 2008 10:21:38 +0000 (11:21 +0100)]
Leave a comment about iffy icon sensivity; it's definitely setting the
right thing so I think this is a GTK+ bug.

11 years agoRefetch queue on pause/resume so that start times are always right (or
Richard Kettlewell [Wed, 11 Jun 2008 09:57:25 +0000 (10:57 +0100)]
Refetch queue on pause/resume so that start times are always right (or
absent if unknowable).

11 years agoFix edit menu (and simplify its implementation a bit).
Richard Kettlewell [Wed, 11 Jun 2008 09:53:11 +0000 (10:53 +0100)]
Fix edit menu (and simplify its implementation a bit).

11 years agoSelect hovered track if nothing is selected on right click over queue etc.
Richard Kettlewell [Tue, 10 Jun 2008 21:46:31 +0000 (22:46 +0100)]
Select hovered track if nothing is selected on right click over queue etc.

11 years agoColumns are now resizable and wide columns are ellipsized. Columns
Richard Kettlewell [Tue, 10 Jun 2008 21:33:53 +0000 (22:33 +0100)]
Columns are now resizable and wide columns are ellipsized.  Columns
more reliably get their right width.

NB http://bugzilla.gnome.org/show_bug.cgi?id=316087 applies here.
Amazingly, GTK+ column resizing is broken nearly three years after
someone reported it (and presumably in fact longer than that).

11 years agoAlternating row colors
Richard Kettlewell [Tue, 10 Jun 2008 21:03:49 +0000 (22:03 +0100)]
Alternating row colors

11 years agoFix queue/etc popup menu
Richard Kettlewell [Tue, 10 Jun 2008 21:01:46 +0000 (22:01 +0100)]
Fix queue/etc popup menu

11 years agoRewrite queue/recent/added to use native list widget.
Richard Kettlewell [Tue, 10 Jun 2008 20:13:25 +0000 (21:13 +0100)]
Rewrite queue/recent/added to use native list widget.

What works:
  - the tracks are displayed correctly
  - keyboard scrolling now works properly (at last!)

What doesn't work:
  - popup menu is broken
  - edit menu is unimplemented
  - drag+drop is unimplemented
  - columns are not resizable
  - ellipsization is off
  - no horizontal banding
  - probably lots of other things

11 years agoMove RTP check. This seems to improve matters - formerly the RTP
Richard Kettlewell [Mon, 9 Jun 2008 21:06:12 +0000 (22:06 +0100)]
Move RTP check.  This seems to improve matters - formerly the RTP
status was set before DISORDER_CONNECTED was, leading to a false
negative.  This is a bit of a voodoo-ish change l-(

11 years agoIcons now only get events that they are interested in.
Richard Kettlewell [Mon, 9 Jun 2008 19:57:58 +0000 (20:57 +0100)]
Icons now only get events that they are interested in.

11 years agoEncourage choose tab's input focus to the search box a bit. Really we
Richard Kettlewell [Mon, 9 Jun 2008 08:54:34 +0000 (09:54 +0100)]
Encourage choose tab's input focus to the search box a bit.  Really we
want up+down keys to go to the scrollable layout and everything else
to the search box but this is a start.

11 years agoProper calculation of scratch/remove rights
Richard Kettlewell [Mon, 9 Jun 2008 08:25:49 +0000 (09:25 +0100)]
Proper calculation of scratch/remove rights

11 years agoCheck rights for menu items too
Richard Kettlewell [Mon, 9 Jun 2008 08:21:36 +0000 (09:21 +0100)]
Check rights for menu items too

11 years agoSensitize icons according to current user rights. There's up to 10s
Richard Kettlewell [Mon, 9 Jun 2008 08:17:07 +0000 (09:17 +0100)]
Sensitize icons according to current user rights.  There's up to 10s
latency in rights taking effect, which is unavoidable given the server
currently doesn't tell us when they change.

11 years agoSwitch Disobedience reset (i.e. fresh login) notification over to
Richard Kettlewell [Mon, 9 Jun 2008 07:22:50 +0000 (08:22 +0100)]
Switch Disobedience reset (i.e. fresh login) notification over to
event_() functions.

11 years agoTidy up makefile
Richard Kettlewell [Mon, 9 Jun 2008 06:44:30 +0000 (07:44 +0100)]
Tidy up makefile

11 years agoRearrange crazy control.c logic. No longer are there two widgets per
Richard Kettlewell [Mon, 9 Jun 2008 06:39:50 +0000 (07:39 +0100)]
Rearrange crazy control.c logic.  No longer are there two widgets per
icon with one always invisible, instead we change the contained image
when we want to change state.

We still redo all the icons when only one changes state, which could
possibly be improved but is at least robust and comprehensible.

11 years agoCatch up on a missing bit of eclient API change
Richard Kettlewell [Sun, 8 Jun 2008 21:39:31 +0000 (22:39 +0100)]
Catch up on a missing bit of eclient API change

11 years agoComplete Disobedience transition to event_ from _monitor.
Richard Kettlewell [Sun, 8 Jun 2008 21:17:25 +0000 (22:17 +0100)]
Complete Disobedience transition to event_ from _monitor.

11 years agoStart Disobedience switch from _monitor interface to event_ interface.
Richard Kettlewell [Sun, 8 Jun 2008 19:52:17 +0000 (20:52 +0100)]
Start Disobedience switch from _monitor interface to event_ interface.

11 years agoForce -std=gnu99. If we're going to require GCC anyway we might as
Richard Kettlewell [Sun, 8 Jun 2008 19:51:50 +0000 (20:51 +0100)]
Force -std=gnu99.  If we're going to require GCC anyway we might as
well get the full benefit.

11 years agoMore event_*
Richard Kettlewell [Sun, 8 Jun 2008 16:59:28 +0000 (17:59 +0100)]
More event_*

11 years agoStart using event_*() calls in Disobedience.
Richard Kettlewell [Sun, 8 Jun 2008 16:53:55 +0000 (17:53 +0100)]
Start using event_*() calls in Disobedience.

11 years agoFurther eclient error API change.
Richard Kettlewell [Sun, 8 Jun 2008 14:58:52 +0000 (15:58 +0100)]
Further eclient error API change.

11 years agodisorder_eclient_queue_response now gets error as well as success
Richard Kettlewell [Sun, 8 Jun 2008 13:15:18 +0000 (14:15 +0100)]
disorder_eclient_queue_response now gets error as well as success
responses.

11 years agoReport disorder_eclient_volume() errors to the specific callback.
Richard Kettlewell [Sun, 8 Jun 2008 12:13:17 +0000 (13:13 +0100)]
Report disorder_eclient_volume() errors to the specific callback.
(Untested for now.)

11 years agoeclient integer callbacks now get errors instead of using generic
Richard Kettlewell [Sun, 8 Jun 2008 12:06:03 +0000 (13:06 +0100)]
eclient integer callbacks now get errors instead of using generic
protocol error callback.

11 years agoeclient no_response calls all now have errors reported to the per-call
Richard Kettlewell [Sun, 8 Jun 2008 10:49:49 +0000 (11:49 +0100)]
eclient no_response calls all now have errors reported to the per-call
callback rather than the generic one.  Slightly less convenient due to
the formerly widespread practice of passing a null callback, which is
now prohibited.

11 years agoAdd kvp_make(), to make a kvp list in a single function call.
Richard Kettlewell [Sun, 8 Jun 2008 10:49:21 +0000 (11:49 +0100)]
Add kvp_make(), to make a kvp list in a single function call.

11 years agoeclient string response calls now get errors reported to the completed
Richard Kettlewell [Sat, 7 Jun 2008 21:05:15 +0000 (22:05 +0100)]
eclient string response calls now get errors reported to the completed
callback rather than the protocol_error callback.

11 years agoTODOs for all the protocol_error() calls that need fixed
Richard Kettlewell [Sat, 7 Jun 2008 19:13:59 +0000 (20:13 +0100)]
TODOs for all the protocol_error() calls that need fixed

11 years agoGeneral-purpose event distribution interface
Richard Kettlewell [Sat, 7 Jun 2008 18:53:25 +0000 (19:53 +0100)]
General-purpose event distribution interface

11 years agoDon't stomp on choose widhet's submenu's color scheme
Richard Kettlewell [Sat, 7 Jun 2008 15:50:25 +0000 (16:50 +0100)]
Don't stomp on choose widhet's submenu's color scheme

11 years agoscripts/teardown.in no longer removes things that are (now) installed
Richard Kettlewell [Fri, 6 Jun 2008 18:15:42 +0000 (19:15 +0100)]
scripts/teardown.in no longer removes things that are (now) installed
by the makefiles.

11 years agoMention remote_userman bug in disobedience.1
Richard Kettlewell [Fri, 6 Jun 2008 16:36:59 +0000 (17:36 +0100)]
Mention remote_userman bug in disobedience.1

11 years agoMake menu_update() robust against being called before the notebook has
Richard Kettlewell [Fri, 6 Jun 2008 16:30:19 +0000 (17:30 +0100)]
Make menu_update() robust against being called before the notebook has
been created.

11 years agoAdd jukebox user to audio group in debian setup
Richard Kettlewell [Fri, 6 Jun 2008 15:46:45 +0000 (16:46 +0100)]
Add jukebox user to audio group in debian setup

11 years agoMore automation of web interface installation
Richard Kettlewell [Fri, 6 Jun 2008 12:49:15 +0000 (13:49 +0100)]
More automation of web interface installation

11 years agoFix another stupid in @dirs...
Richard Kettlewell [Fri, 6 Jun 2008 11:13:46 +0000 (12:13 +0100)]
Fix another stupid in @dirs...

11 years agoforce cgidir so we can build on a system without a web swerver
Richard Kettlewell [Fri, 6 Jun 2008 11:12:03 +0000 (12:12 +0100)]
force cgidir so we can build on a system without a web swerver

11 years agoFix display of play/edit all in choose.tmpl
Richard Kettlewell [Fri, 6 Jun 2008 09:33:05 +0000 (10:33 +0100)]
Fix display of play/edit all in choose.tmpl

11 years agoAutomate installation of the CGI at last.
Richard Kettlewell [Fri, 6 Jun 2008 09:27:16 +0000 (10:27 +0100)]
Automate installation of the CGI at last.

configure will try to guess the install location, if it can't then you
can set cgidir=/path/to/cgi-bin to override it.

11 years agoremove css cruft for long-gone separate search page
Richard Kettlewell [Thu, 5 Jun 2008 18:07:52 +0000 (19:07 +0100)]
remove css cruft for long-gone separate search page

11 years agoMissed an action button in earlier changes
Richard Kettlewell [Thu, 5 Jun 2008 18:05:35 +0000 (19:05 +0100)]
Missed an action button in earlier changes

11 years agoCorrect file exposed by @dirs and @files!
Richard Kettlewell [Thu, 5 Jun 2008 18:03:30 +0000 (19:03 +0100)]
Correct file exposed by @dirs and @files!

11 years agoTidy up search form; remove cruft
Richard Kettlewell [Thu, 5 Jun 2008 14:54:38 +0000 (15:54 +0100)]
Tidy up search form; remove cruft

11 years agoStyle button as well. Consistent in IE and FF, a bit off in Safari.
Richard Kettlewell [Thu, 5 Jun 2008 14:45:01 +0000 (15:45 +0100)]
Style button as well.  Consistent in IE and FF, a bit off in Safari.

11 years agoUse form-based buttons instead of hyperlinks
Richard Kettlewell [Thu, 5 Jun 2008 14:38:44 +0000 (15:38 +0100)]
Use form-based buttons instead of hyperlinks

11 years agoMacro-ize (most) <A>-based buttons
Richard Kettlewell [Thu, 5 Jun 2008 14:15:59 +0000 (15:15 +0100)]
Macro-ize (most) <A>-based buttons