AppIndicators

Differences between revisions 2 and 3
Revision 2 as of 2010-07-14 19:11:12
Size: 2628
Editor: pool-71-123-28-183
Comment:
Revision 3 as of 2010-07-14 19:35:21
Size: 9685
Editor: pool-71-123-28-183
Comment:
Deletions are marked like this. Additions are marked like this.
Line 27: Line 27:
(03:10:55 PM) tedg: KSNI provides an interface for status notifier items that is independent of how they can be displayed.
(03:11:21 PM) tedg: While we have a particular ideas on how that display should work, KNSI doesn't provide anything on that.
(03:11:47 PM) tedg: So it is possible to link KSNI supporting applications in a variety of displays, but we're not currently using any of those.
(03:11:55 PM) tedg: There are some available on KDE for Plasma.
(03:12:07 PM) tedg: On top of that we added the ability to export a menu across dbus.
(03:12:18 PM) tedg: That is implemented using the Dbusmenu protocol and librarly.
(03:12:33 PM) tedg: If you're interested in dbusmenu you can start on Launchpad at http://launchpad.net/dbusmenu
(03:13:03 PM) tedg: For the most part, application developers don't need to know anything about either of these protocols because they're hidden behind libappindicator which provides a pretty simple interface to both.
(03:13:57 PM) tedg: That interface is the AppIndicator object who's C Language documentation is available here: http://people.canonical.com/~ted/libappindicator/current/AppIndicator.html
(03:14:52 PM) tedg: Muscovy, Working windicators are on the todo list, but with the shorted development time in the Maverick cycle they probably won't make the Feature Freeze cutoff.
(03:16:02 PM) tedg: So if you're wanting to implement Application indicators there are a few guides available.
(03:16:15 PM) tedg: There is the reference documentation above, but you probably want one of the guides.
(03:16:24 PM) tedg: https://wiki.ubuntu.com/DesktopExperienceTeam/ApplicationIndicators#Porting%20Guide%20for%20Applications
(03:16:37 PM) tedg: The Wiki goes through examples in a variety of languages.
(03:17:00 PM) tedg: There are Mono, Python and Vala bindings in Maverick. Including GObject Introspection support.
(03:17:12 PM) tedg: So I haven't heard of anyone doing it, but Javascript should work too :)
(03:17:53 PM) tedg: matttbe, I believe that we are using the same address as KSNI names, so KDE applications do work with the application indicators.
(03:18:26 PM) tedg: matttbe, We do register with dbus for two names, one for dbus activations purposes and the other to connect with the KSNI protocol.
(03:18:52 PM) tedg: On the topic of application work, I want to again mention the design guidelines.
(03:19:02 PM) tedg: https://wiki.ubuntu.com/CustomStatusMenuDesignGuidelines
(03:19:15 PM) tedg: The reason being is that many times an Application Indicator isn't what you need.
(03:19:37 PM) tedg: We don't want to end up in a situation where people need a 40" screen just to show all the app indicators!
(03:20:18 PM) tedg: It's also important to not that the category indicators like the Messaging Menu and/or the Sound Menu might be a better solution for your particular application.
(03:21:38 PM) tedg: matttbe, I'm not sure about Cairo Dock in particular, but if the address has changed we'd change too. We're not intentionally using a different name. I haven't switched to Maverick yet *blush* :)
(03:22:38 PM) tedg: So I wanted to talk a little about an issue that comes up a lot and that's falling back to the notification area.
(03:22:58 PM) tedg: Of course the default Ubuntu/UNE desktop isn't what everyone on the planet uses (we're working on it, not there yet :) )
(03:23:12 PM) tedg: So it's important that we can fallback to using something compatible in the end.
(03:23:34 PM) tedg: So libappindicator by default provides a fallback to a GtkStatusIcon that behaves very similar to the Application Indicators.
(03:24:15 PM) tedg: Some people don't necessarily want to make the same opinionated choices on the design when they're falling back.
(03:24:28 PM) tedg: Which is fine, but we don't take in enough information to do anything else.
(03:24:46 PM) tedg: So what we instead provide is a way to change how the fallback is handled via subclassing.
(03:25:04 PM) tedg: There is two virtual functions fallback and unfallback that can be used to handle the fallback differently.
(03:25:19 PM) tedg: This could include anything you possibly want, it's just a function call.
(03:25:39 PM) tedg: If you'd like to see an example of that there is a fallback test included in the test suite of libappindicator.
(03:25:47 PM) tedg: http://bazaar.launchpad.net/~indicator-applet-developers/indicator-application/trunk/annotate/head:/tests/test-libappindicator-fallback-item.c
(03:26:02 PM) tedg: For those who aren't C/GObject programmers there is a lot there that you dont' need to understand.
(03:26:16 PM) tedg: You're probably just most interested in the two functions.
(03:26:36 PM) tedg: In this case it marks the test as passed/failed based on the calls to the fallback/unfallback functions.
(03:26:58 PM) tedg: So, if you're using those functions, you know that they're tested as the test suite uses this feature as well :)
(03:27:18 PM) tedg: There is also a signal when a fallback occurs.
(03:27:36 PM) tedg: I don't think that this is as useful for implementing a fallback, but it could be used in other parts of your code.
(03:27:50 PM) tedg: That signal is "connection-changed" which will give you a boolean on the status.
(03:28:48 PM) tedg: Again, I don't really recommend that route for fallback, but you *could* do it if you wanted :)
(03:30:14 PM) tedg: When jcastro was asking me about doing this session he said "talk about what's new". I want to stress, there is nothing new -- we're polishing at this point.
(03:30:31 PM) tedg: But that does introduce some change, but there shouldn't be any API breakage, just extensions.
(03:30:57 PM) tedg: One of the things that we're planning on supporting is KNSI's support for mouse scroll wheels.
(03:31:17 PM) tedg: We'll be adding signals to the object for the scroll event.
(03:31:36 PM) tedg: And then when the mouse is over your icon users can have a "power user" function with the scroll wheel.
(03:31:55 PM) tedg: The important thing to realize is that this isn't something most folks will find on their own, so don't make that a critical feature of the app.
(03:32:09 PM) tedg: Try to keep it something that your advanced users can use as they become more comfortable with it.
(03:32:50 PM) tedg: We're also working on adding label into the interface.
(03:33:05 PM) tedg: The reason for this is that some applications need custom icons with some text on this.
(03:33:06 PM) tedg: them
(03:33:16 PM) tedg: Things like the temperature or the batter percentage.
(03:33:18 PM) tedg: battery
(03:33:25 PM) tedg: (typing too much)
(03:33:46 PM) tedg: There is no reasonable way for them to really make these icons as they don't know the theme that the panel is rendering with.
(03:34:03 PM) tedg: So if they make an icon that has black text, they could end up on a dark panel and be unreadable.
(03:34:29 PM) tedg: You can see this today with the keyboard selector in gnome-settings-daemon.
(03:34:46 PM) tedg: We hope to fix that by rendering the test panel side.

Dev Week -- Making your application shine with application indicators -- TedGould -- Wed, Jul 14th, 2010

(03:01:11 PM) tedg: I'm not sure if I'm comfortable being an "Instructor" (sounds so official), but hello everyone!
(03:01:30 PM) tedg: So this session is about Application Indicators.
(03:02:07 PM) tedg: For those who aren't familiar with them they're basically the small custom menus that are put in the panel by applications.
(03:02:34 PM) tedg: These provide extra functionality that is persistent.  Things like your music player, where you'll keep it running, but not want the full window all the time.
(03:03:03 PM) tedg: While we'd all love to have 40" screens, that's rarely practical, so we allow an easy way to do minimized status.
(03:03:27 PM) tedg: That doesn't mean that every application under the sun should have an application indicator.
(03:03:38 PM) tedg: For most it really doesn't make any sense what so ever.
(03:03:57 PM) tedg: It's rare that you'd want continuous status on your word processor for instance.
(03:04:34 PM) tedg: mpt has written up some practical guidelines on what should and shouldn't be an application indicator.
(03:04:42 PM) tedg: https://wiki.ubuntu.com/CustomStatusMenuDesignGuidelines
(03:05:03 PM) tedg: That page goes into a lot more, but it starts off talking about how to think about the application indicators.
(03:05:25 PM) tedg: Our long term goal with Application Indicators is to replace the Notification Area.
(03:06:14 PM) tedg: Which, has become a usability ghetto.  Everything behaves differently, which makes them difficult to use overall.  Sure you can learn them, but really you shouldn't have to.
(03:06:33 PM) tedg: For a discussion on the notification area and application indicators there a good post on the Canonical Design Blog.
(03:06:41 PM) tedg: http://design.canonical.com/2010/04/notification-area/
(03:07:09 PM) tedg: So to get to more predictability on how the icons behave, we took an opinionated tact to say that all of them are menus.
(03:07:37 PM) tedg: This provides some limitations, but it also can be a very flexible interfaces for providing rich functionality to users.
(03:09:00 PM) tedg: I just realized I wasn't in the chat room.
(03:09:03 PM) tedg: Sorry about that.
(03:09:16 PM) tedg: If people have posted questions please repost them.
(03:09:40 PM) tedg: Okay, back on track :)
(03:10:09 PM) tedg: So, how does all of this work?
(03:10:21 PM) tedg: The basis is the KDE Status Notifier Item specification.
(03:10:29 PM) tedg: http://www.notmart.org/misc/statusnotifieritem/index.html
(03:10:55 PM) tedg: KSNI provides an interface for status notifier items that is independent of how they can be displayed.
(03:11:21 PM) tedg: While we have a particular ideas on how that display should work, KNSI doesn't provide anything on that.
(03:11:47 PM) tedg: So it is possible to link KSNI supporting applications in a variety of displays, but we're not currently using any of those.
(03:11:55 PM) tedg: There are some available on KDE for Plasma.
(03:12:07 PM) tedg: On top of that we added the ability to export a menu across dbus.
(03:12:18 PM) tedg: That is implemented using the Dbusmenu protocol and librarly.
(03:12:33 PM) tedg: If you're interested in dbusmenu you can start on Launchpad at http://launchpad.net/dbusmenu
(03:13:03 PM) tedg: For the most part, application developers don't need to know anything about either of these protocols because they're hidden behind libappindicator which provides a pretty simple interface to both.
(03:13:57 PM) tedg: That interface is the AppIndicator object who's C Language documentation is available here: http://people.canonical.com/~ted/libappindicator/current/AppIndicator.html
(03:14:52 PM) tedg: Muscovy, Working windicators are on the todo list, but with the shorted development time in the Maverick cycle they probably won't make the Feature Freeze cutoff.
(03:16:02 PM) tedg: So if you're wanting to implement Application indicators there are a few guides available.
(03:16:15 PM) tedg: There is the reference documentation above, but you probably want one of the guides.
(03:16:24 PM) tedg: https://wiki.ubuntu.com/DesktopExperienceTeam/ApplicationIndicators#Porting%20Guide%20for%20Applications
(03:16:37 PM) tedg: The Wiki goes through examples in a variety of languages.
(03:17:00 PM) tedg: There are Mono, Python and Vala bindings in Maverick.  Including GObject Introspection support.
(03:17:12 PM) tedg: So I haven't heard of anyone doing it, but Javascript should work too :)
(03:17:53 PM) tedg: matttbe, I believe that we are using the same address as KSNI names, so KDE applications do work with the application indicators.
(03:18:26 PM) tedg: matttbe, We do register with dbus for two names, one for dbus activations purposes and the other to connect with the KSNI protocol.
(03:18:52 PM) tedg: On the topic of application work, I want to again mention the design guidelines.
(03:19:02 PM) tedg: https://wiki.ubuntu.com/CustomStatusMenuDesignGuidelines
(03:19:15 PM) tedg: The reason being is that many times an Application Indicator isn't what you need.
(03:19:37 PM) tedg: We don't want to end up in a situation where people need a 40" screen just to show all the app indicators!
(03:20:18 PM) tedg: It's also important to not that the category indicators like the Messaging Menu and/or the Sound Menu might be a better solution for your particular application.
(03:21:38 PM) tedg: matttbe, I'm not sure about Cairo Dock in particular, but if the address has changed we'd change too.  We're not intentionally using a different name.  I haven't switched to Maverick yet *blush* :)
(03:22:38 PM) tedg: So I wanted to talk a little about an issue that comes up a lot and that's falling back to the notification area.
(03:22:58 PM) tedg: Of course the default Ubuntu/UNE desktop isn't what everyone on the planet uses (we're working on it, not there yet :) )
(03:23:12 PM) tedg: So it's important that we can fallback to using something compatible in the end.
(03:23:34 PM) tedg: So libappindicator by default provides a fallback to a GtkStatusIcon that behaves very similar to the Application Indicators.
(03:24:15 PM) tedg: Some people don't necessarily want to make the same opinionated choices on the design when they're falling back.
(03:24:28 PM) tedg: Which is fine, but we don't take in enough information to do anything else.
(03:24:46 PM) tedg: So what we instead provide is a way to change how the fallback is handled via subclassing.
(03:25:04 PM) tedg: There is two virtual functions fallback and unfallback that can be used to handle the fallback differently.
(03:25:19 PM) tedg: This could include anything you possibly want, it's just a function call.
(03:25:39 PM) tedg: If you'd like to see an example of that there is a fallback test included in the test suite of libappindicator.
(03:25:47 PM) tedg: http://bazaar.launchpad.net/~indicator-applet-developers/indicator-application/trunk/annotate/head:/tests/test-libappindicator-fallback-item.c
(03:26:02 PM) tedg: For those who aren't C/GObject programmers there is a lot there that you dont' need to understand.
(03:26:16 PM) tedg: You're probably just most interested in the two functions.
(03:26:36 PM) tedg: In this case it marks the test as passed/failed based on the calls to the fallback/unfallback functions.
(03:26:58 PM) tedg: So, if you're using those functions, you know that they're tested as the test suite uses this feature as well :)
(03:27:18 PM) tedg: There is also a signal when a fallback occurs.
(03:27:36 PM) tedg: I don't think that this is as useful for implementing a fallback, but it could be used in other parts of your code.
(03:27:50 PM) tedg: That signal is "connection-changed" which will give you a boolean on the status.
(03:28:48 PM) tedg: Again, I don't really recommend that route for fallback, but you *could* do it if you wanted :)
(03:30:14 PM) tedg: When jcastro was asking me about doing this session he said "talk about what's new".  I want to stress, there is nothing new -- we're polishing at this point.
(03:30:31 PM) tedg: But that does introduce some change, but there shouldn't be any API breakage, just extensions.
(03:30:57 PM) tedg: One of the things that we're planning on supporting is KNSI's support for mouse scroll wheels.
(03:31:17 PM) tedg: We'll be adding signals to the object for the scroll event.
(03:31:36 PM) tedg: And then when the mouse is over your icon users can have a "power user" function with the scroll wheel.
(03:31:55 PM) tedg: The important thing to realize is that this isn't something most folks will find on their own, so don't make that a critical feature of the app.
(03:32:09 PM) tedg: Try to keep it something that your advanced users can use as they become more comfortable with it.
(03:32:50 PM) tedg: We're also working on adding label into the interface.
(03:33:05 PM) tedg: The reason for this is that some applications need custom icons with some text on this.
(03:33:06 PM) tedg: them
(03:33:16 PM) tedg: Things like the temperature or the batter percentage.
(03:33:18 PM) tedg: battery
(03:33:25 PM) tedg: (typing too much)
(03:33:46 PM) tedg: There is no reasonable way for them to really make these icons as they don't know the theme that the panel is rendering with.
(03:34:03 PM) tedg: So if they make an icon that has black text, they could end up on a dark panel and be unreadable.
(03:34:29 PM) tedg: You can see this today with the keyboard selector in gnome-settings-daemon.
(03:34:46 PM) tedg: We hope to fix that by rendering the test panel side.
...

MeetingLogs/devweek1007/AppIndicators (last edited 2010-07-14 20:02:36 by pool-71-123-28-183)