Re: comments on StatusNotifier spec

2010-01-19 Thread Dan Winship
On 01/18/2010 05:24 PM, Aaron J. Seigo wrote:
 Let me try this again. Suppose you have:

 - KDE implementation: If WindowId is set, then raise that window to
   the top if the user clicks on the status icon.

 - GNOME implementation: If WindowId is set, then *destroy* that
   window if the user clicks on the status icon.

 You are saying this is perfectly legitimate and StatusNotifierIcons are
 expected to cope with it?
 
 yes. ignoring that the example given is a bit absurd, it is completely within 
 the realm of possibility.

How is it absurd? Both of those two behaviors are things that window
managers do under certain circumstances, so neither is an intrinsically
absurd behavior. And nothing in the spec suggests that either of those
behaviors is either recommended or discouraged. So how is the
implementer supposed to know that one of those two ideas is absurd? (Or
are they both absurd? I don't even know.)

Of course the idea that one implementation would do one thing and
another would do the other is absurd, but that's exactly my point; the
spec encourages this sort of absurdity.

 we give app developers a way to export a set of data. that's precisely the 
 extent of we intend to do. what do you feel the app authors need that more 
 than that?

Knowledge of what's going to happen with that data! If all they want to
do is export data, they can use printf.

 And so the
 StatusNotifierIcon would have to be entirely redundant with
 functionality that was also provided elsewhere.
 
 can you provide concrete use cases? otherwise there is no way to actually 
 discuss this point.

OK, you mentioned volume indicators in another email.

So, presumably I would want to have a series of icons for different
sound volumes, and some way of indicating muted. Let's say I want to
indicate mute by overlaying a red X over the existing volume icon (so
that the user can still see under the X whether the volume would be loud
or quiet if he unmuted it).

The seemingly-obvious way that the spec offers for doing this is to use
OverlayIconName or OverlayIconPixmap. Now, the first problem is that I
can't actually control *where* the overlay shows, so maybe the X will be
drawn in the worst possible position, and make it impossible to see the
important part of the underlying icon. But that's a minor problem
compared to the fact that there is no guarantee that the visualization
will show the overlay *at all*. And obviously I don't want it to be the
case that with *some* StatusNotifierHosts, full volume and currently
muted but previously full volume would look exactly the same. So this
means I have to simply ignore OverlayIconName/OverlayIconPixmap and do
something else instead. (Either precompose the overlaid icons and use a
separate IconName/IconPixmap for each, or else not use an overlay to
indicate mute.)

I'm assuming your argument is something like but the tray may want to
enforce strict restrictions on how icons look, so as to preserve a
consistent visual style, etc etc etc. And that's a perfectly reasonable
goal. But saying you can set this property, but sometimes it will be
ignored is an awful way of implementing that goal, because from the
application side, it translates to you can only use this property to
display information that is *completely unimportant* to the user.
(There isn't even any way for the application to *know* whether or not
the overlay is being/will be displayed.) It would be better to simply
remove the property entirely.

And so on throughout the spec. As I understand what you have said, there
is absolutely *nothing* you can do with the spec that is guaranteed to
have any effect. The icon is not guaranteed to be shown, the urgency
hint is not guaranteed to have an effect, the tooltip is not guaranteed
to be shown, there's no guarantee you can Activate the item, etc. So how
can an application author possibly use this spec? (Answer: by targeting
a single desktop environment and assuming that the StatusNotifierHost
will behave exactly like that desktop's StatusNotifierHost is known to
behave. And in that case you don't need an FDO spec.)

-- Dan
___
xdg mailing list
xdg@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/xdg


Re: Proposing the StatusNotifier specification

2010-01-19 Thread Aaron J. Seigo
On January 19, 2010, Giles Atkinson wrote:
  Do you have concrete examples? every app we looked at that puts an icon
  in the tray (and there are dozens) fits into one of the existing
  categories; in fact, that's how we came up with them.
 
 Yes, I do and it is not an isolated case, but an example of a reasonable
 class of applications: those that present foreign windows from another
 environment and wish to integrate them as smoothly as possible with the
 local environment.  This class potentially includes remote graphics
 applications, VM hypervisors and emulators such as WINE.  (At the edge of
 it are straightforward applications using X remote display, whose use of
 the replacement notification interface is blocked by the sole use of
 D-bus.)

if this information is not known, then i'd suggest tagging them as 
ApplicationStatus since that's the best that can be done.

as an implementation note, the Plasma widget that provides the system tray for 
plasma-desktop and plasma-netbook treats all xembed icons as 
ApplicationStatus since we can't introspect any additional information out 
of them.

so in the case of no information available, we default to 
ApplicationStatus

 Applications in this class only have the information about their
 notification items that they get through the underlying foreign
 interfaces, and that is very unlikely to include anything that
 approximates the four categories. 

is there information in these systems that offers a categorization? if so, 
then we can work on harmonizing our categorizations with common practice 
elsewhere. if there is no category information, then i suggest using 
ApplicationStatus as a default fallback.

 That could be interpreted as meaning
 they are barred from this interface, 

that would be an incorrect interpretation. would it help if the entry for 
ApplicationStatus was extended from:

ApplicationStatus: The item describes the status of a generic application, 
for instance the current state of a media player.

to something like:

ApplicationStatus: The item describes the status of a generic application, 
for instance the current state of a media player. In the case where the 
category of the item can not be known, such as when the item is being proxied 
from another incompatible or emulated system, ApplicationStatus can be used a 
sensible default fallback.

?

 but in practice the application developers will simply make them lie.  

if you can describe some use cases in which the developer will make the item 
lie (e.g. this is supposed to be a $FOO system tray entry on Windows, and 
when run through $COMPATIBILITY_LAYER it will likely end up appearing as $BAR 
instead) then we can work on this.

 On the subject of backward-compatibility you also wrote:
 
 ... older clients aren't ignored at all (at least if the host
 visualization (e.g. system tray), doesn't suck). the goal is to deprecate,
 and eventually get rid of, the old and broken xembed based system
 
 That is all very well, and what anyone might want to hear, but it is not
 what is in the specification. 

the specification does not require all visualizations to also support the 
xembed system. that is because not all visualizations will be system trays and 
the spec is not about the xembed system but a different system that provides 
far greater capability than the xembed system which sits aside the xembed 
system.

i really do hope that we can phase out the xembed system in our own 
applications. whether we can do so for things like apps running through WINE 
is not a given; i think it's obvious that apps using the xembed system will be 
with us for many years to come. as such, it's only reasonable to expect that 
people who write system trays will include xembed support as well. it is not, 
however, in the scope of this specification to mandate how system tray wigets 
are written. the scope is to define how a visualization, which a system tray 
is one possible kind of, can work with applications using this d-bus based 
mechanism.

 As I have already mentioned, the
 specification is completely silent on compatibility with older clients,
 implying it is not an issue.  The addition of a single sentence would fix
 that.

if you could offer an example of the sentence you have in mind, that would be 
helpful.

 It is also silent on the motivation for the design (which still looks weak
 to me) and the semantics of the operations parameters, as Matthias has
 pointed out in another thread.

the semantics of the operations as realized in a given visualization are not 
overly specified to purposefully allow for flexibility in the visualization. 
yes, there is an assumption here that those writing those visualizations 
aren't idiots and are able to do their job with a bare minimum of competency. 
i hope that isn't too much to ask.

as for the motivation of the design, i agree that it is not obvious (as 
evidenced by these discussions). we will add a bit about the motivation for 
the design 

Re: Proposing the StatusNotifier specification

2010-01-19 Thread Matthias Clasen
On Tue, 2010-01-19 at 10:44 -0800, Aaron J. Seigo wrote:

 
 the semantics of the operations as realized in a given visualization are not 
 overly specified to purposefully allow for flexibility in the visualization. 
 yes, there is an assumption here that those writing those visualizations 
 aren't idiots and are able to do their job with a bare minimum of competency. 
 i hope that isn't too much to ask.

Don't you see how totally incongruent your position is ? You say that
the old systray has been abused, and thus all freedom needs to be taken
away from the application writers. And then you turn around and ask for
total blanket freedom to be given to the 'visualization' writers,
because 'they aren't idiots'.

To give some concrete examples of the kind of missing guidance that is
needed to make this API useful for application writers:

   org.freedesktop.StatusNotifierItem.Title
   STRING org.freedesktop.StatusNotifierItem.Title ();

   It's a name that describes the application, it can be more
descriptive than Id.


Is this supposed to be a single word, a line, a paragraph ? Is it
supposed to include punctuation, or be capitalized ? Should it be the
same as the name that appears in the menu ?

Not specifying these things sure makes the spec flexible, but it also
guarantees that you will get a mix-and-match of different styles, which
will suck for the overall experience. Unless, as Dan pointed out, you
rely on everybody copying the one reference implementation in its
behavior - and then why bother with a spec in the first place ?







___
xdg mailing list
xdg@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/xdg