Feedback on implementing Systray2.0 in GLX-Dock

Marco Martin notmart at gmail.com
Fri May 7 05:10:17 PDT 2010


n Friday 07 May 2010, you wrote:
> Hi !
> I'm the core dev of GLX-Dock and have recently developped a systray
> applet for the dock, based on the StatusNotifier API (I've based my work
> on http://www.notmart.org/misc/statusnotifieritem).

Hi,
I'm happy it's being adopted :)

> I hope we can discuss about some points.
> I've tried to sort them by importance (imho of course).

sure :)

> 1) the menu : ContextMenu(x,y)
> this method has several failures :
>  * First, the coordinates are used as the top-left corner of the menu.
> In case the dock is placed at the bottom, we want the bottom of the menu
> to appear just above the icon, but we don't know the height of the menu.
> In case the dock is placed on top of the screen, it would be the
> opposite.
> The application could guess where to pop-up the menu, by comparing the
> coordinates with the screen's size, but it's an extra job, and it
> doesn't seem to be done.
> Moreover in the case the applet is inside a Desklet (icons are place
> inside Containers, which can be either a Dock, a Desklet, or even in any
> kind of Container), it could be anywhere on the screen.
> At the moment, the application that will summon the menu has no idea
> about the orientation and position of the container.

there are two cases possible: either the menu is completely handled by the 
application or by the visualization, via dbus-menu.

in both cases who will have to open and show the menu is also its owner and 
knows everything about it, including the size.

The algrithm is quite simple, default to open the popup at bottom-left 
compared to the coordinate
if pos.y+menu.height > screen bottom, open the popup at pos.y-popup.height
if pos.x+menu.width >screen.right, open the popup at pos.x-popup.width

the popup size is something that you do have, because is the application that 
actually opens the popup, and that owns it, so knows the geometry too.
if instead the dbus menu is used for popups, is the systray that owns the 
popup and will use the same strategy itself, instead of the application doing 
it.
and this is the only way to know where to do the popup, really, especially in 
the case of floating systray not anchored to any screen position.

> * Second, the menu appears behind the dock, which makes it almost
> unusable. Probably because the menu doesn't belong to the dock, so the
> WM doesn't place it above the dock. I see no solution, but it wouldn't
> be a problem with a good menu placement.

this is strange does happen with kde clients (probably is because the popups 
couldn't have the actual popup window type, due to a qt problem, i can give 
them the "always on top" flag tough)
this will also be no more an issue with dbusmenu

> 2) Tooltip :
> Allowing html-like markers is a kind of wrong good idea.
> Good because it allows for instance to stress on some words with a
> <b></b>.
> But unfortunately it's wrongly used by some applications (for instance
> Kopete adds some <qt></qt>, <nobr></nobr> and <br/>, which are not
> mentionned in
> http://www.notmart.org/misc/statusnotifieritem/markup.html).
> I think what we want is just a small tooltip to indicate things like
> current state or failure reasons, not some over-complicated html page.
> In the case of GLX-Dock, it uses the Pango markups to render the text in
> the dialog. Sticking to the Pango markups could be enough, but anyway
> the protocol should be clear about it.

that's a kopete problem (and i'll filter out not allowed tags from the kde 
implementation as well, to be more clear about this point)
anyways a really small html subset is the more simple and "standard" way to 
implement it.
i wanted to support only plain text at the beginning bu was clear that to many 
applications would had too many regressions and if one wants it to be actually 
adopted some compromises have to be made

> 3) Icons :
> It should be clearly mentionned in the documentation to avoid using the
> pixmaps. It was not very clear for me whether the pixmap is here as a
> fallback if an icon name is not found, or just used in case the
> application draws its icon itself.
> As far as I could see, nobody uses pixmaps (and it's probably better for
> performance reasons).

using pixmaps is a supported way, but if i remember correctly i do state that 
the icon name is the preferred way. I'll make it more clear however.

> 4) IconThemePath :
> I think it's not the job of the application to know where are the icons
> themes. The dock already has some nice searching functions to find an
> icon with a given name. Moreover, the dock can use a given icons theme
> and the application has no way to know that.
> So this property seems not very useful. A much better way would be to
> authorize to pass paths in IconName (it's not clear if this is allowed
> or if the icon must be present in an icons theme; paths in IconName
> would also make the pixmaps almost useless).

full paths in iconnames will continue to always be forbidden, and i'll update 
the spec to be more clear.
the icon theme path is a later addition (of which i didn't really agree, but 
seemed the only way to not break things)
it seems the only way (that said, avoiding full paths in icon names that would 
allow ever broader misises) to make it work when an application uses an icon 
name that is present only in its native icon set, but it's not really 
standard, so wouldn't be present in the hi-color theme. It sucks, but it does 
happen in the real word use cases.

> 
> 5) AttentionMovieName :
> What's the point of this property, compared to AttentionIconName ? is it
> some kind of animated png/svg ?
> Should it be used in preference of AttentionIconName ?

another point the spec should be more clear: attentionmovie is a mng, searched 
with the same path name resolution as the icons and is to be used in place of 
atentionicon if present.
however is implementation dependent. a visualization could chose to not use 
it, or not use it if we are on battery, whatever.

> 6) Scroll :
> It should be specified how negative numbers are handled (scroll up or
> down ?), although this is quite obivous.

uhm, perhaps. however you will never be sure it was an actual scroll wheel to 
ask this scroll function, again, it's completely model view based, the client 
shuld never make assumption about the vsualization and the visualization about 
the client.

> 7) And finally the bus and interfaces names :
>  I'm currently on KDE since they seem more advanced on this point than
> Gnome, and all their paths are org.kde.xyz.
> Shouldn't paths be org.freeedsktop.xyz ?

the target is having the org.freedesktop name, but this only when there will 
be a more broad approach. It was agreed in the past to not take the 
freedesktop name until it's an actual recognized spec.

> Sorry for the long speech, and if some of my remarks are already taken
> into account in another more up-to-date documentation.
> Tanks for reading me !
> 
> Fabounet.
> 
> http://glx-dock.org


Cheers,
Marco Martin


More information about the xdg mailing list