libayatana-indicator-0.6.2/AUTHORS0000644000000000000000000000112513254153536013542 0ustar Allan LeSage Aurelien Gateau Automatic PS uploader Charles Kerr CI bot Cody Russell Colin Watson Daniel d'Andrada Didier Roche Eitan Isaacson Evgeni Golov György Balló Hernando Torque Iain Lane Javier Jardón Jonathan Riddell Karl Ken VanDine Lars Uebernickel Łukasz 'sil2100' Zemczak Luke Yelavich Marco Trevisan (Treviño) Martin Pitt Mathieu Trudel-Lapierre Michael Terry Mike Gabriel Mikkel Kamstrup Erlandsen Neil Jagdish Patel Robert Ancell Robert Carr Robert Collins seb128 Sebastien Bacher Steve Langasek Ted Gould Timo Jyrinki unknown William Hua libayatana-indicator-0.6.2/autogen.sh0000755000000000000000000000025213254153536014473 0ustar #!/bin/sh PKG_NAME="libayatana-indicator" which mate-autogen || { echo "You need mate-common from https://git.mate-desktop.org/mate-common." exit 1 } . mate-autogen libayatana-indicator-0.6.2/ChangeLog0000644000000000000000000065720313254153536014262 0ustar 2018-03-20 10:40:49 +0100 Mike Gabriel (7f0bed8) * release 0.6.2 (HEAD -> master) 2018-03-20 08:54:48 +0000 Mike Gabriel (34b4321) * libayatana-indicator/indicator-ng.c: Type cast assignments from g_object_ref_sink(). (origin/master) 2018-03-20 09:12:03 +0100 Mike Gabriel (3b3c265) * debian/control: Drop unneeded D (libayatana-indicator3-dev): libayatana-indicator-dev. 2017-10-26 19:16:22 +0200 Mike Gabriel (8de3f59) * Makefile.am: Drop distcheck features. 2017-10-22 21:12:38 +0200 Mike Gabriel (cffab72) * debian/changelog: Fix source project name in most recent changelog stanza. 2017-09-27 16:01:44 +0200 Mike Gabriel (fb3d8fe) * debian/changelog: post-release fix in date strings (2) (origin/release-builds, release-builds) 2017-09-27 11:12:43 +0200 Mike Gabriel (7a2f684) * debian/changelog: post-release fix in date strings (for 0.6.0 and 0.6.1) 2017-09-23 01:14:17 +0200 Mike Gabriel (4f355a3) * post-release fix-up of debian/changelog 2017-09-22 11:14:40 +0200 Mike Gabriel (6233943) * debian/rules: Drop dh_install call for bin:pkg -plibayatana-indicator-tools. We don't ship that anymore. 2017-09-22 10:16:08 +0200 Mike Gabriel (7222339) * debian/ayatana-indicator-common.install: Set x-bit on file permissions. 2017-09-22 10:11:39 +0200 Mike Gabriel (20640dd) * release 0.6.1 (tag: 0.6.1) 2017-09-22 10:01:32 +0200 Mike Gabriel (df6c2e9) * debian/control: Add B-D systemd [linux-any]. 2017-09-22 10:01:13 +0200 Mike Gabriel (7bd1d1d) * debian/{control,ayatana-indicators-common}: Leave ayatana-indicators-commin bin:package empty on non-systemd systems. 2017-09-22 09:58:06 +0200 Mike Gabriel (afba9ad) * configure.ac: Support pkg-config (<< 0.27). 2017-09-22 09:57:35 +0200 Mike Gabriel (2b5c1b0) * autotools: Make systemd dependency optional. This makes libayatana-indicator available on Debian GNU/kFreeBSD and Debian GNU/Hurd. 2017-05-22 15:29:02 +0200 Mike Gabriel (5ff7174) * debian/*: Adopt packaging improvements from official Debian package. 2017-05-22 13:48:53 +0200 Mike Gabriel (4fd7ae8) * release 0.6.0 (tag: 0.6.0) 2017-05-22 14:03:19 +0200 Mike Gabriel (c49b409) * Add empty NEWS file to prevent FTBFS. 2017-05-22 13:47:34 +0200 Mike Gabriel (9029a50) * Update AUTHORS file. 2017-05-22 13:46:17 +0200 Mike Gabriel (0409f01) * Move NEWS -> NEWS.Canonical. 2017-05-22 13:46:00 +0200 Mike Gabriel (820f332) * autogen.sh: Add 'ayatana-' to the PKG_NAME value. 2017-05-22 13:45:40 +0200 Mike Gabriel (6523f70) * README: Update, don't mention Unity. We are non-Ubuntu centric. Also adapt path where indicator service files have to be placed. 2017-05-16 11:09:43 +0200 Mike Gabriel (8c2a254) * Fix up for previous commit. 2017-05-15 16:46:44 +0200 Mike Gabriel (ac3c960) * One step back... Mimick Canonical's API. Use their namespace for item attributes. 2017-05-15 16:45:55 +0200 Mike Gabriel (9c42187) * tools/80indicator-debugging: Adapt comment header to our fork. 2017-05-15 11:03:55 +0200 Ted Gould (0f68605) * ayatana-indicator-common: Add a package to hold shared systemd targets for systemd user session. 2017-05-15 10:49:03 +0200 Mike Gabriel (4ab9812) * drop buildcruft file 2017-05-15 10:18:27 +0200 Mike Gabriel (c4a411d) * build system: Switch from gnome-common to mate-common. 2016-02-19 10:56:53 +0100 Iain Lane (0871d14) * Add -lm via LDADD to resolve FTBFS in Ubuntu 16.04 and Debian stretch/unstable. 2015-11-16 16:05:54 +0100 Mike Gabriel (c9b08c1) * Use x-ayatanaindicator-* instead of x-canonical-*. 2015-11-16 15:16:58 +0100 Mike Gabriel (1748add) * Makefile.am: Replace dist-hook for Bazaar based VCS repo against dist-hook for a Git based VCS repo. 2015-11-11 14:35:44 +0100 Mike Gabriel (35fbed9) * debian/libayatana-indicator*.symbols: Add .symbols files for shared libraries. 2015-11-11 14:35:14 +0100 Mike Gabriel (9469b6e) * debian/rules: Remove builddir/ and build-aux/ directories when auto-cleaning up package. 2015-11-11 05:52:38 +0100 Mike Gabriel (ed550aa) * Drop .bzrignore file. 2015-11-10 22:52:23 +0100 Mike Gabriel (3682a7c) * debian/changelog: Use a Debianinc revision in the package version (0.6.0 -> 0.6.0-0). 2015-11-10 17:52:01 +0100 Mike Gabriel (9c0552f) * debian/control: Fix build-dep issue for libayatana-ido3-0.4-dev. 2015-11-07 06:02:30 +0000 Mike Gabriel (fc142ac) * Various fixes for making the library name change complete. 2015-11-06 14:46:09 +0000 Mike Gabriel (9d1b39f) * Fork libayatana-indicator from Ubuntu's libindicator shared library. 2014-09-22 13:41:36 +0000 CI bot (b1f280a) * Releasing 12.10.2+14.10.20140922-0ubuntu1 (refs/bzr/origin/tags/12.10.2+14.10.20140922-0ubuntu1, refs/bzr/origin/heads/master) 2014-09-22 13:41:26 +0000 Marco Trevisan (Treviño) (5ae6789) * IndicatorNG: Reverse the scroll delta on left scroll events 2014-07-16 15:41:25 +0200 Marco Trevisan (Treviño) (19b7298) * IndicatorNG: Reverse the scroll delta on left scroll events 2014-07-16 15:40:42 +0200 Marco Trevisan (Treviño) (1a211d6) * IndicatorLoader: convert gtk scroll events to indicator object events 2014-07-16 15:00:51 +0200 Marco Trevisan (Treviño) (515f717) * IndicatorLoader: add scroll-entry support 2014-04-02 14:50:54 +0000 CI bot (14a8261) * Releasing 12.10.2+14.04.20140402-0ubuntu1 (refs/bzr/origin/tags/12.10.2+14.04.20140402-0ubuntu1) 2014-04-02 14:50:38 +0000 William Hua (e662c87) * Don't load using the icon info structure if it's a GBytesIcon. Fixes: 1293548 2014-03-29 22:12:56 +1300 William Hua (68a5ec6) * Don't load using the icon info structure if it's a bytes icon. 2014-03-04 10:58:35 +0000 CI bot (1dc288c) * Releasing 12.10.2+14.04.20140304-0ubuntu1 (refs/bzr/origin/tags/12.10.2+14.04.20140304-0ubuntu1) 2014-03-04 10:58:28 +0000 Marco Trevisan (Treviño) (a0a0b28) * IndicatorImageHelper: always try to use a GIcon or the filename as source of the GdkImage 2014-03-03 11:25:29 +0100 Marco Trevisan (Treviño) (844e1b5) * IndicatorImageHelper: let's use the actual icon file if its height is less than ICON_SIZE 2014-03-03 10:44:10 +0100 Marco Trevisan (Treviño) (8a1bdd7) * IndicatorLoader: Make sure that we load the icon at its original size, if not higher than IMAGE_SIZE 2014-02-28 07:17:20 +0100 Marco Trevisan (Treviño) (acf1752) * ImageHelper: set image from icon name if we have the filename 2014-02-28 06:52:57 +0100 Marco Trevisan (Treviño) (12db08f) * IndicatorImageHelper: always try to use a GIcon or the file-name as source of the Gdk image 2014-02-18 15:45:39 +0000 CI bot (517d1b4) * Releasing 12.10.2+14.04.20140218-0ubuntu1 (refs/bzr/origin/tags/12.10.2+14.04.20140218-0ubuntu1) 2014-02-18 15:45:31 +0000 Marco Trevisan (Treviño) (31d0819) * IndicatorObject: add parent_window parameter to IndicatorEntry 2014-02-13 17:18:53 +0100 Marco Trevisan (Treviño) (9affd1f) * IndicatorObject: add parent_window parameter to IndicatorEntry 2014-01-29 16:47:10 +0000 CI bot (a7660e5) * Releasing 12.10.2+14.04.20140129-0ubuntu1 2014-01-29 16:47:01 +0000 Lars Uebernickel (ced7687) * indicator-ng: support "submenu-action" on root menu items Fixes: 793450 2014-01-29 14:16:59 +0100 Lars Uebernickel (239817c) * indicator-ng: support "submenu-action" on root menu items 2014-01-17 18:40:36 +0100 Łukasz 'sil2100' Zemczak (759fdd8) * Sync trunk with what's in the archive 2013-12-20 20:31:02 +0000 Colin Watson (b7f9938) * Use named icons rather than (deprecated) stock items. Fixes: https://bugs.launchpad.net/bugs/1262626. 2013-12-20 11:30:44 +0000 Colin Watson (a1e5383) * Use named icons rather than (deprecated) stock items. 2013-12-19 15:35:18 +0000 Lars Uebernickel (f6b60f1) * Don't treat deprecation warnings as errors and fix indicator-ng test for gtk 3.10. Fixes: https://bugs.launchpad.net/bugs/1262626. 2013-12-19 15:51:13 +0100 Lars Uebernickel (b2d4deb) * test-indicator-ng: adapt to new gtkmodelmenuitem widget structure 2013-12-19 15:50:54 +0100 Lars Uebernickel (ef145fc) * Don't treat deprecation warnings as errors 2013-11-25 15:38:48 +0000 Automatic PS uploader (a1318f0) * Releasing 12.10.2+14.04.20131125-0ubuntu1 (revision 517 from lp:libindicator). 2013-11-25 03:55:11 +0000 Automatic PS uploader (cef38fd) * Releasing 12.10.2+14.04.20131125-0ubuntu1, based on r517 2013-10-31 10:00:21 -0700 Timo Jyrinki (69132b0) * Sync changelog from what's in archive. 2013-10-29 00:18:26 +0000 Lars Uebernickel (cf5ac5e) * Allow setting different positions for each profile in indicator files 2013-10-24 03:44:21 +0000 Charles Kerr (773d09b) * When we can't get a handle to the bus, exit gracefully instead of crashing. Fixes: https://bugs.launchpad.net/bugs/1218222. 2013-10-23 21:08:35 -0500 Charles Kerr (2d8ee13) * minor cleanup in the dispose() and finalize() functions 2013-10-23 21:04:19 -0500 Charles Kerr (40b4288) * When we can't get a handle to the system bus, exit gracefully instead of crashing. 2013-10-17 20:04:16 +0000 Lars Uebernickel (de95588) * indicator-ng: always create entry.label and entry.image 2013-10-17 14:57:08 -0400 Lars Uebernickel (244d618) * indicator-ng: always create entry.label and entry.image 2013-10-17 02:04:17 +0000 Lars Uebernickel (ccf83ad) * Warn when an indicator doesn't get respawned anymore. 2013-10-16 19:16:08 -0400 Lars Uebernickel (0a9a95f) * Warn when an indicator doesn't get respawned anymore 2013-10-10 16:50:29 +0200 Lars Uebernickel (478ea09) * Allow setting per-profile positions in indicator files 2013-09-13 19:42:14 +0000 Automatic PS uploader (a52033e) * Releasing 12.10.2+13.10.20130913-0ubuntu1 (revision 511 from lp:libindicator). 2013-09-13 15:15:38 +0000 Automatic PS uploader (f5e4716) * Releasing 12.10.2+13.10.20130913-0ubuntu1, based on r511 2013-09-09 14:00:06 +0000 Lars Uebernickel (5878e6b) * Expose scrolling and middle clicking to fix bug #1221242 and #1204036 (make scrolling and middle clicking work on the sound indicator). Fixes: https://bugs.launchpad.net/bugs/1204036, https://bugs.launchpad.net/bugs/1221242. 2013-09-09 15:32:49 +0200 Lars Uebernickel (9e857c3) * Remove debug message 2013-09-09 14:09:57 +0200 Lars Uebernickel (bb39362) * Support x-canonical-secondary action 2013-09-09 13:40:49 +0200 Lars Uebernickel (f4fa566) * Support "x-canonical-scroll-action" 2013-08-23 02:49:55 +0000 Automatic PS uploader (86f3d9e) * Releasing 12.10.2+13.10.20130823-0ubuntu1 (revision 509 from lp:libindicator). 2013-08-23 02:08:00 +0000 Automatic PS uploader (415565b) * Releasing 12.10.2+13.10.20130823-0ubuntu1, based on r509 2013-08-22 22:33:16 +0000 Marco Trevisan (Treviño) (b47e0f1) * IndicatorDesktopShortcuts: add support to Path key for shortcut items. Fixes: https://bugs.launchpad.net/bugs/1113883. 2013-08-22 18:57:50 +0200 Marco Trevisan (Treviño) (59a242d) * IndicatorDesktopShortcut: fix indentation 2013-08-22 18:55:46 +0200 Marco Trevisan (Treviño) (427b5d5) * IndicatorDesktopShortcuts: restore previous working dir if we changed it 2013-08-09 12:54:25 +0200 Marco Trevisan (Treviño) (6d93aba) * IndicatorDesktopShortcuts: use g_key_file_get_string for path 2013-08-08 12:18:47 +0200 Marco Trevisan (Treviño) (c0bb294) * IndicatorDesktopShortcuts: add support to Path key for shortcut items 2013-07-31 08:50:32 +0000 Automatic PS uploader (f695712) * Releasing 12.10.2+13.10.20130731-0ubuntu1 (revision 507 from lp:libindicator). 2013-07-31 02:02:40 +0000 Automatic PS uploader (a8df6b3) * Releasing 12.10.2+13.10.20130731-0ubuntu1, based on r507 2013-07-30 19:35:58 +0000 Charles Kerr (ae7687c) * in indicator-loader3, if we're looking at an ng-style indicator, show all of its profiles instead of just one. 2013-07-26 12:32:08 -0500 Charles Kerr (e430061) * explicitly set UBUNTU_MENUPROXY to 0 2013-07-26 01:58:55 -0500 Charles Kerr (f842a80) * more copyediting. why am I awake? 2013-07-26 01:28:09 -0500 Charles Kerr (5acc284) * copyediting: fix linewraps 2013-07-25 23:56:05 -0500 Charles Kerr (7f61992) * plug a keyfile leak 2013-07-25 23:46:11 -0500 Charles Kerr (083af7d) * in indicator-loader, show =all= the profiles 2013-07-19 02:49:52 +0000 Automatic PS uploader (ce7a42f) * Releasing 12.10.2+13.10.20130719-0ubuntu1 (revision 505 from lp:libindicator). 2013-07-19 02:03:05 +0000 Automatic PS uploader (ed00a13) * Releasing 12.10.2+13.10.20130719-0ubuntu1, based on r505 2013-07-18 07:27:06 +0000 Marco Trevisan (Treviño) (0c4921a) * IndicatorDesktopShortcuts: fix memory leak, free groupheader. 2013-07-17 21:47:48 +0200 Marco Trevisan (Treviño) (598c4b7) * IndicatorDesktopShortcuts: free groupheader 2013-07-02 09:35:19 +0000 Automatic PS uploader (507e694) * Releasing 12.10.2+13.10.20130702-0ubuntu1 to ubuntu. 2013-07-02 02:02:40 +0000 Automatic PS uploader (4cacb64) * Releasing 12.10.2+13.10.20130702-0ubuntu1, based on r503 2013-06-28 17:50:12 -0400 Lars Uebernickel (4ec8c2f) * Add support for indicators to tell the panel where they'd like to appear 2013-06-28 16:03:16 -0400 Lars Uebernickel (e7e2b63) * indicator-object: g_return_if_fail -> g_return_val_if_fail 2013-06-28 14:36:28 -0400 Lars Uebernickel (9090409) * README: include information about the new Position key in indicator files 2013-06-28 14:30:33 -0400 Lars Uebernickel (e744e38) * Allow indicators to tell the panel where they want to appear 2013-06-28 15:20:50 +0000 Automatic PS uploader (3470db7) * Releasing 12.10.2+13.10.20130628-0ubuntu1 to ubuntu. 2013-06-28 02:02:40 +0000 Automatic PS uploader (55e85a1) * Releasing 12.10.2+13.10.20130628-0ubuntu1, based on r501 2013-06-27 19:35:40 +0000 Charles Kerr (b4ea3e7) * Fixes a crasher bug in ng's parsing of the response to org.freedesktop.DBus.StartServiceByName: The result's variant format is "(u)", not "u". 2013-06-27 12:30:16 -0500 Charles Kerr (104bcd6) * in indicator_ng_service_started(), the result's variant type should be parsed as '(u)' rather than 'u' 2013-06-19 13:05:51 +0000 Automatic PS uploader (7bd4548) * Releasing 12.10.2daily13.06.19.1-0ubuntu1 to ubuntu. 2013-06-19 10:45:14 +0000 Automatic PS uploader (0bb928f) * Releasing 12.10.2daily13.06.19.1-0ubuntu1, based on r499 2013-06-19 12:42:52 +0200 Didier Roche (1b0f90a) * Add missing conflicts/replaces 2013-06-17 21:22:07 +0000 Charles Kerr (20c7b65) * in indicator_ng_update_entry, unconditionally call set_label, set_icon, set_accessible. Previously these were only called if the respective fields weren't NULL, which made it impossible to, for example, turn off a label or icon once it had been set. 2013-06-16 23:45:30 -0500 Charles Kerr (d5d01f6) * in indicator_ng_update_entry, unconditionally call set_label, set_icon, set_accessible. Previously these were only called if the respective fields weren't NULL, which made it impossible to, for example, turn off a label or icon once it had been set. 2013-06-07 21:21:17 +0000 Lars Uebernickel (d5fd946) * indicator-ng: properly fail when keyfile doesn't exist. 2013-06-07 20:49:24 +0000 Ted Gould (b094931) * Remove the GTK2 version of the tools. 2013-06-07 14:45:27 -0500 Ted Gould (1c70a2e) * Gone. 2013-06-07 14:45:17 -0500 Ted Gould (277ba85) * Move the debugging environment variables into the other tools package 2013-06-07 14:38:00 -0500 Ted Gould (3c96b99) * Don't build the GTK2 tools 2013-06-07 14:43:51 -0400 Lars Uebernickel (2014454) * indicator-ng: properly fail when keyfile doesn't exist 2013-06-07 11:34:25 -0400 Lars Uebernickel (1d4bcdd) * Merge lp:~larsu/call-ido-init 2013-06-07 11:33:03 -0400 Lars Uebernickel (12cc75f) * Merge lp:~larsu/new-indicator-file-format 2013-06-07 09:50:12 +0000 Automatic PS uploader (060711f) * Releasing 12.10.2daily13.06.07-0ubuntu1 to ubuntu. 2013-06-07 02:02:38 +0000 Automatic PS uploader (2edf591) * Releasing 12.10.2daily13.06.07-0ubuntu1, based on r492 2013-06-04 13:11:17 -0400 Lars Uebernickel (4adb2af) * Revert r490 2013-05-29 14:54:35 -0400 Lars Uebernickel (0d3ebcb) * indicator-ng: fix crash 2013-05-29 17:33:54 +0000 Marco Trevisan (Treviño) (8b78ada) * tests: fix compilation and make check. 2013-05-29 17:16:46 +0000 Marco Trevisan (Treviño) (ab3b6ee) * IndicatorDesktopShortcuts: Use the proper way to create an AppInfo from command-line 2013-05-29 16:35:29 +0000 Ted Gould (d652787) * Migrating away from deprecated gtk_icon_info_free(). 2013-05-29 10:25:00 -0500 Ted Gould (b46f29a) * Handling the deprecation of gtk_icon_info_free() 2013-05-27 12:08:30 -0400 Lars Uebernickel (f9c0971) * debian/control: add ido dependency 2013-05-24 18:17:45 -0400 Lars Uebernickel (9627530) * IndicatorNg: update indicator file format 2013-05-24 17:10:40 -0400 Lars Uebernickel (2712010) * refactor indicator_ng_initable_init 2013-05-23 09:04:13 -0400 Lars Uebernickel (a591305) * Depend on ido and call ido_init() in indicator-loader 2013-05-23 09:02:44 -0400 Lars Uebernickel (f77f41e) * indicator-image-helper: stop using deprecated gtk_icon_info_free() 2013-05-22 18:08:11 +0000 William Hua (ae198af) * Use GIcon's serialization/deserialization interface for indicator icons so that we can load icons as PNG data transmitted over the bus. 2013-05-19 12:47:01 -0400 William Hua (176ea14) * Code clean-up. 2013-05-03 16:21:37 +0000 Automatic PS uploader (5cac96c) * Releasing 12.10.2daily13.05.02-0ubuntu1 to ubuntu. 2013-05-02 22:59:06 +0000 Automatic PS uploader (0496a1f) * Releasing 12.10.2daily13.05.02-0ubuntu1, based on r487 2013-05-02 19:33:53 +0000 Mathieu Trudel-Lapierre (3022eec) * Merge changelog changes from /13.04 branch for saucy. 2013-05-02 12:12:42 -0700 Mathieu Trudel-Lapierre (4d59f6f) * Merge changelog changes from /13.04 branch for saucy. 2013-04-26 10:49:12 -0400 William Hua (bab64c4) * Clean up error checking. 2013-04-26 09:39:14 -0400 William Hua (83fef72) * Don't free label and accessible_desc. 2013-04-26 09:38:59 -0400 William Hua (5d6adee) * Remove changelog entry. 2013-04-22 11:50:51 -0400 William Hua (19ec649) * [ William Hua ] * debian/control: - Bump GLib to 2.37. * configure.ac: - Bump GLib to 2.37. * libindicator/indicator-image-helper.c: - Support display of GBytesIcons. * libindicator/indicator-ng.c: - Change action state icon type to GVariant. 2013-04-19 13:49:32 +0200 Marco Trevisan (Treviño) (f88266a) * IndicatorDesktopShortcuts: some code cleanup 2013-04-12 13:56:52 +0200 Marco Trevisan (Treviño) (5c5f778) * tests: fix compilation and make check. 2013-04-12 13:50:05 +0200 Marco Trevisan (Treviño) (7f0c703) * IndicatorDesktopShortcuts: initialize flags using the default define 2013-04-12 13:40:18 +0200 Marco Trevisan (Treviño) (0312ffa) * IndicatorDesktopShortcuts: Use the proper way to create an AppInfo from command-line 2013-04-09 16:45:03 +0000 Marco Trevisan (Treviño) (4d64b71) * IndicatorDestkopShortcuts: add StartupNotify parameter in our internal fake .desktop file 2013-04-09 04:53:09 +0200 Marco Trevisan (Treviño) (bd9abfc) * IndicatorDestkopShortcuts: add StartupNotify parameter in our internal fake .desktop file 2013-04-05 12:02:24 +0000 Marco Trevisan (Treviño) (2d418a6) * IndicatorDestkopShortcuts: add indicator_desktop_shortcuts_nick_exec_with_context 2013-04-05 13:22:34 +0200 Marco Trevisan (Treviño) (07652a3) * IndicatorDestkopShortcuts: fix indentation 2013-04-05 13:19:54 +0200 Marco Trevisan (Treviño) (c539c37) * IndicatorDestkopShortcuts: add missing include and deprecate old function 2013-04-05 13:09:02 +0200 Marco Trevisan (Treviño) (2fba148) * IndicatorDestkopShortcuts: add indicator_desktop_shortcuts_nick_exec_with_context 2013-03-25 21:49:50 -0400 Lars Uebernickel (ffbb3c1) * indicator-ng: allow a dictionary as the root action's state 2013-03-25 21:42:28 -0400 Charles Kerr (b046c93) * indicator-loader: add command line option to specify profile 2013-03-22 14:57:55 -0500 Charles Kerr (f25cc33) * init the GError pointer to NULL 2013-03-22 11:18:53 -0500 Charles Kerr (98cae79) * introduce tab damage for consistency with the rest of indicator-loader.c 2013-03-22 11:15:11 -0500 Charles Kerr (22d673c) * add the option to specify the profile from the command line 2013-03-21 14:06:22 -0400 Lars Uebernickel (8232ab0) * indicator-ng: allow a dictionary as the root action's state 2013-03-18 22:49:09 +0000 Mathieu Trudel-Lapierre (61d0f80) * Revert "indicator-ng: allow a dictionary as the root action's state". 2013-03-18 17:28:01 -0400 Mathieu Trudel-Lapierre (c5f002f) * Revert: indicator-ng: allow a dictionary as the root action's state 2013-03-13 22:24:42 +0000 Lars Uebernickel (daf0dc9) * indicator-ng: allow a dictionary as the root action's state 2013-03-13 16:32:22 +0000 Lars Uebernickel (610b2cc) * indicator-ng: allow a dictionary as the root action's state 2013-02-25 18:54:10 +0000 Automatic PS uploader (208d1ba) * Releasing 12.10.2daily13.02.25-0ubuntu1 to ubuntu. 2013-02-25 02:03:14 +0000 Automatic PS uploader (5074c9d) * Releasing 12.10.2daily13.02.25-0ubuntu1, based on r479 2013-02-22 15:07:42 +0000 Iain Lane (3a73f29) * Install the gtk2 library into the multiarch directory. Fixes: https://bugs.launchpad.net/bugs/1131708. 2013-02-22 11:59:11 +0000 Iain Lane (319a606) * Use $(COMMON_CONFIGURE_FLAGS) instead of hardcoding 2013-02-22 11:36:55 +0000 Iain Lane (286882c) * Install shared library into correct (multiarch) directory 2013-02-22 10:34:24 +0000 Iain Lane (31368ce) * Disable silent rules for more useful build logs 2013-02-19 12:20:52 +0000 Automatic PS uploader (150610d) * Releasing 12.10.2daily13.02.19-0ubuntu1 to ubuntu. 2013-02-19 02:02:27 +0000 Automatic PS uploader (da40ae8) * Releasing 12.10.2daily13.02.19-0ubuntu1, based on r477 2013-02-15 17:20:14 +0000 Michael Terry (d24848f) * Multiarch for most of libindicator is fine. But the indicators themselves should continue to be installed in the same (non-multiarch) directory, for historical reasons. Fixes: https://bugs.launchpad.net/bugs/1126360. 2013-02-15 11:03:03 -0500 Michael Terry (6aea07d) * hard-code indicatordir to not use multiarch locations 2013-02-15 11:08:57 +0000 Automatic PS uploader (85c8d1c) * Releasing 12.10.2daily13.02.15-0ubuntu1 to ubuntu. 2013-02-15 07:46:53 +0000 Automatic PS uploader (cdfa9f5) * Releasing 12.10.2daily13.02.15-0ubuntu1, based on r475 2013-02-14 22:25:39 +0000 Lars Uebernickel (d05835e) * Add IndicatorNg. 2013-02-14 16:16:48 -0500 Lars Uebernickel (40d7c42) * indicator-ng: add license header 2013-02-06 16:03:33 -0500 Lars Uebernickel (88aa74b) * indicator-ng: don't hide the indicator if the service is already running 2013-02-06 15:37:38 -0500 Lars Uebernickel (f9f86fb) * indicator-ng: try to restart the service when it crashes 2013-01-30 17:49:32 +0100 Lars Uebernickel (8ff25e5) * indicator-ng: simplify flow in initable_init 2013-01-25 11:55:02 +0100 Lars Uebernickel (dce947b) * trim-lcov.py: add license header 2013-01-25 11:14:13 +0100 Lars Uebernickel (c02297d) * indicator-ng: use strlen instead of hard coding the length 2013-01-25 11:11:59 +0100 Lars Uebernickel (9c857a3) * indicator-ng: use indicator_image_helper 2013-01-25 10:46:58 +0100 Lars Uebernickel (7048092) * indicator-ng: lazily allocate entry.label and entry.image 2013-01-25 10:29:57 +0100 Lars Uebernickel (82ecfaa) * indicator-ng: require header item to have x-canonical-type set 2013-01-24 11:39:12 +0100 Lars Uebernickel (f02ca5a) * indicator-ng: check return value of g_menu_model_get_item_attribute 2013-01-24 11:29:24 +0100 Lars Uebernickel (db1caf2) * indicator-ng: document error conditions in menu_changed 2013-01-24 11:25:11 +0100 Lars Uebernickel (088b36b) * indicator-ng: save unnecessary allocations by using "&" in g_variant_get 2013-01-24 11:22:39 +0100 Lars Uebernickel (05535f5) * indicator-ng: show broken image when g_icon_for_string returns NULL 2013-01-24 10:23:35 +0100 Lars Uebernickel (f3f4e1f) * indicator-ng: use an IndicatorObjectEntry internally 2013-01-23 20:05:45 +0100 Lars Uebernickel (e096111) * Add trim-lcov.py 2013-01-23 19:34:43 +0100 Lars Uebernickel (af0137c) * indicator-ng: test indicator_ng_get_property 2013-01-23 18:00:49 +0100 Lars Uebernickel (0996bce) * indicator-ng: more elaborate testing 2013-01-23 17:55:08 +0100 Lars Uebernickel (e07deff) * indicator-ng: set name hint to the value of the service file's "Name" field 2013-01-23 17:30:05 +0100 Lars Uebernickel (739daae) * indicator-ng: use base->get_entries to get the invisible ones, too 2013-01-23 17:29:05 +0100 Lars Uebernickel (ac0c809) * indicator-ng: auto start service if it's not running 2013-01-22 18:36:10 +0100 Lars Uebernickel (67323d4) * indicator-ng: properly unset action group when the service disappears 2013-01-21 17:34:44 +0100 Lars Uebernickel (d84d6f7) * Add basic tests for indicator-ng 2013-01-21 17:30:05 +0100 Lars Uebernickel (36e0fea) * Make sure indicator-ng.h is installed 2013-01-21 17:09:55 +0100 Lars Uebernickel (1585adb) * indicator-ng: add getters 2013-01-21 17:04:02 +0100 Lars Uebernickel (4b301ff) * indicator-ng: add indicator_ng_new_for_profile 2013-01-21 16:39:55 +0100 Lars Uebernickel (869d977) * indicator-ng: fix crash (tried to free a string with g_object_unref) 2013-01-21 16:38:11 +0100 Lars Uebernickel (af3ac65) * indicator-ng: always set an accessible description to avoid imminent warning 2013-01-21 10:58:26 +0100 Lars Uebernickel (ca52243) * indicator-ng.h: use local include 2013-01-18 22:18:27 +0100 Lars Uebernickel (3822cf9) * Bump gtk3 dependency for gtk_widget_insert_action_group 2013-01-18 22:17:54 +0100 Lars Uebernickel (aaae4aa) * Only build and use IndicatorNg in the gtk3 build 2013-01-18 19:48:04 +0100 Lars Uebernickel (3a33240) * Add IndicatorNg 2012-11-26 11:55:58 +0000 Didier Roche (e796648) * Add bootstrap message. 2012-11-26 10:33:02 +0100 Didier Roche (7b8e551) * add bootstrap message 2012-11-26 07:32:16 +0000 Ted Gould (810eada) * Import debian/ from lp:~ubuntu-desktop/libindicator/ubuntu. 2012-11-22 14:32:41 -0500 Mathieu Trudel-Lapierre (f77d6dd) * Add and export DPKG_GENSYMBOLS_CHECK_LEVEL. 2012-11-22 12:19:57 -0500 Mathieu Trudel-Lapierre (93e0bd1) * Add the proper Pre-Depends: multiarch to libindicator3-7. 2012-11-22 12:13:37 -0500 Mathieu Trudel-Lapierre (5576bf0) * - Use calls to dh_install per-package to use the right source directories. * debian/*.install: drop the debian/tmp/gtk* path elements and update for multiarch. 2012-11-22 02:31:06 -0500 Mathieu Trudel-Lapierre (094593a) * debian/compat: bump compat level to 9. 2012-11-22 02:30:41 -0500 Mathieu Trudel-Lapierre (1d6bc1d) * Update Vcs-Bzr, Vcs-Browser and add a notice to uploaders. 2012-11-21 15:00:45 -0500 Mathieu Trudel-Lapierre (e16a126) * Add a Build-Depends on gnome-common. 2012-11-21 14:59:47 -0500 Mathieu Trudel-Lapierre (5680639) * Override dh_autoreconf to run autogen.sh and not call configure. 2012-11-21 14:59:05 -0500 Mathieu Trudel-Lapierre (d1e3acb) * Drop Build-Depends on cdbs. 2012-11-21 14:58:08 -0500 Mathieu Trudel-Lapierre (3d69e24) * * debian/rules: - Convert to using the dh9 sequencer. 2012-11-21 14:25:36 -0500 Mathieu Trudel-Lapierre (9ec2a25) * Bump debhelper Build-Depends to (>= 9). 2012-11-21 14:25:01 -0500 Mathieu Trudel-Lapierre (30aa94e) * * debian/control: - Reorganize Build-Depends for clarity. - Update style to be consistent with other indicator stack packages. 2012-11-21 14:21:42 -0500 Mathieu Trudel-Lapierre (7a3c457) * Specify to bzr-builddeb to build the package in split mode. 2012-11-21 14:21:10 -0500 Mathieu Trudel-Lapierre (ac60524) * Import debian/ from lp:~ubuntu-desktop/libindicator/ubuntu 2012-09-19 16:00:57 -0400 Ken VanDine (85dbd2d) * releasing version 12.10.1-0ubuntu1 2012-09-19 15:21:55 -0400 Ken VanDine (96f010d) * Import upstream version 12.10.1 2012-09-19 10:40:00 -0500 Charles Kerr (341548e) * 12.10.1 (refs/bzr/origin/tags/12.10.1) 2012-09-17 11:13:51 +0200 Didier Roche (2f35a94) * releasing version 12.10.0-0ubuntu2 2012-09-17 11:11:33 +0200 Didier Roche (0dc2913) * Backport a fix so that libroffice doesn't hang on on startup (LP: #1045372) 2012-09-12 06:58:57 +0000 Charles Kerr (667fbaf) * In libindicator, remove the cloak/decloak code in IndicatorObject to address Bug #1045372. 2012-09-11 23:25:56 -0500 Charles Kerr (00d0556) * In tests/test-loader and tests/dummy-indicator-visible.c, support hiding & re-showing IndicatorObjectEntries by caching their parent widgetry instead of using gtk_widget_destroy() 2012-09-11 21:25:02 -0500 Charles Kerr (ee19af5) * No newline at end of file 2012-09-11 18:56:09 -0500 Charles Kerr (bf9cf29) * remove the cloak/decloak widget logic 2012-07-12 17:44:58 +0200 Sebastien Bacher (bdeeb47) * releasing version 12.10.0-0ubuntu1 2012-07-12 17:44:39 +0200 Sebastien Bacher (d739399) * New upstream release. 2012-07-12 17:36:00 +0200 Sebastien Bacher (edcdb07) * Import upstream version 12.10.0 2012-07-11 13:07:44 -0500 Charles Kerr (b1beb2c) * bump version to 12.10.0 (refs/bzr/origin/tags/12.10.0) 2012-06-19 10:31:49 +0200 Lars Uebernickel (d2f8fce) * merge lp:~charlesk/libindicator/fix-test-sources 2012-06-18 14:33:30 -0500 Charles Kerr (20cafa4) * merge lp:~evgeni/libindicator/multiarch-same-devheaders so that we don't include build-time filenames in comments of the enum header files. 2012-06-18 13:42:53 -0500 Charles Kerr (26dcee4) * fix copy-and-paste error in specifying the tests' source files 2012-06-10 11:16:21 +0200 Evgeni Golov (5d3f97c) * don't include build-time filenames in comments of the enum header files 2012-04-23 13:15:39 -0500 Charles Kerr (1271439) * merge lp:~charlesk/libindicator/cxx to constify the constructors for indicator_service_manager 2012-04-22 14:24:13 -0500 Charles Kerr (670e6e0) * indiator_service_manager_new*()'s name arguments were gchar*, make them const gchar* 2012-04-11 14:13:19 -0400 Ken VanDine (f26bd55) * releasing version 0.5.0-0ubuntu1 2012-04-11 13:09:40 -0400 Ken VanDine (c606a9a) * * New upstream release. * Validate images in image_helper_update() (LP: #946408) 2012-04-11 10:54:57 -0500 Charles Kerr (752101a) * releasing version 0.5.0-0ubuntu1~ppa1 2012-04-11 10:53:08 -0500 Charles Kerr (499bd67) * * New upstream release. * Validate images in image_helper_update() (LP: #946408) 2012-04-11 10:51:10 -0500 Charles Kerr (21ef9a5) * Import upstream version 0.5.0 2012-04-11 10:50:29 -0500 Charles Kerr (0bd650d) * Sync from Ubuntu Desktop 2012-04-11 10:25:31 -0500 Charles Kerr (1cbe933) * 0.5.0 (tag: 0.5.0, refs/bzr/origin/tags/0.5.0) 2012-04-11 07:49:56 -0500 Charles Kerr (c721d3e) * merge lp:~charlesk/libindicator/lp-946408 to safeguard against invalid images being passed to indicator_image_helper_update() 2012-04-11 01:01:51 -0500 Charles Kerr (bb571a4) * in indicator_image_helper_update(), test the image argument with GTK_IS_IMAGE before using it. 2012-04-05 12:44:30 +0200 Sebastien Bacher (d538aa4) * releasing version 0.4.95-0ubuntu1 2012-04-04 14:53:27 -0500 Ted Gould (696375c) * Fixing a merge artifact 2012-04-04 14:52:14 -0500 Ted Gould (5a163f4) * Merging Ubuntu Desktop 2012-04-04 14:39:18 -0500 Ted Gould (f9220e1) * releasing version 0.4.95-0ubuntu1~ppa1 2012-04-04 14:35:30 -0500 Ted Gould (d431c78) * * New upstream release. * Fix a free that shouldn't be (LP: #969360) * Spelling mistake in error message (LP: #948391) * Add coverage build targets * Fix building AUTHORS and Changelog at dist time 2012-04-04 14:34:11 -0500 Ted Gould (c136bda) * Import upstream version 0.4.95 2012-04-04 14:26:17 -0500 Ted Gould (f75080c) * 0.4.95 (tag: 0.4.95, refs/bzr/origin/tags/0.4.95) 2012-04-03 21:39:27 -0500 Charles Kerr (fae66e8) * merge lp:~allanlesage/libindicator/TDD to remove a dependency on gcovr, move gcov targets to their own makefile, and clean up .gcno files. 2012-04-03 07:50:22 -0500 Charles Kerr (2f67706) * merge lp:~charlesk/libindicator/lp-948391 to fix spelling/grammar errors in an error message. 2012-04-02 18:42:07 -0500 Charles Kerr (f7eab1e) * Fix spelling/grammar errors in an error message. 2012-04-02 08:56:49 -0500 Charles Kerr (96c35f0) * When using g_variant_get("&s...", &string), the string must not be free'd. 2012-04-02 11:09:19 +0200 Sebastien Bacher (4a44539) * releasing version 0.4.94-0ubuntu2 2012-04-02 11:07:25 +0200 Sebastien Bacher (486523c) * Revert r457 it's creating invalid free errors 2012-04-01 21:03:19 +0200 Marco Trevisan (Treviño) (a9c0407) * Setting again the variables as const 2012-04-01 20:54:37 +0200 Marco Trevisan (Treviño) (c4b2952) * Indicator Service Manager: we don't have to free values if got with &s from variant 2012-03-30 09:57:26 -0400 Ken VanDine (5ce6cdf) * releasing version 0.4.94-0ubuntu1 2012-03-30 09:36:28 -0400 Ken VanDine (63d1c95) * * New upstream release. * Fix a leaked GError (LP: #965459) * Fix memory leak when the proxy's name changes. 2012-03-29 13:57:09 -0700 Charles Kerr (28d27ed) * releasing version 0.4.94-0ubuntu1~ppa1 2012-03-29 13:52:21 -0700 Charles Kerr (50933a9) * * New upstream release. * Fix a leaked GError (LP: #965459) * Fix memory leak when the proxy's name changes. 2012-03-29 13:50:56 -0700 Charles Kerr (4ecaca4) * Import upstream version 0.4.94 2012-03-29 13:49:34 -0700 Charles Kerr (452f2ab) * Sync from Ubuntu Desktop 2012-03-29 13:32:32 -0700 Charles Kerr (5a839c4) * merge lp:~charlesk/libindicator/fix-disthook to fix auto-generation of AUTHORS and Changelog by looking for 'missing' in the directory where we told AC_CONFIG_AUX_DIR to put it. (tag: 0.4.94, refs/bzr/origin/tags/0.4.94) 2012-03-29 13:16:19 -0700 Charles Kerr (2eb70f4) * look for 'missing' in ac_aux_dir rather than top_srcdir. 2012-03-28 14:17:33 -0700 Charles Kerr (922d781) * 0.4.94 2012-03-27 16:33:31 -0500 Allan LeSage (76fc7f0) * Removed gcovr dependency, moved coverage targets to own makefile, cleaning up *.gcno. 2012-03-26 09:24:33 -0700 Charles Kerr (603ad6c) * merge lp:~htorque/libindicator/fix-small-leak to fix a GError memory leak reported in lp bug #965459 2012-03-26 15:35:57 +0200 Hernando Torque (3440ebe) * Free GError. 2012-03-16 15:39:11 -0500 Charles Kerr (742fa8c) * fix minor memory leak when the proxy name changes 2012-03-08 21:57:54 +0100 Sebastien Bacher (9a23466) * releasing version 0.4.93-0ubuntu1 2012-03-07 14:14:09 -0600 Ted Gould (bbbe42a) * releasing version 0.4.93-0ubuntu1~ppa1 2012-03-07 14:11:47 -0600 Ted Gould (e34b660) * * New upstream release. * Fix branching past initialization of variables (LP: #939061) * Support new FD.o Desktop Actions (LP: #942042) * Fix valgrind error on unload (LP: #719457) 2012-03-07 14:08:40 -0600 Ted Gould (67872e2) * Import upstream version 0.4.93 2012-03-07 14:08:16 -0600 Ted Gould (c83d72a) * Merging in U. Desktop 2012-03-07 14:01:26 -0600 Ted Gould (18d670b) * 0.4.93 (tag: 0.4.93, refs/bzr/origin/tags/0.4.93) 2012-03-05 13:13:33 -0600 Charles Kerr (9dcb929) * merge lp:~ted/libindicator/lp719457 for Bug #719457 2012-03-02 10:55:05 -0600 Ted Gould (039c7d8) * Attaching bug 2012-03-02 10:54:50 -0600 Ted Gould (c3bd07e) * Copying the name before using it to remove as it seems that the unwatch can cause the name to be free'd in some cases. Odd, but valgrind can find it 2012-03-02 10:01:59 -0600 Ted Gould (dbaf540) * Support new FD.o Desktop Actions 2012-03-02 13:18:44 +0100 Sebastien Bacher (94c7bd6) * releasing version 0.4.92-0ubuntu2 2012-03-02 12:08:04 +0100 Sebastien Bacher (0c90dd3) * Backport support for the fdo desktop action spec, that's required to get unity lists to work with the new syntax (lp: #942042) 2012-02-29 17:50:40 -0600 Charles Kerr (54a3d1d) * lp:~charlesk/libindicator/fix-939061 2012-02-29 14:58:03 -0600 Charles Kerr (9e2278a) * silence Coverity warning "PW.BRANCH_PAST_INITIALIZATION - CID 10615" reported in Bug #939061 2012-02-29 14:55:23 -0600 Charles Kerr (b645480) * tweak: use g_clear_object() instead of if-not-null-g_object_unref() 2012-02-27 15:08:19 -0600 Ted Gould (a69f559) * Get the right group in exec too! 2012-02-27 15:05:40 -0600 Ted Gould (f6d6509) * Handling the different group names when getting the name as well 2012-02-27 15:03:43 -0600 Ted Gould (8c71262) * Update test desktop file 2012-02-27 14:40:08 -0600 Ted Gould (19c48bd) * Creating a warning for the legacy support 2012-02-27 14:38:21 -0600 Ted Gould (7d3e660) * Adding a value for whether it should use the TargetEnvironment, I'm removing the warning because we don't care to fix old stuff anymore 2012-02-27 14:34:52 -0600 Ted Gould (52c42ef) * Use the appropriate list of nicks and groups to find our data now 2012-02-27 14:25:21 -0600 Ted Gould (4baf9b7) * Figure out what kind of actions we have 2012-02-27 13:39:44 -0600 Ted Gould (f7e5502) * Adding a state variable to track what kind of actions we have 2012-02-27 13:32:43 -0600 Ted Gould (a02d4de) * Attaching bug 2012-02-27 13:32:25 -0600 Ted Gould (55b0614) * Changing our defines around to make sure to mark things the way that we think about them. 2012-02-23 12:28:01 +0100 Sebastien Bacher (f6f9209) * releasing version 0.4.92-0ubuntu1 2012-02-23 12:26:18 +0100 Sebastien Bacher (efe75e4) * Merging shared upstream rev into target branch. 2012-02-23 12:26:17 +0100 Sebastien Bacher (cfa1adf) * Prepared upstream tree for merging into target branch. 2012-02-23 12:25:39 +0100 Sebastien Bacher (164055c) * Merging shared upstream rev into target branch. 2012-02-23 12:25:38 +0100 Sebastien Bacher (e305ff2) * Prepared upstream tree for merging into target branch. 2012-02-23 00:27:41 -0600 Ted Gould (c28e242) * releasing version 0.4.92-0ubuntu1~ppa1 2012-02-23 00:25:48 -0600 Ted Gould (27b2576) * * New upstream release. * Removing unenforcable consts (LP: #937387) * Explicitly add in gmodule as a required library 2012-02-23 00:23:40 -0600 Ted Gould (169093d) * Import upstream version 0.4.92 2012-02-23 00:23:06 -0600 Ted Gould (87c4364) * Merge with U. Desktop 2012-02-23 00:22:12 -0600 Ted Gould (1474099) * Merging shared upstream rev into target branch. 2012-02-23 00:22:12 -0600 Ted Gould (c88ba65) * Prepared upstream tree for merging into target branch. 2012-02-23 00:21:27 -0600 Ted Gould (4de00dd) * Merging shared upstream rev into target branch. 2012-02-23 00:21:27 -0600 Ted Gould (54b8584) * Prepared upstream tree for merging into target branch. 2012-02-23 00:18:35 -0600 Ted Gould (69f15f7) * 0.4.92 (tag: 0.4.92, refs/bzr/origin/tags/0.4.92) 2012-02-22 22:54:56 -0600 Ted Gould (f29a183) * Remove unenforcable consts 2012-02-22 12:19:26 -0600 Ted Gould (fef88fa) * Attaching bug 2012-02-22 12:18:01 -0600 Ted Gould (975ee36) * Removing unenforcable consts 2012-02-15 13:13:03 +0100 Sebastien Bacher (55ae526) * releasing version 0.4.91-0ubuntu3 2012-02-15 13:09:01 +0100 Sebastien Bacher (a6436f6) * Restore revision dropped by error, not sure what happened with the vcs 2012-02-15 12:46:44 +0100 Sebastien Bacher (461dbdc) * releasing version 0.4.91-0ubuntu2 2012-02-15 12:45:46 +0100 Sebastien Bacher (2ac2e54) * Merging shared upstream rev into target branch. 2012-02-15 12:45:45 +0100 Sebastien Bacher (93e5e7e) * Prepared upstream tree for merging into target branch. 2012-02-14 21:11:44 -0600 Ted Gould (457b502) * releasing version 0.4.91-0ubuntu1~ppa3 2012-02-14 21:10:11 -0600 Ted Gould (4621a45) * Adjusting timeout so it'll build on the buildds too 2012-02-14 20:51:23 -0600 Ted Gould (0cad2e2) * Increasing the test timeout to ensure that's not our issue 2012-02-14 16:48:13 -0600 Ted Gould (e5053ae) * releasing version 0.4.91-0ubuntu1~ppa2 2012-02-14 16:45:43 -0600 Ted Gould (17133c0) * debian/rules: Adding messages 2012-02-14 22:35:40 +0100 Sebastien Bacher (5a2f66b) * releasing version 0.4.91-0ubuntu1 2012-02-14 22:29:50 +0100 Sebastien Bacher (f8e24ae) * Import upstream version 0.4.91 2012-02-14 15:19:23 -0600 Ted Gould (ee6a7f0) * Explicitly listing gmodule as a library we're using 2012-02-14 14:29:53 -0600 Ted Gould (05f46d7) * releasing version 0.4.91-0ubuntu1~ppa1 2012-02-14 14:27:38 -0600 Ted Gould (7f1272a) * * debian/control, debian/rules: * Adding in autoreconf support * Adding a check rule and requiring new build deps 2012-02-14 14:23:06 -0600 Ted Gould (36b39c9) * debian/control, debian/rules: Adding in autoreconf support 2012-02-14 14:21:36 -0600 Ted Gould (eb803e8) * * Upstream Merge * Explicitly add in gmodule as a required library 2012-02-14 14:20:54 -0600 Ted Gould (45aebde) * Explicity add gmodule in the list of required libraries 2012-02-14 11:52:00 -0600 Ted Gould (b2a5f94) * Dropping debian/patches 2012-02-14 11:50:12 -0600 Ted Gould (40274af) * * New upstream release. * Visibility fixes for indicators using that functionality * Ensure that parent_object is more aggressively set * Fix memory leak on groups of items in desktop files 2012-02-14 11:48:37 -0600 Ted Gould (a820ba7) * Import upstream version 0.4.91 (refs/bzr/origin/tags/upstream-0.4.91) 2012-02-14 11:48:17 -0600 Ted Gould (ca8b363) * Merge with Ubuntu Desktop 2012-02-14 11:35:11 -0600 Ted Gould (f099181) * 0.4.91 (tag: 0.4.91, refs/bzr/origin/tags/0.4.91) 2012-02-13 20:07:33 +0100 Lars Uebernickel (2a6c388) * indicator_object_set_visible: only emit entry-{added,removed} when visibility actually changed 2012-02-13 19:38:10 +0100 Lars Uebernickel (b2ca0db) * indicator_object_dispose: remove unneeded list of entries 2012-02-13 19:15:03 +0100 Lars Uebernickel (73c0659) * indicator_object_dispose: use _set_visible instead of reimplementing it 2012-02-13 19:08:27 +0100 Lars Uebernickel (e7780ac) * indicator_object_set_visible: no need to check for ENTRY_INIT 2012-02-12 13:40:21 +0100 Lars Uebernickel (5f599a8) * indicator_object_set_visible: only emit entry-{added,removed} when visibility actually changed 2012-02-10 11:06:22 -0600 Ted Gould (233fdd7) * Free groupname after usage 2012-02-09 11:05:55 -0200 Daniel d'Andrada (2375490) * Plug memory leak in parse_keyfile function. 2012-02-03 09:48:05 -0600 Ted Gould (238865c) * Be more agressive in ensureing the parent_object value is available everywhere. 2012-02-03 15:34:07 +0100 Marco Trevisan (Treviño) (7ae413b) * tests, DummyIndicatorSignaler: free the allocated memory. 2012-01-26 00:37:14 -0500 Ken VanDine (b339871) * releasing version 0.4.90-0ubuntu4 (tag: 0.4.90-0ubuntu4, refs/bzr/origin/tags/0.4.90-0ubuntu4) 2012-01-25 18:15:08 -0500 Ken VanDine (a98a0b6) * releasing version 0.4.90-0ubuntu3 (tag: 0.4.90-0ubuntu3, refs/bzr/origin/tags/0.4.90-0ubuntu3) 2012-01-25 18:11:43 +0100 Marco Trevisan (Treviño) (c87aff7) * Test loader: check also for parent changes 2012-01-25 18:11:07 +0100 Marco Trevisan (Treviño) (39cf870) * Tests: update dummy signaler to work with real IndicatorObjectEntry 2012-01-25 18:10:29 +0100 Marco Trevisan (Treviño) (1baaf28) * IndicatorObject: update object parent in any case. 2012-01-25 08:32:22 -0600 Ted Gould (8df8585) * Merging with U. Desktop 2012-01-25 12:22:12 +0100 Marco Trevisan (Treviño) (c26badd) * Added better parent_object tests. 2012-01-25 12:21:51 +0100 Marco Trevisan (Treviño) (c9df18b) * Indicator-Object: update the parent_object value only if the entry is valid. 2012-01-25 11:55:37 +0100 Marco Trevisan (Treviño) (0373d6f) * IndicatorObject: correctly initialize the parent object. 2012-01-24 21:50:55 -0500 Ken VanDine (118a95a) * releasing version 0.4.90-0ubuntu2 (tag: 0.4.90-0ubuntu2, refs/bzr/origin/tags/0.4.90-0ubuntu2) 2012-01-24 19:30:08 -0500 Ken VanDine (6659abf) * releasing version 0.4.90-0ubuntu1 (tag: 0.4.90-0ubuntu1, refs/bzr/origin/tags/0.4.90-0ubuntu1) 2012-01-24 12:19:38 -0500 Ken VanDine (2d9e6ff) * * New upstream release. * Support hiding and showing indicators * Track the parent object in the entry * Adding activate function to include Window ID * debian/control: Bumping ABI version of lib 2012-01-24 10:23:26 -0600 Ted Gould (c2596f7) * Silent bump 2012-01-24 10:17:02 -0600 Ted Gould (f64689a) * releasing version 0.4.90-0ubuntu1~ppa1 2012-01-24 10:15:31 -0600 Ted Gould (f131f1f) * debian/control: Bumping ABI version of lib 2012-01-24 10:10:15 -0600 Ted Gould (b00b35a) * * New upstream release. * Support hiding and showing indicators * Track the parent object in the entry * Adding activate function to include Window ID 2012-01-24 10:07:33 -0600 Ted Gould (e81d0ec) * Import upstream version 0.4.90 (refs/bzr/origin/tags/upstream-0.4.90) 2012-01-24 09:54:13 -0600 Ted Gould (fe22121) * Merging from U. Desktop 2012-01-24 09:47:32 -0600 Ted Gould (dbccdd5) * 0.4.90 (tag: 0.4.90, refs/bzr/origin/tags/0.4.90) 2012-01-23 22:42:02 -0600 Ted Gould (6f3976c) * Bumping the ABI version 2012-01-23 17:00:29 -0600 Ted Gould (23e9995) * Add visibility concept to the default indicator object 2012-01-23 16:52:52 -0600 Ted Gould (7935501) * Put the parent pointer in the entry struct to make it easier for the implementers of the panel side 2012-01-23 08:55:12 -0600 Charles Kerr (95daf10) * "bzr merge lp:indicator" + conflict resolution in tests suite 2012-01-23 05:39:50 -0600 Charles Kerr (4f4190f) * another iteration of the indicator-object visibility support patch, incorporating ideas from discussion with ted 2012-01-20 14:02:16 -0600 Charles Kerr (8cb8b9f) * fix bugs in IndicatorObject's visibility support. 2012-01-19 11:55:47 -0600 Ted Gould (a1ed503) * Checking to ensure the parent_object pointer gets set 2012-01-19 11:48:32 -0600 Ted Gould (e14c087) * Adding a warning for entries that do not set their parent_object 2012-01-19 11:46:28 -0600 Ted Gould (f2f9c5b) * Set the parent_object on the default entry 2012-01-19 11:44:37 -0600 Ted Gould (8a739e1) * Adding a parent object pointer to the entry 2012-01-19 10:41:20 -0600 Ted Gould (1cf6a97) * Adding a window ID function to pass the window ID 2012-01-16 03:59:29 +0100 Ted Gould (6a0f41a) * Moving the function into the tester to making linking simpler 2012-01-16 03:45:00 +0100 Ted Gould (f898563) * Adding a test to look to make sure the fallback works 2012-01-14 10:51:55 +0100 Ted Gould (2dfe3ff) * Add a function to swap out the window entry handler 2012-01-14 10:33:29 +0100 Ted Gould (da798a2) * Getting the header in dist 2012-01-14 10:30:22 +0100 Ted Gould (7586398) * Adding a test functioin for the entry func demmy indicator 2012-01-14 10:07:43 +0100 Ted Gould (b7c8a63) * Mark the entry functions as called 2012-01-13 17:00:47 +0100 Ted Gould (efcb3e6) * Setting up entry functions 2012-01-13 16:52:42 +0100 Ted Gould (530b211) * Adding some public values to know if functions were called 2012-01-13 16:48:52 +0100 Ted Gould (347ab41) * Moving things into a shared header 2012-01-13 16:38:58 +0100 Ted Gould (68c1666) * Build a new dummy indicator 2012-01-13 16:09:40 +0100 Ted Gould (e3ce551) * Adding test coverage checking 2012-01-13 15:34:48 +0100 Ted Gould (0419bac) * Clearing the entry function pointers 2012-01-13 15:25:42 +0100 Ted Gould (a88097a) * Handling the activate_window function and going up the stack 2012-01-13 15:07:18 +0100 Ted Gould (a6ed65a) * Documenting what this stuff does 2012-01-13 15:01:01 +0100 Ted Gould (2bb19db) * Adding an activate window function, that can also be virtual! 2012-01-13 13:04:25 +0100 Ted Gould (976209f) * Ignoring all the stuff we build 2012-01-13 13:00:34 +0100 Ted Gould (b58d9bf) * Putting the GTK3 headers in a different directory 2012-01-13 12:56:50 +0100 Ted Gould (c3c1ebb) * Adding ability to disable tests 2012-01-13 05:54:17 +0100 Charles Kerr (c52fbaa) * Better implementation. 2012-01-12 14:51:30 +0100 Charles Kerr (d3392a9) * initial revision for GSettings/GtkMenu visibility support 2011-12-06 15:21:45 -0600 Allan LeSage (b1aebe5) * Added coverage reporting via gcov config and targets. 2011-11-22 14:39:48 -0500 Ken VanDine (30ab1ed) * * debian/control - set ubuntu-desktop VCS and maintainer 2011-11-22 14:37:23 -0500 Ken VanDine (f1c0aaf) * releasing version 0.4.1-1 (tag: 0.4.1-1, refs/bzr/origin/tags/0.4.1-1) 2011-11-20 02:19:45 +0100 György Balló (d126352) * Use different directory for headers of gtk3 library 2011-11-20 02:17:19 +0100 György Balló (c0ac60b) * Make building tests optional 2011-09-28 12:14:30 -0400 Ken VanDine (5834d28) * releasing version 0.4.1-0ubuntu1 (tag: 0.4.1-0ubuntu1, refs/bzr/origin/tags/0.4.1-0ubuntu1) 2011-09-28 12:11:57 -0400 Ken VanDine (1a1fa5b) * * New upstream release. * Ensure loader doesn't use menu proxy 2011-09-28 10:51:11 -0500 Ted Gould (80e619f) * releasing version 0.4.1-0ubuntu1~ppa1 2011-09-28 10:48:44 -0500 Ted Gould (86103c5) * * New upstream release. * Ensure loader doesn't use menu proxy 2011-09-28 10:48:20 -0500 Ted Gould (e36cd22) * Import upstream version 0.4.1 (refs/bzr/origin/tags/upstream-0.4.1) 2011-09-28 10:47:59 -0500 Ted Gould (e33473c) * Merge U. Desktop 2011-09-28 10:45:04 -0500 Ted Gould (a5c7874) * 0.4.1 (tag: 0.4.1, refs/bzr/origin/tags/0.4.1) 2011-09-20 09:37:24 -0700 Ken VanDine (4993a3c) * releasing version 0.4.0-0ubuntu1 (tag: 0.4.0-0ubuntu1, refs/bzr/origin/tags/0.4.0-0ubuntu1) 2011-09-20 08:55:00 -0700 Ken VanDine (ceba790) * * New upstream release. * Add libm to linking to fix FTBFS (LP: #840514) 2011-09-20 10:12:21 -0500 Ted Gould (6c215ec) * Make sure our menus don't get proxied 2011-09-19 21:54:34 -0500 Ted Gould (2867575) * releasing version 0.4.0-0ubuntu1~ppa1 2011-09-19 21:44:03 -0500 Ted Gould (0ab41b7) * * New upstream release. * Add libm to linking to fix FTBFS (LP: #840514) 2011-09-19 21:43:09 -0500 Ted Gould (0b4f5b3) * Import upstream version 0.4.0 (refs/bzr/origin/tags/upstream-0.4.0) 2011-09-19 21:42:40 -0500 Ted Gould (8ec147c) * Merging in U. Desktop 2011-09-19 21:33:28 -0500 Ted Gould (f8f310d) * 0.4.0 (tag: 0.4.0, refs/bzr/origin/tags/0.4.0) 2011-09-16 16:50:46 -0500 Ted Gould (fff5af0) * Add in libm 2011-09-03 19:48:30 +0200 Evgeni Golov (240eaf6) * find and link libm 2011-09-01 14:22:14 -0700 Steve Langasek (130ebff) * releasing version 0.3.93-0ubuntu2 (tag: 0.3.93-0ubuntu2, refs/bzr/origin/tags/0.3.93-0ubuntu2) 2011-09-01 14:22:10 -0700 Steve Langasek (604acbf) * Drop the Breaks: against old versions of libindicator and libindicator3; there are no file conflicts between the libraries, so this doesn't accurately reflect the package relationships but does make it harder to calculate upgrades from natty. LP: #839098. 2011-08-11 21:27:40 +0200 Sebastien Bacher (4db9d2e) * releasing version 0.3.93-0ubuntu1 (tag: 0.3.93-0ubuntu1, refs/bzr/origin/tags/0.3.93-0ubuntu1) 2011-08-11 21:20:42 +0200 Sebastien Bacher (871b89e) * * New upstream release. 2011-08-11 09:44:48 -0500 Ted Gould (5600252) * releasing version 0.3.93-0ubuntu1~ppa1 2011-08-11 09:43:07 -0500 Ted Gould (0aaf53b) * * New upstream release. * Rescan icon theme if icon can't be loaded 2011-08-11 09:42:37 -0500 Ted Gould (7b63153) * Import upstream version 0.3.93 (refs/bzr/origin/tags/upstream-0.3.93) 2011-08-11 09:17:29 -0500 Ted Gould (e2b7e82) * 0.3.93 (tag: 0.3.93, refs/bzr/origin/tags/0.3.93) 2011-08-10 21:11:23 -0500 Ted Gould (0a66155) * Check a reload of the icon theme if needed 2011-08-02 15:37:50 +0200 Aurelien Gateau (1790510) * Ask GTK to rescan the icon theme if the wanted icon cannot be found. 2011-07-29 09:13:48 -0500 Ted Gould (a51845f) * Don't make a new include directory based on GTK version 2011-07-21 13:14:27 -0400 Ken VanDine (8ee4d7d) * releasing version 0.3.92-0ubuntu1 (tag: 0.3.92-0ubuntu1, refs/bzr/origin/tags/0.3.92-0ubuntu1) 2011-07-21 13:06:29 -0400 Ken VanDine (24063df) * setting to UNRELEASED 2011-07-21 12:30:30 -0400 Ken VanDine (7c76a87) * * New upstream release. * Adding support for a secondary activate signal 2011-07-21 10:39:12 -0500 Ted Gould (23239f8) * releasing version 0.3.92-0ubuntu1~ppa1 2011-07-21 10:37:35 -0500 Ted Gould (6c59bf9) * Merge with U. Desktop 2011-07-21 10:19:28 -0500 Ted Gould (056b8a5) * * New upstream release. * Adding support for a secondary activate signal 2011-07-21 10:19:02 -0500 Ted Gould (5d457c5) * Import upstream version 0.3.92 (refs/bzr/origin/tags/upstream-0.3.92) 2011-07-21 10:04:21 -0500 Ted Gould (e27e7f6) * Making sure the lib builds before the tests or tools 2011-07-21 10:00:54 -0500 Ted Gould (0cee12c) * 0.3.92 (tag: 0.3.92, refs/bzr/origin/tags/0.3.92) 2011-07-21 09:18:42 -0500 Ted Gould (d3de40a) * Adding in secondary activate support 2011-07-21 09:17:41 -0500 Ted Gould (4234bd3) * Dropping the x and y paramaters from the secondary activate signal 2011-07-15 09:43:58 -0400 Ken VanDine (69b8236) * releasing version 0.3.91-0ubuntu1 (tag: 0.3.91-0ubuntu1, refs/bzr/origin/tags/0.3.91-0ubuntu1) 2011-07-15 09:00:15 -0400 Ken VanDine (2801a02) * * New upstream release. * Fix signals with NULL entries in the loader * Adding a comment for setting up debugging options * Adding annotations for GIR files * Fixing watchers hashtable to detect when we have none * Fix testing so no tests are XFAIL anymore * Adding a replace mode for testing indicator services * Watching new services when the name switches 2011-07-14 13:37:44 -0500 Ted Gould (8641c27) * releasing version 0.3.91-0ubuntu1~ppa1 2011-07-14 13:34:38 -0500 Ted Gould (d2d9780) * * New upstream release. * Watching new services when the name switches 2011-07-14 13:33:11 -0500 Ted Gould (6032a84) * Import upstream version 0.3.91 (refs/bzr/origin/tags/upstream-0.3.91) 2011-07-14 13:09:21 -0500 Ted Gould (c6d763c) * 0.3.91 (tag: 0.3.91, refs/bzr/origin/tags/0.3.91) 2011-07-14 13:08:31 -0500 Ted Gould (a6ea476) * Fixing the libindicator test suite 2011-07-12 15:23:50 -0500 Ted Gould (445e65a) * Adding an env variable to put a service in replace mode 2011-07-12 14:36:45 -0500 Ted Gould (7989399) * releasing version 0.3.90-0ubuntu2~ppa2 2011-07-12 14:35:40 -0500 Ted Gould (45d7404) * * Upstream Merge * Watching new services when the name switches 2011-07-12 14:34:50 -0500 Ted Gould (2e66ca5) * Watching when we do name switches 2011-07-12 10:59:17 -0500 Ted Gould (aad5364) * releasing version 0.3.90-0ubuntu2~ppa1 2011-07-12 10:56:46 -0500 Ted Gould (37c5aa9) * Adding a replace mode for testing indicator services 2011-07-12 10:55:10 -0500 Ted Gould (522f3c0) * * Fixing watchers hashtable to detect when we have none * Fix testing so no tests are XFAIL anymore 2011-07-12 10:54:18 -0500 Ted Gould (3d6738f) * * Upstream Merge * Fix signals with NULL entries in the loader * Adding a comment for setting up debugging options * Adding annotations for GIR files 2011-07-12 10:50:11 -0500 Ted Gould (8b9fa18) * Merging in U. Desktop 2011-07-12 10:46:35 -0500 Ted Gould (1838bfc) * Adding in the shutdown function 2011-07-12 10:43:45 -0500 Ted Gould (5de36e3) * In replace mode we need to ask the other guy to shutdown and still wait for the name a bit. 2011-07-12 10:14:12 -0500 Ted Gould (b412bfe) * Adding in a property for being in replace mode 2011-07-11 17:01:12 -0500 Ted Gould (64c3e2e) * Cleaning up removal of watchers as the string was getting free'd before it could get used to remove the entry from the hashtable. Now using a destroy function as that is possible with GDBus but wasn't with dbus-glib 2011-07-11 16:34:48 -0500 Ted Gould (269f1a1) * Define the bus well known type in the session.conf file 2011-07-11 16:06:10 -0500 Ted Gould (0c3a685) * Add the PC file instead of replace it 2011-07-11 16:00:12 -0500 Ted Gould (ee27186) * Handle NULL entries without crashing 2011-07-09 03:39:10 +0200 Marco Trevisan (Treviño) (6f1c8e0) * Added support for secondary activate signal: i.e. middle-click 2011-07-07 23:38:34 -0500 Ted Gould (ca29a76) * Installing the debugging env entries in shared directory instead of the executable one. 2011-07-07 23:36:22 -0500 Ted Gould (2016fdf) * Fixing doc string 2011-07-07 23:34:49 -0500 Ted Gould (d7f14c3) * Anotating the get entires function properly. 2011-07-08 03:03:00 +0200 Marco Trevisan (Treviño) (5f78a77) * Merging with trunk 2011-07-08 10:39:59 +1000 Robert Ancell (801419b) * Annotate the return value of indicator_object_get_entries so that the type in the list is known, also fix typo in docstring 2011-07-07 11:12:59 -0400 Ken VanDine (b414e0f) * releasing version 0.3.90-0ubuntu1 (tag: 0.3.90-0ubuntu1, refs/bzr/origin/tags/0.3.90-0ubuntu1) 2011-07-07 10:55:25 -0400 Ken VanDine (c292980) * * debian/rules - Simplify the dual builds with cdbs - Fixed package names to match soname * debian/*.install fixed paths to work with the dual builds change * tools/Makefile.in - Fixed path for xsessiondir * debian/control - Fixed package names to match soname 2011-07-07 10:38:35 -0400 Ken VanDine (d23b4e8) * Make xsessiondir = $(pkgdatadir) 2011-07-07 10:11:32 -0400 Ken VanDine (95d709f) * * New upstream release. * Build Fixes * Adding license to test files (LP: #684886) * Bump API/ABI versions appropriately and make easier to edit them in the future * Adding a name-hint to the indicator entries * Merging scroll functions into a single good one (LP: #804618) * debian/*install, control: Changing ABI version number bump in package names * debian/rules: Making GTK2 the special case as GTK3 is default now * debian/*install: Fixing pkgconfig file names 2011-07-07 10:09:23 -0400 Ken VanDine (dedf43d) * Changed to help message for --with-gtk to reflect the new default 2011-07-07 08:30:15 -0500 Ted Gould (352c01a) * Making the box function conditional on GTK version 2011-07-07 08:29:41 -0500 Ted Gould (8677620) * releasing version 0.3.90-0ubuntu1~ppa1 2011-07-07 08:25:26 -0500 Ted Gould (1e09013) * Fixing the box usage 2011-07-07 08:25:11 -0500 Ted Gould (14cdff4) * Handling the right box for the right version of GTK 2011-07-07 00:40:51 -0500 Ted Gould (24123eb) * debian/*install: Fixing pkgconfig file names 2011-07-07 00:38:18 -0500 Ted Gould (f44a6bc) * * debian/*install, control: Changing ABI version number bump in package names * debian/rules: Making GTK2 the special case as GTK3 is default now 2011-07-07 00:32:12 -0500 Ted Gould (709208d) * * New upstream release. * Build Fixes * Adding license to test files (LP: #684886) * Bump API/ABI versions appropriately and make easier to edit them in the future * Adding a name-hint to the indicator entries * Merging scroll functions into a single good one (LP: #804618) 2011-07-07 00:28:26 -0500 Ted Gould (c103417) * Import upstream version 0.3.90 (refs/bzr/origin/tags/upstream-0.3.90) 2011-07-06 16:35:52 -0500 Ted Gould (9cca8d7) * 0.3.90 (tag: 0.3.90, refs/bzr/origin/tags/0.3.90) 2011-07-06 16:35:49 -0500 Ted Gould (cce6c17) * Cleaning up the built pc file 2011-07-06 16:33:09 -0500 Ted Gould (6f2f147) * Switch to using gtk_box_new() 2011-07-06 16:30:16 -0500 Ted Gould (fb0fab8) * Making some test XFAIL and attaching to bugs 2011-07-06 16:14:20 -0500 Ted Gould (b0f700d) * Adding headers to tests 2011-07-06 16:11:29 -0500 Ted Gould (2d3893c) * Adding license info to [ch] files 2011-07-06 15:50:48 -0500 Ted Gould (9a18c1c) * Sync to U. Desktop 2011-07-06 15:34:38 -0500 Ted Gould (02fb5cb) * Changing the API and ABI versioning slightly 2011-07-06 15:34:19 -0500 Ted Gould (e2a324a) * Adding in the name hint for the indicators 2011-07-05 22:29:32 -0500 Ted Gould (173c8a7) * Setting default GTK version to 3 2011-07-05 22:27:48 -0500 Ted Gould (f5575b5) * Changing the pkgconfig file version to include the API version 2011-07-05 16:18:56 -0500 Ted Gould (f837b4b) * Clearing our local name_hint and ensuring we fill it if a function is provided. 2011-07-05 16:15:14 -0500 Ted Gould (26c580f) * Adding a get name hint function as well. 2011-07-05 16:13:05 -0500 Ted Gould (7797504) * Adding the naming hint to the entry structure 2011-07-05 15:05:49 -0500 Ted Gould (746cf4e) * Making the API and ABI versions variables 2011-07-05 14:58:15 -0500 Ted Gould (f3dc285) * Adding another level of .in for the pc files. 2011-07-05 14:29:50 -0500 Ted Gould (5a535d1) * Switching to single scrolling event. 2011-07-02 04:13:05 +0200 Marco Trevisan (Treviño) (8881229) * Merging "scroll" and "scroll-entry" into the "entry-scrolled" signal 2011-06-29 11:06:26 +0100 Ken VanDine (36fb97c) * releasing version 0.3.22-0ubuntu2 (tag: 0.3.22-0ubuntu2, refs/bzr/origin/tags/0.3.22-0ubuntu2) 2011-06-16 13:38:12 -0500 Ted Gould (5fdfbbe) * Updating autotools 2011-06-15 16:18:37 +0100 Javier Jardón (9adf0b1) * configure.ac: Generate xz tarballs with pax format by default 2011-06-15 16:17:57 +0100 Javier Jardón (c8c7cf8) * Update autotools configuration 2011-03-23 16:33:53 -0400 Ken VanDine (052a740) * releasing version 0.3.22-0ubuntu1 (tag: 0.3.22-0ubuntu1, refs/bzr/origin/tags/0.3.22-0ubuntu1) 2011-03-23 13:21:52 -0500 Ted Gould (97e2fed) * releasing version 0.3.22-0ubuntu1~ppa1 2011-03-23 13:19:36 -0500 Ted Gould (47a97e2) * New upstream release. object is in. (LP: #703555) 2011-03-23 13:17:30 -0500 Ted Gould (50607d3) * Import upstream version 0.3.22 (refs/bzr/origin/tags/upstream-0.3.22) 2011-03-23 13:13:28 -0500 Ted Gould (f9f5cee) * 0.3.22 (tag: 0.3.22, refs/bzr/origin/tags/0.3.22) 2011-03-23 10:44:01 -0500 Ted Gould (6f1e50b) * Adding API to know what the environment the indicator is in 2011-03-22 15:03:30 -0500 Ted Gould (a774a41) * releasing version 0.3.21-0ubuntu2~ppa1 2011-03-22 14:59:41 -0500 Ted Gould (118b8f0) * * Upstream Merge * Adding the ability to know the environment the indicator object is in. 2011-03-22 14:59:00 -0500 Ted Gould (a075227) * Sync U. Desktop 2011-03-22 10:57:30 -0500 Ted Gould (a995a11) * Adding a nice little checking function 2011-03-22 10:51:19 -0500 Ted Gould (5712d44) * Adding an environments variable and make a lifecycle for it. 2011-03-22 10:46:53 -0500 Ted Gould (8673e8f) * Getting some stub functions in 2011-03-22 10:42:30 -0500 Ted Gould (baf04be) * Making the environments a list of strings 2011-03-16 15:52:46 -0400 Ken VanDine (1b0f902) * releasing version 0.3.21-0ubuntu1 (tag: 0.3.21-0ubuntu1, refs/bzr/origin/tags/0.3.21-0ubuntu1) 2011-03-16 13:29:24 -0500 Ted Gould (b36a867) * releasing version 0.3.21-0ubuntu1~ppa1 2011-03-16 13:23:15 -0500 Ted Gould (c393bc6) * New upstream release. ∘ Don't check for TargetEnvironment on the desktop group 2011-03-16 13:22:24 -0500 Ted Gould (e2b7096) * Import upstream version 0.3.21 (refs/bzr/origin/tags/upstream-0.3.21) 2011-03-16 13:21:56 -0500 Ted Gould (54ae143) * Merge with U. Desktop 2011-03-16 13:17:22 -0500 Ted Gould (c245779) * 0.3.21 (tag: 0.3.21, refs/bzr/origin/tags/0.3.21) 2011-03-16 11:14:43 -0500 Ted Gould (bbae0db) * Fix checking for target environment on the desktop group 2011-03-16 11:08:28 -0500 Ted Gould (690ffa9) * Make sure not to use TargetEnvironment on the desktop group 2011-03-03 17:21:07 -0500 Ken VanDine (5b51dc5) * releasing version 0.3.20-0ubuntu1 (tag: 0.3.20-0ubuntu1, refs/bzr/origin/tags/0.3.20-0ubuntu1) 2011-03-03 14:02:16 -0600 Ted Gould (879dc15) * releasing version 0.3.20-0ubuntu1~ppa1 2011-03-03 13:59:38 -0600 Ted Gould (53895da) * * New upstream release. * Use the "TargetEnvironment" key in shortcuts 2011-03-03 13:59:07 -0600 Ted Gould (48d8752) * Import upstream version 0.3.20 (refs/bzr/origin/tags/upstream-0.3.20) 2011-03-03 13:52:38 -0600 Ted Gould (12047a5) * 0.3.20 (tag: 0.3.20, refs/bzr/origin/tags/0.3.20) 2011-03-03 12:46:55 -0600 Ted Gould (dd2660b) * Use the TargetEnvironment key 2011-03-03 12:43:50 -0600 Ted Gould (440c893) * Merging in Robert's branch 2011-03-03 12:40:32 -0600 Ted Gould (f0e21d0) * Merge from U. Desktop 2011-03-02 13:57:04 -0600 Ted Gould (61e9b95) * Removing warning that there are no shortcuts, that's a valid thing to have. 2011-03-02 13:55:16 -0600 Ted Gould (9b34e7c) * Adding a target environment key and checking for that over others. 2011-02-23 12:09:25 -0500 Ken VanDine (f417427) * releasing version 0.3.19-0ubuntu3 (tag: 0.3.19-0ubuntu3, refs/bzr/origin/tags/0.3.19-0ubuntu3) 2011-02-23 08:50:33 -0500 Ken VanDine (58dbd1d) * releasing version 0.3.19-0ubuntu2 (tag: 0.3.19-0ubuntu2, refs/bzr/origin/tags/0.3.19-0ubuntu2) 2011-02-23 10:47:05 +1100 unknown (38d7280) * * debian/control: - Use new GTK3 package naming 2011-02-17 15:30:58 -0500 Ken VanDine (04397e7) * releasing version 0.3.19-0ubuntu1 (tag: 0.3.19-0ubuntu1, refs/bzr/origin/tags/0.3.19-0ubuntu1) 2011-02-17 10:27:18 -0600 Ted Gould (6ca27e8) * releasing version 0.3.19-0ubuntu1~ppa1 2011-02-17 10:25:54 -0600 Ted Gould (4447040) * debian/control: Adding Breaks for the previous library rev so that users don't end up with systems that use both. 2011-02-17 10:23:46 -0600 Ted Gould (2dae441) * debian/*: Changing the library major version from 2 to 3 2011-02-17 10:21:37 -0600 Ted Gould (20ef744) * New upstream release. ∘ Adding in a11y description support ∘ Fixing distcheck (LP: #587811) 2011-02-17 10:19:45 -0600 Ted Gould (7840128) * Import upstream version 0.3.19 (refs/bzr/origin/tags/upstream-0.3.19) 2011-02-17 10:19:15 -0600 Ted Gould (6c89ab0) * Merging in U.Desktop 2011-02-17 09:58:30 -0600 Ted Gould (27d0798) * 0.3.19 (tag: 0.3.19, refs/bzr/origin/tags/0.3.19) 2011-02-16 15:44:07 -0600 Ted Gould (0cfa5a8) * Returning reserveds as we're breaking ABI anyway 2011-02-16 15:40:14 -0600 Ted Gould (518f847) * Bumping the major version of the lib and the indicator directory 2011-02-16 15:10:23 -0600 Ted Gould (01fe1bc) * Merging support for having an accessible description 2011-02-16 14:46:36 -0600 Ted Gould (2b78c2f) * Fixing makefile to include all the necissary files in dist 2011-02-15 14:32:46 -0600 Ted Gould (e137b60) * Adding the service.in files as well 2011-02-15 09:30:34 -0600 Sebastien Bacher (27cdc75) * Add session.conf.in to dist 2011-02-08 14:28:50 +1100 Luke Yelavich (a512745) * accessible_name -> accessible_desc in tests as well 2011-02-08 14:25:10 +1100 Luke Yelavich (f593012) * * accessible_name -> accessible_desc to better reflect the use of the content. * Add accessible-desc-update signal so that indicators can tell indicator-applet/unity that the accessible description has changed 2011-02-01 17:49:23 +1100 Luke Yelavich (855d354) * use const gchar for variable and prototype 2011-02-01 17:37:15 +1100 Luke Yelavich (d50d1bb) * Merge from trunk 2011-01-27 16:43:49 -0500 Ken VanDine (326b5bf) * releasing version 0.3.18-0ubuntu1 (tag: 0.3.18-0ubuntu1, refs/bzr/origin/tags/0.3.18-0ubuntu1) 2011-01-27 15:31:07 -0600 Ted Gould (1246174) * releasing version 0.3.18-0ubuntu1~ppa1 2011-01-27 15:29:13 -0600 Ted Gould (4a4ca1e) * debian/rules: Updating shlibs 2011-01-27 15:28:42 -0600 Ted Gould (517ff3c) * * New upstream release. * Adding a signal for scrolling that includes the entry 2011-01-27 15:27:43 -0600 Ted Gould (b22f471) * Import upstream version 0.3.18 (refs/bzr/origin/tags/upstream-0.3.18) 2011-01-27 15:14:17 -0600 Ted Gould (9ac5519) * 0.3.18 (tag: 0.3.18, refs/bzr/origin/tags/0.3.18) 2011-01-27 15:13:47 -0600 Ted Gould (ded377c) * Adding a signal for scrolling that includes the entry 2011-01-27 12:24:00 +0100 Marco Trevisan (Treviño) (d903523) * Removed typo in code. 2011-01-27 00:12:42 +0100 Marco Trevisan (Treviño) (5873fe7) * Added support for "signal-entry" signal 2011-01-18 16:50:37 +1100 Luke Yelavich (9215e19) * Add accessible_name variable in indicator entry structure 2011-01-14 11:09:38 -0600 Ted Gould (7f4196b) * releasing version 0.3.17-0ubuntu1~ppa1 2011-01-14 11:06:08 -0600 Ted Gould (5400cb9) * Sync to Ubuntu Desktop 2011-01-14 11:05:06 -0600 Ted Gould (b5161b9) * * New upstream release. * Fixing catching services dropping off 2011-01-14 11:03:09 -0600 Ted Gould (fde4196) * Import upstream version 0.3.17 (refs/bzr/origin/tags/upstream-0.3.17) 2011-01-14 10:55:39 -0600 Ted Gould (ab0f0ab) * 0.3.17 (tag: 0.3.17, refs/bzr/origin/tags/0.3.17) 2011-01-13 23:03:24 -0600 Ted Gould (afe5430) * Use dbus name watches instead of g-owner-change signal for watching for restarts. 2011-01-13 16:05:26 -0600 Michael Terry (084d3e8) * use actual DBus NameOwnerChanged interface rather than GDBus's higher level signal because that one only works for well-known names 2011-01-13 16:04:53 -0600 Michael Terry (4098f74) * fix basename issue when make is given full path 2011-01-13 15:00:23 -0600 Sebastien Bacher (3814e3d) * releasing version 0.3.16-0ubuntu1 (tag: 0.3.16-0ubuntu1, refs/bzr/origin/tags/0.3.16-0ubuntu1) 2011-01-13 12:49:29 -0600 Ted Gould (b988044) * releasing version 0.3.16-0ubuntu1~ppa1 2011-01-13 12:47:47 -0600 Ted Gould (3f20962) * Syncing to upstream 2011-01-13 12:46:07 -0600 Ted Gould (917061a) * New upstream release. 2011-01-13 12:43:15 -0600 Ted Gould (22a9ca4) * Import upstream version 0.3.16 (refs/bzr/origin/tags/upstream-0.3.16) 2011-01-13 12:41:49 -0600 Ted Gould (ee32949) * 0.3.16 (tag: 0.3.16, refs/bzr/origin/tags/0.3.16) 2011-01-10 12:00:43 -0600 Ted Gould (cf88225) * releasing version 0.3.15-0ubuntu3~ppa2 2011-01-10 11:55:10 -0600 Ted Gould (bd88281) * Final GDBus port 2011-01-10 11:54:57 -0600 Ted Gould (990356c) * debian/control: Dropping dbus-glib as a build-dep 2011-01-10 11:52:43 -0600 Ted Gould (6a01298) * * Upstream Merge: * GDBus Port * autogen.sh * debian/control: Migrating library versions from 1 to 2 2011-01-10 10:21:35 -0600 Ted Gould (38af4e8) * Adding a signal for the menu being closed. 2011-01-10 10:19:52 -0600 Ted Gould (2b6655f) * Fixing doc strings 2011-01-10 10:17:04 -0600 Ted Gould (48db67a) * Porting to GDBus 2011-01-09 17:08:21 -0600 Ted Gould (2bf1edb) * Making the test suite compile again 2011-01-09 17:06:45 -0600 Ted Gould (4a3d68b) * Using the GCancellable to detect if we're already creating a proxy so that we don't do it twice. 2011-01-09 16:58:41 -0600 Ted Gould (664e39b) * Using variant_unref instead of object_unref as it's a variant 2011-01-09 15:44:19 -0600 Ted Gould (a17110e) * Adding a virtual function for closing the menu and a wrapper for it. 2011-01-09 15:03:14 -0600 Ted Gould (f8bea0d) * releasing version 0.3.15-0ubuntu3~ppa2~gdbus1 2011-01-09 15:01:36 -0600 Ted Gould (48fb94f) * Reverting this change made by distro 2011-01-09 14:31:00 -0600 Ted Gould (bea872d) * Marshaller fixes 2011-01-09 14:29:54 -0600 Ted Gould (13a284f) * Might need these 2011-01-09 14:21:19 -0600 Ted Gould (7404425) * debian/control: Migrating library versions from 1 to 2 2011-01-09 14:18:24 -0600 Ted Gould (c6cd9bb) * autogen.sh 2011-01-09 14:14:58 -0600 Ted Gould (6b2531c) * * Upstream Merge: * GDBus Port 2011-01-09 13:56:02 -0600 Ted Gould (8d3f43f) * Making getting the proxy and watching cancellable so that we don't get weird crashes. 2011-01-09 13:34:51 -0600 Ted Gould (2fb32b9) * Adding in the ability to cancel the connection on short lived objects. 2011-01-07 23:40:07 -0600 Ted Gould (9911397) * Removing a test that is broken at a lower level 2011-01-07 23:39:35 -0600 Ted Gould (64ef206) * Disabling the launch test temporarily as it seems broken in GLib 2011-01-07 23:32:20 -0600 Ted Gould (ac7444c) * Getting test suite build fixes 2011-01-07 23:32:06 -0600 Ted Gould (dc5880f) * Syncing up to trunk 2011-01-07 23:27:36 -0600 Ted Gould (2bbbabc) * Switching to the session bus 2011-01-07 23:26:05 -0600 Ted Gould (32515c5) * Out of order parameters. 2011-01-07 23:17:19 -0600 Ted Gould (e837ae5) * Fixing the linking of the tests to the right libs 2011-01-07 22:43:36 -0600 Ted Gould (20f3cbb) * Adding in creating the interface info from the XML files 2011-01-07 22:42:16 -0600 Ted Gould (70bfa89) * Replacing the service proxy with a brand new GDBus one 2011-01-07 20:01:37 -0600 Ted Gould (a6e9bff) * Ignoring the new files 2011-01-07 16:44:03 -0600 Ted Gould (037ed98) * Removing the bus and dbus_proxy variables as we won't need them anymore. 2011-01-07 16:37:42 -0600 Ted Gould (9552d2d) * Switching around headers to the new world order 2011-01-07 16:12:43 -0600 Ted Gould (33afd01) * Instead of setting up a proxy to watch the watcher we're setting up a bus name watch on each one. 2011-01-07 15:35:34 -0600 Ted Gould (991b87f) * Little clean-ups the compiler found now that it's more happy. 2011-01-07 14:58:52 -0600 Ted Gould (2696619) * Switch over to getting the GDBus bus instead of the dbus-glib one 2011-01-07 14:22:17 -0600 Ted Gould (d75fce1) * Removing unused prototypes 2011-01-07 14:21:44 -0600 Ted Gould (4607834) * Fleshing out the bus_method_call functions and tying them into the traditional start points from dbus. 2011-01-07 13:52:27 -0600 Ted Gould (30703e3) * Switching the way that we get a name on dbus and removing the dbus_proxy which was used for this previously. 2011-01-07 12:59:25 -0600 Ted Gould (844bccb) * Setting up the VTable 2011-01-07 12:43:29 -0600 Ted Gould (6ff24e1) * Switching the registration of the object over. 2011-01-07 10:55:06 -0600 Ted Gould (0627083) * Parsing the XML file for the interface description on class init 2011-01-07 10:23:39 -0600 Ted Gould (55ae3fd) * Removing the dbus-glib headers 2011-01-07 10:18:42 -0600 Ted Gould (977ed23) * Changing the way the dbus xml is handled. 2011-01-06 16:41:08 -0600 Ted Gould (f7b8662) * Fixing the GTK3 include path. 2011-01-06 17:22:48 -0500 Ken VanDine (c30de62) * fixed the includedir 2011-01-06 16:09:32 -0600 Ted Gould (8877308) * Fixing build source path and build a GTK3 loader 2011-01-06 15:51:07 -0600 Ted Gould (7a02225) * Adding an important field to relate to when to show the indicator. 2011-01-06 15:08:46 -0600 Ted Gould (71e8858) * Removing dbus-glib from the build 2011-01-04 16:00:14 -0600 Ted Gould (5de24f6) * Adding a function to check whether we should show the indicator with priority. 2011-01-04 15:56:53 -0600 Ted Gould (9497666) * Making it a real signal now 2011-01-04 10:13:15 -0600 Ted Gould (18a5e64) * Adding a show now state to indicate priority. 2010-12-08 14:48:03 -0600 Ted Gould (356af1c) * releasing version 0.3.15-0ubuntu3~ppa1 2010-12-08 14:46:28 -0600 Ted Gould (d85d476) * debian/libindicator3-dev: Adding in the include files for this version of the library. 2010-12-08 14:45:12 -0600 Ted Gould (8dd8160) * debian/libindicator-tools: Removing indicator-loader3 2010-12-08 14:07:18 -0600 Ted Gould (809366b) * Merging in dual build from Ubuntu Desktop 2010-12-06 10:34:22 -0500 Ken VanDine (c5c78aa) * releasing version 0.3.15-0ubuntu2 (tag: 0.3.15-0ubuntu2, refs/bzr/origin/tags/0.3.15-0ubuntu2) 2010-12-03 13:14:42 -0500 Ken VanDine (1bce6ba) * releasing version 0.3.15-0ubuntu1 (tag: 0.3.15-0ubuntu1, refs/bzr/origin/tags/0.3.15-0ubuntu1) 2010-11-24 18:40:11 -0500 Ken VanDine (5247eb9) * removed empty dir 2010-11-24 18:39:14 -0500 Ken VanDine (8915dd5) * * debian/rules - Added build targets to build with gtk3 enabled in additional to default build with gtk2 * debian/control - Updated build depends to support building with gtk+-3.0 - Added dh-autoreconf build depends - Added libindicator3-1, libindicator3-dev, libindicator3-tools binaries binaries * libindicator/Makefile.am and tools/Makefile.am - Fixes needed for building with-gtk=3 2010-11-24 18:00:33 -0500 Ken VanDine (fbef9e6) * Use abs_srcdir to find template files 2010-11-24 18:00:06 -0500 Ken VanDine (b0c8eb1) * Build indicator-loader3 2010-11-24 14:56:35 -0500 Ken VanDine (1a4eadc) * * New upstream release. * Adding a small file to set debugging environment variables * Allowing to build for GTK 2/3 and build parallel libraries * debian/control: Adding package libindicator-debugenv 2010-11-11 14:44:56 -0600 Ted Gould (e87aa8f) * releasing version 0.3.15-0ubuntu1~ppa1 2010-11-11 14:41:24 -0600 Ted Gould (3f4743e) * * New upstream release. * Allowing to build for GTK 2/3 and build parallel libraries 2010-11-11 14:40:03 -0600 Ted Gould (df21e79) * Import upstream version 0.3.15 (refs/bzr/origin/tags/upstream-0.3.15) 2010-11-11 14:39:02 -0600 Ted Gould (7d8375c) * 0.3.15 (tag: 0.3.15, refs/bzr/origin/tags/0.3.15) 2010-11-11 10:20:24 -0600 Ted Gould (db16c1f) * Fixing the ignore file tarball matching 2010-11-11 09:59:36 -0600 Ted Gould (e6a847b) * Merging in the GTK3 basis for the build 2010-11-11 09:38:56 -0600 Ted Gould (10d7e22) * Making sure to get both pc files in the tarball 2010-11-11 09:38:43 -0600 Ted Gould (75672d5) * Checking for deprecations and making sure we check on distcheck 2010-11-11 09:33:27 -0600 Ted Gould (5c848a1) * Putting the GTK3 indicators in a different directory. 2010-11-11 09:26:24 -0600 Ted Gould (40d11e1) * Updating ignore for the GTK3 stuff 2010-11-11 09:25:43 -0600 Ted Gould (69960b2) * Merging in trunk to solve conflicts 2010-10-15 14:56:17 -0500 Ted Gould (273cfca) * releasing version 0.3.14-0ubuntu2~ppa1 2010-10-15 14:54:32 -0500 Ted Gould (d6160f5) * debian/control: Adding package libindicator-debugenv 2010-10-15 14:52:02 -0500 Ted Gould (32b0c1c) * Autogen 2010-10-15 14:48:53 -0500 Ted Gould (917a1ae) * * Upstream Merge * Adding a small file to set debugging environment variables 2010-10-15 14:48:14 -0500 Ted Gould (879ce43) * Merging in Ubuntu desktop 2010-10-15 14:46:03 -0500 Ted Gould (022e4bf) * Adding a file to have the debugging environment variables 2010-10-15 12:41:16 -0500 Ted Gould (b877951) * Add mean comment 2010-10-15 12:39:13 -0500 Ted Gould (0f99ed2) * Adding a number in the name 2010-10-15 12:37:08 -0500 Ted Gould (2e3ea76) * Installing the environment file in the session dir 2010-10-15 12:24:12 -0500 Ted Gould (fc94eab) * All the environment flags we should set for debugging 2010-10-06 10:58:49 -0400 Michael Terry (ecc6acd) * instead of always building gtk2 and gtk3, add a --with-gtk= flag to configure to specify which to build with 2010-09-22 18:09:47 +0200 Didier Roche (948cb8e) * releasing version 0.3.14-0ubuntu1 (tag: 0.3.14-0ubuntu1, refs/bzr/origin/tags/0.3.14-0ubuntu1) 2010-09-22 10:05:24 +0200 Didier Roche (98f804c) * redo removed adjustements 2010-09-21 15:56:00 -0500 Ted Gould (ac662a1) * releasing version 0.3.14-0ubuntu1~ppa1 2010-09-21 15:55:12 -0500 Ted Gould (3acdbe7) * * New upstream release. * Adding a function to signal a menu is shown * Changing indicator directory to '4' 2010-09-21 15:53:41 -0500 Ted Gould (b91aaa9) * Import upstream version 0.3.14 (refs/bzr/origin/tags/upstream-0.3.14) 2010-09-21 15:48:56 -0500 Ted Gould (558a37d) * 0.3.14 (tag: 0.3.14, refs/bzr/origin/tags/0.3.14) 2010-09-21 11:27:07 -0500 Ted Gould (53e57ef) * Changing AUTHORS to mention it's built 2010-09-21 11:17:50 -0500 Ted Gould (25d85a1) * Adding dist hooks for AUTHORS and ChangeLog 2010-09-21 11:13:19 -0500 Ted Gould (137e0f1) * Merging in Debian branch 2010-09-21 09:25:07 -0500 Ted Gould (32bad82) * releasing version 0.3.13-0ubuntu2~ppa2 2010-09-21 09:24:18 -0500 Ted Gould (bd75a2c) * Updating with Desktop version and undoing some changes. 2010-09-21 09:22:02 -0500 Ted Gould (027d9ed) * Setting right VCS directories 2010-09-21 09:17:40 -0500 Ted Gould (6b3ded7) * Drop duplicate changelog entry 2010-09-21 09:14:51 -0500 Ted Gould (c5216ef) * Merge from Ubuntu Desktop 2010-09-21 12:46:31 +0200 Didier Roche (4b5bf4f) * ppa version 2010-09-21 12:45:54 +0200 Didier Roche (f7bd202) * - rename to soname bump * debian/libindicator1.install: rename to soname bump * debian/rules: update MAKESHLIBS_ARGS 2010-09-21 12:36:23 +0200 Didier Roche (5ca6086) * * debian/control: - put the Vcs-Bzr to point the right official branch 2010-09-21 12:35:43 +0200 Didier Roche (c667aaf) * * debian/source: - don't use quilt format, it's making the daily build not working 2010-09-19 14:47:49 -0500 Ted Gould (2af3961) * releasing version 0.3.13-0ubuntu1~ppa3 2010-09-19 14:42:21 -0500 Ted Gould (a006528) * * debian/rules: * Dropping the simple patch system * Changing the shlibs to libindicator1 2010-09-19 13:29:16 -0500 Ted Gould (3e7cedb) * releasing version 0.3.13-0ubuntu1~ppa2 2010-09-19 13:28:14 -0500 Ted Gould (49b7043) * * Upstream Merge * Adding a function to signal a menu is shown * Changing indicator directory to '4' * debian/control: Switching from libindicator0 to libindicator1 as we've broken ABI. Conflicting with libindicator0 to make upgrade simpler as it doesn't make sense to have both installed. * Autogen update 2010-09-19 13:26:12 -0500 Ted Gould (bf38aa8) * Sync to trunk 2010-09-19 13:26:01 -0500 Ted Gould (982c91c) * Adding in the about-to-show signal 2010-09-17 16:41:30 -0500 Ted Gould (daaf146) * debian/control: Replaces really needs to be conflicts. You don't want both of these. 2010-09-17 09:52:32 -0500 Ted Gould (8d7fd13) * releasing version 0.3.13-0ubuntu1~ppa2~ats3 2010-09-17 09:51:48 -0500 Ted Gould (e51d89f) * Autogen update 2010-09-17 09:30:36 -0500 Ted Gould (aafdfdf) * releasing version 0.3.13-0ubuntu1~ppa2~ats2 2010-09-17 09:17:23 -0500 Ted Gould (fb8a5c2) * * Upstream Merge * Making the library different 2010-09-17 09:16:17 -0500 Ted Gould (03641dc) * Adding some version information so we don't need a conflicts 2010-09-16 16:40:10 -0500 Ted Gould (5be1cb6) * releasing version 0.3.13-0ubuntu1~ppa2~ats1 2010-09-16 16:37:55 -0500 Ted Gould (7cabb61) * Changing indicator directory to '4' 2010-09-16 16:37:08 -0500 Ted Gould (99dc263) * Changing indicator directory to '4' 2010-09-16 16:36:21 -0500 Ted Gould (afe60bd) * debian/control: Switching from libindicator0 to libindicator1 as we've broken ABI. 2010-09-16 16:34:21 -0500 Ted Gould (ebe26f6) * * Upstream Merge * Adding a function to signal a menu is shown 2010-09-16 16:15:31 -0500 Ted Gould (6269aec) * Creating a callback on the loader to signal the event press down to the entry. 2010-09-16 16:09:26 -0500 Ted Gould (daffbe6) * Fleshing out the entry activate function 2010-09-16 16:06:41 -0500 Ted Gould (64db4d0) * Breaking the ABI and adding a subclassable function. 2010-09-16 15:56:50 -0500 Ted Gould (90b4c19) * Adding a function to push activate back down. 2010-09-15 14:02:22 -0400 Ken VanDine (617263e) * releasing version 0.3.13-0ubuntu1 (tag: 0.3.13-0ubuntu1, refs/bzr/origin/tags/0.3.13-0ubuntu1) 2010-09-15 11:46:43 -0500 Ted Gould (0bcacdc) * releasing version 0.3.13-0ubuntu1~ppa1 2010-09-15 11:45:14 -0500 Ted Gould (a2df60e) * New upstream release. 2010-09-15 11:44:34 -0500 Ted Gould (b675da7) * Import upstream version 0.3.13 (refs/bzr/origin/tags/upstream-0.3.13) 2010-09-15 11:42:57 -0500 Ted Gould (bc8ba95) * 0.3.13 (tag: 0.3.13, refs/bzr/origin/tags/0.3.13) 2010-09-15 11:37:00 -0500 Ted Gould (c587ca3) * Printout on menu showing in the loader 2010-09-15 08:58:07 -0500 Ted Gould (b933e7c) * Putting a printout in for showing menus. 2010-09-14 10:57:35 -0500 Ted Gould (74b347a) * releasing version 0.3.12-0ubuntu2~ppa1 2010-09-14 10:56:53 -0500 Ted Gould (ed40c3c) * Flipping PPA version around 2010-09-14 10:56:07 -0500 Ted Gould (06c1df5) * Merge with Ubuntu Desktop 2010-09-14 10:54:25 -0500 Ted Gould (f09d026) * releasing version 0.3.12-0ubuntu1~ppa2 2010-09-14 10:53:40 -0500 Ted Gould (4e26272) * * Upstream Merge * Adding a menu_show signal 2010-09-14 10:52:18 -0500 Ted Gould (f0cd004) * Adding a menu_show signal 2010-09-14 09:55:16 -0500 Ted Gould (69221d8) * Adding in the signal for the menu showing 2010-09-14 09:51:06 -0500 Ted Gould (06b5084) * Forgot the signal name 2010-09-14 09:50:09 -0500 Ted Gould (98ec2f3) * Adding slot for the menu show signal 2010-08-18 12:48:09 -0400 Ken VanDine (ab54852) * releasing version 0.3.12-0ubuntu1 (tag: 0.3.12-0ubuntu1, refs/bzr/origin/tags/0.3.12-0ubuntu1) 2010-08-18 11:05:54 -0500 Ted Gould (8839b12) * releasing version 0.3.12-0ubuntu1~ppa1 2010-08-18 11:04:26 -0500 Ted Gould (6152054) * Merging in Ubuntu Desktop branch 2010-08-18 11:02:28 -0500 Ted Gould (d097561) * * New upstream release. * Removing a g_error that was breaking Unity on failed icons 2010-08-18 11:01:43 -0500 Ted Gould (5c85a79) * Import upstream version 0.3.12 (refs/bzr/origin/tags/upstream-0.3.12) 2010-08-18 10:59:48 -0500 Ted Gould (7df0fe9) * 0.3.12 (tag: 0.3.12, refs/bzr/origin/tags/0.3.12) 2010-08-18 10:57:05 -0500 Ted Gould (3a8fac7) * Fixing a g_error so we don't kill unity 2010-08-16 09:14:49 -0500 Ted Gould (6878f17) * Changing the message to a warning and clearing the GtkImage. 2010-08-13 12:02:59 -0500 Ted Gould (6a055d8) * Adding debug flag 2010-08-13 11:57:45 +0200 Sebastien Bacher (79f7355) * releasing version 0.3.11-0ubuntu2 (tag: 0.3.11-0ubuntu2, refs/bzr/origin/tags/0.3.11-0ubuntu2) 2010-08-13 10:17:33 +0200 Mikkel Kamstrup Erlandsen (89924de) * Add an --enable-debug flag to configure script that forces a -g to gcc 2010-08-12 16:45:05 -0400 Ken VanDine (25e77dc) * releasing version 0.3.11-0ubuntu1 (tag: 0.3.11-0ubuntu1, refs/bzr/origin/tags/0.3.11-0ubuntu1) 2010-08-12 14:42:49 -0500 Ted Gould (1c80632) * releasing version 0.3.11-0ubuntu1~ppa1 2010-08-12 14:42:07 -0500 Ted Gould (ccf75ca) * * New upstream release. * Allowing absolute paths in the image name (LP: #564034) 2010-08-12 14:41:09 -0500 Ted Gould (94a9465) * Import upstream version 0.3.11 (refs/bzr/origin/tags/upstream-0.3.11) 2010-08-12 14:40:42 -0500 Ted Gould (53265a3) * 0.3.11 (tag: 0.3.11, refs/bzr/origin/tags/0.3.11) 2010-08-12 14:37:24 -0500 Ted Gould (e9c09c5) * Allowing for absolute file names for icons. 2010-08-09 10:41:11 +0100 Karl (bec9f56) * Added absolute filename fixes 2010-07-25 12:09:27 +0200 Evgeni Golov (ff06597) * * Merging new upstream release from Ubuntu. * New upstream release. * Fixing unwatching crash (LP: #603489) * Adding configurable timeout for slow test systems (tag: 0.3.10-1, refs/bzr/origin/tags/0.3.10-1) 2010-07-25 12:08:03 +0200 Evgeni Golov (21ba038) * Merge lp:~ubuntu-desktop/libindicator/ubuntu * New upstream release. * Fixing unwatching crash (LP: #603489) * Adding configurable timeout for slow test systems 2010-07-15 12:17:31 -0500 Ted Gould (13ebc6d) * Merge from Debian 2010-07-15 12:15:40 -0500 Ted Gould (e5080c7) * Updating to Ubuntu Desktop 2010-07-15 11:55:34 -0400 Ken VanDine (8c56a89) * releasing version 0.3.10-0ubuntu1 (tag: 0.3.10-0ubuntu1, refs/bzr/origin/tags/0.3.10-0ubuntu1) 2010-07-15 10:02:59 -0500 Ted Gould (c6b0ab3) * releasing version 0.3.10-0ubuntu1~ppa1 2010-07-15 10:02:16 -0500 Ted Gould (ae07d57) * * New upstream release. * Fixing unwatching crash (LP: #603489) * Adding configurable timeout for slow test systems * Merged in fix for (LP: #603489) 2010-07-15 09:58:36 -0500 Ted Gould (081637a) * Import upstream version 0.3.10 (refs/bzr/origin/tags/upstream-0.3.10) 2010-07-15 09:58:13 -0500 Ted Gould (6c7db76) * Sync with ubuntu desktop 2010-07-15 09:49:53 -0500 Ted Gould (362a2d7) * 0.3.10 (tag: 0.3.10, refs/bzr/origin/tags/0.3.10) 2010-07-14 10:07:48 +0200 Evgeni Golov (8b7fa3f) * Standards-Version: 3.9.0 (tag: 0.3.9-1, refs/bzr/origin/tags/0.3.9-1) 2010-07-14 10:04:40 +0200 Evgeni Golov (55e4c2c) * Add "Don't drop debian/source/*" to the changelog 2010-07-14 10:03:46 +0200 Evgeni Golov (b4d1461) * Merging new upstream release and some changes from Ubuntu. 2010-07-14 10:00:17 +0200 Evgeni Golov (d14f25a) * Merging lp:~ubuntu-desktop/libindicator/ubuntu 2010-07-13 10:47:42 -0500 Ted Gould (d71fe46) * Adding a configurable timeout by environment variable. 2010-07-12 11:17:21 -0500 Ted Gould (bf315eb) * Adding a new variable to adjust the time of the kill switch. 2010-07-09 16:47:26 -0400 Ken VanDine (b52f070) * releasing version 0.3.9-0ubuntu2 (tag: 0.3.9-0ubuntu2, refs/bzr/origin/tags/0.3.9-0ubuntu2) 2010-07-09 13:43:53 -0500 Ted Gould (e102f84) * releasing version 0.3.9-0ubuntu2~ppa1 2010-07-09 13:42:33 -0500 Ted Gould (d8bd40d) * * Upstream merge * Fixing unwatching crash (LP: #603489) 2010-07-09 13:35:55 -0500 Ted Gould (17a29ea) * Fixing unwatching lookups. 2010-07-09 13:13:21 -0500 Ted Gould (c7eee08) * We want the key not the value. 2010-07-09 13:08:22 -0500 Ted Gould (ed191e6) * Taking it to the next level with impoliteness. 2010-07-09 13:07:57 -0500 Ted Gould (5750308) * Lots of impoliteness to make sure. 2010-07-09 13:06:58 -0500 Ted Gould (b0360dd) * Adding an impolite manager. 2010-07-09 11:02:48 -0500 Ted Gould (baa324f) * Bug 2010-07-09 11:00:38 -0500 Ted Gould (b0a56e9) * Adding in the unwatching test 2010-07-09 10:58:17 -0500 Ted Gould (b43f81d) * A couple debug messages to make the test easier to read the output from. 2010-07-09 10:55:59 -0500 Ted Gould (dceee48) * Up to 5 watchers. 2010-07-09 10:53:48 -0500 Ted Gould (990a881) * Longer timeout 2010-07-09 10:52:28 -0500 Ted Gould (7c7b497) * Okay, we need our own service too. Bah. 2010-07-09 10:50:25 -0500 Ted Gould (56dd41e) * Delaying the watchers to ensure that we don't dbus activate, and removing the session.conf to even allow for that. 2010-07-09 10:45:18 -0500 Ted Gould (5731c1e) * Starting the service ourselves. 2010-07-09 10:42:46 -0500 Ted Gould (054704d) * Ignoring the new builds. 2010-07-09 10:42:20 -0500 Ted Gould (6786532) * Making a new manager 2010-07-09 10:39:44 -0500 Ted Gould (01130c5) * Start a multi watch test 2010-07-09 09:58:56 -0500 Ted Gould (b973537) * Uhg, wrong branch 2010-07-09 09:53:20 -0500 Ted Gould (74a24d7) * Stop asking for the name, instead let's find it on our own. 2010-07-09 09:30:25 -0500 Ted Gould (dac4891) * A could of protections for the core. 2010-07-09 09:25:18 -0500 Ted Gould (fe4e5b7) * Sync to Ubuntu Desktop 2010-07-09 09:22:20 -0500 Ted Gould (613ad62) * Freeing the service. 2010-07-08 23:14:14 +0200 Sebastien Bacher (dc60b53) * releasing version 0.3.9-0ubuntu1 (tag: 0.3.9-0ubuntu1, refs/bzr/origin/tags/0.3.9-0ubuntu1) 2010-07-08 15:19:11 -0500 Ted Gould (3fc3179) * releasing version 0.3.9-0ubuntu1~ppa1 2010-07-08 15:18:26 -0500 Ted Gould (7957aca) * New upstream release. 2010-07-08 15:15:46 -0500 Ted Gould (3b191f9) * Import upstream version 0.3.9 (refs/bzr/origin/tags/upstream-0.3.9) 2010-07-08 15:12:12 -0500 Ted Gould (bc5e925) * 0.3.9 (tag: 0.3.9, refs/bzr/origin/tags/0.3.9) 2010-07-08 14:06:12 -0500 Ted Gould (3899f93) * Fixing signals so that our tests pass 2010-07-08 12:36:50 -0500 Ted Gould (7412490) * Documenting the choices of not having a nice callback func. 2010-07-08 12:34:24 -0500 Ted Gould (647f8ea) * Use the same function so we know everything is all right. 2010-07-08 12:31:56 -0500 Ted Gould (974328f) * Unreffing the objects in dispose and ensuring we disconnect the signals first. 2010-07-08 12:23:14 -0500 Ted Gould (46c8b3f) * Disconnecting signal before removing from hashtable so we don't try twice. 2010-07-08 09:25:29 -0500 Ted Gould (2b3087f) * releasing version 0.3.8-2ubuntu1~ppa3 2010-07-08 09:22:33 -0500 Ted Gould (fc10497) * Make it so that a watcher dying is the same as unregistering. 2010-07-08 09:21:21 -0500 Ted Gould (70f8170) * * Merge Upstream * Removing checking for style properties that aren't used. 2010-07-08 09:20:02 -0500 Ted Gould (5c28cb2) * Sync to trunk 2010-07-08 09:19:38 -0500 Ted Gould (5691966) * Shutdown services when watchers leave the bus. 2010-07-06 11:07:22 -0500 Ted Gould (359c670) * releasing version 0.3.8-2ubuntu1~ppa2 2010-07-06 11:06:36 -0500 Ted Gould (8314197) * * Upstream Merge * Make it so that a watcher dying is the same as unregistering. 2010-07-06 11:04:41 -0500 Ted Gould (dd7106e) * Creating a callback for the destory signal, but then moving the unwatch into a core function so that we can call it. 2010-07-06 10:47:58 -0500 Ted Gould (d23ca44) * Actually creating a proxy to see if we can detect the watcher going away. 2010-07-06 10:39:12 -0500 Ted Gould (632c3f9) * Making ths bus tracked in the private structure 2010-07-06 10:36:27 -0500 Ted Gould (8a12556) * Switching the watchers data structure over to a hashtable. 2010-07-06 10:29:45 -0500 Ted Gould (96faa1e) * Removing unused style check 2010-07-06 09:47:12 -0500 Ted Gould (149de10) * Removing the style lookup that wasn't used. 2010-06-19 09:32:03 -0400 Michael Terry (923a1d5) * don't use 3.3 version, rather use indicator3 2010-06-19 08:47:50 -0400 Michael Terry (322884d) * first pass at providing a gtk3 version 2010-06-16 13:29:19 -0500 Ted Gould (589e659) * releasing version 0.3.8-2ubuntu1~ppa1 2010-06-16 13:28:30 -0500 Ted Gould (c055d0f) * * Merge debian changes * Drop debian/source/* * debian/control: Switch VCS for this branch to be the indicator applet developers branch. * Revert cdbs drop, as requested by the Ubuntu maintainers. * Update Maintainer and Vcs-* fields for pkg-ayatana. * Merge Ubuntu package into Debian. Closes: #549999 * debian/copyright: + Update to machine readable format. * debian/control: + Drop cdbs Build-Dep, bump debhelper to >=7. + Standards-Version 3.8.4. + Update Vcs-* fields. + Drop GNOME from Description, the package is not GNOME specific. + Slightly update Description, thanks lintian. * debian/rules: + Use minimal debhelper 7 rules without cdbs. + Disable tests for now, they fail (launchpad 587811) * debian/source/format: + Add file, make package 3.0 (quilt). 2010-06-16 13:20:03 -0500 Ted Gould (b4feaef) * Sync to Ubuntu Desktop 2010-06-16 09:55:10 +0200 Evgeni Golov (34b4a4d) * Update Maintainer and Vcs-* fields for pkg-ayatana. 2010-06-16 09:52:28 +0200 Evgeni Golov (e3df283) * Revert cdbs drop, as requested by the Ubuntu maintainers. 2010-06-16 09:50:48 +0200 Evgeni Golov (30f1ae4) * Apply 0.3.8-1 changes (tag: 0.3.8-1, refs/bzr/origin/tags/0.3.8-1) 2010-05-06 11:39:55 +0200 Ted Gould (c77d719) * Dummy commit 2010-04-09 20:53:31 +0200 Sebastien Bacher (ec36577) * releasing version 0.3.8-0ubuntu1 (tag: 0.3.8-0ubuntu1, refs/bzr/origin/tags/0.3.8-0ubuntu1) 2010-04-09 12:56:24 -0500 Ted Gould (478b7f7) * releasing version 0.3.8-0ubuntu1~ppa1 2010-04-09 12:54:42 -0500 Ted Gould (a662e1a) * * New upstream release. * Adding template files to tarball 2010-04-09 12:54:16 -0500 Ted Gould (105fa99) * Import upstream version 0.3.8 (refs/bzr/origin/tags/upstream-0.3.8) 2010-04-09 12:53:42 -0500 Ted Gould (3e9180a) * releasing version 0.3.7-0ubuntu1~ppa1 2010-04-09 12:53:27 -0500 Ted Gould (9530995) * 0.3.8 (tag: 0.3.8, refs/bzr/origin/tags/0.3.8) 2010-04-09 12:51:25 -0500 Ted Gould (882ef71) * Disting the templates. 2010-04-09 11:58:23 -0500 Ted Gould (6c48a23) * New upstream release. 2010-04-09 11:57:53 -0500 Ted Gould (97035da) * Import upstream version 0.3.7 (refs/bzr/origin/tags/upstream-0.3.7) 2010-04-09 11:57:05 -0500 Ted Gould (e9392e9) * No merging 2010-04-09 11:53:43 -0500 Ted Gould (ee0f45f) * 0.3.7 (tag: 0.3.7, refs/bzr/origin/tags/0.3.7) 2010-04-09 11:53:36 -0500 Ted Gould (588efad) * Fixing the desktop test to make it more reliable. 2010-04-06 16:21:22 -0500 Ted Gould (6262d6f) * releasing version 0.3.6-0ubuntu2~ppa1 2010-04-06 16:03:52 -0500 Ted Gould (a57b84e) * Merge from Ubuntu desktop 2010-04-06 16:00:49 -0500 Ted Gould (2eb97c2) * * Upstream merge * Use the domain in desktop files for shortcuts (LP: #549322) 2010-04-06 15:57:17 -0500 Ted Gould (8e19cd3) * Translating the shortcuts of the actions based on the desktop file translation domains. 2010-04-06 15:55:45 -0500 Ted Gould (22de798) * Typo 2010-04-05 15:37:15 -0500 Ted Gould (e0f5fb7) * releasing version 0.3.6-0ubuntu1~ppa2~shortcutdomain2 2010-04-05 15:21:26 -0500 Ted Gould (4213bc2) * * Upstream merge * Chnages requested by pitt 2010-04-05 15:20:46 -0500 Ted Gould (1200f51) * Switching to only use the g_dgettext version if the locale_string function doesn't change the string from the normal lookup (and we have a domain to look in). 2010-04-05 12:46:10 -0500 Ted Gould (e900b4c) * Make it so that we check the GNOME-Gettext-Domain as well 2010-04-02 10:52:01 -0500 Ted Gould (49c5444) * releasing version 0.3.6-0ubuntu1~ppa2~shortcutdomain1 2010-04-02 10:50:59 -0500 Ted Gould (4d6575b) * * Upstream merge * Use the domain in desktop files for shortcuts 2010-04-02 10:49:33 -0500 Ted Gould (20e03af) * If we don't have a domain just use the locale function, otherwise we need to use that domain to get the translation. 2010-04-02 10:44:57 -0500 Ted Gould (5d02c0c) * Adding a private variable for the translation domain and grabbing it from the keyfile. 2010-03-18 23:34:24 +0100 Sebastien Bacher (0cf6e60) * releasing version 0.3.6-0ubuntu1 (tag: 0.3.6-0ubuntu1, refs/bzr/origin/tags/0.3.6-0ubuntu1) 2010-03-18 15:05:20 -0400 Ken VanDine (947d4cf) * * Upstream release 0.3.6 * Adding in scroll signals for the indicators * debian/rules: Updating shlibs 2010-03-18 11:10:23 -0500 Ted Gould (f07a2df) * releasing version 0.3.6-0ubuntu1~ppa1 2010-03-18 10:59:10 -0500 Ted Gould (218c6a8) * debian/rules: Updating shlibs 2010-03-18 10:53:40 -0500 Ted Gould (738df2f) * * Upstream release 0.3.6 * Adding in scroll signals for the indicators 2010-03-18 10:52:54 -0500 Ted Gould (60ab69b) * Update to Ubuntu Desktop 2010-03-18 10:49:26 -0500 Ted Gould (999f148) * 0.3.6 (tag: 0.3.6, refs/bzr/origin/tags/upstream-0.3.6, refs/bzr/origin/tags/0.3.6) 2010-03-17 09:28:22 -0500 Ted Gould (5abaca2) * Adding the signal for scrolling in the indicator-object 2010-03-17 01:21:58 -0500 Cody Russell (e0c1a3c) * name 2010-03-17 01:14:13 -0500 Cody Russell (b782a8a) * Documentation fix. 2010-03-16 15:31:15 -0500 Cody Russell (11c78ed) * Use IndicatorScrollDirection instead of gboolean in IndicatorObjectClass->scroll function pointer. 2010-03-16 11:40:14 -0500 Cody Russell (02d3dde) * Define IndicatorScrollDirection enum for scroll signal parameter. 2010-03-15 14:12:20 -0500 Cody Russell (4adb9ab) * Add 'scroll' signal. 2010-03-11 22:52:27 +0100 Sebastien Bacher (a68b0e8) * releasing version 0.3.5-0ubuntu1 (tag: 0.3.5-0ubuntu1, refs/bzr/origin/tags/0.3.5-0ubuntu1) 2010-03-11 16:34:22 -0500 Ken VanDine (c74b245) * * Upstream release 0.3.5 * Adding in a image loader helper for indicators. 2010-03-11 14:27:17 -0600 Ted Gould (a815f84) * releasing version 0.3.5-0ubuntu1~ppa2 2010-03-11 14:26:58 -0600 Ted Gould (259bcc9) * debian/rules: Updating shlibs number 2010-03-11 14:26:15 -0600 Ted Gould (0de990f) * releasing version 0.3.5-0ubuntu1~ppa1 2010-03-11 14:22:51 -0600 Ted Gould (8caf60a) * Upstream release 0.3.5 2010-03-11 14:21:59 -0600 Ted Gould (5ca699b) * Syncing with ubuntu desktop 2010-03-11 14:20:02 -0600 Ted Gould (bb8b703) * 0.3.5 (tag: 0.3.5, refs/bzr/origin/tags/0.3.5) 2010-03-11 14:10:42 -0600 Ted Gould (8e82b02) * Creating a function to update the icon to a new name. 2010-03-11 10:51:17 -0600 Ted Gould (a6ecf4a) * Watching for style changes on the image. 2010-03-11 10:35:14 -0600 Ted Gould (e31a7de) * Check to see if we've seen the image previously before adding signals in. 2010-03-11 10:22:17 -0600 Ted Gould (b4ca4f6) * Splitting things out into an update function and a buid function. 2010-03-10 22:12:35 -0600 Ted Gould (d424692) * releasing version 0.3.4-0ubuntu1~ppa2 2010-03-10 22:10:05 -0600 Ted Gould (fdba994) * * Upstream merge * Adding in a image loader helper for indicators. 2010-03-10 22:09:33 -0600 Ted Gould (fc9f460) * Update to trunk 2010-03-10 22:06:56 -0600 Ted Gould (fc87fda) * Add a small helper for loading images. 2010-03-10 16:58:15 -0600 Ted Gould (9bc7677) * releasing version 0.3.4-0ubuntu1~ppa2~imagehelper1 2010-03-10 16:55:44 -0600 Ted Gould (680631e) * * Upstream merge * Adding in a image loader helper for indicators. 2010-03-10 16:40:19 -0600 Ted Gould (5867fa7) * Adding in a copyright header. 2010-03-10 16:30:19 -0600 Ted Gould (0660884) * A little loader to test to see if we load an icon and what size it is. 2010-03-10 16:14:46 -0600 Ted Gould (12ab8f4) * If we get an icon that is too big, we have to scale it. 2010-03-10 15:30:37 -0600 Ted Gould (37f0f34) * Doing dynamic size calculation based on the font if we have a prop set telling us to do so. 2010-03-10 14:26:20 -0600 Ted Gould (ba4a73a) * Disconnect from theme update when the image goes away. 2010-03-10 13:25:26 -0600 Ted Gould (64df2c6) * Setting up the callback for themes changing. 2010-03-10 13:10:36 -0600 Ted Gould (805edb8) * Pulled out a bunch of the code into a refresh function for signals. 2010-03-10 12:29:30 -0600 Ted Gould (48e8a34) * Fleshing out the image loading function. 2010-03-10 11:45:53 -0600 Ted Gould (636b9f9) * Adding in an image helper library. 2010-02-25 22:23:29 +0100 Sebastien Bacher (e9aea6f) * releasing version 0.3.4-0ubuntu1 (tag: 0.3.4-0ubuntu1, refs/bzr/origin/tags/0.3.4-0ubuntu1) 2010-02-25 11:27:26 -0600 Ted Gould (436e5f1) * releasing version 0.3.4-0ubuntu1~ppa1 2010-02-25 11:25:01 -0600 Ted Gould (577ae5b) * * Upstream Release 0.3.4 * Reducing gio-unix dependency to 2.22 2010-02-25 11:21:02 -0600 Ted Gould (8e12685) * 0.3.4 (tag: 0.3.4, refs/bzr/origin/tags/0.3.4) 2010-02-24 21:05:05 -0600 Ted Gould (802da09) * releasing version 0.3.3-0ubuntu2 (tag: 0.3.3-0ubuntu2, refs/bzr/origin/tags/0.3.3-0ubuntu2) 2010-02-24 21:04:56 -0600 Ted Gould (d4404ea) * debian/control: Reducing libglib dependency down to 2.22 for Karmic builds 2010-02-19 16:24:25 -0600 Ted Gould (9200b55) * No reason we need newer APIs than this. 2010-02-18 10:59:08 -0600 Ted Gould (25b2503) * Updating to ubuntu desktop 2010-02-18 17:33:16 +0100 Sebastien Bacher (2de6574) * releasing version 0.3.3-0ubuntu1 (tag: 0.3.3-0ubuntu1, refs/bzr/origin/tags/0.3.3-0ubuntu1) 2010-02-18 10:11:24 -0600 Ted Gould (6528ac0) * releasing version 0.3.3-0ubuntu1~ppa1 2010-02-18 10:08:32 -0600 Ted Gould (019fb77) * Upstream release 0.3.3 2010-02-18 10:07:56 -0600 Ted Gould (bf7525a) * releasing version 0.3.2-0ubuntu1~ppa2 2010-02-18 10:06:47 -0600 Ted Gould (fa27dc5) * * Upstream merge * Adding new object for parsing desktop files for Shortcuts 2010-02-18 10:05:29 -0600 Ted Gould (0fc8747) * Sync to trunk 2010-02-18 10:03:57 -0600 Ted Gould (49cdb8c) * 0.3.3 (tag: 0.3.3, refs/bzr/origin/tags/0.3.3) 2010-02-18 10:01:57 -0600 Ted Gould (f325f3e) * Adding in an object to get shortcuts out of desktop files. 2010-02-16 22:54:20 -0600 Ted Gould (8eee891) * Updating to Ubuntu Desktop branch 2010-02-16 22:52:10 -0600 Ted Gould (fdc2872) * releasing version 0.3.2-0ubuntu1~ppa2~shortcuts1 2010-02-16 22:51:13 -0600 Ted Gould (a9e097f) * * Upstream merge * Adding new object for parsing desktop files for Shortcuts 2010-02-16 22:47:04 -0600 Ted Gould (6665fd0) * Ignoring the touch file for the testing 2010-02-16 22:45:54 -0600 Ted Gould (1b58c66) * Being more specific about where we should find the touch file for distcheck 2010-02-16 22:44:22 -0600 Ted Gould (3e69079) * Disabling debug messages 2010-02-16 22:43:55 -0600 Ted Gould (5a75fb5) * Debug messages. 2010-02-16 22:43:45 -0600 Ted Gould (a3e1058) * We should look at the other nicks even if this one doesn't work. 2010-02-16 22:43:11 -0600 Ted Gould (ef9c19e) * Shipping our test desktop file 2010-02-16 22:39:45 -0600 Ted Gould (7e69f61) * Clean up touch file 2010-02-16 22:35:03 -0600 Ted Gould (0aa8119) * Checking to ensure the right nick is in the list 2010-02-16 22:21:29 -0600 Ted Gould (b10dd19) * Using the nick directly to make this work better. 2010-02-16 22:07:38 -0600 Ted Gould (b0e8d1c) * Wrong identity 2010-02-16 22:05:08 -0600 Ted Gould (452c195) * Forgot to set the type of the desktop file, need to be an Application. 2010-02-16 21:40:50 -0600 Ted Gould (af36cb8) * Add a test to launch an nick 2010-02-16 21:34:30 -0600 Ted Gould (e0bc191) * Adding a check to ensure we're getting the right names from the nicks. 2010-02-16 21:31:33 -0600 Ted Gould (c636c3e) * Making the function not recurse forever. 2010-02-16 21:23:59 -0600 Ted Gould (b6b2a65) * Adding in local filter test functions. 2010-02-16 21:16:02 -0600 Ted Gould (edaa80e) * Check to ensure a global no show works. 2010-02-16 15:28:29 -0600 Ted Gould (0a90515) * Fix group detection to put a space in the name of the group 2010-02-16 15:27:18 -0600 Ted Gould (755e697) * Better name 2010-02-16 15:26:30 -0600 Ted Gould (17cdd8c) * Ignoring the new stuff 2010-02-16 15:26:03 -0600 Ted Gould (0a4d668) * A backslash off 2010-02-16 15:24:51 -0600 Ted Gould (53c9f60) * Adding in a basic test desktop file test 2010-02-16 15:13:29 -0600 Ted Gould (1a85eb2) * Create a testing desktop file 2010-02-16 11:02:53 -0600 Ted Gould (8fb1d36) * Refactoring the list checks into their own functions so we can check the desktop group as well. 2010-02-16 10:53:08 -0600 Ted Gould (a39d426) * Adding in checking to see if we should be showing this entry. 2010-02-16 10:41:58 -0600 Ted Gould (4ee953a) * Basic parsing of the files. 2010-02-16 09:39:59 -0600 Ted Gould (21c3a88) * Checking for our shortcuts key, we don't really want a desktop file without it. 2010-02-16 08:46:22 -0600 Ted Gould (5514554) * Start loading the keyfile. 2010-02-16 08:25:10 -0600 Ted Gould (62876d9) * Removing the reading of the desktop file. 2010-02-16 08:22:57 -0600 Ted Gould (37a107b) * Identity management with the properties. 2010-02-16 08:20:01 -0600 Ted Gould (8b8c3f4) * Some error handling. 2010-02-15 17:14:12 -0600 Ted Gould (ae0b7bc) * A basic property system. 2010-02-15 16:46:58 -0600 Ted Gould (5d7fbff) * Fleshing out the exec function which require GIO Unix 2010-02-15 15:44:00 -0600 Ted Gould (f2196d1) * Fleshing out getting the Name of a shortcut 2010-02-15 15:20:09 -0600 Ted Gould (5d2ace5) * Fleshing out _new and _get_nicks Both are lovely functions. 2010-02-15 15:12:29 -0600 Ted Gould (a32a078) * Getting some new private variables, and making sure they have a full lifecycle. 2010-02-15 14:57:23 -0600 Ted Gould (3a95d84) * Instanciating the prototypes and making some comments. 2010-02-15 14:22:01 -0600 Ted Gould (d970c85) * Letz get ur prototypes 2010-02-15 14:13:51 -0600 Ted Gould (95f07c4) * Copyright headers 2010-02-15 14:00:56 -0600 Ted Gould (a271753) * Adding in the new object we're building for evaluating desktop shortcuts. 2010-02-04 19:00:38 -0800 Sebastien Bacher (050ef48) * releasing version 0.3.2-0ubuntu1 (tag: 0.3.2-0ubuntu1, refs/bzr/origin/tags/0.3.2-0ubuntu1) 2010-02-04 17:40:09 -0800 Ted Gould (72ef75f) * releasing version 0.3.2-0ubuntu1~ppa1 2010-02-04 17:37:47 -0800 Ted Gould (65bc742) * * Upstream release 0.3.2 * Various fixes to timeout handling in services and the * Fix test suite when run headless 2010-02-04 17:34:50 -0800 Ted Gould (0d5ea56) * 0.3.2 (tag: 0.3.2, refs/bzr/origin/tags/0.3.2) 2010-02-02 13:16:42 -0800 Ted Gould (6afee91) * Fixes to the test suite. 2010-02-02 12:20:44 -0800 Ted Gould (527674d) * Adjusting to new timeout value 2010-02-02 12:10:23 -0800 Ted Gould (9719ffe) * Switching to 'bash' 2010-02-02 12:09:00 -0800 Ted Gould (0526f26) * Adding an printout for saying which display we created. 2010-02-02 12:01:22 -0800 Ted Gould (953e656) * Adding in run-xvfb.sh 2010-02-01 23:59:26 -0800 Ted Gould (e0dbaa3) * releasing version 0.3.1-0ubuntu1~ppa2 2010-02-01 23:58:22 -0800 Ted Gould (106a07d) * * Upstream merge * Various fixes to timeout handling in servcies and the service manager. 2010-02-01 23:57:35 -0800 Ted Gould (71e4712) * Sync to trunk 2010-02-01 23:56:58 -0800 Ted Gould (103f8b0) * Better handling of some timeout conditions and more logging. 2010-01-28 21:43:02 -0800 Ted Gould (7e7507e) * releasing version 0.3.1-0ubuntu1~ppa2~better1 2010-01-28 21:41:58 -0800 Ted Gould (32c331c) * * Upstream merge * Various fixes to timeout handling in servcies and the service manager. 2010-01-28 21:39:29 -0800 Ted Gould (7c58185) * Adding a debug message for restarting the service. 2010-01-28 21:31:45 -0800 Ted Gould (1abf840) * Error handling when building our proxies. 2010-01-28 21:23:18 -0800 Ted Gould (52e1a43) * Changing timeout to be approximatedly 1 second. 2010-01-28 21:07:54 -0800 Ted Gould (21eca67) * checking the error field for name callback and printing an error when it fails. 2010-01-28 21:03:42 -0800 Ted Gould (138321d) * In the timeout function mention that we're shutting down, and have an environment variable to stop that. 2010-01-21 15:53:46 -0500 Ken VanDine (717a085) * releasing version 0.3.1-0ubuntu1 (tag: 0.3.1-0ubuntu1, refs/bzr/origin/tags/0.3.1-0ubuntu1) 2010-01-21 13:15:10 -0600 Ted Gould (8f6a206) * releasing version 0.3.1-0ubuntu1~ppa1 2010-01-21 13:04:15 -0600 Ted Gould (2645491) * Upstream release 0.3.1 2010-01-21 13:02:56 -0600 Ted Gould (923106e) * Sync to ubuntu-desktop 2010-01-21 13:01:01 -0600 Ted Gould (f5232a3) * 0.3.1 (tag: 0.3.1, refs/bzr/origin/tags/0.3.1) 2010-01-21 12:50:41 -0600 Ted Gould (16e0cd5) * When a watch fails we're moving to having that try and restart the startup/connection process again. 2010-01-21 10:30:52 -0600 Ted Gould (0219e0e) * Adding in tracking of the restart idle function and making sure we don't do it twice. 2010-01-21 10:25:27 -0600 Ted Gould (4a7af56) * In case we're restarting because of the 'Watch' returning failure we'd have a valid 'service_proxy' object to kill 2010-01-21 09:49:02 -0600 Ted Gould (c72ff4f) * Setting up the watch_cb function so that in errors it'll try to restart. As most errors will be fixed by trying again. 2010-01-19 09:00:53 -0600 Ted Gould (38d6422) * releasing version 0.3.0-0ubuntu2~ppa2 2010-01-19 08:59:05 -0600 Ted Gould (45e16a5) * * Upstream Merge * Adding in entry ordering. 2010-01-19 08:58:24 -0600 Ted Gould (f48680f) * Sync to trunk 2010-01-19 08:46:48 -0600 Ted Gould (eaf87fa) * Support for entries having a location and moving that location. 2010-01-18 14:07:03 -0600 Ted Gould (292d5b0) * releasing version 0.3.0-0ubuntu2~ppa2~ordering1 2010-01-18 14:05:59 -0600 Ted Gould (f419f42) * * Upstream Merge * Adding in entry ordering. 2010-01-18 14:04:38 -0600 Ted Gould (a1032ca) * Update from trunk. 2010-01-18 12:57:38 -0600 Ted Gould (2265c84) * releasing version 0.3.0-0ubuntu2~ppa1 2010-01-18 12:56:14 -0600 Ted Gould (90990c6) * * Upstream Merge * Adding in the code to restart services 2010-01-18 12:54:22 -0600 Ted Gould (bcf1d4e) * Sync to trunk 2010-01-18 12:53:34 -0600 Ted Gould (e36616b) * Adding the code for having the services automatically restart if they crash. 2010-01-15 22:28:13 -0600 Ted Gould (079c2b5) * It's a fundamental mistake to believe that we can protect people using this interface from the disconnection. We have no information to say that the new service starting will come up in the same state as the one before it. We need the individual implementers to verify that. Now we need to fix that. This commit does so. 2010-01-15 22:19:16 -0600 Ted Gould (faa40d7) * releasing version 0.3.0-0ubuntu2~ppa1~restart2 2010-01-15 22:17:57 -0600 Ted Gould (08192cc) * * Upstream Merge * Emitting the connection changed signal better. 2010-01-15 22:16:45 -0600 Ted Gould (62d8c1c) * Handling the connected signal as well, making sure we emit it. 2010-01-15 21:45:58 -0600 Ted Gould (f8d47e9) * releasing version 0.3.0-0ubuntu2~ppa1~restart1 2010-01-15 21:44:49 -0600 Ted Gould (26f2421) * * Upstream Merge * Adding in the code to restart services 2010-01-15 21:40:03 -0600 Ted Gould (deabfe6) * Switching what our enviroment variable is for, let's just stop the whole thing instead of playing with it. 2010-01-15 21:25:48 -0600 Ted Gould (9bccc14) * Setting up the signal for when the proxies falls down, we restart. 2010-01-15 21:15:30 -0600 Ted Gould (2ce95b0) * Filling out the function to start it again, and adding in the function to respond to the timeout. 2010-01-15 20:38:04 -0600 Ted Gould (b9344c3) * Reset the restart_count when we start, and start to bring in 'start_service_again' to begin to throttle the restarts. 2010-01-15 19:54:42 -0600 Ted Gould (41559b3) * Getting a multiplier, and providing a way to override it using an environment variable. 2010-01-15 16:11:42 -0600 Ted Gould (d7635fc) * Having the signaller test check the 'moved' signal as well as the others. 2010-01-15 16:08:35 -0600 Ted Gould (c25db99) * No error on not having a get_location function. We'll just return zero. 2010-01-15 15:58:56 -0600 Ted Gould (cb5f34b) * Basic location checking test. 2010-01-15 15:35:55 -0600 Ted Gould (308e4db) * Fleshing out the get_location function as much as they're implemented here. 2010-01-15 15:28:31 -0600 Ted Gould (d334db5) * Fixing the signal comments. 2010-01-15 15:16:30 -0600 Ted Gould (14b5823) * Setting up the move signal, which required custom marshallers. 2010-01-15 15:04:20 -0600 Ted Gould (529ce66) * API changes required to have locations for the entries. 2009-12-10 20:42:51 -0600 Ted Gould (58c6877) * Ken loves us. 2009-12-10 12:18:01 -0500 Ken VanDine (b6fb26b) * set release for lucid 2009-12-10 12:15:54 -0500 Ken VanDine (c45b838) * * debian/control: - Added description for libindicator-tools 2009-12-10 12:02:39 -0500 Ken VanDine (697b324) * set version number 2009-12-10 11:00:11 -0600 Ted Gould (5f5763c) * releasing version 0.3.0-0ubuntu1~ppa1 2009-12-10 10:59:39 -0600 Ted Gould (b4fb802) * releasing version 0.3.0~dev-0ubuntu1~ppa11 2009-12-10 10:58:39 -0600 Ted Gould (91d1528) * * Upstream 0.3.0 Release * Adds a new tool to load indicators from the command line. * Adds an object for loading indicators. * Changes the indicator interface to be object based. * debian/control, debian/libindicator0: Adding in a new packages for the binary library. 2009-12-10 10:50:31 -0600 Ted Gould (cee358b) * 0.3.0 (tag: 0.3.0, refs/bzr/origin/tags/0.3.0) 2009-12-10 10:41:43 -0600 Ted Gould (5fb4592) * Adding in license headers. 2009-12-10 10:32:31 -0600 Ted Gould (29cb00e) * Adding in license headers. 2009-12-07 14:24:36 -0600 Ted Gould (97c515e) * releasing version 0.3.0~dev-0ubuntu1~ppa10 2009-12-07 14:23:24 -0600 Ted Gould (93ef960) * * Licensing and doc updates. * Minor code cleanups 2009-12-07 14:22:35 -0600 Ted Gould (2a521b2) * Documentation, licenses, and some slight updates. 2009-12-07 13:11:39 -0600 Ted Gould (578ffd2) * releasing version 0.3.0~dev-0ubuntu1~ppa9 2009-12-07 13:10:34 -0600 Ted Gould (53bd4b5) * Adding in a service API version number. 2009-12-07 13:09:12 -0600 Ted Gould (483992f) * Add in support for sevice API versions. 2009-12-07 13:07:43 -0600 Ted Gould (1347041) * Fixing a typo in the error message -- noticed by David Barth. 2009-12-04 14:30:44 -0600 Ted Gould (c1fa836) * GPLv3 copyright headers. 2009-12-04 13:50:43 -0600 Ted Gould (2d3d5b5) * Implemented the _connected function as it's silly that it wasn't. 2009-12-04 13:39:49 -0600 Ted Gould (59b5bb7) * More gtk-doc comments. 2009-12-03 23:25:57 -0600 Ted Gould (5852e0b) * Adding in some comments and a little bit of code cleanup. 2009-12-03 16:25:33 -0600 Ted Gould (a6d2a69) * Putting in comments for the functions. 2009-12-03 16:03:17 -0600 Ted Gould (873b502) * Service version numbers. 2009-12-03 15:15:34 -0600 Ted Gould (ea29a8e) * Adding a weak pointer to the service proxy. 2009-12-03 14:39:20 -0600 Ted Gould (8331ee5) * Switching unwatch to being a no_reply function call. 2009-12-03 14:31:10 -0600 Ted Gould (436bca2) * Full signal handlers so that we can see everything. 2009-12-03 08:49:16 -0600 Ted Gould (6db57d8) * releasing version 0.3.0~dev-0ubuntu1~ppa8 2009-12-03 08:49:10 -0600 Ted Gould (fa0212c) * autogen.sh fix. (LP: #491907) 2009-12-03 08:45:59 -0600 Ted Gould (360ae7a) * Patch to fix autogen.sh 2009-12-03 08:36:08 -0600 Cody Russell (66a7877) * Fix autogen.sh so parameters are passed 2009-12-02 15:58:52 -0600 Ted Gould (bc803c5) * Merge in from trunk, now two failing tests. 2009-12-02 15:49:23 -0600 Ted Gould (1696a67) * Forgot to delete the programs. 2009-12-02 15:35:26 -0600 Ted Gould (b2a0e03) * Actually checking the version and erroring on it. 2009-12-02 15:15:21 -0600 Ted Gould (0c7f613) * Specifying who can't get the session bus. 2009-12-02 15:15:03 -0600 Ted Gould (6bbe989) * Printing out the session bus address 2009-12-02 15:11:29 -0600 Ted Gould (18351a8) * Changing the names we're registering for to be correct. 2009-12-02 13:57:00 -0600 Ted Gould (937c28b) * Not erroring when we're supposed to pass. 2009-12-02 13:56:44 -0600 Ted Gould (792315d) * Adding a log domain for error messages 2009-12-02 13:42:29 -0600 Ted Gould (36f2ede) * Adding a new test to look at version numbers. 2009-12-02 10:15:11 -0600 Ted Gould (a4e33bf) * Adding _new functions that include the version number in them. 2009-12-02 10:06:43 -0600 Ted Gould (d7e9d01) * Sending a version number for the local service. 2009-12-02 08:40:09 -0600 Ted Gould (8f124e3) * releasing version 0.3.0~dev-0ubuntu1~ppa7 2009-12-02 08:37:01 -0600 Ted Gould (c986e2c) * Adding an 'UnWatch' command to the standard DBus interface for graceful disconnection from a service. 2009-12-02 08:35:41 -0600 Ted Gould (de38fc8) * Adding an unwatch command to allow for graceful disconnection from a service if we're not interested in it. 2009-12-01 16:45:54 -0600 Ted Gould (a1d20fb) * Adding a property for version. 2009-12-01 16:34:32 -0600 Ted Gould (aa951a3) * Change the watch function to return both an API version and a user set version. 2009-12-01 16:07:26 -0600 Ted Gould (b7864d8) * Only getting the bus once. 2009-12-01 13:44:30 -0600 Ted Gould (4ba1af3) * Trying to get a proxy before starting the service every time. If it exists, let's use it. 2009-12-01 13:37:00 -0600 Ted Gould (5757cfb) * New files to ignore. 2009-12-01 13:35:30 -0600 Ted Gould (1b1a50d) * Adding a test to ensure that a service gets shutdown by someone unwatching it. 2009-12-01 10:47:13 -0600 Ted Gould (6e89bf0) * Checking to make sure we don't get connected twice, that'd be an error. 2009-12-01 10:43:10 -0600 Ted Gould (d69de93) * Updating connection prototype to get all the data. 2009-12-01 10:40:17 -0600 Ted Gould (8f0f2ad) * Making the timeout a failure case, and making it so that we want a graceful shutdown. 2009-12-01 10:20:36 -0600 Ted Gould (824d1e8) * Unwatching if we have mismatched version. 2009-12-01 10:19:11 -0600 Ted Gould (088eff4) * When destroying the object we tell the watched service that we're not watching it. 2009-12-01 10:12:51 -0600 Ted Gould (67aef7b) * Using the define for the version on both sides 2009-12-01 10:11:50 -0600 Ted Gould (c0e2510) * Finding the watcher and removing him from the list. 2009-12-01 09:58:05 -0600 Ted Gould (8a1912e) * Add an unwatch function with a basic handler. 2009-11-24 16:36:04 -0600 Ted Gould (0d1af25) * releasing version 0.3.0~dev-0ubuntu1~ppa6 2009-11-24 16:35:04 -0600 Ted Gould (5d0d185) * * Adding a new tool to load indicators from the command line. * debian/control, debian/libindicator-tools: Adding in a new package for the tools of libindicator. 2009-11-24 16:34:20 -0600 Ted Gould (01c1439) * Sync to trunk 2009-11-24 16:33:38 -0600 Ted Gould (ad2ef4d) * Adding in a small tool to test loading of indicators on the command line. (easier development) 2009-11-24 14:56:18 -0600 Ted Gould (d66daf8) * releasing version 0.3.0~dev-0ubuntu1~ppa6~tl3 2009-11-24 14:55:22 -0600 Ted Gould (411182c) * debian/control: Making sure the tools package is using the same version of the library that it was built with. 2009-11-24 14:52:43 -0600 Ted Gould (8e82971) * releasing version 0.3.0~dev-0ubuntu1~ppa6~tl2 2009-11-24 14:51:27 -0600 Ted Gould (f5ad201) * Adding support for remove. 2009-11-24 14:50:53 -0600 Ted Gould (bfb7a29) * Adding support for removing entries 2009-11-24 10:34:31 -0600 Ted Gould (06ac252) * releasing version 0.3.0~dev-0ubuntu1~ppa6~tl1 2009-11-24 10:33:21 -0600 Ted Gould (5a914ca) * debian/control, debian/libindicator-tools: Adding in a new package for the tools of libindicator. 2009-11-24 10:28:51 -0600 Ted Gould (cc1c8d4) * Adding a new tool to load indicators from the command line. 2009-11-24 10:19:34 -0600 Ted Gould (b6f78fa) * Stopping the app when the window closes. 2009-11-24 10:13:44 -0600 Ted Gould (cd27c1b) * Grabbing the entry added function as well, didn't realize how much it did :) 2009-11-24 10:11:36 -0600 Ted Gould (a9b6d6f) * Showing the menubar and window 2009-11-24 10:04:28 -0600 Ted Gould (93650be) * Adding a small little tool to load an indicator from the command line. 2009-11-16 23:23:12 -0600 Ted Gould (f8b4671) * Merging in from Robert. 2009-11-16 23:18:28 -0600 Ted Gould (f040dac) * releasing version 0.3.0~dev-0ubuntu1~ppa5 2009-11-16 23:18:22 -0600 Ted Gould (7b0d813) * debian/control: Adding a depend for the -dev package on the base library to stop users from linking staticly. 2009-11-17 14:06:59 +1100 Robert Collins (18eb9ed) * Depend on libindicator0 to pull it in when libindicator-dev is a build-dep. 2009-11-16 15:26:59 -0600 Ted Gould (961fafa) * Confused 2009-11-16 15:26:25 -0600 Ted Gould (b72113b) * releasing version 0.3.0~dev-0ubuntu1~ppa4 2009-11-16 15:25:07 -0600 Ted Gould (a095f05) * releasing version 0.3.0~dev-0ubuntu1~ppa4 2009-11-16 15:25:01 -0600 Ted Gould (52fd9ea) * 64-bit fix for printf's 2009-11-05 10:56:41 -0600 Ted Gould (a7b7787) * 64-bit fix in that GTypes are not ints on 64-bit 2009-11-05 10:25:54 -0600 Ted Gould (a87ce28) * releasing version 0.3.0~dev-0ubuntu1~ppa3 2009-11-05 10:25:09 -0600 Ted Gould (a6c762e) * debian/control: Adding build deps dbus-glib as well. 2009-11-05 10:09:43 -0600 Ted Gould (2fb0a49) * releasing version 0.3.0~dev-0ubuntu1~ppa2 2009-11-05 10:08:29 -0600 Ted Gould (3177188) * debian/control: Adding build deps for the libraries we're using. Seems we should have done that earlier, eh? 2009-11-05 09:16:25 -0600 Ted Gould (8569ff3) * releasing version 0.3.0~dev-0ubuntu1~ppa1 2009-11-05 09:15:33 -0600 Ted Gould (20d9f0e) * * Changing the object interface to allow for multiple items per module. * Changing debian/libindicator-dev.install for the adjusted include path. 2009-11-05 09:14:25 -0600 Ted Gould (c347400) * Sync with trunk 2009-11-05 09:13:41 -0600 Ted Gould (db9e8f4) * Changing the indicator-object API to support indicators that have multiple entries, and are dynamic. 2009-11-04 13:18:22 -0600 Ted Gould (d6901e1) * releasing version 0.3.0~dev-0ubuntu1~ppa1~multi1 2009-11-04 13:17:33 -0600 Ted Gould (15120ed) * Changing version. 2009-11-04 13:16:34 -0600 Ted Gould (77033be) * releasing version 0.2.1-0ubuntu2~ppa2~multi1 2009-11-04 13:13:23 -0600 Ted Gould (2802941) * Changing debian/libindicator-dev.install for the adjusted include path. 2009-11-04 13:07:37 -0600 Ted Gould (0512f86) * Changing the object interface to allow for multiple items per module. 2009-11-04 11:34:44 -0600 Ted Gould (34f914c) * Changing the include directory as well. 2009-11-04 11:34:00 -0600 Ted Gould (4a558fc) * Moving everything up to '3' as we're breaking everyone pretty bad at this point. 2009-11-04 11:24:25 -0600 Ted Gould (2b754cb) * Updating to current trunk. 2009-11-04 11:19:26 -0600 Ted Gould (534aab3) * Use close instead of unreffing. 2009-11-04 11:14:22 -0600 Ted Gould (8c321fa) * Adding a simple indicator test that checks to make sure we can signal up the stack. 2009-11-04 10:55:48 -0600 Ted Gould (8033011) * Building a dummy indicator that signals. 2009-11-04 10:53:14 -0600 Ted Gould (db2a239) * Using the proper define for the type. 2009-11-04 08:19:04 -0600 Ted Gould (5ad8e30) * releasing version 0.2.1-0ubuntu2~ppa1 2009-11-04 08:15:18 -0600 Ted Gould (3d93d5a) * * Adding in service management code. * debian/control: Adding a target for libindicator0 * Adding libindicator0.install and libindicator-dev.install 2009-11-04 08:14:17 -0600 Ted Gould (61e1ae1) * Updating to trunk 2009-11-03 23:22:23 -0600 Ted Gould (c547687) * Adding a service management interface into libindicators as many will use that. 2009-11-03 23:17:33 -0600 Ted Gould (7db7886) * Adding in some ID helpers. 2009-11-03 23:15:10 -0600 Ted Gould (0db39bf) * Adding in some signals to make for some more fun. 2009-11-03 22:42:39 -0600 Ted Gould (cb0c099) * Making a warning not use a colloquialism. 2009-11-03 22:40:05 -0600 Ted Gould (cfa83c0) * Changing version to service_version 2009-11-03 22:24:07 -0600 Ted Gould (b267db9) * Updating to current trunk. 2009-11-03 22:23:16 -0600 Ted Gould (e354bc4) * Changing the way the module is free'd 2009-11-03 22:16:43 -0600 Ted Gould (03e8903) * Having the test expect an object, but fail when calling the functions. 2009-11-03 21:44:51 -0600 Ted Gould (1a528a7) * Make the tester dynamically link the lib so that there's not two versions of everything. 2009-11-03 21:38:09 -0600 Ted Gould (10aa800) * Linking the indicators with the libindicator library. 2009-11-03 21:33:08 -0600 Ted Gould (bffbb2c) * Switching to checking the entires list instead of individual functions. 2009-11-03 21:31:04 -0600 Ted Gould (57642ed) * Converting the dummy indicators over to the new API. They compile now. 2009-11-03 20:27:00 -0600 Ted Gould (9fa35ba) * Syncing up with trunk before merging. 2009-11-03 20:23:41 -0600 Ted Gould (541f18c) * Merging in an interface for loading modules cleanly. 2009-11-03 17:06:39 -0600 Ted Gould (c09917d) * Changing comment on private struct. 2009-11-03 16:38:11 -0600 Ted Gould (1f96a34) * Typo 2009-11-03 16:38:05 -0600 Ted Gould (258f461) * Creating the actual backing function for indicator_object_get_entries. 2009-11-03 14:00:08 -0600 Ted Gould (78868a0) * Adding in a default handler for get_entries. 2009-11-03 13:40:10 -0600 Ted Gould (ed409d4) * Whew, blew up the interface and built it back again. 2009-11-03 13:19:25 -0600 Ted Gould (0575b91) * Redefining the interface. Now this object should get subclassed by folks. 2009-11-03 13:03:50 -0600 Ted Gould (e2ce2dd) * Removing the instance object. I think that we can do everything we need by using the object. 2009-11-03 11:54:09 -0600 Ted Gould (6935a6b) * Switching to a set_type function instead of making people do that themselves. 2009-11-03 11:52:16 -0600 Ted Gould (aaacaac) * Adding in the basis for the instance class. 2009-11-03 11:46:51 -0600 Ted Gould (614606a) * Stripping out the symbols for the old stuff, and going with the new of just getting a type. 2009-11-03 11:16:20 -0600 Ted Gould (1021a83) * We need atleast the loader branch as that's what we want to change. 2009-11-03 09:34:00 -0600 Ted Gould (b3fc779) * Typo 2009-11-03 09:31:53 -0600 Ted Gould (07c7bb1) * Comments in the copyright statements updated. 2009-11-02 17:15:12 -0600 Ted Gould (ff0cc74) * releasing version 0.2.1-0ubuntu2~ppa1~sm2 2009-11-02 17:14:34 -0600 Ted Gould (c626be5) * Fixing package config file to point to library 2009-11-02 17:12:06 -0600 Ted Gould (0aa2106) * Oops, we need to tell package config that we're a big library now. 2009-11-02 16:50:02 -0600 Ted Gould (a4652e1) * releasing version 0.2.1-0ubuntu2~ppa1~sm1 2009-11-02 16:39:53 -0600 Ted Gould (00808f0) * * debian/control: Adding a target for libindicator0 * Adding libindicator0.install and libindicator-dev.install 2009-11-02 16:31:03 -0600 Ted Gould (8e4486c) * Adding in service management code. 2009-11-02 16:17:31 -0600 Ted Gould (5ccc73b) * Distcheck fixes. Looking for the files in the right place and making sure we clean up after ourselves. 2009-11-02 16:14:53 -0600 Ted Gould (c3d30bd) * We should pass the test if we get a connection, it means we activated. 2009-11-02 16:13:28 -0600 Ted Gould (6cb18e9) * We want to not get the shutdown. Since we're testing that we get it without connection we can now assume that if we don't get it we should pass. 2009-11-02 16:08:04 -0600 Ted Gould (ddb2ab7) * Adding a fallback to the session bus after trying the starter bus. 2009-11-02 11:24:03 -0600 Ted Gould (5e5f495) * Switching the name to match the service file... should fail. 2009-11-02 11:21:20 -0600 Ted Gould (dc5fbef) * Building a service file. 2009-11-02 11:17:10 -0600 Ted Gould (9a15eec) * Adding in the basic data needed to start bringing up a test to start the service. 2009-11-02 10:48:18 -0600 Ted Gould (90446e0) * Fixing up the build rules so that they're directory independent. 2009-11-02 09:35:48 -0600 Ted Gould (c99ef22) * Some things are errors that should really be warnings. 2009-11-02 09:31:43 -0600 Ted Gould (0745e42) * Ah, we can't throw an error on success. 2009-10-30 17:18:10 -0500 Ted Gould (911b9d7) * Adding a test that ensures we don't get a connect signal. 2009-10-30 15:58:57 -0500 Ted Gould (aa1549d) * Adding in the connected property and signalling when we're all hooked up. 2009-10-30 11:30:49 -0500 Ted Gould (d9dc770) * Ubuntu Desktop updates 2009-10-29 21:58:48 -0500 Ted Gould (a9e61b6) * A service proxy, and then calling watch. 2009-10-29 21:28:48 -0500 Ted Gould (02ce4f5) * Building the dbus proxy and using it a little bit. 2009-10-29 20:23:54 -0500 Ted Gould (c87569c) * Ah, forgot to free name 2009-10-29 20:12:44 -0500 Ted Gould (12fbcd5) * Properties functions. 2009-10-29 20:02:46 -0500 Ted Gould (9af4097) * Signals and properties, oh my! 2009-10-29 17:34:00 -0500 Ted Gould (c099b03) * Adding the API functions. 2009-10-29 17:22:29 -0500 Ted Gould (74296a6) * Oops, forgot to set to passed. 2009-10-29 17:21:39 -0500 Ted Gould (5819476) * Sending shutdown signal 500 ms after getting a name if we have no watchers. 2009-10-29 17:18:51 -0500 Ted Gould (fbba415) * Adding in the watchers and timeout parameter. 2009-10-29 16:29:47 -0500 Ted Gould (82aaaed) * Adding in some shared strings for finding intefaces and objects. 2009-10-29 16:11:02 -0500 Ted Gould (2e39b18) * Woot! We're a DBus service now. 2009-10-29 15:24:49 -0500 Ted Gould (f99a9f2) * Building ourselves a DBus proxy. 2009-10-29 14:55:25 -0500 Ted Gould (145b214) * Filling in more of the name property. 2009-10-29 13:45:37 -0500 Ted Gould (fbb2bc9) * Adding in the 'name' property 2009-10-29 13:13:07 -0500 Ted Gould (621a7ba) * Adding the shutdown signal 2009-10-29 13:03:39 -0500 Ted Gould (22a5b08) * Woot! A failing test. Look how TDD I am. 2009-10-29 12:57:56 -0500 Ted Gould (a72fc58) * Making the gtester stuff into a autotest thingy. 2009-10-29 11:34:44 -0500 Ted Gould (fc573dc) * Creating a new test and linking it into things. 2009-10-29 11:33:37 -0500 Ted Gould (ec0809e) * Putting a dummy implementation in for _new for linking 2009-10-29 10:49:12 -0500 Ted Gould (b60a7f1) * Adding basic interfaces and docs to IndicatorService 2009-10-29 09:56:39 -0500 Ted Gould (0af9206) * Defining some API and boot strapping documentation. 2009-10-29 09:33:21 -0500 Ted Gould (b8db818) * Making 'INDICATOR' the prefix for the objects. 2009-10-29 09:27:05 -0500 Ted Gould (ba8af82) * Putting in some templated objects. 2009-10-28 16:58:19 -0500 Ted Gould (606b493) * Building ourselves a little dbus spec 2009-10-28 16:55:18 -0500 Ted Gould (15995b7) * Adding a description for the indicator service. 2009-10-28 16:46:25 -0500 Ted Gould (0220cc7) * Grabbing the loader branch 2009-10-28 16:43:19 -0500 Ted Gould (b98a481) * Removing valgrind as I want to clean this branch up and make another for that. 2009-10-28 16:41:34 -0500 Ted Gould (755adf0) * Oh, legal headers. Fun, fun. 2009-10-28 16:37:49 -0500 Ted Gould (a8b1436) * Adding in comments. 2009-10-14 09:08:40 -0500 Ted Gould (f28c65a) * Adding in check for valgrind that we'll need for the test tools. 2009-10-11 22:06:46 -0500 Ted Gould (7cc9b8f) * Adding the terballs into ignore 2009-10-11 22:05:28 -0500 Ted Gould (0b18e53) * Making a tools directory 2009-10-11 21:50:46 -0500 Ted Gould (ccc7f82) * using the blank dummy indicator 2009-10-11 21:49:22 -0500 Ted Gould (a2f4f86) * Building a new dummy indicator that doesn't have any symbols in it. 2009-10-09 08:12:31 +0200 Martin Pitt (98c7033) * releasing version 0.2.1-0ubuntu1 (tag: 0.2.1-0ubuntu1, refs/bzr/origin/tags/0.2.1-0ubuntu1) 2009-10-08 21:03:30 -0400 Ted Gould (bb7b49a) * Testing the accessors 2009-10-08 20:47:19 -0400 Ted Gould (5144944) * Adding some accessor functions for the various GTK objects. 2009-10-08 20:22:59 -0400 Ted Gould (fda24e4) * Maintaining a reference to the objects we create in the object. 2009-10-08 20:18:20 -0400 Ted Gould (32fc4b8) * We need to use GTK. 2009-10-08 20:17:04 -0400 Ted Gould (9c16e7c) * A better dummy menu. 2009-10-08 20:12:48 -0400 Ted Gould (97a4004) * Create a very simple indicator and testing it. 2009-10-08 19:50:40 -0400 Ted Gould (a28e917) * Being a bit more verbose 2009-10-08 19:49:23 -0400 Ted Gould (56450cf) * Making it so that the null test checks for failure as we shoudln't have a null image and label. Also making it so that warnings don't cause the test to fail. 2009-10-08 19:48:44 -0400 Ted Gould (66b0d1b) * Making it so that we use the same unref code as everyone else. 2009-10-08 19:17:15 -0400 Ted Gould (4ea2868) * Truth again. Keeps bitting back. I shouldn't of lied in the 2nd grade, I confess! No more, please. 2009-10-08 19:12:47 -0400 Ted Gould (b2942d9) * Checking to see if a file exists before trying to load it. 2009-10-08 19:07:03 -0400 Ted Gould (18f6396) * Truth. Sucks. 2009-10-08 19:04:51 -0400 Ted Gould (a65694f) * Turning all the return if fails into proper if's with warning and unref the object so there aren't any memory leaks. 2009-10-08 18:49:08 -0400 Ted Gould (3bafca7) * Use the new build dir flag 2009-10-08 18:48:59 -0400 Ted Gould (3766586) * Build dir fix and making gtester run all of them even if one fails. 2009-10-08 18:43:10 -0400 Ted Gould (bece9de) * Making it so that we're not using g_return_if_fail as it messes up the test suite. 2009-10-08 18:36:06 -0400 Ted Gould (f4b307c) * Fleshing out the load from file function. Still fails. 2009-10-08 17:57:14 -0400 Ted Gould (bce9f51) * A test to load the dummy indicator 2009-10-08 17:53:01 -0400 Ted Gould (1b828c9) * Apparently they have to be installable to get the .so. Fail. 2009-10-08 17:11:47 -0400 Ted Gould (d946049) * Adding a test that should pass as given a bad filename we should get no object back. 2009-10-08 17:09:21 -0400 Ted Gould (b4d20eb) * Adding a function to create an object from a file 2009-10-08 17:03:20 -0400 Ted Gould (c594126) * Creating a dummy indicator that returns null 2009-10-08 17:02:06 -0400 Ted Gould (605f74b) * Switch from GLib to GTK as that's what we really needed. 2009-10-08 16:34:13 -0400 Ted Gould (26ced5c) * Using a weak ref instead of connecting to a signal that doesn't exist 2009-10-08 16:32:19 -0400 Ted Gould (3bf9efb) * Putting data in the private 2009-10-08 16:29:36 -0400 Ted Gould (4658844) * Test to build the object and unref it. 2009-10-08 15:29:55 -0400 Ken VanDine (133d9bd) * * Upstream release 0.2.1 (LP: #446619) * Puts a copyright header on the header file. Should have been there all along. 2009-10-08 13:00:00 -0400 Ted Gould (1386478) * Fleshing out the test a little bit. 2009-10-08 12:29:12 -0400 Ted Gould (c314d60) * Adding in a simple little test. 2009-10-08 12:18:23 -0400 Ted Gould (fa946df) * Adding in a tests folder 2009-10-08 12:05:36 -0400 Ted Gould (1ca9666) * Ignoring our new file. 2009-10-08 10:17:18 -0400 Ted Gould (1518975) * releasing version 0.2.1-0ubuntu1~ppa1 2009-10-08 10:16:40 -0400 Ted Gould (972ad5e) * * Upstream release 0.2.1 * Puts a copyright header on the header file. Should have been there all along. 2009-10-08 10:14:24 -0400 Ted Gould (6d8cd64) * Merging in ubuntu-desktop branch 2009-10-08 10:11:01 -0400 Ted Gould (b5f41d1) * 0.2.1 (tag: 0.2.1, refs/bzr/origin/tags/0.2.1) 2009-10-06 19:07:31 -0400 Ted Gould (a7a8c73) * Adding license information to the header 2009-10-06 16:32:23 -0400 Ted Gould (24d0253) * Adding some pkg-config love to get things compiling all nice like. 2009-10-06 15:28:41 -0400 Ted Gould (1f822bf) * Building a base object. 2009-10-06 11:00:34 -0400 Ted Gould (8935708) * oops, should be GPLv3 not LGPLv3 2009-10-06 10:58:01 -0400 Ted Gould (0d87e4e) * Header for the header file that has the LGPLv3 2009-09-10 20:22:50 +0200 Martin Pitt (90bed29) * releasing version 0.2.0-0ubuntu1 (tag: 0.2.0-0ubuntu1, refs/bzr/origin/tags/0.2.0-0ubuntu1) 2009-09-10 20:22:38 +0200 Martin Pitt (9075de4) * more verbose changelog 2009-09-10 13:09:34 -0400 Ken VanDine (287766d) * Upstream release 0.2.0 (LP: #427443) 2009-09-10 11:09:13 -0500 Ted Gould (7f83810) * Merging in desktop branch 2009-09-10 11:05:56 -0500 Ted Gould (507d19b) * releasing version 0.2.0-0ubuntu1~ppa1 2009-09-10 11:04:51 -0500 Ted Gould (2eb5232) * Upstream release 0.2.0 2009-09-10 11:03:29 -0500 Ted Gould (1c30efe) * Making 0.2.0 (tag: 0.2.0, refs/bzr/origin/tags/0.2.0) 2009-08-25 08:38:04 +0200 Martin Pitt (e5afc87) * releasing version 0.2.0~bzr325-0ubuntu1 2009-08-25 08:33:06 +0200 Martin Pitt (6736e77) * debian/control: Fix Vcs-* links. 2009-08-25 08:32:27 +0200 Martin Pitt (f434a87) * Flush changelog. 2009-08-24 12:20:28 -0400 Ken VanDine (7e26ec7) * * debian/control: - Set both Vcs-Bzr and Vcs-Bzr-Browser, with ~ubuntu-desktop 2009-08-24 09:00:47 -0400 Ken VanDine (689de8d) * New version (LP: #417039) 2009-08-19 11:38:23 -0500 Ted Gould (999dbf8) * Using AM 1.11 silent mode 2009-08-18 13:55:03 -0500 Ted Gould (772dcaf) * releasing version 0.2.0~bzr325-0ubuntu1~ppa1 2009-08-18 13:54:50 -0500 Ted Gould (0ec3b86) * Removing the install file. 2009-08-18 13:45:00 -0500 Ted Gould (a810a01) * * Merging in the seperation from indicator-applet * debian/* Removing all of the indicator-applet stuff 2009-08-18 13:41:27 -0500 Ted Gould (f9bc0fe) * Merging in the separation from indicator-applet 2009-08-18 11:52:09 -0500 Ted Gould (ba24704) * Deleting everything only leaving libindicator 2009-08-17 09:18:22 -0500 Ted Gould (dcbb7eb) * releasing version 0.2.0~bzr319-0ubuntu5~ppa5 2009-08-17 09:18:16 -0500 Ted Gould (8fda9af) * Setting the icon path in the .pc file. 2009-08-08 09:55:54 -0600 Ted Gould (033de55) * Adding an icons directory to the .pc file 2009-08-07 19:02:23 +0100 Ted Gould (79d17f5) * releasing version 0.2.0~bzr319-0ubuntu5~ppa4 2009-08-07 19:02:11 +0100 Ted Gould (1a01d82) * * Merging onto the main packaging branch. * Renaming the second Bonobo server description file to match that of the FastUserSwitchApplet. * Upstream merge for better naming of the applet. * Updating from upstream with two (count them) two applets installed in the source. * debian/control: Adding information on indicator-applet-sus which is a different applet for the SUS indicator. * debian/indicator-applet.install: Making it more specific so that it doesn't grab the directories that now have additional files created by indicator-applet-sus existing. * debian/indicator-applet-sus.install: List files that are now used by the new binary package. 2009-08-07 19:00:00 +0100 Ted Gould (4aa0584) * Merging in the branch making two applets. 2009-08-07 18:50:37 +0100 Ted Gould (853ef5b) * releasing version 0.2.0~bzr319-0ubuntu5~ppa3 2009-08-07 18:50:32 +0100 Ted Gould (4054025) * Renaming the second Bonobo server description file to match that of the FastUserSwitchApplet. 2009-08-07 18:47:02 +0100 Ted Gould (3a8b5ca) * Changing the Bonobo server description file name to match that of FUSA. 2009-08-07 18:40:26 +0100 Ted Gould (721b0f9) * releasing version 0.2.0~bzr319-0ubuntu5~ppa2 2009-08-07 18:40:19 +0100 Ted Gould (e97463e) * Upstream merge for better naming of the applet. 2009-08-07 18:40:03 +0100 Ted Gould (31fac01) * releasing version 0.2.0~bzr319-0ubuntu5~ppa1 2009-08-07 18:38:59 +0100 Ted Gould (38e4c74) * Oops, we need more identity. 2009-08-07 18:31:45 +0100 Ted Gould (709f0a8) * Locking the version number so the two indicator-applets are the same 2009-08-07 18:30:27 +0100 Ted Gould (93135b1) * * debian/control: Adding information on indicator-applet-sus which is a different applet for the SUS indicator. * debian/indicator-applet.install: Making it more specific so that it doesn't grab the directories that now have additional files created by indicator-applet-sus existing. * debian/indicator-applet-sus.install: List files that are now used by the new binary package. 2009-08-07 18:18:55 +0100 Ted Gould (ae15eee) * Updating from upstream with two (count them) two applets installed in the source. 2009-08-07 18:17:42 +0100 Ted Gould (8fd9f27) * Switching the name to the proper server file. 2009-08-07 17:43:09 +0100 Ted Gould (65df6f1) * Loading only the SUS plugin. 2009-08-07 17:41:21 +0100 Ted Gould (6c07c79) * Blocking out SUS from standard applet. 2009-08-07 16:55:23 +0100 Ted Gould (3bb7806) * Fixing the generation rules for the bonobo server files. 2009-08-07 16:06:32 +0100 Ted Gould (327dfdb) * Ignoring more files. 2009-08-07 15:57:14 +0100 Ted Gould (2f92722) * Switching the name to actually be correct. 2009-08-07 15:53:10 +0100 Ted Gould (059f1bf) * Changing the name of the directory to -sus which makes more sense 2009-08-07 15:45:40 +0100 Ted Gould (c35dbea) * New executable name 2009-08-07 15:32:30 +0100 Ted Gould (f33fa71) * Renaming the server file 2009-08-07 14:24:33 +0100 Ted Gould (019d958) * Adjusting the namespace. Just to make things fun like that. 2009-08-07 14:21:31 +0100 Ted Gould (f2a3bfc) * Making the schema translatable 2009-08-07 14:19:27 +0100 Ted Gould (5bc7f7d) * Adding a new server to connect with our new applet. Still needs changes as it's just a copy. 2009-08-07 14:15:15 +0100 Ted Gould (99caa03) * Adding a new build target for our new applet 2009-08-07 14:13:05 +0100 Ted Gould (a1ec732) * Adding the new src to the build system 2009-08-07 12:14:44 +0100 Ted Gould (3b1bb35) * New src entry 2009-08-06 14:57:57 +0100 Ted Gould (d7f91b9) * Aurelien's patch to add a set_server function to indicators. 2009-08-06 15:43:38 +0200 Aurelien Gateau (937dba5) * Updated documentation 2009-08-05 17:53:44 +0100 Ted Gould (a3eb3ea) * Update to core-dev branch 2009-08-05 15:51:59 +0200 Aurelien Gateau (c4bd83a) * Introduce indicate_indicator_set_server() so that server can be defined for message indicators too. 2009-08-05 11:29:13 +0100 Jonathan Riddell (8223eb6) * Add build-dep on gtk-doc-tools 2009-08-05 11:12:14 +0100 Jonathan Riddell (924a0a6) * merge with Ken, fix gtk-doc 2009-08-05 09:50:42 +0100 Ken VanDine (bff1218) * indicator-applet (0.2.0~bzr319-0ubuntu3) karmic; urgency=low 2009-08-05 01:26:47 +0100 Ted Gould (6a2b4b1) * releasing version 0.2.0~bzr319-0ubuntu1~ppa5 2009-08-05 01:26:41 +0100 Ted Gould (cc920f1) * Upstream fix for server.c and get indicators with hidden indicators in the list. 2009-08-05 01:25:55 +0100 Ted Gould (a3e59c2) * Maintaining the count independent of the entires. 2009-08-05 00:41:16 +0100 Jonathan Riddell (07a83fa) * Run ./autogen.sh before upload 2009-08-05 00:23:53 +0100 Jonathan Riddell (daaa9a5) * tidy changelog for release 2009-08-05 00:19:38 +0100 Jonathan Riddell (cb9d427) * merge current package for upload, https://code.edge.launchpad.net/~indicator-applet-developers/indicator-applet/applet-packaging/+merge/9671 2009-08-04 12:30:59 +0100 Ted Gould (42ba02f) * releasing version 0.2.0~bzr319-0ubuntu1~ppa4 2009-08-04 12:26:53 +0100 Ted Gould (c495a62) * Upstream fix to PC file. 2009-08-04 12:25:24 +0100 Ted Gould (e4ac1dc) * Update the pc file from the GTK split out. 2009-08-04 10:53:52 +0100 Ted Gould (72093e2) * releasing version 0.2.0~bzr319-0ubuntu1~ppa3 2009-08-04 10:53:46 +0100 Ted Gould (41c535b) * debian/control: Fixing the library reference of libindicate-gtk-dev 2009-08-04 10:52:00 +0100 Ted Gould (96ace70) * releasing version 0.2.0~bzr319-0ubuntu1~ppa2 2009-08-04 10:51:33 +0100 Ted Gould (64034dd) * Forgot to autogen.sh 2009-08-04 10:27:44 +0100 Ted Gould (541c9b2) * releasing version 0.2.0~bzr319-0ubuntu1~ppa1 2009-08-04 10:27:27 +0100 Ted Gould (dd164ac) * Setting up the merge history correctly. 2009-08-04 10:27:08 +0100 Ted Gould (5909ee4) * * Merging in upstream code to split out libindicate-gtk * debian/control: * Changing the version number of libindcate to 2 to match the .so numbering. * Creating packages for libindicate-gtk * Added libindicate-gtk-dev.install and libindicate-gtk0.install for the new library. * Renamed libindicate1.install to libindicate2.install to match the package name change. * Modified libindicate-dev to be more specific about the header files that it grabs. 2009-08-04 10:24:51 +0100 Ted Gould (74bc54c) * Merging in the splitout of a GTK version of the lib 2009-08-04 01:38:29 +0100 Ted Gould (63ed0ba) * releasing version 0.2.0~bzr309-0ubuntu4~ppa2 2009-08-04 01:36:30 +0100 Ted Gould (54b4e00) * debian/control: Fixing some libindicate1's that should be libindicate2 and making everything dependent on the versions that are built here in the package. 2009-08-04 01:31:34 +0100 Ted Gould (be06bcb) * releasing version 0.2.0~bzr309-0ubuntu4~ppa1 2009-08-04 01:26:31 +0100 Ted Gould (6401c45) * Adding in a make fix 2009-08-04 01:26:10 +0100 Ted Gould (16b15aa) * Adding libindicate a build include 2009-08-04 00:32:09 +0100 Ted Gould (8bed775) * * Added libindicate-gtk-dev.install and libindicate-gtk0.install for the new library. * Renamed libindicate1.install to libindicate2.install to match the package name change. * Modified libindicate-dev to be more specific about the header files that it grabs. 2009-08-04 00:27:09 +0100 Ted Gould (84f0002) * * debian/control: * Changing the version number of libindcate to 2 to match the .so numbering. * Creating packages for libindicate-gtk 2009-08-04 00:23:05 +0100 Ted Gould (a1fa7ba) * Merging in upstream code to split out libindicate-gtk 2009-08-04 00:18:10 +0100 Ted Gould (475cf3d) * Removing some more noise 2009-08-04 00:14:37 +0100 Ted Gould (2b41594) * Ignoring the tarball 2009-08-04 00:10:35 +0100 Ted Gould (34baaec) * Ignoring the right file 2009-08-04 00:08:51 +0100 Ted Gould (c3034d9) * Making seperate versioning for libindicate-gtk 2009-08-04 00:06:00 +0100 Ted Gould (b31efb2) * Bumping the version as we removed a function. 2009-08-04 00:01:06 +0100 Ted Gould (8850baa) * A bunch of distcheck fixes to clean things up 2009-08-03 23:53:40 +0100 Ted Gould (3497522) * Some odd change 2009-08-03 23:53:17 +0100 Ted Gould (3ec1d88) * Last libgtk-pixbuf header 2009-08-03 23:52:48 +0100 Ted Gould (8c7a1a7) * Removing GTK dependencies from the libindicate stuff 2009-08-03 23:49:42 +0100 Ted Gould (d94f22a) * Fixing these guys to include the -gtk library where needed 2009-08-03 23:45:34 +0100 Ted Gould (f6fb98d) * Some ignore files for fun 2009-08-03 23:43:37 +0100 Ted Gould (793db0f) * Oops, forgot the listener stuff 2009-08-03 23:31:00 +0100 Ted Gould (78ad4c4) * Moving the listener code and some indicator code into libindicate-gtk 2009-08-03 19:25:05 +0100 Ted Gould (840e1c8) * Okay, now it is the offending function in it. 2009-08-03 19:10:34 +0100 Ted Gould (ecde85f) * Creating a default little GTK library to move the GTK stuff in 2009-08-03 18:50:57 +0100 Ted Gould (b3d3f3d) * Adding a function to set the server of the indicator upon creation. indicate_indicator_new_with_server() 2009-08-03 18:12:34 +0100 Ted Gould (573c458) * Merging in changes to the destroy and removing a warning. 2009-08-03 18:08:22 +0100 Ted Gould (f344374) * Ignoring built files 2009-07-27 17:20:24 +0200 Aurelien Gateau (7f379d5) * Removed warning: it's annoying in unittests. 2009-07-27 17:18:41 +0200 Aurelien Gateau (8157a2c) * Destroy dbus proxies in listener finalize. 2009-07-21 11:41:46 -0500 Ted Gould (5390823) * Fixing the other signal marshallers 2009-07-21 11:39:26 -0500 Ted Gould (b8b2c52) * Using the server marshaller 2009-07-21 11:37:51 -0500 Ted Gould (5cbbca2) * Creating the server marshallers that we need 2009-07-21 10:42:36 -0500 Ted Gould (e3a0b5a) * Oops, we shouldn't have a prototype for a function that doesn't exist. Thanks to Aurilien. 2009-07-17 21:24:56 -0500 Ted Gould (064740b) * releasing version 0.2.0~bzr309-0ubuntu3 2009-07-17 21:24:31 -0500 Ted Gould (61730d0) * Now moving on to Karmic 2009-07-17 21:24:00 -0500 Ted Gould (c594f60) * releasing version 0.2.0~bzr309-0ubuntu2 2009-07-03 14:42:38 -0500 Ted Gould (049947b) * Configure change to cleanup output 2009-07-03 14:41:48 -0500 Ted Gould (7867885) * A little like mentioned on the GNOME Wiki, but doesn't work until I have a higher version of automake. Doesn't seem to cause problems though. 2009-06-08 09:31:48 -0500 Ted Gould (63dad6a) * Patch from Mark Trompell to make suffix checking better. 2009-05-13 15:01:34 -0500 Ted Gould (aee8914) * debian/control, debian/libindicate-doc.install: Merging in Ken Vandine's work on making a -doc package for libindicate. 2009-05-13 14:52:04 -0400 Ken VanDine (f36cc1b) * added debian/libindicate-doc.install 2009-05-13 13:25:33 -0400 Ken VanDine (10e5164) * Added package libindicate-doc and removed dbus-test-runner build requirement 2009-05-05 16:45:01 +0100 Ted Gould (e38da9b) * Merge from upstream, includes documentation. 2009-05-05 16:43:20 +0100 Ted Gould (7926d56) * Merging in the documentation branch. 2009-04-30 22:30:15 -0500 Ted Gould (1b3fd92) * Never understand this file really. 2009-04-30 22:30:04 -0500 Ted Gould (395ae9a) * Fixing function listing 2009-04-30 22:29:44 -0500 Ted Gould (c027c7f) * Fixing typo 2009-04-30 21:45:19 -0500 Ted Gould (3810da4) * Fixing some documentation bugs. 2009-04-30 21:42:39 -0500 Ted Gould (51f63e1) * Documenting most of the public visible functions 2009-04-30 20:58:42 -0500 Ted Gould (1595ee2) * Adding in arguments for the signals 2009-04-30 20:53:10 -0500 Ted Gould (f64bd73) * Adding in arguments on the signal docs. 2009-04-30 20:44:43 -0500 Ted Gould (dbfd181) * Woot, signal documentation works now. 2009-04-30 20:37:52 -0500 Ted Gould (15720aa) * Basic signals docs. 2009-04-30 20:24:53 -0500 Ted Gould (f4a1e46) * Server section documentation. 2009-04-30 20:17:52 -0500 Ted Gould (a1ba880) * Comments for the class, who put all those functions on there... 2009-04-30 16:57:51 -0500 Ted Gould (933bcaa) * Adding in message documentation and cleaning up some mistakes as I see them. 2009-04-30 16:04:09 -0500 Ted Gould (298abb1) * Never understand this file 2009-04-30 16:03:42 -0500 Ted Gould (ef5a4ba) * Doing a better job about defining out the documentation gets created and looks. Much cleaner. 2009-04-30 15:50:27 -0500 Ted Gould (0b5e0c1) * Breaking out into sections. 2009-04-30 15:40:06 -0500 Ted Gould (a77a808) * Section information 2009-04-30 15:16:47 -0500 Ted Gould (cd973f1) * Adding to the unused side of things. 2009-04-30 15:16:06 -0500 Ted Gould (6a4918e) * Removing the big defines that aren't useful and the boilerplate get_type functions. 2009-04-30 15:12:37 -0500 Ted Gould (d73f65f) * Reformatting to make gtk-doc happy. 2009-04-30 14:35:30 -0500 Ted Gould (9201eb6) * Making it more like English and less like a pointer table. 2009-04-30 14:29:40 -0500 Ted Gould (877ac7a) * Adding in IndicateIndicatorClass documentation. 2009-04-30 14:10:41 -0500 Ted Gould (dd49cd3) * What is the server 2009-04-30 14:10:33 -0500 Ted Gould (47c4b8e) * Typo 2009-04-30 14:06:45 -0500 Ted Gould (43f575e) * Getting most of the indicator documentation in the pool. 2009-04-30 13:07:29 -0500 Ted Gould (1c91e43) * Turns out that gtk-doc can't have the name of the function on the same line as the start of the comment. How stupid. 2009-04-30 12:08:32 -0500 Ted Gould (a41eab6) * Removing symbols that shouldn't be in the docs anyway. 2009-04-30 12:04:20 -0500 Ted Gould (73a5c92) * Ignoring the dbus and glib-marshaller generated header files. 2009-04-30 11:51:46 -0500 Ted Gould (f62b836) * Dispaly typo 2009-04-30 11:40:56 -0500 Ted Gould (c73af69) * First pass at trying to create some function documentation for Indicator 2009-04-29 10:11:52 -0500 Ted Gould (0ed0749) * Patch from Niel Patel to close the directory after opening it. 2009-04-29 10:11:21 -0500 Ted Gould (89235a4) * Patch from Niel Patel to close the directory after opening it. 2009-04-27 11:06:50 -0500 Ted Gould (f6767c8) * releasing version 0.2.0~bzr307-0ubuntu2 2009-04-27 11:06:42 -0500 Ted Gould (f6f7c27) * Increment for PPA. Forgot to autogen.sh 2009-04-27 10:52:33 -0500 Ted Gould (d8582f7) * releasing version 0.2.0~bzr307-0ubuntu1 2009-04-27 10:51:25 -0500 Ted Gould (60e4dde) * debian/control: Adding a build-dep on dbus-test-runner 2009-04-27 10:50:40 -0500 Ted Gould (73e576b) * Upstream Snapshot: Adding in a test suite. 2009-04-27 10:48:38 -0500 Ted Gould (0f174a8) * How important a simple backslash is :) 2009-04-27 10:42:39 -0500 Ted Gould (d2d0c7a) * Merging in the testing branch to get some tests for this guy 2009-04-27 10:39:20 -0500 Ted Gould (5899a3f) * Switching to system dbus-test-runner 2009-04-22 23:46:48 -0500 Ted Gould (183d218) * releasing version 0.2.0~bzr305-0ubuntu1 2009-04-22 23:46:23 -0500 Ted Gould (fd65e07) * Upstream update 2009-04-22 23:44:06 -0500 Ted Gould (c292100) * Get the submenu set right. 2009-04-22 22:06:00 -0500 Ted Gould (2f6ccdf) * Slipping in the hbox 2009-04-22 22:02:05 -0500 Ted Gould (d075aee) * Oops, cut and paste error, pulling up the wrong symbols 2009-04-22 17:09:11 -0500 Ted Gould (e1eb7c8) * releasing version 0.2.0~bzr302-0ubuntu1 2009-04-22 17:09:03 -0500 Ted Gould (836e265) * Upstream snapshot, turning version getting feature into a function and adding a name symbol outline. 2009-04-22 17:08:17 -0500 Ted Gould (18397c8) * Turning versions into a function and adding a name symbol. Not yet used though. 2009-04-22 15:56:02 -0500 Ted Gould (f5044ea) * releasing version 0.2.0~bzr301-0ubuntu1 2009-04-22 15:55:50 -0500 Ted Gould (2c0d0d8) * Upstream snapshot, fixing indicator.h 2009-04-22 15:53:30 -0500 Ted Gould (ef4bfde) * Wow, the genius of making a symbol you want to export static is simply amazing. It's truly a wonder of nature that I can tie my shoes in the morning. 2009-04-22 15:23:20 -0500 Ted Gould (adfd764) * releasing version 0.2.0~bzr300-0ubuntu1 2009-04-22 15:23:13 -0500 Ted Gould (fded83b) * Upstream snapshot, fixing indicator.h 2009-04-22 15:22:14 -0500 Ted Gould (c0b1f48) * Oops, not what I wanted. These should have been prototypes not global variables. Takes a second to think about it, but yeah, that's what they were. 2009-04-22 14:52:19 -0500 Ted Gould (d332ad5) * releasing version 0.2.0~bzr299-0ubuntu1 2009-04-22 14:49:27 -0500 Ted Gould (180822b) * Upstream snapshot, forgot a + on GTK 2009-04-22 14:48:36 -0500 Ted Gould (20cfaa9) * Forgot a + on gtk 2009-04-21 22:31:30 -0500 Ted Gould (a380678) * releasing version 0.2.0~bzr298-0ubuntu1 2009-04-21 20:45:05 -0500 Ted Gould (74a2953) * * debian/control: * Add in package libindicator-dev * Add build depends on libxml2-dev for upstream dep 2009-04-21 20:42:26 -0500 Ted Gould (6465b8b) * * debian/control: Add in package libindicator-dev * debian/libindicate-dev.install: Add greater specificity on what gets installed to not get confused with files from libindicator * debian/libindicator-dev.install: Specify which files should be put into the development package. 2009-04-21 17:07:21 -0500 Ted Gould (b630f12) * Upstream snapshot 2009-04-21 17:05:44 -0500 Ted Gould (65381a4) * Release by core-dev into Ubuntu 2009-04-21 15:14:52 -0500 Ted Gould (8c6656e) * Changing to an icon and a lable and building our own item 2009-04-21 15:01:19 -0500 Ted Gould (ae26892) * Putting in and checking version information to ensure we all agree about the header version 2009-04-21 14:49:57 -0500 Ted Gould (4023d35) * Fixing and using the new indicator header. This will help to connect things together and make them actually work in a reasonably type safe way. 2009-04-21 14:35:49 -0500 Ted Gould (b0c9eb5) * Moving the indicators directory to match libindicator 2009-04-21 14:34:19 -0500 Ted Gould (292b04e) * Setting the indicators directory manually 2009-04-21 14:15:22 -0500 Ted Gould (61bc03a) * Creating an indicator lib to make sure we can attach all these things together. 2009-04-20 15:39:42 -0500 Ted Gould (6f87e9c) * Adding a test to build a bunch of indicators 2009-04-20 14:44:25 -0500 Ted Gould (ecad1e3) * Adding in multiple servers connecting in to declare interest test 2009-04-20 13:16:14 -0500 Ted Gould (c5cc32d) * Expanding range of interest test and not checking to see if we got none, we shouldn't get it. 2009-04-20 13:13:04 -0500 Ted Gould (76d5d0d) * Gaurding against setting bad interests 2009-04-20 12:36:07 -0500 Ted Gould (38c6ce2) * Adding an interests test 2009-04-20 12:16:33 -0500 Ted Gould (443c83a) * Woot, now we do distcheck too 2009-04-20 12:11:19 -0500 Ted Gould (5f5f476) * Distcheck fixes 2009-04-20 12:10:58 -0500 Ted Gould (43cf92a) * Chaning the include so that it works for make distcheck 2009-04-20 11:25:33 -0500 Ted Gould (8162f71) * Adding in a simple test 2009-04-20 10:57:57 -0500 Ted Gould (ecfb1c2) * Build infrastructure for first test 2009-04-20 09:34:10 -0500 Ted Gould (a1ccd1a) * Moving tests to examples 2009-04-14 11:36:17 +0200 Martin Pitt (d10264b) * releasing version 0.1.6-0ubuntu1 2009-04-14 11:36:10 +0200 Martin Pitt (4959fae) * * New upstream version * Applied the same fixes as Cody Russell's patch to indicator-messages to the finalize functions here. Should fix LP: #359018 completely. * Minor warnings fixes in search of solution to above. 2009-04-13 14:52:22 -0500 Ted Gould (8270f15) * Adding in support for finding out if people are interesting on the bus using introspection instead of sending a random function call to them and seeing what happens. 2009-04-13 14:47:35 -0500 Ted Gould (e32b37d) * Commenting out some debug messages 2009-04-13 14:41:33 -0500 Ted Gould (46a050c) * Less debug 2009-04-13 14:16:25 -0500 Ted Gould (135906b) * Ah, a typo. Bother. 2009-04-13 14:15:01 -0500 Ted Gould (dec69be) * Okay, connected into that other there code... let's see what happens. 2009-04-13 14:07:46 -0500 Ted Gould (24e268d) * Fleshing out some 2009-04-13 13:30:31 -0500 Ted Gould (bde7e27) * Whoa, it like builds and stuff 2009-04-13 11:54:33 -0500 Ted Gould (2edf3fb) * Fixes to the finalize functions. 2009-04-13 11:31:28 -0500 Ted Gould (cb60d3f) * * New upstream version * Applied the same fixes as Cody Russell's patch to indicator-messages to the finalize functions here. Should fix LP: #359018 completely. * Minor warnings fixes in search of solution to above. 2009-04-13 11:29:13 -0500 Ted Gould (61ded01) * Merging in core-dev 2009-04-13 10:56:39 -0500 Ted Gould (70223e1) * Making into a 6 (tag: 0.1.6, refs/bzr/origin/tags/0.1.6) 2009-04-13 10:30:28 -0500 Ted Gould (f7dc7fa) * Adding a bug number 2009-04-13 10:09:20 -0500 Ted Gould (f0fa474) * Adding in call to the parent class' finalize function as well, this should free all the way up to the top. 2009-04-12 21:55:06 -0500 Ted Gould (a1207dc) * Updating from trunk 2009-04-12 21:42:30 -0500 Ted Gould (e9ef5ec) * Some slight code cleanups to remove warnings 2009-04-12 21:41:48 -0500 Ted Gould (ce66459) * Proto-pseudo-code for the introspection functions that are going to be needed 2009-04-11 23:07:38 -0500 Ted Gould (a09510f) * Fixing some pedantic little bugs to try and figure out what's causing 359018 2009-04-10 15:51:26 -0500 Ted Gould (20836b8) * Adding in libxml linking 2009-04-10 14:33:59 -0500 Ted Gould (551a97c) * Dummy to put bug number in. 2009-04-10 14:32:37 -0500 Ted Gould (f4bfa1f) * Create the virtual function for checking interest. 2009-04-10 14:19:31 -0500 Ted Gould (28e006b) * Merging in Eitan's gtype-ify of the enums and the IndicateListener... objects. 2009-04-10 14:07:43 -0500 Ted Gould (70697a6) * Marking the dev branch as such. 2009-04-10 13:16:39 +0300 Eitan Isaacson (bcdeb13) * gtypify IndicateListenerIndicator 2009-04-10 12:51:16 +0300 Eitan Isaacson (a3188d2) * changed IndicateListenerServer to a gtyped pointer instead of a gboxed. 2009-04-08 18:14:27 +0300 Eitan Isaacson (8f4019b) * Changed marshallers to GBoxed for IndicatorListenerServer. Make copy/free functions empty for now. 2009-04-08 16:47:46 +0300 Eitan Isaacson (a300f6c) * GBoxed IndicateListenerServer 2009-04-08 14:25:50 +0300 Eitan Isaacson (0307775) * gtypified the interests enum. 2009-04-08 10:57:41 +0200 seb128 (df604ba) * releasing version 0.1.5-0ubuntu1 2009-04-07 23:08:20 -0500 Ted Gould (746b6aa) * Cleaning up changelog 2009-04-07 23:07:04 -0500 Ted Gould (198fee2) * Merging in core-dev branch 2009-04-07 22:26:07 -0500 Ted Gould (2ffebac) * Explicitly sets the about window's window icon. (LP: #356437) 2009-04-07 22:25:24 -0500 Ted Gould (a8ab75d) * Lots of fixes from trunk 2009-04-07 22:22:53 -0500 Ted Gould (c1955c5) * Added in an 'icon-name' to make the about dialog have a proper icon. (tag: 0.1.5, refs/bzr/origin/tags/0.1.5) 2009-04-07 22:17:11 -0500 Ted Gould (13aa4e5) * on both client and server side. (LP: #353112) * Makes it so that all objects down to the menu now use the gtkstyle naming from FUSA to ensure that they all pick up the theme hacks that are set for FUSA. (LP: #334490) 2009-04-07 22:12:15 -0500 Ted Gould (b2d85cf) * * debian/libindicate0.install changed to debian/libindicate1.install * New upstream version: * Adds new API for detecting interests of various listeners. Implemented on both client and server side. (LP: 353112) 2009-04-07 21:13:07 -0500 Ted Gould (75002ff) * Clearing another warning. Shame gdk doesn't do this one for us. 2009-04-07 21:08:27 -0500 Ted Gould (9a7bcf3) * Patch from Eitan Isaacson to correct prototype. Had to be adjusted slightly as the prototypes had moved. 2009-04-07 21:02:08 -0500 Ted Gould (7115f77) * Ignoring our new test 2009-04-07 20:52:05 -0500 Ted Gould (eba8697) * Patch from Eitan Isaacson to remove a ref/unref infinite loop that effectively made it so that we kept our objects forever. While we love them, at some point we need to say goodbye. 2009-04-07 17:40:25 -0500 Ted Gould (3e1e512) * Making it so that we don't register the object twice. This is really a work around, but it's atleast fixes the crasher. Which sucked. We need to work with the dbus folks to make this better. 2009-04-07 17:34:45 -0500 Ted Gould (596a5db) * Adding show hide server test from Eitan on bug 351537 2009-04-07 15:45:35 -0500 Ted Gould (0b820c7) * Moving the install file. 2009-04-07 11:44:47 -0500 Ted Gould (98d4485) * debian/control: Switching libindicate0 to libindicate1 to express the fact that the binary compatibility is broken. 2009-04-07 11:43:02 -0500 Ted Gould (7f23e11) * I finally understood what seb128 told me about the version numbering. I feel so stupid for not understanding before :) 2009-04-07 10:15:39 -0500 Ted Gould (912a2a1) * Hiding some debugging messages. 2009-04-07 10:14:00 -0500 Ted Gould (9bd1519) * Simplifying error message 2009-04-06 21:44:50 -0500 Ted Gould (8b71317) * Fixes for dev stuff. 2009-04-06 21:42:16 -0500 Ted Gould (42492db) * * Some debug messages * Making the comparison of interests detect changings properly * Correctly use g_list_remove in several cases making for long lists * Using g_list_prepend instead of append because it's faster. * Checking whether we've got proxies before destroying them. 2009-04-03 15:09:55 -0500 Ted Gould (f252656) * Header fixes 2009-04-03 15:09:30 -0500 Ted Gould (5f46d7f) * Merge from upstream for header file fixes. 2009-04-03 15:09:06 -0500 Ted Gould (06dd63a) * Moving private interests out of the public header file. 2009-04-03 12:50:10 -0500 Ted Gould (76c68f9) * Merging in dev stuff. This'll break things. 2009-04-03 12:48:28 -0500 Ted Gould (5e3c75a) * Merge in from the Dev branch 2009-04-03 12:47:23 -0500 Ted Gould (05b5aa4) * Not quite sure how these got added, but I'm not going to fight it. 2009-04-03 12:45:38 -0500 Ted Gould (4f5d2b5) * Trying to get to a sane state. I apparently don't know as much about library versioning as I thought I did. 2009-04-03 12:27:31 -0500 Ted Gould (d93da3d) * Hiding all of the functions that part of the DBus interface in that now they're all prefixed with '_' so that they don't get exported as part of the library symbols. This should simplify everything a little bit for implementors. 2009-04-03 12:14:07 -0500 Ted Gould (eb5078b) * Getting rid of everything starting with 'd'. This gets rid of the dbus stuff that isn't set up to be static, which is silly. 2009-04-03 11:32:35 -0500 Ted Gould (be4c002) * Hiding the marshsallers from the libraries in the symbols by adding a _ in front of them. 2009-04-03 11:28:44 -0500 Ted Gould (303c52b) * Cleaning up the exported symbols, make sure that 'get_type_cb' isn't exported 2009-04-03 10:51:10 -0500 Ted Gould (c9b2fe4) * Getting to version 0.2.0 2009-04-03 10:49:56 -0500 Ted Gould (68d7bf9) * Trying to have more style information included so that we can get rid of the focus line. 2009-04-03 10:36:10 -0500 Ted Gould (16abe6d) * Adding interests on new servers saying that we're displaying the indicators and in the server. 2009-04-03 10:22:20 -0500 Ted Gould (96c1883) * Fleshing out the functions in the listener to set interests. 2009-04-02 16:38:47 -0500 Ted Gould (68fb067) * Putting in some protection from crazy values 2009-04-02 16:36:27 -0500 Ted Gould (2f66ceb) * Hiding debug 2009-04-02 16:35:38 -0500 Ted Gould (5c9e92e) * Adding a bunch of debugging messages and fixing the lifecycle for the folk pointer. Lots'o'fun. But things seem to be working. 2009-04-02 16:12:19 -0500 Ted Gould (6826848) * Filling in the dbus owner changing code. Now we should catch those. 2009-04-02 16:11:34 -0500 Ted Gould (1554425) * Adding printouts for interest changes. 2009-04-02 15:23:10 -0500 Ted Gould (26bfe1c) * Connecting in the DBus messaging that we need. 2009-04-02 14:08:55 -0500 Ted Gould (6e42996) * Fleshing out the interest setting and removing functions. 2009-04-02 13:35:20 -0500 Ted Gould (aa7ec58) * Updating unused file 2009-04-02 13:34:40 -0500 Ted Gould (f94b485) * Adding in folks support. 2009-04-02 11:34:56 -0500 Ted Gould (1212c8e) * Adding the interest removed and interest added signals in. 2009-04-02 11:11:20 -0500 Ted Gould (5ebb3c4) * Woot! Now we have some real functions to call! 2009-04-02 11:05:35 -0500 Ted Gould (b874768) * I can't believe I messed up this one. Luckily it doesn't seem to have caused any bugs. Man. 2009-04-02 10:49:35 -0500 Ted Gould (6e51efb) * Switching around the show_interest and remove_interest functions so that they are now asyncronous. Not that being asynchronous is important but more that now they get the Method Invocation interface that we can use to find out the sender of the message. Changed various APIs as a result of this, and moved the DBus functions to be internal. 2009-04-01 15:54:55 -0500 Ted Gould (58403a8) * Adding new functions show_interest and remove_interest into the API. Now to fill in the backend. 2009-04-01 15:27:42 -0500 Ted Gould (966a1e5) * Adding a remove and show interest 2009-04-01 15:23:31 -0500 Ted Gould (bae37d9) * Change the API so it's more like we're keeping a list of what, and who are interested in. This'll make it easier for us to manage all the DBus nastyness. 2009-04-01 14:56:31 -0500 Ted Gould (e6287ab) * Adding stuff to ignore, much better 2009-04-01 14:50:13 -0500 Ted Gould (7fea958) * Misspelling 2009-04-01 14:49:02 -0500 Ted Gould (b76642f) * Getting some interests in the game. 2009-04-01 13:21:55 -0500 Ted Gould (589454c) * Switch to searching on the connection, which is really what we care about and the proxy is a poor sustitute for. 2009-04-01 12:37:24 -0500 Ted Gould (f7bf54a) * First pass at the pretty meag-change to make it so that we can detect people on the system vs. the session bus. Basically reworking a bunch of structures. Fun. 2009-03-30 09:31:49 +0200 Martin Pitt (4134dd0) * releasing version 0.1.4-0ubuntu1 2009-03-30 09:31:21 +0200 Martin Pitt (1b7e454) * * New upstream version * Changing the text in the license box to make sense. (LP: #346215) * Call GNOME Program Init to initialize all of the ATK and gettext stuff that needs to be initialized for it all to work. Patch from Eitan Isaacson. (LP: #349031) * Give the indicator applet an ATK name so it can be found by the accessibility frameworks. Patch from Eitan Isaacson. (LP: #349031) * Making it so the 'No Indicators' situation uses a label instead of a desensitized menu item to allow right click through. (LP: #346359) * Remove the making of 'Indicator Applet Factory' translatable. (LP: #349540) * Make sure translations get loaded and make the 'No Indicators' error and the license translatable. Patch from Gabor Kelemen. (LP: #349998) * debian/control: Adding libgnomeui-dev as a dependency as it was added upstream. 2009-03-27 23:42:04 -0500 Ted Gould (9a1d935) * Now in jaunty 2009-03-27 23:39:31 -0500 Ted Gould (3e8de8a) * debian/control: Adding libgnomeui-dev as a dependency as it was added upstream. 2009-03-27 23:38:21 -0500 Ted Gould (ef07f36) * * New upstream version * Changing the text in the license box to make sense. (LP: #346215) * Call GNOME Program Init to initialize all of the ATK and gettext stuff that needs to be initialized for it all to work. Patch from Eitan Isaacson. (LP: #349031) * Give the indicator applet an ATK name so it can be found by the accessibility frameworks. Patch from Eitan Isaacson. (LP: #349031) * Making it so the 'No Indicators' situation uses a label instead of a desensitized menu item to allow right click through. (LP: #346359) * Remove the making of 'Indicator Applet Factory' translatable. (LP: #349540) * Make sure translations get loaded and make the 'No Indicators' error and the license translatable. Patch from Gabor Kelemen. (LP: #349998) 2009-03-27 23:35:44 -0500 Ted Gould (f4b6ce1) * debian/control: Add dependency to indicator-messages; the applet is currently fairly useless without it. (LP: #346359) 2009-03-27 23:34:45 -0500 Ted Gould (3151d53) * Merging in upstream version 0.1.4 2009-03-27 23:17:22 -0500 Ted Gould (02501d7) * Patch from Gabor Kelemen to make the license and 'No Indicators' message translatable. (tag: 0.1.4, refs/bzr/origin/tags/0.1.4) 2009-03-27 14:41:02 -0500 Ted Gould (31ea8d2) * Removing the translatable marking for 'Indicator Applet Factory' 2009-03-27 14:18:38 -0500 Ted Gould (497702e) * Bad truth in the hide function. 2009-03-26 16:23:54 -0500 Ted Gould (b02adf3) * Adding another bug that gets fixed with Eitan's merge. 2009-03-26 16:10:58 -0500 Ted Gould (d917e8b) * Comment for label 2009-03-26 16:06:23 -0500 Ted Gould (045b257) * Switching the case for 'No Indicators' to make it a label to still support right click through. 2009-03-26 16:01:46 -0500 Ted Gould (1f7ae08) * Changing license in about box to make sense. 2009-03-26 13:24:38 -0500 Ted Gould (f6bd9e6) * ATK name for Eitan 2009-03-26 11:27:16 -0500 Ted Gould (37af771) * Getting gtkdoc stuff to be a little happier 2009-03-26 10:13:11 -0500 Ted Gould (0d98376) * Bumping version 2009-03-26 10:12:24 -0500 Ted Gould (8fd2e25) * Merging in Eitan's changes to make the applet a GNOME Program 2009-03-26 13:51:06 +0200 Eitan Isaacson (acc7f89) * Add gnome_program_init with LIBGNOMEUI_MODULE. 2009-03-25 11:25:37 +0100 Martin Pitt (9e0aabb) * releasing version 0.1.3-0ubuntu2 (tag: 0.1.3-0ubuntu2, refs/bzr/origin/tags/0.1.3-0ubuntu2) 2009-03-25 11:25:19 +0100 Martin Pitt (ec4b835) * debian/control: Add dependency to indicator-messages; the applet is currently fairly useless without it. (LP: #346359) 2009-03-18 00:17:00 -0500 Ted Gould (345e246) * Cleaning up Changelog 2009-03-18 00:12:25 -0500 Ted Gould (7c4a7a5) * Merging in upsream 0.1.3 2009-03-18 00:05:05 -0500 Ted Gould (1ec78fc) * Changing version number (tag: 0.1.3, refs/bzr/origin/tags/0.1.3) 2009-03-17 19:45:03 -0500 Ted Gould (6c97fee) * releasing version 0.1.2-0ubuntu3~ted4 2009-03-17 13:40:36 -0500 Ted Gould (3cb0dc3) * releasing version 0.1.2-0ubuntu3~ted3 2009-03-17 13:39:45 -0500 Ted Gould (321d1da) * Removing all the gobject stuff from the debian build files 2009-03-17 13:38:36 -0500 Ted Gould (d4d1a0e) * Getting explicit disable 2009-03-17 13:38:20 -0500 Ted Gould (ec34124) * Seems that we still get errors without it being there, I'm not sure why, but making it so that we can explicitly disable the gobject-introspection. That should work for now. 2009-03-17 11:29:15 -0500 Ted Gould (bbf57e6) * releasing version 0.1.2-0ubuntu3~ted2 2009-03-17 11:28:51 -0500 Ted Gould (95e61d1) * releasing version 0.1.2-0ubuntu3~ted1ubuntu1 2009-03-17 11:05:36 -0500 Ted Gould (b2791c3) * releasing version 0.1.2-0ubuntu3~ted1 2009-03-17 11:03:51 -0500 Ted Gould (4086f8b) * Removing GObject introspection from the build deps 2009-03-17 11:03:08 -0500 Ted Gould (fe24c75) * Changes to make GIR optional from the applet branch 2009-03-17 11:02:30 -0500 Ted Gould (148a7df) * Merging in the Ubuntu packaging versions 2009-03-17 11:00:01 -0500 Ted Gould (fdc47f8) * Making it so that the GIR stuff autodetects and only builds if available. 2009-03-17 10:55:22 +0100 Martin Pitt (78eda23) * debian/copyright: Fix download location. 2009-03-17 10:54:24 +0100 Martin Pitt (f5f204a) * Add bzr-builddeb configuration (merge mode). Fortunately this doesn't insist on having *only* debian/ in bzr. This gives us the best of both worlds, bzd-bd auto-downloading orig.tar.gz and merging in the pre-generated autoconf stuff, and retaining the possibility of merging directly from trunk, since we keep the full upstream source in this branch. 2009-03-17 10:51:56 +0100 Martin Pitt (2a0f3ae) * Add debian/watch. 2009-03-17 10:50:47 +0100 Martin Pitt (0bbf490) * retroactively mark 0.1.1-0ubuntu2 as uploaded 2009-03-16 23:23:33 +0100 seb128 (a74264a) * updated shlibs version 2009-03-16 23:22:15 +0100 seb128 (deccbbb) * indicator-applet (0.1.2-0ubuntu1) jaunty; urgency=low 2009-03-15 09:11:20 -0500 Ted Gould (dab5af7) * Cleaning up the changelog 2009-03-13 09:27:09 +0200 Ted Gould (a015eb5) * releasing version 0.1.2-0ubuntu1~ppa2 2009-03-12 19:25:27 +0200 Ted Gould (7ddf215) * releasing version 0.1.2-0ubuntu1~ppa1 2009-03-12 19:24:47 +0200 Ted Gould (8a4010a) * Merging in 0.1.2 2009-03-12 19:21:22 +0200 Ted Gould (cad7516) * Fixes for distcheck (tag: 0.1.2, refs/bzr/origin/tags/0.1.2) 2009-03-12 18:55:36 +0200 Ted Gould (34d085b) * Changing version number 2009-03-12 14:22:31 +0200 Ted Gould (ad92d55) * Stealing the 'fast-user-switch-applet' name to get better theming 2009-03-12 14:03:01 +0200 Ted Gould (5299a2c) * Fixing the popup to have the about 2009-03-12 13:51:59 +0200 Ted Gould (2d63bb5) * Right click menu is working, but without an about 2009-03-09 17:02:47 +0200 Ted Gould (c1663bc) * Fix doubling of prototypes, patch from Eitan 2009-03-09 15:12:10 +0200 Ted Gould (a2af5af) * Putting the example executables in libexec and the source code in doc/examples 2009-02-25 15:48:02 -0600 Ted Gould (ef381a0) * releasing version 0.1.1-0ubuntu3~ppa3 2009-02-25 15:33:32 -0600 Ted Gould (d5ba977) * Linking in the build interfaces, needed a temporary function to get linking right 2009-02-25 15:33:12 -0600 Ted Gould (cb288de) * Forgot to put these in built sources 2009-02-25 15:14:26 -0600 Ted Gould (e792f8a) * true is TRUE 2009-02-25 15:14:07 -0600 Ted Gould (87a9458) * Adding build instructions for the listener interface 2009-02-25 15:04:37 -0600 Ted Gould (9d3143b) * Merging from core-dev branch 2009-02-25 15:00:50 -0600 Ted Gould (2a8dfa8) * Merging in changes to put back in the GObject introspection and to have better build characteristics. 2009-02-25 14:58:19 -0600 Ted Gould (22ccedb) * Adding in the listeners interface 2009-02-25 14:37:49 -0600 Ted Gould (cf43323) * Typo 2009-02-25 14:36:14 -0600 Ted Gould (e835fb9) * releasing version 0.1.1-0ubuntu3~ppa2 2009-02-25 14:35:56 -0600 Ted Gould (903ce09) * Adding back in the GIR files and some distclean improvements to get back to NULL. 2009-02-25 11:16:51 -0600 Ted Gould (97133c8) * releasing version 0.1.1-0ubuntu3~ppa1 2009-02-22 22:59:44 -0600 Ted Gould (13881cb) * An interface to get the list of servers from another listener 2009-02-22 22:52:55 -0600 Ted Gould (84c1b5e) * Adding information on how the server was added, but not really using it for anything yet. I'm not sure that we can -- bother. 2009-02-19 17:25:15 +0100 Martin Pitt (3bc5b8e) * src/applet-main.c, applet_fill_cb(): Do not show anything if we are running under a stracciatella GNOME session (i. e. without Ubuntu components). See UbuntuSpec:stracciatella-session. 2009-02-19 16:21:42 +0100 Martin Pitt (477eb61) * releasing version 0.1.1-0ubuntu1 (tag: 0.1.1-0ubuntu1, refs/bzr/origin/tags/0.1.1-0ubuntu1) 2009-02-19 16:11:40 +0100 Martin Pitt (fac33da) * new upstream release 0.1.1 2009-02-18 14:14:01 -0600 Ted Gould (b645beb) * Releasing 0.1.1 with build fixes and icons. (tag: 0.1.1, refs/bzr/origin/tags/0.1.1) 2009-02-18 14:06:19 -0600 Ted Gould (7554f5e) * releasing version 0.1-0ubuntu3~ppa1 2009-02-18 14:05:02 -0600 Ted Gould (7aeff8e) * Merging in icon changes 2009-02-18 14:03:42 -0600 Ted Gould (78a8495) * Changing the icon to be our fancy new one. 2009-02-18 14:03:11 -0600 Ted Gould (971633d) * Adding in the autotools stuff for installing an icon. 2009-02-18 13:45:06 -0600 Ted Gould (fba553c) * Ken's very cool Indicator Applet plugin. 2009-02-17 10:28:17 -0600 Ted Gould (19665b4) * Cherry picking r137 from the ubuntu-core-dev packaging branch that has licensing fixes 2009-02-17 10:26:55 -0600 Ted Gould (3fe3f9f) * Cherry picking r136 from the ubuntu-core-dev packaging branch that cleans up the licensing, descriptions, and adds additional info 2009-02-17 10:06:09 -0600 Ted Gould (4c82f21) * Cherry picking r130 from the ubuntu-core-dev packaging branch that cleans up the changelog, adds better descriptions and updates the entries in the control file. 2009-02-17 10:01:13 -0600 Ted Gould (8fbbd8a) * Configure changes to include gio 2009-02-17 09:59:27 -0600 Ted Gould (af72d15) * Mostly build related changes coming from the upstream branch. 2009-02-17 09:43:09 -0600 Ted Gould (177afdd) * This is a generated file. Shouldn't be in VCS. 2009-02-17 09:43:04 -0600 Ted Gould (e86d48d) * Adding the license info 2009-02-17 09:10:00 -0600 Ted Gould (711265c) * Adding the LGPL licenses and making sure they get into the tarball. 2009-02-17 11:27:00 +0100 Martin Pitt (e072dee) * debian/copyright: Fix leftover word "either" from the license description. 2009-02-17 11:23:18 +0100 Martin Pitt (23d6623) * debian/control: Update package descriptions; the messaging part is provided by indicator-messages. 2009-02-17 11:17:59 +0100 Martin Pitt (7009e0c) * debian/control: Fix Vcs-Bzr. 2009-02-17 11:04:52 +0100 Martin Pitt (f0eb6e3) * releasing version 0.1-0ubuntu1 (tag: 0.1-0ubuntu1, refs/bzr/origin/tags/0.1-0ubuntu1) 2009-02-17 10:28:12 +0100 Martin Pitt (5dc54bd) * configure.ac: Add missing gio-2.0 pkgconfig check (from DX team PPA packaging branch), and autoreconf to pick up the change. 2009-02-17 09:41:02 +0100 Martin Pitt (93794c8) * Repack orig.tar.gz with a copy of the LGPL 3, libindicate/* is under that license. 2009-02-17 09:40:55 +0100 Martin Pitt (b3c78cf) * debian/copyright: Properly describe licenses. 2009-02-17 09:40:45 +0100 Martin Pitt (b41bed6) * debian/control: Add Homepage:, Vcs-Bzr:, and proper package descriptions. 2009-02-17 09:40:22 +0100 Martin Pitt (174ce19) * flush changelog for ubuntu packaging branch 2009-02-16 13:29:50 -0600 Ted Gould (d4ebcf1) * Trying to add in some extra files that seem useful for building, gtk-doc still fails. 2009-02-16 13:04:54 -0600 Ted Gould (25bb9e3) * Oops, should get the screw up right... 2009-02-16 13:01:55 -0600 Ted Gould (b57c4ff) * Adding a couple of files to the distribution to pass distcheck 2009-02-15 23:00:05 -0600 Ted Gould (3cea98d) * releasing version 0.1~ppa41 2009-02-15 22:59:20 -0600 Ted Gould (3e126a2) * * Putting on a handle * Adding in a background function from panel-lib 2009-02-15 22:56:27 -0600 Ted Gould (8336b57) * This function seems to set up the widget correctly with the background. It's undocumented, but most other applets seem to do it. 2009-02-15 22:48:08 -0600 Ted Gould (6012d33) * Putting a little handle on the indicators. Works for GNOME Panel. 2009-02-15 22:07:29 -0600 Ted Gould (e424f77) * releasing version 0.1~ppa40 2009-02-15 22:04:29 -0600 Ted Gould (55b9343) * Merging in from the 'upstream' branch. Changes include the addition of a server signal for the NULL indicator. And a warning fix for icons. 2009-02-15 21:58:56 -0600 Ted Gould (975000d) * Removing the debian directory. Going to start using this as my upstream branch and the other as the packaging branch. 2009-02-15 21:58:08 -0600 Ted Gould (524e5b9) * Adding a handler for the new server display signal, and then make the messages more clear between the two. 2009-02-15 21:53:55 -0600 Ted Gould (3a3a6e5) * Adding a new signal in that handles the ID of zero, or null, comming back from a listener and uses that to show the server. Or atleast signal it to figure out how to do that. Also cleaning up the signals a little to use defines. 2009-02-15 21:40:46 -0600 Ted Gould (0e0780f) * Adding a check for NULL string in the icon parsing code. This will stop a bunch of warnings coming from everything else. 2009-02-13 15:14:25 -0600 Ted Gould (50a37ef) * releasing version 0.1~ppa39 2009-02-13 15:13:26 -0600 Ted Gould (f079d67) * Fixing a bug in the listener where properties weren't available on running servers. 2009-02-13 15:11:32 -0600 Ted Gould (ebe1c53) * Ah, declared a variable in an if so that it didn't get out of scope. Like it should have. Bah. 2009-02-13 14:55:10 -0600 Ted Gould (17d0da7) * Adding in a set of functions to get the properties off of a server 2009-02-12 20:23:11 -0600 Ted Gould (9919392) * releasing version 0.1~ppa38 2009-02-12 20:18:07 -0600 Ted Gould (f298782) * Adding in GIO to the list of linked modules. 2009-02-12 16:49:53 -0600 Ted Gould (33dc1d7) * releasing version 0.1~ppa37 2009-02-12 16:46:31 -0600 Ted Gould (a7d062c) * Making time and icons happy and work well. Also adding lots of fun tests for them. 2009-02-12 16:44:59 -0600 Ted Gould (2c157aa) * Forgot to set the timer back to something reasonable! 2009-02-12 16:43:32 -0600 Ted Gould (3eb4043) * Adding in support for icons, specifically passing them back and forth on the bus 2009-02-12 16:43:00 -0600 Ted Gould (6b3a32c) * Changing from using a memory stream to using a buffer, the memory stream one seems to be broken. 2009-02-12 14:17:18 -0600 Ted Gould (a2e77d6) * Adding in the function to take a pixbuf, turn it into a png, base64 encode it and then send it across the wire. 2009-02-12 14:03:52 -0600 Ted Gould (1a8b895) * Changing the icon data to be base64 encoded, should have done that originally, how silly. 2009-02-12 13:47:24 -0600 Ted Gould (52cd253) * Seems like a better name 2009-02-12 13:44:45 -0600 Ted Gould (e921d55) * Fixing some prototypes to fix warnings and errors we haven't yet encountered. Also setting the type so that our switch statement actually works. 2009-02-12 13:34:24 -0600 Ted Gould (8b91e1d) * Adding in some debug messages and making the signal use the original key to broadcast itself. 2009-02-12 13:10:19 -0600 Ted Gould (1a5e21e) * Added in a way to print the values of properties while they change. More later, but a start. 2009-02-12 12:31:08 -0600 Ted Gould (b94d3a7) * Seeing what happens if I turn on "sign always" in Bazaar. 2009-02-12 12:15:09 -0600 Ted Gould (c3964b3) * Adding in the code for handling icons and time 2009-02-12 10:47:54 -0600 Ted Gould (ee27474) * Rebuilding the way that priorities get done so that we can handle a time and icon version of the functions so that apps don't have to worry about those details. 2009-02-12 08:31:14 -0600 Ted Gould (8a2cf34) * Setting the properties property and picking up Empathy's desktop file 2009-02-12 08:24:36 -0600 Ted Gould (e1c5a98) * Adding in a timer function to change the time every three minutes or so in order to test modifying times. 2009-02-12 08:20:29 -0600 Ted Gould (31d107e) * Using the time property function 2009-02-12 08:17:37 -0600 Ted Gould (184a04a) * Adding in a time property function 2009-02-11 20:37:01 -0600 Ted Gould (2717850) * Merging from trunk 2009-02-11 20:35:39 -0600 Ted Gould (24fd755) * releasing version 0.1~ppa36 2009-02-11 20:32:31 -0600 Ted Gould (fe7b7c4) * Merging in the changes to make it so that properties work right, get handled properly by the listener and have convience functions. Also lots of little important cleanups. 2009-02-11 20:31:43 -0600 Ted Gould (2f2fdfe) * Cleaning up some debug messages that aren't as useful anymore 2009-02-11 20:30:21 -0600 Ted Gould (47decbd) * Switching to ref_default 2009-02-11 20:29:04 -0600 Ted Gould (734c7ea) * Fixing the deallocation to check the right parameters. 2009-02-11 20:25:44 -0600 Ted Gould (2c02884) * Turning off some debugging, reformatting, and putting the connection into the proxy_t structure 2009-02-11 20:22:25 -0600 Ted Gould (ef78255) * Basically things are working as the proxyts are now findable. 2009-02-11 20:10:33 -0600 Ted Gould (609f0c8) * Fixing the call, checking both lists of proxies, and adding some debug info. 2009-02-11 17:14:02 -0600 Ted Gould (69bec2a) * Removing an annoying warning 2009-02-11 17:04:10 -0600 Ted Gould (5feca66) * Adding a check for type in the middle of the state machine for building a server. 2009-02-11 16:30:59 -0600 Ted Gould (584e64c) * Adding in a ref-default function so that we can keep one listener around for fun and profit. 2009-02-11 16:10:23 -0600 Ted Gould (8c06d7e) * Getting all the legal stuff in. 2009-02-11 16:01:51 -0600 Ted Gould (7e01f3a) * Putting license information everywhere. 2009-02-11 15:59:42 -0600 Ted Gould (5b84e20) * Adding in an author 2009-02-11 15:57:52 -0600 Ted Gould (468fb34) * Adding GPL to the tests 2009-02-11 15:55:17 -0600 Ted Gould (25f9a81) * Adding the GPL to this file 2009-02-11 15:51:31 -0600 Ted Gould (17a13da) * Putting the debian copyright info in 2009-02-11 15:32:56 -0600 Ted Gould (390c348) * Adding a license to the top of all these files. LGPL 2/3 2009-02-10 16:52:21 -0600 Ted Gould (3ca33fc) * Adding to the convience functions for setting the desktop file and the type of the server. 2009-02-10 16:49:33 -0600 Ted Gould (49220be) * Building a way to get properties. Seems like this should be in the DBus libs, but anyway. Here is the code that compiles and claims that it'll do it. More code than I would have liked. 2009-02-10 15:30:45 -0600 Ted Gould (8bfb5a1) * Avoiding a conflict with GObject's get_type function. 2009-02-10 15:28:54 -0600 Ted Gould (0fcfc2b) * Adding in real functions to match the prototypes. 2009-02-10 15:19:02 -0600 Ted Gould (5a03a06) * Adding in functions to match the prototypes. 2009-02-10 15:16:31 -0600 Ted Gould (c6eab16) * Adding in a set_type function and fixing the prototype for set_desktop 2009-02-10 15:14:57 -0600 Ted Gould (ee050d4) * Changing type to message.im for testing, now it's different than the messages. 2009-02-10 15:14:29 -0600 Ted Gould (01244bc) * Adding an API for getting the type and desktop files 2009-02-10 11:21:16 -0600 Ted Gould (a9e725a) * Including type information in the creation and destruction of servers 2009-02-09 11:33:03 -0600 Ted Gould (42e990f) * Merge from trunk 2009-02-09 11:02:01 -0600 Ted Gould (9d73c89) * releasing version 0.1~ppa35 2009-02-09 10:59:57 -0600 Ted Gould (50411f8) * Only emitting a changed signal on properties changed when the indicator is visible 2009-02-09 10:58:05 -0600 Ted Gould (eb7ca97) * Some formatting, reusing the private variable, making it so that hide sends the type and only sending a message of finalize if we're still visible. 2009-02-09 10:32:56 -0600 Ted Gould (d7d7036) * Server hide function from Niel 2009-02-09 15:25:13 +0000 Neil Jagdish Patel (d42c9b5) * Add the indicate_server_hide function 2009-02-07 12:41:40 -0600 Ted Gould (b955805) * Sending the type with the signal in the listener, adding it into the tests. 2009-02-07 12:37:47 -0600 Ted Gould (af60279) * Changing the signals for show/hide to send the type correctly. 2009-02-07 12:21:32 -0600 Ted Gould (455dbe3) * Setting the type of the server 2009-02-06 15:03:38 +0100 Ted Gould (f308079) * releasing version 0.1~ppa34 2009-02-06 15:02:51 +0100 Ted Gould (4cf9eec) * Making the listener handle the case where we're using the new show/hide structure. 2009-02-06 14:59:29 +0100 Ted Gould (603808b) * Ah, stupid little wrong function 2009-02-06 14:36:21 +0100 Ted Gould (e5e968c) * releasing version 0.1~ppa33 2009-02-06 14:15:41 +0100 Ted Gould (37a0956) * releasing version 0.1~ppa32 2009-02-06 12:49:04 +0100 Ted Gould (0b687ad) * Tracking the type of the server in the proxyt structure 2009-02-06 12:22:40 +0100 Ted Gould (aa624cd) * Changing the prototypes to start using the server added stuff 2009-02-06 11:40:28 +0100 Ted Gould (720e250) * releasing version 0.1~ppa31 2009-02-06 10:41:06 +0100 Ted Gould (07f61bd) * releasing version 0.1~ppa30 2009-02-06 10:37:30 +0100 Ted Gould (e2fae3b) * Removing GObject introspection for now 2009-02-06 00:29:51 +0100 Ted Gould (18daf0a) * releasing version 0.1~ppa29 2009-02-05 18:23:06 +0100 Ted Gould (246b29b) * releasing version 0.1~ppa28 2009-02-05 17:58:57 +0100 Ted Gould (c18cbee) * Merging in the trunk changes 2009-02-05 17:58:22 +0100 Ted Gould (c4db8e8) * Adding properties for doing type and desktop 2009-02-05 15:27:42 +0100 Ted Gould (a14b6dd) * Changing the DBUS API slightly. Now there is no 'get_desktop' function as desktop is a property. Added a property for type so that we can understand what kind of application this is. And finally adding show/hide signals on the server as they were already on the listener. 2009-02-05 14:47:40 +0100 Ted Gould (e6ff0d4) * releasing version 0.1~ppa27 2009-02-05 14:43:21 +0100 Ted Gould (d52c59b) * releasing version 0.1~ppa23 2009-02-05 14:42:38 +0100 Ted Gould (5cf3a79) * Adding in the API function to take and icon and display it. Just the prototype. 2009-02-04 19:08:18 +0100 Ted Gould (d95b170) * typo 2009-02-04 19:00:11 +0100 Ted Gould (206b407) * releasing version 0.1~ppa26 2009-02-04 18:58:00 +0100 Ted Gould (cf719f1) * Merge in documentation and icons 2009-02-04 14:54:56 +0100 Neil Jagdish Patel (eae7dfc) * Set the widget name on the applet rather than the menubar, to make sure it's picked up globally. 2009-02-04 14:27:20 +0100 Ted Gould (7ef6658) * Removing the icons from the larger applet 2009-02-04 14:16:06 +0100 Ted Gould (663d926) * Adding a conflicts and a replaces to get rid of errors. 2009-02-04 14:14:15 +0100 Ted Gould (212b175) * ppa23 2009-02-04 13:55:42 +0100 Ted Gould (9ff950e) * Polish it up 2009-02-04 13:55:18 +0100 Ted Gould (b5314b8) * Making it so that there is no more boarder on the menu bar 2009-02-04 12:45:50 +0100 Neil Jagdish Patel (124eadc) * indicator-applet (0.1~ppa22) intrepid; urgency=low 2009-02-04 12:44:34 +0100 Neil Jagdish Patel (3002304) * Fix coding style 2009-02-03 21:29:52 +0100 Neil Jagdish Patel (e886446) * Enable support for a "transparent" panel applet, which reacts to the gnome- panel theme changes 2009-02-03 16:53:37 +0100 Ted Gould (c074cf6) * Getting gtk-doc working 2009-02-03 15:09:50 +0100 Ted Gould (47aedec) * Getting everything together to try and build docs 2009-02-03 14:56:35 +0100 Ted Gould (bccae5a) * Getting the dirs right 2009-02-03 14:30:24 +0100 Ted Gould (aa26429) * Getting SUBDIRS right 2009-02-03 14:25:53 +0100 Ted Gould (2f6177e) * I think this will add gtk docs 2009-02-03 14:05:40 +0100 Ted Gould (7a91603) * Putting in the makefiles for the docs and the reference docs 2009-02-03 12:50:40 +0100 Ted Gould (5d714e6) * Adding in checks for GTK Doc 2009-02-03 11:57:57 +0100 Ted Gould (0223011) * Merge from trunk 2009-02-03 11:53:19 +0100 Ted Gould (3c879bc) * * Adding in package fixes from seb128 * Removing scrollkeeper * Changing libindicate to libindicate0 * Removing .la file * Removing targets for files in libindcate-dev.install * Removing pkg-create-dbgsym * Adding a build depend on pkg-create-dbgsym 2009-02-03 10:36:09 +0100 Neil Jagdish Patel (67d2967) * Allow sub-classes of server to emit signals using three new public functions 2009-02-02 10:44:23 +0100 Ted Gould (a0440fa) * Bump for PPA 2009-02-02 10:13:42 +0100 Ted Gould (935d457) * Should have been for Intrepid 2009-01-30 15:07:18 -0600 Ted Gould (f1c8ad7) * Adding interface for listener sending back a display request. 2009-01-30 12:11:32 -0600 Ted Gould (722c621) * Listener interface for signalling an indicator 2009-01-30 12:10:50 -0600 Ted Gould (21a212b) * Adding a print message for when the indicator is signaled 2009-01-30 11:27:48 -0600 Ted Gould (2adf895) * Adding an interface to call back to an indicator and display it. 2009-01-29 13:50:32 -0600 Ted Gould (d9e7ed9) * Guess I should merge trunk back in at some point. 2009-01-29 13:39:31 -0600 Ted Gould (17bc0da) * * Fixing the handling of named DBus connections * Moving most of the data in the objects to private sections * Making the signal names defines for easier usage * Having property changes actually work now. 2009-01-29 13:05:14 -0600 Ted Gould (de80300) * Changing the include directory from 1.0 to 0.1 which gives us more room to screw up 2009-01-29 13:03:47 -0600 Ted Gould (fab825e) * Wow, I didn't realize we weren't handling properties at all correctly. Fixed now. Whew. 2009-01-29 12:51:48 -0600 Ted Gould (054c9ba) * Adding a set property after the show to cause a signal 2009-01-29 12:49:43 -0600 Ted Gould (f5e7d6d) * Have the server pass along the property modified signal 2009-01-29 12:44:17 -0600 Ted Gould (dd60c62) * Adding a property modified signal to the indicator object 2009-01-29 11:17:11 -0600 Ted Gould (759d62b) * Making all of the server values move into a private section like all the others. Generally a good thing and good clean up 2009-01-29 09:59:19 -0600 Ted Gould (c0a3238) * Making the indicator properties private, they should be. Also cleans up some deps. 2009-01-29 09:40:29 -0600 Ted Gould (d898b21) * Removing the gobject-introspection-repository from the list of build depends as we needed it for the dbus stuff, that we're no longer using. 2009-01-29 09:40:01 -0600 Ted Gould (d2f37fb) * Removing DBus from the gobject introspection 2009-01-29 09:31:59 -0600 Ted Gould (116ff8e) * Oops, forgot the header there 2009-01-29 09:31:00 -0600 Ted Gould (82c65bf) * Okay, moving all of the variables from the listener class into a private object. This is to make the GObject introspection not need dbus, and thus we can reduce our build deps significantly. 2009-01-29 09:10:18 -0600 Ted Gould (ab78f47) * Use the new fangled defines to make things cleaner 2009-01-29 09:07:14 -0600 Ted Gould (63630dc) * Getting some helper defines for some of the hacks that'll probably change in the future 2009-01-29 09:05:09 -0600 Ted Gould (5454aee) * Using the defines for the signal names 2009-01-29 09:01:15 -0600 Ted Gould (fea68aa) * Making the signals use #defines to make everything a little more predictable. I hate this part of GObject signals. 2009-01-29 09:01:07 -0600 Ted Gould (492652a) * Adding a variable to make the compiler happier 2009-01-26 09:13:27 -0600 Ted Gould (b96eebb) * Changed to only listen to reference names instead of descriptive ones. Hopefully this'll fix a crash. 2009-01-22 15:39:54 -0600 Ted Gould (b6c1425) * Forgot to run autogen.sh before last package :( 2009-01-21 19:43:54 -0600 Ted Gould (d186804) * Update API slightly and some fixes. 2009-01-21 17:15:34 -0600 Ted Gould (8199742) * Adding in a message indicator and a small test to use it. 2009-01-21 16:10:21 -0600 Ted Gould (0fc106d) * Adding in the im-client test and fixing a couple of bugs it found 2009-01-21 16:02:04 -0600 Ted Gould (48697b9) * Adding in a type for indicators that are messages 2009-01-21 15:44:19 -0600 Ted Gould (58a667b) * Generated source files 2009-01-21 15:13:43 -0600 Ted Gould (ea69948) * Adding in listener_get_property 2009-01-21 15:12:50 -0600 Ted Gould (2ed2801) * Adding in a get_property function 2009-01-19 12:29:03 -0600 Ted Gould (e782c32) * Wrong indicate include directory in package config files 2009-01-19 12:22:21 -0600 Ted Gould (640fb32) * Wrong indicate include directory in package config files 2009-01-16 18:37:08 -0600 Ted Gould (dbe2080) * Moving the gir file to the right package 2009-01-16 17:12:19 -0600 Ted Gould (7a5bf13) * Removing the gir file from the applet so that it's only with the library so that we can install all of them. 2009-01-16 16:34:04 -0600 Ted Gould (ba631e9) * Adding the GObject Introspection files into the build and the packaging. 2009-01-16 16:22:27 -0600 Ted Gould (e3f1f4e) * Shell script integrated into the autotools system 2009-01-16 16:21:09 -0600 Ted Gould (ac140d5) * Bringing GObject Introspection into the build and making it so that it gets installed with the library. 2009-01-16 13:51:27 -0600 Ted Gould (e83283e) * Build fix 2009-01-16 13:32:25 -0600 Ted Gould (09d01e6) * Adding in libtool to build deps 2009-01-16 13:04:41 -0600 Ted Gould (0eb5899) * Getting the debian package built up so that it can have a seperate library binary package. 2009-01-16 13:03:26 -0600 Ted Gould (872812a) * Changing the build targets, now I understand the difference between 'any' and 'all' 2009-01-16 12:58:34 -0600 Ted Gould (913c9d2) * Making it so the lib only uses glib (which it does) 2009-01-16 12:54:01 -0600 Ted Gould (28c26d8) * Adding in the libindicate lib. 2009-01-16 12:47:51 -0600 Ted Gould (8f80127) * Moving the tests so that they can guarantee to build after the library builds as otherwise they end up getting built first. 2009-01-16 12:44:08 -0600 Ted Gould (487239d) * Adding in a return that was missing (though it's useless) 2009-01-16 00:04:05 -0600 Ted Gould (2b6ce30) * Building the listener object that listens to all of the folks on DBus and turns that into a usable interface for indicator display folks. A lot of code to make things simple :) 2009-01-16 00:01:50 -0600 Ted Gould (df1713a) * Handling the case that we're destroying an entry because the bus told us to. Properly signalling all of the removals 2009-01-15 23:19:21 -0600 Ted Gould (ad1cc2d) * Fixing the printing and the saving of indicators. 2009-01-15 23:11:56 -0600 Ted Gould (fe3addb) * Changing the test to do the printing by itself instead of using the debug messages in the class itself 2009-01-15 23:01:16 -0600 Ted Gould (0d1e01e) * Getting the signals in shape 2009-01-15 21:49:28 -0600 Ted Gould (2722037) * Okay, adding the other signals in and keeping track of the indicators that are hanging around. Now, to connect to things external. 2009-01-15 20:34:39 -0600 Ted Gould (0ff1165) * Get the type of the list of indicators that we got, and then set the up to register 2009-01-15 20:10:38 -0600 Ted Gould (fb5b330) * Now correctly calling the get indicators function to get the indicators on already created objects. 2009-01-15 19:49:23 -0600 Ted Gould (e50f228) * Adding in a marshaller for the DBus signals that we need 2009-01-15 17:10:36 -0600 Ted Gould (d1c2ed2) * Now doing some DBus listening and getting some of the initial configuration built up. 2009-01-15 17:10:14 -0600 Ted Gould (421cea2) * Changing to the dbus interface and changing to build teh client and server interfaces 2009-01-15 15:52:40 -0600 Ted Gould (4c623e4) * Amazing how a little string can make such a huge difference. 2009-01-15 15:48:38 -0600 Ted Gould (da2657e) * Adding in a basic listening test 2009-01-15 15:42:16 -0600 Ted Gould (6ba4025) * Adding a new function 2009-01-15 15:33:00 -0600 Ted Gould (441032c) * Starting to flesh out the listener a little bit, should get a list of names on teh bus at this point 2009-01-15 10:39:51 -0600 Ted Gould (ccac9b8) * Adding in the base object for the listener. 2009-01-15 10:39:32 -0600 Ted Gould (48277fb) * Cut-and-paste error 2009-01-14 17:12:26 -0600 Ted Gould (8a2369b) * Okay, I think this is the end of server and indicator minus all the bugs that I expect to find :) 2009-01-14 17:11:49 -0600 Ted Gould (284b3dd) * Cleaning up prototypes and type warnings. 2009-01-14 16:31:38 -0600 Ted Gould (bda3bbf) * Who the hell would design an API that passes in arrays of strings differently than it passes them out. What an insane idea. Oh yeah, properties work. 2009-01-14 10:26:09 -0600 Ted Gould (89bf87a) * Merging in code from yesterday. Got many of the functions working with real IDs and making lists. The basis for all the properties stuff is there but it still needs a touch of fleshing out. Also a new test for debugging. 2009-01-14 10:11:17 -0600 Ted Gould (c145922) * Chaning the property list parameters to be pointer arrays. 2009-01-13 23:24:39 -0600 Ted Gould (a72a4ce) * Making the indicator lookup it's own function and trying it out in another function to get a property. 2009-01-13 23:23:58 -0600 Ted Gould (cb3ce99) * Adding in some properties to the mix 2009-01-13 15:43:14 -0600 Ted Gould (4670fee) * Adding in a display function and a list by type. 2009-01-13 14:55:06 -0600 Ted Gould (1c7343c) * Man, a lot of work for messing up one explaination point. 2009-01-13 14:18:47 -0600 Ted Gould (82dee94) * Making it so that the indicators all have unique IDs 2009-01-13 13:44:00 -0600 Ted Gould (f64b5d9) * Forgot to actually add the test 2009-01-13 13:43:32 -0600 Ted Gould (0b4e54d) * Ah, we weren't checking if we were visible. Now things are better. 2009-01-13 13:38:29 -0600 Ted Gould (bba89ed) * Return to crashing beauty 2009-01-13 13:38:12 -0600 Ted Gould (3dbe51d) * Add a test to create a lot of indicators. 2009-01-13 13:26:13 -0600 Ted Gould (5030c34) * Merging in Robert's changes. 2009-01-13 06:47:42 -0500 Robert Carr (71820cb) * Add script to build GObject-introspection GIR, and boilerplate JavaScript test. 2009-01-13 06:43:38 -0500 Robert Carr (27a71bb) * Use G_BEGIN/END_DECLS, and put the GOBject *_get_type functions in the header file (needed by introspection, but also the normal GLib style). 2009-01-13 06:32:44 -0500 Robert Carr (544dec8) * Merge Ted's changes. I should have used bzr bind. 2009-01-13 06:31:48 -0500 Robert Carr (35c5045) * Add pkgconfig file. 2009-01-12 23:14:09 -0600 Ted Gould (5525628) * Fleshing out more functions, we can now return a list of ids. Need to test with more. 2009-01-12 17:22:47 -0600 Ted Gould (cd4f548) * Whoo Hoo, we can count 2009-01-12 17:15:43 -0600 Ted Gould (514837a) * Fleshing out the whole show and hide thing. We should also be signalling when indicators are added or removed from the server. 2009-01-12 16:38:46 -0600 Ted Gould (2dc2f26) * Clean up the signal handlers and fixing the call in the test function. Now we're to the point of showing the way I think things should be. 2009-01-12 16:17:25 -0600 Ted Gould (3d55f90) * Basic show hide support in the indicator 2009-01-12 16:07:22 -0600 Ted Gould (b687b3a) * Changing to showing the inicator and make it so that we dont' crash right now. 2009-01-12 10:45:34 -0600 Ted Gould (245fdda) * Adding in the base functions with pointers and fun stuff like that 2009-01-11 23:51:55 -0600 Ted Gould (bea741f) * Adding in signals so that we can talk to the app over DBus. Nice. 2009-01-09 16:44:07 -0600 Ted Gould (4d93780) * Adding in a show to help debugging 2009-01-09 16:37:54 -0600 Ted Gould (55794df) * Adding in an indicator to the test and fixing a typo 2009-01-09 16:32:09 -0600 Ted Gould (791b5f8) * Connecting indicators and servers. They create themselves easily. 2009-01-09 16:24:57 -0600 Ted Gould (57b3f58) * Setting up the singleton nature of the server, and allow setting it. 2009-01-09 16:12:45 -0600 Ted Gould (f8ca555) * Fleshing out the server some in adding function and prototypes. 2009-01-08 16:53:43 -0600 Ted Gould (5ed10df) * Adding in build support for the indicate and crash test. Will make future ones easier. 2009-01-08 16:42:05 -0600 Ted Gould (fc3c5b9) * Adding in a simple program to crash after 15 seconds. Now we can add indicators to it. 2009-01-08 15:35:35 -0600 Ted Gould (7e75808) * Building a pretty good set of virtual functions and getting them tied together, with errors too. 2009-01-08 11:31:53 -0600 Ted Gould (e2a3557) * Basic GObject stuff 2009-01-07 21:01:44 -0600 Ted Gould (d505bed) * Setting up version of the libraries. 2009-01-07 20:36:35 -0600 Ted Gould (9389a6a) * Fixing stuff so that everything links all together 2009-01-07 20:24:47 -0600 Ted Gould (4381e65) * Adding in a built sources tag to build the header file properly 2009-01-07 20:18:12 -0600 Ted Gould (1068ff2) * Fixing linking and libraries and includes oh my 2009-01-07 19:58:22 -0600 Ted Gould (20c59cd) * Dummy starting file 2009-01-07 19:26:31 -0600 Ted Gould (699c575) * Adding libindicate to the build system 2009-01-07 17:42:44 -0600 Ted Gould (3206434) * Make file starting out to build this thing 2009-01-07 17:42:24 -0600 Ted Gould (cd42ea2) * Basic server stuff 2009-01-07 15:28:02 -0600 Ted Gould (ff7715c) * Fixing a bunch of typos, now it is a happy validating XML file. 2009-01-07 15:20:57 -0600 Ted Gould (e962748) * First version of XML DBus interface 2009-01-07 14:22:21 -0600 Ted Gould (98bb151) * Dropping in more code to make these real GObjects and such 2008-12-20 00:02:36 -0600 Ted Gould (8e913de) * Stopping point 2008-12-04 23:08:47 -0800 Ted Gould (0d28e60) * Moving the indicator directory cross-packages. 2008-12-04 22:41:45 -0800 Ted Gould (227bcb3) * Put in the kickarse loader code. Happy, happy. 2008-12-04 20:23:23 -0800 Ted Gould (438133c) * Building in a module loader 2008-12-03 23:51:29 -0800 Ted Gould (2253177) * Parse directories 2008-12-03 23:23:38 -0800 Ted Gould (75f4a72) * Making the applet very light. 2008-12-03 19:57:47 -0800 Ted Gould (bbc5347) * Okay, we're all doing everything perfect 2008-12-03 19:50:17 -0800 Ted Gould (854bab0) * Making the applet a lot more sparce. Now we're going to load things dynamically. Let them have their own problems. 2008-12-03 19:26:50 -0800 Ted Gould (e1092da) * Removing everything except messaging. 2008-12-02 11:49:55 -0600 Ted Gould (a387d91) * Adding in all of the icons into the mockups. 2008-11-25 10:54:28 -0600 Ted Gould (52e4855) * Adding in icons from Ken. 2008-11-24 22:49:50 -0600 Ted Gould (c8ae9fe) * Adding in some filler menus to get some depth. 2008-11-24 22:32:57 -0600 Ted Gould (f458833) * Adding in the infrastructure to have icons in the build. Only a dummy icon for now, but it's there and ready for some friends. 2008-11-24 22:31:40 -0600 Ted Gould (e23753e) * Adding in additional files to catch translations 2008-11-24 21:34:09 -0600 Ted Gould (3f3e49b) * Removing the test menu item. 2008-11-24 21:31:53 -0600 Ted Gould (edb2f89) * Adding in settings 2008-11-24 17:30:01 -0600 Ted Gould (f9b7c24) * Blocking the prelight 2008-11-24 17:26:48 -0600 Ted Gould (10629d4) * Making spacing and alignment better 2008-11-24 17:18:30 -0600 Ted Gould (98c6e94) * Getting some batteries in there. 2008-11-24 16:50:46 -0600 Ted Gould (c6c57ca) * Basic power handler 2008-11-20 22:48:00 -0600 Ted Gould (35cef87) * First try at getting it not to hide on click. Fail. 2008-11-20 22:40:11 -0600 Ted Gould (13ad9d4) * Whoa, getting that inherited type wrong really messes things up. 2008-11-20 17:04:30 -0600 Ted Gould (a29584a) * Clean compile, but something is broken in the _init function. Not sure what. 2008-11-19 15:26:40 -0600 Ted Gould (712bddc) * Okay, blocked the prelight on the item, now how do I get my buttons out of event prison. 2008-11-19 14:48:34 -0600 Ted Gould (9d3a43a) * Getting all the widgets in the menu item. Doesn't quite work right, but the widgets are there. 2008-11-19 14:25:56 -0600 Ted Gould (04153d7) * Adding in a menu item to start putting in a slider. 2008-11-18 14:31:09 -0600 Ted Gould (4645182) * Adding a depend for dbus-glib 2008-11-18 14:10:30 -0600 Ted Gould (9073e40) * Version one of debian packaging. 2008-11-12 22:01:39 -0600 Ted Gould (947bc3f) * Working on ideas for the prototype of the individual item stuff 2008-11-12 21:49:27 -0600 Ted Gould (b63286e) * Starting to build functions to handle the menu spec over DBus 2008-11-12 17:06:56 -0600 Ted Gould (b4b7ab3) * Okay, audio is an icon now. 2008-11-12 16:46:46 -0600 Ted Gould (b61274a) * Connecting in all the different applets, now they can do their own thing. 2008-11-12 16:41:12 -0600 Ted Gould (6a2c99b) * Adding the basis for all the different indicators that we want to include 2008-11-12 16:23:42 -0600 Ted Gould (99a07ef) * Switching from a label and an hbox to a menubar 2008-11-12 16:14:24 -0600 Ted Gould (dd64e6a) * Ah, forgot to show the applet itself. 2008-11-12 16:06:07 -0600 Ted Gould (9d5abe0) * Putting a label in the widget 2008-11-12 11:15:40 -0600 Ted Gould (5781046) * Adding in more documentation on the seperation between user interaction and the system services. 2008-11-10 15:27:56 -0600 Ted Gould (62605c2) * A diagram about how intermediate daemons are going to provide status to the panel. 2008-11-10 13:16:32 -0600 Ted Gould (75e2280) * Getting some text that I'd written on the target API in the repo. 2008-11-10 11:14:51 -0600 Ted Gould (0fdb6cc) * Indicator prototypes 2008-10-30 12:32:04 -0500 Ted Gould (236c9a2) * Ignoring some stuff 2008-10-30 12:31:31 -0500 Ted Gould (237fca7) * Setting up the data directories and getting everything to translate nicely 2008-10-29 21:36:40 -0500 Ted Gould (9b4a5fb) * Adding in the linking and some basic prototypes. 2008-10-29 21:30:35 -0500 Ted Gould (435437a) * Getting the build things together so that it starts building. Yeah. 2008-10-29 17:16:49 -0500 Ted Gould (9c2e7b6) * Basic build system, not quite working though libayatana-indicator-0.6.2/configure.ac0000644000000000000000000001343513254153536014767 0ustar AC_INIT([libayatana-indicator], [0.6.2], [https://github.com/ArcticaProject/libayatana-indicator/issues], [libayatana-indicator], [https://github.com/ArcticaProject/libayatana-indicator]) AC_PREREQ([2.64]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_AUX_DIR([build-aux]) AC_SUBST([ac_aux_dir]) AM_INIT_AUTOMAKE([1.11 -Wall tar-pax]) AM_MAINTAINER_MODE([enable]) AM_SILENT_RULES([yes])] # Check for programs AC_PROG_CC AM_PROG_CC_C_O AM_PROG_AR # Initialize libtool LT_PREREQ([2.2]) LT_INIT # Upstream's pkg.m4 (since 0.27) offers this now, but define our own # compatible version in case the local version of pkgconfig isn't new enough. # https://bugs.freedesktop.org/show_bug.cgi?id=48743 m4_ifdef([PKG_INSTALLDIR], [PKG_INSTALLDIR], [AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], [install directory for nx-x11.pc pkg-config file])], [],[with_pkgconfigdir='$(libdir)/pkgconfig']) AC_SUBST([pkgconfigdir], [${with_pkgconfigdir}])]) # Required when PKG_CHECK_MODULES called within an if statement PKG_PROG_PKG_CONFIG AC_PATH_PROG([GLIB_MKENUMS], [glib-mkenums]) AC_PATH_PROG([GLIB_GENMARSHAL], [glib-genmarshal]) AC_ARG_ENABLE([deprecations], [AS_HELP_STRING([--enable-deprecations], [allow deprecated API usage @<:@default=yes@:>@])], [], [enable_deprecations=yes]) AS_IF([test "x$enable_deprecations" = xno], [CFLAGS="$CFLAGS -DG_DISABLE_DEPRECATED -DGDK_DISABLE_DEPRECATED -DGDK_PIXBUF_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED -DGSEAL_ENABLE -DGTK_DISABLE_SINGLE_INCLUDES"] ) ############################## # Dependencies ############################## GTK_REQUIRED_VERSION=2.18 GTK3_REQUIRED_VERSION=3.6 GIO_UNIX_REQUIRED_VERSION=2.37 IDO_REQUIRED_VERSION=0.4.0 AC_ARG_WITH([gtk], [AS_HELP_STRING([--with-gtk], [Which version of gtk to use @<:@default=3@:>@])], [], [with_gtk=3]) AS_IF([test "x$with_gtk" = x3], [PKG_CHECK_MODULES(LIBINDICATOR, gtk+-3.0 >= $GTK3_REQUIRED_VERSION gmodule-2.0 gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION libayatana-ido3-0.4 >= $IDO_REQUIRED_VERSION) ], [test "x$with_gtk" = x2], [PKG_CHECK_MODULES(LIBINDICATOR, gtk+-2.0 >= $GTK_REQUIRED_VERSION gmodule-2.0 gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION) ], [AC_MSG_FAILURE([Value for --with-gtk was neither 2 nor 3])] ) AM_CONDITIONAL(USE_GTK3, [test "x$with_gtk" = x3]) LT_LIB_M AC_SUBST(LIBM) ############################## # Custom Junk ############################## AC_DEFUN([AC_DEFINE_PATH], [ test "x$prefix" = xNONE && prefix="$ac_default_prefix" test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' ac_define_path=`eval echo [$]$2` ac_define_path=`eval echo [$]ac_define_path` $1="$ac_define_path" AC_SUBST($1) ifelse($3, , AC_DEFINE_UNQUOTED($1, "$ac_define_path"), AC_DEFINE_UNQUOTED($1, "$ac_define_path", $3)) ]) ############################## # ./configure Flags messings ############################## cflags_set=${CFLAGS+set} # find the actual value for $prefix that we'll end up with REAL_PREFIX= if test "x$prefix" = "xNONE"; then REAL_PREFIX=$ac_default_prefix else REAL_PREFIX=$prefix fi # Have to go $sysconfdir->$prefix/etc->/usr/local/etc # if you actually know how to code shell then fix this :-) SYSCONFDIR_TMP="$sysconfdir" old_prefix=$prefix prefix=$REAL_PREFIX EXPANDED_SYSCONFDIR=`eval echo $SYSCONFDIR_TMP` prefix=$old_prefix AC_SUBST(EXPANDED_SYSCONFDIR) AC_DEFINE_PATH(PREFIX, "${prefix}", [prefix directory]) AC_DEFINE_PATH(SYSCONFDIR, "${sysconfdir}", [system configuration dir]) AC_DEFINE_PATH(LIBDIR, "${libdir}", [system configuration dir]) ######################### # Check for systemd ######################### PKG_CHECK_MODULES(SYSTEMD, systemd, [has_systemd=yes], [] ) if test "x$has_systemd" = "xyes"; then SYSTEMD_USERDIR=`$PKG_CONFIG --variable=systemduserunitdir systemd` AC_SUBST(SYSTEMD_USERDIR) AC_DEFINE(HAVE_SYSTEMD, 1, [create ayatana-indicators-pre.target for systemd]) fi ######################### # Check if build tests ######################### AC_ARG_ENABLE([tests], AC_HELP_STRING([--disable-tests], [disable tests]),, [enable_tests=yes]) AM_CONDITIONAL([WANT_TESTS], [test "x$enable_tests" != "xno"]) ######################### # Debug symbols ######################### AC_ARG_ENABLE([debug], AS_HELP_STRING([--enable-debug],[build with debug symbols]),, [enable_debug=no]) if test "x$enable_debug" = "xyes"; then CFLAGS="-g $CFLAGS" AC_DEFINE(ENABLE_DEBUG, 1, [build with extra debug information]) fi AM_CONDITIONAL(ENABLE_DEBUG, test "$enable_debug" = "yes") ########################### # gcov coverage reporting ########################### m4_include([m4/gcov.m4]) AC_TDD_GCOV AM_CONDITIONAL([HAVE_GCOV], [test "x$ac_cv_check_gcov" = xyes]) AM_CONDITIONAL([HAVE_LCOV], [test "x$ac_cv_check_lcov" = xyes]) AM_CONDITIONAL([HAVE_GCOVR], [test "x$ac_cv_check_gcovr" = xyes]) AC_SUBST(COVERAGE_CFLAGS) AC_SUBST(COVERAGE_CXXFLAGS) AC_SUBST(COVERAGE_LDFLAGS) ########################### # Files ########################### AC_CONFIG_FILES([ Makefile data/Makefile libayatana-indicator/Makefile libayatana-indicator/ayatana-indicator-0.4.pc.in libayatana-indicator/ayatana-indicator3-0.4.pc.in tests/Makefile tools/Makefile ]) AC_OUTPUT ########################### # Results ########################### AC_MSG_NOTICE([ Libindicator Configuration: Prefix: $prefix GTK+ Version: $with_gtk Enable tests: $enable_tests Enable debugging: $enable_debug Coverage reporting: $use_gcov ]) libayatana-indicator-0.6.2/COPYING0000644000000000000000000010451313254153536013532 0ustar GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . libayatana-indicator-0.6.2/data/ayatana-indicators-pre.target0000644000000000000000000000022513254153536021152 0ustar [Unit] Description=Target representing the lifecycle of the Ayatana Indicators. Each indicator should be bound to it in its individual service file. libayatana-indicator-0.6.2/data/Makefile.am0000644000000000000000000000021313254153536015434 0ustar #if defined(HAVE_SYSTEMD) systemd_DATA = ayatana-indicators-pre.target systemddir = $(SYSTEMD_USERDIR) EXTRA_DIST = $(systemd_DATA) #endif libayatana-indicator-0.6.2/helper/test-loader-build0000755000000000000000000000022013254153536017212 0ustar #!/bin/bash gcc `pkg-config --cflags --libs gtk+-2.0` -I../libindicator/ test-loader.c ../libindicator/indicator-image-helper.c -o test-loader libayatana-indicator-0.6.2/helper/test-loader.c0000644000000000000000000000055313254153536016344 0ustar #include #include "indicator-image-helper.h" int main (int argv, char * argc[]) { gtk_init(&argv, &argc); GtkImage * image = indicator_image_helper(argc[1]); GdkPixbuf * pixbuf = gtk_image_get_pixbuf(image); g_debug("Pixbuf width: %d", gdk_pixbuf_get_width(pixbuf)); g_debug("Pixbuf height: %d", gdk_pixbuf_get_height(pixbuf)); return; } libayatana-indicator-0.6.2/libayatana-indicator/ayatana-indicator-0.4.pc.in.in0000644000000000000000000000063613254153536024004 0ustar prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ bindir=@bindir@ includedir=@includedir@ indicatordir=${exec_prefix}/lib/ayatana-indicators/@indicator_abi_version@ iconsdir=@datarootdir@/@PACKAGE@/icons/ Cflags: -I${includedir}/libayatana-indicator-0.@indicator_api_version@ Requires: gtk+-2.0 Libs: -layatana-indicator Name: libayatana-indicator Description: libayatana-indicator. Version: @VERSION@ libayatana-indicator-0.6.2/libayatana-indicator/ayatana-indicator3-0.4.pc.in.in0000644000000000000000000000064313254153536024065 0ustar prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ bindir=@bindir@ includedir=@includedir@ indicatordir=${exec_prefix}/lib/ayatana-indicators3/@indicator_abi_version@/ iconsdir=@datarootdir@/@PACKAGE@/icons/ Cflags: -I${includedir}/libayatana-indicator3-0.@indicator_api_version@ Requires: gtk+-3.0 Libs: -layatana-indicator3 Name: libayatana-indicator3 Description: libayatana-indicator3. Version: @VERSION@ libayatana-indicator-0.6.2/libayatana-indicator/dbus-shared.h0000644000000000000000000000163613254153536021132 0ustar /* Shared defines for DBus interfaces and API versions to make sure the server and client agree. Copyright 2009 Canonical Ltd. Authors: Ted Gould This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version 3.0 for more details. You should have received a copy of the GNU General Public License along with this library. If not, see . */ #define INDICATOR_SERVICE_INTERFACE "org.ayatana.indicator.service" #define INDICATOR_SERVICE_OBJECT "/org/ayatana/indicator/service" #define INDICATOR_SERVICE_VERSION 1 libayatana-indicator-0.6.2/libayatana-indicator/indicator-desktop-shortcuts.c0000644000000000000000000005262313254153536024405 0ustar /* A small file to parse through the actions that are available in the desktop file and making those easily usable. Copyright 2010 Canonical Ltd. Authors: Ted Gould This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version 3.0 for more details. You should have received a copy of the GNU General Public License along with this library. If not, see . */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include "indicator-desktop-shortcuts.h" #define ACTIONS_KEY "Actions" #define ACTION_GROUP_PREFIX "Desktop Action" #define OLD_GROUP_SUFFIX "Shortcut Group" #define OLD_SHORTCUTS_KEY "X-Ayatana-Desktop-Shortcuts" #define OLD_ENVIRON_KEY "TargetEnvironment" #define PROP_DESKTOP_FILE_S "desktop-file" #define PROP_IDENTITY_S "identity" typedef enum _actions_t actions_t; enum _actions_t { ACTIONS_NONE, ACTIONS_XAYATANA, ACTIONS_DESKTOP_SPEC }; typedef struct _IndicatorDesktopShortcutsPrivate IndicatorDesktopShortcutsPrivate; struct _IndicatorDesktopShortcutsPrivate { actions_t actions; GKeyFile * keyfile; gchar * identity; GArray * nicks; gchar * domain; }; enum { PROP_0, PROP_DESKTOP_FILE, PROP_IDENTITY }; #define INDICATOR_DESKTOP_SHORTCUTS_GET_PRIVATE(o) \ (G_TYPE_INSTANCE_GET_PRIVATE ((o), INDICATOR_TYPE_DESKTOP_SHORTCUTS, IndicatorDesktopShortcutsPrivate)) static void indicator_desktop_shortcuts_class_init (IndicatorDesktopShortcutsClass *klass); static void indicator_desktop_shortcuts_init (IndicatorDesktopShortcuts *self); static void indicator_desktop_shortcuts_dispose (GObject *object); static void indicator_desktop_shortcuts_finalize (GObject *object); static void set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec); static void get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); static void parse_keyfile (IndicatorDesktopShortcuts * ids); static gboolean should_show (GKeyFile * keyfile, const gchar * group, const gchar * identity, gboolean should_have_target); G_DEFINE_TYPE (IndicatorDesktopShortcuts, indicator_desktop_shortcuts, G_TYPE_OBJECT); /* Build up the class */ static void indicator_desktop_shortcuts_class_init (IndicatorDesktopShortcutsClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); g_type_class_add_private (klass, sizeof (IndicatorDesktopShortcutsPrivate)); object_class->dispose = indicator_desktop_shortcuts_dispose; object_class->finalize = indicator_desktop_shortcuts_finalize; /* Property funcs */ object_class->set_property = set_property; object_class->get_property = get_property; g_object_class_install_property(object_class, PROP_DESKTOP_FILE, g_param_spec_string(PROP_DESKTOP_FILE_S, "The path of the desktop file to read", "A path to a desktop file that we'll look for shortcuts in.", NULL, G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(object_class, PROP_IDENTITY, g_param_spec_string(PROP_IDENTITY_S, "The string that represents the identity that we're acting as.", "Used to process ShowIn and NotShownIn fields of the desktop shortcust to get the proper list.", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY)); return; } /* Initialize instance data */ static void indicator_desktop_shortcuts_init (IndicatorDesktopShortcuts *self) { IndicatorDesktopShortcutsPrivate * priv = INDICATOR_DESKTOP_SHORTCUTS_GET_PRIVATE(self); priv->keyfile = NULL; priv->identity = NULL; priv->domain = NULL; priv->nicks = g_array_new(TRUE, TRUE, sizeof(gchar *)); priv->actions = ACTIONS_NONE; return; } /* Clear object references */ static void indicator_desktop_shortcuts_dispose (GObject *object) { IndicatorDesktopShortcutsPrivate * priv = INDICATOR_DESKTOP_SHORTCUTS_GET_PRIVATE(object); if (priv->keyfile) { g_key_file_free(priv->keyfile); priv->keyfile = NULL; } G_OBJECT_CLASS (indicator_desktop_shortcuts_parent_class)->dispose (object); return; } /* Free all memory */ static void indicator_desktop_shortcuts_finalize (GObject *object) { IndicatorDesktopShortcutsPrivate * priv = INDICATOR_DESKTOP_SHORTCUTS_GET_PRIVATE(object); if (priv->identity != NULL) { g_free(priv->identity); priv->identity = NULL; } if (priv->domain != NULL) { g_free(priv->domain); priv->domain = NULL; } if (priv->nicks != NULL) { gint i; for (i = 0; i < priv->nicks->len; i++) { gchar * nick = g_array_index(priv->nicks, gchar *, i); g_free(nick); } g_array_free(priv->nicks, TRUE); priv->nicks = NULL; } G_OBJECT_CLASS (indicator_desktop_shortcuts_parent_class)->finalize (object); return; } /* Sets one of the two properties we have, only at construction though */ static void set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) { g_return_if_fail(INDICATOR_IS_DESKTOP_SHORTCUTS(object)); IndicatorDesktopShortcutsPrivate * priv = INDICATOR_DESKTOP_SHORTCUTS_GET_PRIVATE(object); switch(prop_id) { case PROP_DESKTOP_FILE: { if (priv->keyfile != NULL) { g_key_file_free(priv->keyfile); priv->keyfile = NULL; priv->actions = ACTIONS_NONE; } GError * error = NULL; GKeyFile * keyfile = g_key_file_new(); g_key_file_load_from_file(keyfile, g_value_get_string(value), G_KEY_FILE_NONE, &error); if (error != NULL) { g_warning("Unable to load keyfile from file '%s': %s", g_value_get_string(value), error->message); g_error_free(error); g_key_file_free(keyfile); break; } /* Always prefer the desktop spec if we can get it */ if (priv->actions == ACTIONS_NONE && g_key_file_has_key(keyfile, G_KEY_FILE_DESKTOP_GROUP, ACTIONS_KEY, NULL)) { priv->actions = ACTIONS_DESKTOP_SPEC; } /* But fallback if we can't */ if (priv->actions == ACTIONS_NONE && g_key_file_has_key(keyfile, G_KEY_FILE_DESKTOP_GROUP, OLD_SHORTCUTS_KEY, NULL)) { priv->actions = ACTIONS_XAYATANA; g_warning("Desktop file '%s' is using a deprecated format for its actions that will be dropped soon.", g_value_get_string(value)); } if (priv->actions == ACTIONS_NONE) { g_key_file_free(keyfile); break; } priv->keyfile = keyfile; parse_keyfile(INDICATOR_DESKTOP_SHORTCUTS(object)); break; } case PROP_IDENTITY: if (priv->identity != NULL) { g_warning("Identity already set to '%s' and trying to set it to '%s'.", priv->identity, g_value_get_string(value)); return; } priv->identity = g_value_dup_string(value); parse_keyfile(INDICATOR_DESKTOP_SHORTCUTS(object)); break; /* *********************** */ default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } return; } /* Gets either the desktop file our the identity. */ static void get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec) { g_return_if_fail(INDICATOR_IS_DESKTOP_SHORTCUTS(object)); IndicatorDesktopShortcutsPrivate * priv = INDICATOR_DESKTOP_SHORTCUTS_GET_PRIVATE(object); switch(prop_id) { case PROP_IDENTITY: g_value_set_string(value, priv->identity); break; /* *********************** */ default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } return; } /* Checks to see if we can, and if we can it goes through and parses the keyfile entries. */ static void parse_keyfile (IndicatorDesktopShortcuts * ids) { IndicatorDesktopShortcutsPrivate * priv = INDICATOR_DESKTOP_SHORTCUTS_GET_PRIVATE(ids); if (priv->keyfile == NULL) { return; } if (priv->identity == NULL) { return; } /* Remove a previous translation domain if we had one from a previously parsed file. */ if (priv->domain != NULL) { g_free(priv->domain); priv->domain = NULL; } /* Check to see if there is a custom translation domain that we should take into account. */ if (priv->domain == NULL && g_key_file_has_key(priv->keyfile, G_KEY_FILE_DESKTOP_GROUP, "X-GNOME-Gettext-Domain", NULL)) { priv->domain = g_key_file_get_string(priv->keyfile, G_KEY_FILE_DESKTOP_GROUP, "X-GNOME-Gettext-Domain", NULL); } if (priv->domain == NULL && g_key_file_has_key(priv->keyfile, G_KEY_FILE_DESKTOP_GROUP, "X-Ubuntu-Gettext-Domain", NULL)) { priv->domain = g_key_file_get_string(priv->keyfile, G_KEY_FILE_DESKTOP_GROUP, "X-Ubuntu-Gettext-Domain", NULL); } /* We need to figure out what we're looking for and what we want to look for in the rest of the file */ const gchar * list_name = NULL; const gchar * group_format = NULL; gboolean should_have_target = FALSE; switch (priv->actions) { case ACTIONS_NONE: /* None, let's just get outta here */ return; case ACTIONS_XAYATANA: list_name = OLD_SHORTCUTS_KEY; group_format = "%s " OLD_GROUP_SUFFIX; should_have_target = TRUE; break; case ACTIONS_DESKTOP_SPEC: list_name = ACTIONS_KEY; group_format = ACTION_GROUP_PREFIX " %s"; should_have_target = FALSE; break; default: g_assert_not_reached(); return; } /* Okay, we've got everything we need. Let's get it on! */ gint i; gsize num_nicks = 0; gchar ** nicks = g_key_file_get_string_list(priv->keyfile, G_KEY_FILE_DESKTOP_GROUP, list_name, &num_nicks, NULL); /* If there is an error from get_string_list num_nicks should still be zero, so this loop will drop out. */ for (i = 0; i < num_nicks; i++) { /* g_debug("Looking at group nick %s", nicks[i]); */ gchar * groupname = g_strdup_printf(group_format, nicks[i]); if (!g_key_file_has_group(priv->keyfile, groupname)) { g_warning("Unable to find group '%s'", groupname); g_free(groupname); continue; } if (!should_show(priv->keyfile, G_KEY_FILE_DESKTOP_GROUP, priv->identity, FALSE)) { g_free(groupname); continue; } if (!should_show(priv->keyfile, groupname, priv->identity, should_have_target)) { g_free(groupname); continue; } gchar * nickalloc = g_strdup(nicks[i]); g_array_append_val(priv->nicks, nickalloc); g_free(groupname); } if (nicks != NULL) { g_strfreev(nicks); } return; } /* Checks the ONLY_SHOW_IN and NOT_SHOW_IN keys for a group to see if we should be showing ourselves. */ static gboolean should_show (GKeyFile * keyfile, const gchar * group, const gchar * identity, gboolean should_have_target) { if (should_have_target && g_key_file_has_key(keyfile, group, OLD_ENVIRON_KEY, NULL)) { /* If we've got this key, we're going to return here and not process the deprecated keys. */ gint j; gsize num_env = 0; gchar ** envs = g_key_file_get_string_list(keyfile, group, OLD_ENVIRON_KEY, &num_env, NULL); for (j = 0; j < num_env; j++) { if (g_strcmp0(envs[j], identity) == 0) { break; } } if (envs != NULL) { g_strfreev(envs); } if (j == num_env) { return FALSE; } return TRUE; } /* If there is a list of OnlyShowIn entries we need to check to see if we're in that list. If not, we drop this nick */ if (g_key_file_has_key(keyfile, group, G_KEY_FILE_DESKTOP_KEY_ONLY_SHOW_IN, NULL)) { gint j; gsize num_only = 0; gchar ** onlies = g_key_file_get_string_list(keyfile, group, G_KEY_FILE_DESKTOP_KEY_ONLY_SHOW_IN, &num_only, NULL); for (j = 0; j < num_only; j++) { if (g_strcmp0(onlies[j], identity) == 0) { break; } } if (onlies != NULL) { g_strfreev(onlies); } if (j == num_only) { return FALSE; } } /* If there is a NotShowIn entry we need to make sure that we're not in that list. If we are, we need to drop out. */ if (g_key_file_has_key(keyfile, group, G_KEY_FILE_DESKTOP_KEY_NOT_SHOW_IN, NULL)) { gint j; gsize num_not = 0; gchar ** nots = g_key_file_get_string_list(keyfile, group, G_KEY_FILE_DESKTOP_KEY_NOT_SHOW_IN, &num_not, NULL); for (j = 0; j < num_not; j++) { if (g_strcmp0(nots[j], identity) == 0) { break; } } if (nots != NULL) { g_strfreev(nots); } if (j != num_not) { return FALSE; } } return TRUE; } /* Looks through the nicks to see if this one is in the list, and thus valid to use. */ static gboolean is_valid_nick (gchar ** list, const gchar * nick) { if (*list == NULL) return FALSE; /* g_debug("Checking Nick: %s", list[0]); */ if (g_strcmp0(list[0], nick) == 0) return TRUE; return is_valid_nick(&list[1], nick); } /* API */ /** indicator_desktop_shortcuts_new: @file: The desktop file that would be opened to find the actions. @identity: This is a string that represents the identity that should be used in searching those actions. It relates to the ShowIn and NotShownIn properties. This function creates the basic object. It involves opening the file and parsing it. It could potentially block on IO. At the end of the day you'll have a fully functional object. Return value: A new #IndicatorDesktopShortcuts object. */ IndicatorDesktopShortcuts * indicator_desktop_shortcuts_new (const gchar * file, const gchar * identity) { GObject * obj = g_object_new(INDICATOR_TYPE_DESKTOP_SHORTCUTS, PROP_DESKTOP_FILE_S, file, PROP_IDENTITY_S, identity, NULL); return INDICATOR_DESKTOP_SHORTCUTS(obj); } /** indicator_desktop_shortcuts_get_nicks: @ids: The #IndicatorDesktopShortcuts object to look in Give you the list of commands that are available for this desktop file given the identity that was passed in at creation. This will filter out the various items in the desktop file. These nicks can then be used as keys for working with the desktop file. Return value: A #NULL terminated list of strings. This memory is managed by the @ids object. */ const gchar ** indicator_desktop_shortcuts_get_nicks (IndicatorDesktopShortcuts * ids) { g_return_val_if_fail(INDICATOR_IS_DESKTOP_SHORTCUTS(ids), NULL); IndicatorDesktopShortcutsPrivate * priv = INDICATOR_DESKTOP_SHORTCUTS_GET_PRIVATE(ids); return (const gchar **)priv->nicks->data; } /** indicator_desktop_shortcuts_nick_get_name: @ids: The #IndicatorDesktopShortcuts object to look in @nick: Which command that we're referencing. This function looks in a desktop file for a nick to find the user visible name for that shortcut. The @nick parameter should be gotten from #indicator_desktop_shortcuts_get_nicks though it's not required that the exact memory location be the same. Return value: A user visible string for the shortcut or #NULL on error. */ gchar * indicator_desktop_shortcuts_nick_get_name (IndicatorDesktopShortcuts * ids, const gchar * nick) { g_return_val_if_fail(INDICATOR_IS_DESKTOP_SHORTCUTS(ids), NULL); IndicatorDesktopShortcutsPrivate * priv = INDICATOR_DESKTOP_SHORTCUTS_GET_PRIVATE(ids); g_return_val_if_fail(priv->actions != ACTIONS_NONE, NULL); g_return_val_if_fail(priv->keyfile != NULL, NULL); g_return_val_if_fail(is_valid_nick((gchar **)priv->nicks->data, nick), NULL); const gchar * group_format = NULL; switch (priv->actions) { case ACTIONS_XAYATANA: group_format = "%s " OLD_GROUP_SUFFIX; break; case ACTIONS_DESKTOP_SPEC: group_format = ACTION_GROUP_PREFIX " %s"; break; default: g_assert_not_reached(); return NULL; } gchar * groupheader = g_strdup_printf(group_format, nick); if (!g_key_file_has_group(priv->keyfile, groupheader)) { g_warning("The group for nick '%s' doesn't exist anymore.", nick); g_free(groupheader); return NULL; } if (!g_key_file_has_key(priv->keyfile, groupheader, G_KEY_FILE_DESKTOP_KEY_NAME, NULL)) { g_warning("No name available for nick '%s'", nick); g_free(groupheader); return NULL; } gchar * name = NULL; gchar * keyvalue = g_key_file_get_string(priv->keyfile, groupheader, G_KEY_FILE_DESKTOP_KEY_NAME, NULL); gchar * localeval = g_key_file_get_locale_string(priv->keyfile, groupheader, G_KEY_FILE_DESKTOP_KEY_NAME, NULL, NULL); g_free(groupheader); if (priv->domain != NULL && g_strcmp0(keyvalue, localeval) == 0) { name = g_strdup(g_dgettext(priv->domain, keyvalue)); g_free(localeval); } else { name = localeval; } g_free(keyvalue); return name; } /** indicator_desktop_shortcuts_nick_exec_with_context: @ids: The #IndicatorDesktopShortcuts object to look in @nick: Which command that we're referencing. @launch_context: The #GAppLaunchContext to use for launching the shortcut Here we take a @nick and try and execute the action that is associated with it. The @nick parameter should be gotten from #indicator_desktop_shortcuts_get_nicks though it's not required that the exact memory location be the same. Return value: #TRUE on success or #FALSE on error. */ gboolean indicator_desktop_shortcuts_nick_exec_with_context (IndicatorDesktopShortcuts * ids, const gchar * nick, GAppLaunchContext * launch_context) { GError * error = NULL; gchar * current_dir = NULL; g_return_val_if_fail(INDICATOR_IS_DESKTOP_SHORTCUTS(ids), FALSE); IndicatorDesktopShortcutsPrivate * priv = INDICATOR_DESKTOP_SHORTCUTS_GET_PRIVATE(ids); g_return_val_if_fail(priv->actions != ACTIONS_NONE, FALSE); g_return_val_if_fail(priv->keyfile != NULL, FALSE); g_return_val_if_fail(is_valid_nick((gchar **)priv->nicks->data, nick), FALSE); const gchar * group_format = NULL; switch (priv->actions) { case ACTIONS_XAYATANA: group_format = "%s " OLD_GROUP_SUFFIX; break; case ACTIONS_DESKTOP_SPEC: group_format = ACTION_GROUP_PREFIX " %s"; break; default: g_assert_not_reached(); return FALSE; } gchar * groupheader = g_strdup_printf(group_format, nick); if (!g_key_file_has_group(priv->keyfile, groupheader)) { g_warning("The group for nick '%s' doesn't exist anymore.", nick); g_free(groupheader); return FALSE; } if (!g_key_file_has_key(priv->keyfile, groupheader, G_KEY_FILE_DESKTOP_KEY_NAME, NULL)) { g_warning("No name available for nick '%s'", nick); g_free(groupheader); return FALSE; } if (!g_key_file_has_key(priv->keyfile, groupheader, G_KEY_FILE_DESKTOP_KEY_EXEC, NULL)) { g_warning("No exec available for nick '%s'", nick); g_free(groupheader); return FALSE; } /* If possible move to the proper launch path */ gchar * path = g_key_file_get_string(priv->keyfile, groupheader, G_KEY_FILE_DESKTOP_KEY_PATH, NULL); if (path && *path != '\0') { current_dir = g_get_current_dir(); if (chdir(path) < 0) { g_warning("Impossible to run action '%s' from path '%s'", nick, path); g_free(current_dir); g_free(groupheader); g_free(path); return FALSE; } } /* Grab the name and the exec entries out of our current group */ gchar * name = g_key_file_get_locale_string(priv->keyfile, groupheader, G_KEY_FILE_DESKTOP_KEY_NAME, NULL, NULL); gchar * exec = g_key_file_get_locale_string(priv->keyfile, groupheader, G_KEY_FILE_DESKTOP_KEY_EXEC, NULL, NULL); GAppInfoCreateFlags flags = G_APP_INFO_CREATE_NONE; if (launch_context) { flags |= G_APP_INFO_CREATE_SUPPORTS_STARTUP_NOTIFICATION; } GAppInfo * appinfo = g_app_info_create_from_commandline(exec, name, flags, &error); g_free(groupheader); g_free(path); g_free(name); g_free(exec); if (error != NULL) { g_warning("Unable to build Command line App info: %s", error->message); g_free(current_dir); g_error_free(error); return FALSE; } if (appinfo == NULL) { g_warning("Unable to build Command line App info (unknown)"); g_free(current_dir); return FALSE; } gboolean launched = g_app_info_launch(appinfo, NULL, launch_context, &error); if (current_dir && chdir(current_dir) < 0) g_warning("Impossible to switch back to default work dir"); if (error != NULL) { g_warning("Unable to launch file from nick '%s': %s", nick, error->message); g_clear_error(&error); } g_free(current_dir); g_object_unref(appinfo); return launched; } /** indicator_desktop_shortcuts_nick_exec: @ids: The #IndicatorDesktopShortcuts object to look in @nick: Which command that we're referencing. Here we take a @nick and try and execute the action that is associated with it. The @nick parameter should be gotten from #indicator_desktop_shortcuts_get_nicks though it's not required that the exact memory location be the same. This function is deprecated and shouldn't be used in newly written code. Return value: #TRUE on success or #FALSE on error. */ gboolean indicator_desktop_shortcuts_nick_exec (IndicatorDesktopShortcuts * ids, const gchar * nick) { return indicator_desktop_shortcuts_nick_exec_with_context (ids, nick, NULL); } libayatana-indicator-0.6.2/libayatana-indicator/indicator-desktop-shortcuts.h0000644000000000000000000000674613254153536024417 0ustar /* A small file to parse through the actions that are available in the desktop file and making those easily usable. Copyright 2010 Canonical Ltd. Authors: Ted Gould This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version 3.0 for more details. You should have received a copy of the GNU General Public License along with this library. If not, see . */ #ifndef __INDICATOR_DESKTOP_SHORTCUTS_H__ #define __INDICATOR_DESKTOP_SHORTCUTS_H__ #include #include #include G_BEGIN_DECLS #define INDICATOR_TYPE_DESKTOP_SHORTCUTS (indicator_desktop_shortcuts_get_type ()) #define INDICATOR_DESKTOP_SHORTCUTS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), INDICATOR_TYPE_DESKTOP_SHORTCUTS, IndicatorDesktopShortcuts)) #define INDICATOR_DESKTOP_SHORTCUTS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), INDICATOR_TYPE_DESKTOP_SHORTCUTS, IndicatorDesktopShortcutsClass)) #define INDICATOR_IS_DESKTOP_SHORTCUTS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), INDICATOR_TYPE_DESKTOP_SHORTCUTS)) #define INDICATOR_IS_DESKTOP_SHORTCUTS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), INDICATOR_TYPE_DESKTOP_SHORTCUTS)) #define INDICATOR_DESKTOP_SHORTCUTS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), INDICATOR_TYPE_DESKTOP_SHORTCUTS, IndicatorDesktopShortcutsClass)) typedef struct _IndicatorDesktopShortcuts IndicatorDesktopShortcuts; typedef struct _IndicatorDesktopShortcutsClass IndicatorDesktopShortcutsClass; /** IndicatorDesktopShortcutsClass: @parent_class: Space for #GObjectClass The vtable for our precious #IndicatorDesktopShortcutsClass. */ struct _IndicatorDesktopShortcutsClass { GObjectClass parent_class; }; /** IndicatorDesktopShortcuts: @parent: The parent data from #GObject The public data for an instance of the class #IndicatorDesktopShortcuts. */ struct _IndicatorDesktopShortcuts { GObject parent; }; GType indicator_desktop_shortcuts_get_type (void); IndicatorDesktopShortcuts * indicator_desktop_shortcuts_new (const gchar * file, const gchar * identity); const gchar ** indicator_desktop_shortcuts_get_nicks (IndicatorDesktopShortcuts * ids); gchar * indicator_desktop_shortcuts_nick_get_name (IndicatorDesktopShortcuts * ids, const gchar * nick); gboolean indicator_desktop_shortcuts_nick_exec_with_context (IndicatorDesktopShortcuts * ids, const gchar * nick, GAppLaunchContext * launch_context); GLIB_DEPRECATED_FOR(indicator_desktop_shortcuts_nick_exec_with_context) gboolean indicator_desktop_shortcuts_nick_exec (IndicatorDesktopShortcuts * ids, const gchar * nick); G_END_DECLS #endif libayatana-indicator-0.6.2/libayatana-indicator/indicator.h0000644000000000000000000000243513254153536020703 0ustar /* An interface for indicators to link to for creation. Copyright 2009 Canonical Ltd. Authors: Ted Gould This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version 3.0 for more details. You should have received a copy of the GNU General Public License along with this library. If not, see . */ #ifndef __LIBINDICATOR_INDICATOR_H_SEEN__ #define __LIBINDICATOR_INDICATOR_H_SEEN__ 1 #include #define INDICATOR_GET_VERSION_S "get_version" typedef gchar * (*get_version_t) (void); gchar * get_version (void); #define INDICATOR_VERSION "0.3.0" #define INDICATOR_SET_VERSION gchar * get_version(void) { return INDICATOR_VERSION; } #define INDICATOR_VERSION_CHECK(x) (!g_strcmp0(x, INDICATOR_VERSION)) #define INDICATOR_GET_TYPE_S "get_type" typedef GType (*get_type_t) (void); #define INDICATOR_SET_TYPE(x) GType get_type (void) { return x; } #endif /* __LIBINDICATOR_INDICATOR_H_SEEN__ */ libayatana-indicator-0.6.2/libayatana-indicator/indicator-image-helper.c0000644000000000000000000001502213254153536023227 0ustar /* A little helper to make a themed image with fallbacks that is only constrained in the vertical dimention. Copyright 2010 Canonical Ltd. Authors: Ted Gould This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version 3.0 for more details. You should have received a copy of the GNU General Public License along with this library. If not, see . */ #include #include "indicator-image-helper.h" const gchar * INDICATOR_NAMES_DATA = "indicator-names-data"; const gint ICON_SIZE = 22; static void refresh_image (GtkImage * image) { g_return_if_fail(GTK_IS_IMAGE(image)); const gchar * icon_filename = NULL; GtkIconInfo * icon_info = NULL; GIcon * icon_names = (GIcon *)g_object_get_data(G_OBJECT(image), INDICATOR_NAMES_DATA); g_return_if_fail(G_IS_ICON (icon_names)); /* Get the default theme */ GtkIconTheme * default_theme = gtk_icon_theme_get_default(); g_return_if_fail(default_theme != NULL); /* Look through the themes for that icon */ icon_info = gtk_icon_theme_lookup_by_gicon(default_theme, icon_names, ICON_SIZE, 0); if (icon_info == NULL) { /* Maybe the icon was just added to the theme, see if a rescan helps */ gtk_icon_theme_rescan_if_needed(default_theme); icon_info = gtk_icon_theme_lookup_by_gicon(default_theme, icon_names, ICON_SIZE, 0); } if (icon_info == NULL) { /* Try using the second item in the names, which should be the original filename supplied */ const gchar * const * names = g_themed_icon_get_names(G_THEMED_ICON( icon_names )); if (names) { icon_filename = names[1]; } else { g_warning("Unable to find icon\n"); gtk_image_clear(image); return; } } else { /* Grab the filename */ icon_filename = gtk_icon_info_get_filename(icon_info); } if (icon_filename == NULL && !G_IS_BYTES_ICON(icon_names)) { /* show a broken image if we don't have a filename or image data */ gtk_image_set_from_icon_name(image, "image-missing", GTK_ICON_SIZE_LARGE_TOOLBAR); return; } if (icon_info != NULL && !G_IS_BYTES_ICON(icon_names)) { GdkPixbuf *pixbuf = gtk_icon_info_load_icon(icon_info, NULL); if (gdk_pixbuf_get_height(pixbuf) < ICON_SIZE) { gtk_image_set_from_file(image, icon_filename); } else { gtk_image_set_from_gicon(image, icon_names, GTK_ICON_SIZE_LARGE_TOOLBAR); } g_object_unref (pixbuf); } else if (icon_filename != NULL) { gtk_image_set_from_file(image, icon_filename); gint height; gdk_pixbuf_get_file_info(icon_filename, NULL, &height); if (height > ICON_SIZE) { gtk_image_set_pixel_size(image, ICON_SIZE); } } else if (G_IS_LOADABLE_ICON(icon_names)) { /* Build a pixbuf if needed */ GdkPixbuf * pixbuf = NULL; GError * error = NULL; GInputStream * stream = g_loadable_icon_load(G_LOADABLE_ICON(icon_names), ICON_SIZE, NULL, NULL, &error); if (stream != NULL) { pixbuf = gdk_pixbuf_new_from_stream(stream, NULL, &error); g_input_stream_close (stream, NULL, NULL); g_object_unref (stream); if (pixbuf != NULL) { /* Scale icon if all we get is something too big. */ if (gdk_pixbuf_get_height(pixbuf) > ICON_SIZE) { gfloat scale = (gfloat)ICON_SIZE / (gfloat)gdk_pixbuf_get_height(pixbuf); gint width = round(gdk_pixbuf_get_width(pixbuf) * scale); GdkPixbuf * scaled = gdk_pixbuf_scale_simple(pixbuf, width, ICON_SIZE, GDK_INTERP_BILINEAR); g_object_unref(G_OBJECT(pixbuf)); pixbuf = scaled; } /* Put the pixbuf on the image */ gtk_image_set_from_pixbuf(image, pixbuf); g_object_unref(G_OBJECT(pixbuf)); } else { g_warning ("Unable to load icon from data: %s", error->message); g_error_free (error); } } else { g_warning ("Unable to load icon from data: %s", error->message); g_error_free (error); } } if (icon_info != NULL) { #if GTK_CHECK_VERSION(3, 8, 0) g_object_unref(icon_info); #else /* NOTE: Leaving this in for lower version as it seems the object_unref() doesn't work on earlier versions. */ gtk_icon_info_free (icon_info); #endif } } /* Handles the theme changed signal to refresh the icon to make sure that it changes appropriately */ static void theme_changed_cb (GtkIconTheme * theme, gpointer user_data) { GtkImage * image = GTK_IMAGE(user_data); refresh_image(image); return; } /* Removes the signal on the theme that was calling update on this image. */ static void image_destroyed_cb (GtkImage * image, gpointer user_data) { g_signal_handlers_disconnect_by_func(gtk_icon_theme_get_default(), theme_changed_cb, image); return; } /* Catch the style changing on the image to make sure we've got the latest. */ static void image_style_change_cb (GtkImage * image, GtkStyle * previous_style, gpointer user_data) { refresh_image(image); return; } /* Builds an image with the name and fallbacks and all kinds of fun stuff . */ GtkImage * indicator_image_helper (const gchar * name) { /* Build us an image */ GtkImage * image = GTK_IMAGE(gtk_image_new()); if (name) indicator_image_helper_update(image, name); return image; } /* Updates and image with all the fun stuff */ void indicator_image_helper_update (GtkImage * image, const gchar * name) { g_return_if_fail(name != NULL); g_return_if_fail(name[0] != '\0'); g_return_if_fail(GTK_IS_IMAGE(image)); /* Build us a GIcon */ GIcon * icon_names = g_themed_icon_new_with_default_fallbacks(name); g_warn_if_fail(icon_names != NULL); g_return_if_fail(icon_names != NULL); indicator_image_helper_update_from_gicon (image, icon_names); g_object_unref (icon_names); return; } void indicator_image_helper_update_from_gicon (GtkImage *image, GIcon *icon) { gboolean seen_previously = FALSE; seen_previously = (g_object_get_data(G_OBJECT(image), INDICATOR_NAMES_DATA) != NULL); /* Attach our names to the image */ g_object_set_data_full(G_OBJECT(image), INDICATOR_NAMES_DATA, g_object_ref (icon), g_object_unref); /* Put the pixbuf in */ refresh_image(image); /* Connect to all changes */ if (!seen_previously) { g_signal_connect(G_OBJECT(gtk_icon_theme_get_default()), "changed", G_CALLBACK(theme_changed_cb), image); g_signal_connect(G_OBJECT(image), "destroy", G_CALLBACK(image_destroyed_cb), NULL); g_signal_connect(G_OBJECT(image), "style-set", G_CALLBACK(image_style_change_cb), NULL); } return; } libayatana-indicator-0.6.2/libayatana-indicator/indicator-image-helper.h0000644000000000000000000000236613254153536023243 0ustar /* A little helper to make a themed image with fallbacks that is only constrained in the vertical dimention. Copyright 2010 Canonical Ltd. Authors: Ted Gould This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version 3.0 for more details. You should have received a copy of the GNU General Public License along with this library. If not, see . */ #ifndef __INDICATOR_IMAGE_HELPER_H__ #define __INDICATOR_IMAGE_HELPER_H__ #include GtkImage * indicator_image_helper (const gchar * name); void indicator_image_helper_update (GtkImage * image, const gchar * name); void indicator_image_helper_update_from_gicon (GtkImage * image, GIcon * icon); #endif /* __INDICATOR_IMAGE_HELPER_H__ */ libayatana-indicator-0.6.2/libayatana-indicator/indicator-ng.c0000644000000000000000000005514213254153536021303 0ustar /* * Copyright 2013 Canonical Ltd. * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License version 3, as published * by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranties of * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . * * Authors: * Lars Uebernickel */ #include "indicator-ng.h" #include "indicator-image-helper.h" #include struct _IndicatorNg { IndicatorObject parent; gchar *service_file; gchar *name; gchar *object_path; gchar *menu_object_path; gchar *bus_name; gchar *profile; gchar *header_action; gchar *scroll_action; gchar *secondary_action; gchar *submenu_action; gint position; guint name_watch_id; GDBusConnection *session_bus; GActionGroup *actions; GMenuModel *menu; IndicatorObjectEntry entry; gchar *accessible_desc; gint64 last_service_restart; }; static void indicator_ng_initable_iface_init (GInitableIface *initable); G_DEFINE_TYPE_WITH_CODE (IndicatorNg, indicator_ng, INDICATOR_OBJECT_TYPE, G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, indicator_ng_initable_iface_init)) enum { PROP_0, PROP_SERVICE_FILE, PROP_PROFILE, N_PROPERTIES }; static GParamSpec *properties[N_PROPERTIES]; static void indicator_ng_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { IndicatorNg *self = INDICATOR_NG (object); switch (property_id) { case PROP_SERVICE_FILE: g_value_set_string (value, self->service_file); break; case PROP_PROFILE: g_value_set_string (value, self->profile); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } } static void indicator_ng_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { IndicatorNg *self = INDICATOR_NG (object); switch (property_id) { case PROP_SERVICE_FILE: /* construct-only */ self->service_file = g_strdup (g_value_get_string (value)); break; case PROP_PROFILE: /* construct-only */ self->profile = g_strdup (g_value_get_string (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } } static void indicator_ng_free_actions_and_menu (IndicatorNg *self) { if (self->actions) { gtk_widget_insert_action_group (GTK_WIDGET (self->entry.menu), "indicator", NULL); g_signal_handlers_disconnect_by_data (self->actions, self); g_clear_object (&self->actions); } if (self->menu) { g_signal_handlers_disconnect_by_data (self->menu, self); g_clear_object (&self->menu); } } static void indicator_ng_dispose (GObject *object) { IndicatorNg *self = INDICATOR_NG (object); if (self->name_watch_id) { g_bus_unwatch_name (self->name_watch_id); self->name_watch_id = 0; } g_clear_object (&self->session_bus); indicator_ng_free_actions_and_menu (self); g_clear_object (&self->entry.label); g_clear_object (&self->entry.image); g_clear_object (&self->entry.menu); G_OBJECT_CLASS (indicator_ng_parent_class)->dispose (object); } static void indicator_ng_finalize (GObject *object) { IndicatorNg *self = INDICATOR_NG (object); g_free (self->service_file); g_free (self->name); g_free (self->object_path); g_free (self->menu_object_path); g_free (self->bus_name); g_free (self->accessible_desc); g_free (self->header_action); g_free (self->scroll_action); g_free (self->secondary_action); g_free (self->submenu_action); G_OBJECT_CLASS (indicator_ng_parent_class)->finalize (object); } static GList * indicator_ng_get_entries (IndicatorObject *io) { IndicatorNg *self = INDICATOR_NG (io); return g_list_append (NULL, &self->entry); } static gint indicator_ng_get_position (IndicatorObject *io) { IndicatorNg *self = INDICATOR_NG (io); return self->position; } static void indicator_ng_entry_scrolled (IndicatorObject *io, IndicatorObjectEntry *entry, gint delta, IndicatorScrollDirection direction) { IndicatorNg *self = INDICATOR_NG (io); if (self->actions && self->scroll_action) { if (direction == INDICATOR_OBJECT_SCROLL_DOWN || direction == INDICATOR_OBJECT_SCROLL_LEFT) { delta *= -1; } g_action_group_activate_action (self->actions, self->scroll_action, g_variant_new_int32 (delta)); } } void indicator_ng_secondary_activate (IndicatorObject *io, IndicatorObjectEntry *entry, guint timestamp, gpointer user_data) { IndicatorNg *self = INDICATOR_NG (io); if (self->actions && self->secondary_action) { g_action_group_activate_action (self->actions, self->secondary_action, NULL); } } static void indicator_ng_menu_shown (GtkWidget *widget, gpointer user_data) { IndicatorNg *self = user_data; if (self->submenu_action) g_action_group_change_action_state (self->actions, self->submenu_action, g_variant_new_boolean (TRUE)); } static void indicator_ng_menu_hidden (GtkWidget *widget, gpointer user_data) { IndicatorNg *self = user_data; if (self->submenu_action) g_action_group_change_action_state (self->actions, self->submenu_action, g_variant_new_boolean (FALSE)); } static void indicator_ng_set_accessible_desc (IndicatorNg *self, const gchar *accessible_desc) { g_free (self->accessible_desc); self->accessible_desc = g_strdup (accessible_desc); self->entry.accessible_desc = self->accessible_desc; g_signal_emit_by_name (self, INDICATOR_OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE, &self->entry); } static void indicator_ng_set_icon_from_variant (IndicatorNg *self, GVariant *variant) { GIcon *icon; if (variant == NULL) { if (self->entry.image) { gtk_image_clear (self->entry.image); gtk_widget_hide (GTK_WIDGET (self->entry.image)); } return; } gtk_widget_show (GTK_WIDGET (self->entry.image)); icon = g_icon_deserialize (variant); if (icon) { indicator_image_helper_update_from_gicon (self->entry.image, icon); g_object_unref (icon); } else { gchar *text = g_variant_print (variant, TRUE); g_warning ("invalid icon variant '%s'", text); gtk_image_set_from_icon_name (self->entry.image, "image-missing", GTK_ICON_SIZE_LARGE_TOOLBAR); g_free (text); } } static void indicator_ng_set_label (IndicatorNg *self, const gchar *label) { if (label == NULL || *label == '\0') { if (self->entry.label) gtk_widget_hide (GTK_WIDGET (self->entry.label)); return; } gtk_label_set_label (GTK_LABEL (self->entry.label), label); gtk_widget_show (GTK_WIDGET (self->entry.label)); } static void indicator_ng_update_entry (IndicatorNg *self) { GVariant *state; const gchar *label = NULL; GVariant *icon = NULL; const gchar *accessible_desc = NULL; gboolean visible = TRUE; g_return_if_fail (self->menu != NULL); g_return_if_fail (self->actions != NULL); if (!self->header_action || !g_action_group_has_action (self->actions, self->header_action)) { indicator_object_set_visible (INDICATOR_OBJECT (self), FALSE); return; } state = g_action_group_get_action_state (self->actions, self->header_action); if (state && g_variant_is_of_type (state, G_VARIANT_TYPE ("(sssb)"))) { const gchar *iconstr = NULL; g_variant_get (state, "(&s&s&sb)", &label, &iconstr, &accessible_desc, &visible); if (iconstr) icon = g_variant_ref_sink (g_variant_new_string (iconstr)); } else if (state && g_variant_is_of_type (state, G_VARIANT_TYPE ("a{sv}"))) { g_variant_lookup (state, "label", "&s", &label); g_variant_lookup (state, "icon", "*", &icon); g_variant_lookup (state, "accessible-desc", "&s", &accessible_desc); g_variant_lookup (state, "visible", "b", &visible); } else g_warning ("the action of the indicator menu item must have state with type (sssb) or a{sv}"); indicator_ng_set_label (self, label); indicator_ng_set_icon_from_variant (self, icon); indicator_ng_set_accessible_desc (self, accessible_desc); indicator_object_set_visible (INDICATOR_OBJECT (self), visible); if (icon) g_variant_unref (icon); if (state) g_variant_unref (state); } static gboolean indicator_ng_menu_item_is_of_type (GMenuModel *menu, gint index, const gchar *expected_type) { gchar *type; gboolean has_type = FALSE; if (g_menu_model_get_item_attribute (menu, index, "x-canonical-type", "s", &type)) { has_type = g_str_equal (type, expected_type); g_free (type); } return has_type; } static void indicator_ng_menu_changed (GMenuModel *menu, gint position, gint removed, gint added, gpointer user_data) { IndicatorNg *self = user_data; /* The menu may only contain one item (the indicator title menu). * Thus, the position is always 0, and there is either exactly one * item added or exactly one item removed. */ g_return_if_fail (position == 0); g_return_if_fail (added < 2 && removed < 2 && added ^ removed); if (removed) indicator_object_set_visible (INDICATOR_OBJECT (self), FALSE); if (added) { g_clear_pointer (&self->header_action, g_free); g_clear_pointer (&self->scroll_action, g_free); g_clear_pointer (&self->secondary_action, g_free); if (indicator_ng_menu_item_is_of_type (self->menu, 0, "org.ayatana.indicator.root")) { GMenuModel *popup; gchar *action; if (g_menu_model_get_item_attribute (self->menu, 0, G_MENU_ATTRIBUTE_ACTION, "s", &action)) { if (g_str_has_prefix (action, "indicator.")) self->header_action = g_strdup (action + strlen ("indicator.")); g_free (action); } if (g_menu_model_get_item_attribute (self->menu, 0, "x-canonical-scroll-action", "s", &action)) { if (g_str_has_prefix (action, "indicator.")) self->scroll_action = g_strdup (action + strlen ("indicator.")); g_free (action); } if (g_menu_model_get_item_attribute (self->menu, 0, "x-canonical-secondary-action", "s", &action)) { if (g_str_has_prefix (action, "indicator.")) self->secondary_action = g_strdup (action + strlen ("indicator.")); g_free (action); } if (g_menu_model_get_item_attribute (self->menu, 0, "submenu-action", "s", &action)) { if (g_str_has_prefix (action, "indicator.")) self->submenu_action = g_strdup (action + strlen ("indicator.")); g_free (action); } popup = g_menu_model_get_item_link (self->menu, 0, G_MENU_LINK_SUBMENU); if (popup) { gtk_menu_shell_bind_model (GTK_MENU_SHELL (self->entry.menu), popup, NULL, TRUE); g_object_unref (popup); } indicator_ng_update_entry (self); } else g_warning ("indicator menu item must be of type 'org.ayatana.indicator.root'"); } } static void indicator_ng_service_appeared (GDBusConnection *connection, const gchar *name, const gchar *name_owner, gpointer user_data) { IndicatorNg *self = user_data; g_assert (!self->actions); g_assert (!self->menu); /* watch is not established when menu_object_path == NULL */ g_assert (self->menu_object_path); self->session_bus = g_object_ref (connection); self->actions = G_ACTION_GROUP (g_dbus_action_group_get (connection, name_owner, self->object_path)); gtk_widget_insert_action_group (GTK_WIDGET (self->entry.menu), "indicator", self->actions); g_signal_connect_swapped (self->actions, "action-added", G_CALLBACK (indicator_ng_update_entry), self); g_signal_connect_swapped (self->actions, "action-removed", G_CALLBACK (indicator_ng_update_entry), self); g_signal_connect_swapped (self->actions, "action-state-changed", G_CALLBACK (indicator_ng_update_entry), self); self->menu = G_MENU_MODEL (g_dbus_menu_model_get (connection, name_owner, self->menu_object_path)); g_signal_connect (self->menu, "items-changed", G_CALLBACK (indicator_ng_menu_changed), self); if (g_menu_model_get_n_items (self->menu)) indicator_ng_menu_changed (self->menu, 0, 0, 1, self); indicator_ng_update_entry (self); } static void indicator_ng_service_started (GObject *source_object, GAsyncResult *res, gpointer user_data) { IndicatorNg *self = user_data; GError *error = NULL; GVariant *result; guint32 start_service_reply; result = g_dbus_connection_call_finish (G_DBUS_CONNECTION (source_object), res, &error); if (!result) { g_warning ("Could not activate service '%s': %s", self->name, error->message); indicator_object_set_visible (INDICATOR_OBJECT (self), FALSE); g_error_free (error); return; } start_service_reply = 0; g_variant_get (result, "(u)", &start_service_reply); switch (start_service_reply) { case 1: /* DBUS_START_REPLY_SUCCESS */ break; case 2: /* DBUS_START_REPLY_ALREADY_RUNNING */ g_warning ("could not start service '%s': it is already running", self->name); break; default: g_assert_not_reached (); } g_variant_unref (result); } static void indicator_ng_service_vanished (GDBusConnection *connection, const gchar *name, gpointer user_data) { IndicatorNg *self = user_data; indicator_ng_free_actions_and_menu (self); /* Names may vanish because the service decided it doesn't need to * show its indicator anymore, or because it crashed. Let's assume it * crashes and restart it unless it explicitly hid its indicator. */ if (indicator_object_entry_is_visible (INDICATOR_OBJECT (self), &self->entry)) { gint64 now; /* take care not to start it if it repeatedly crashes */ now = g_get_monotonic_time (); if (now - self->last_service_restart < 1 * G_USEC_PER_SEC) { g_warning ("The indicator '%s' vanished too quickly after appearing. It won't " "be respawned anymore, as it could be crashing repeatedly.", self->name); return; } self->last_service_restart = now; g_dbus_connection_call (self->session_bus, "org.freedesktop.DBus", "/", "org.freedesktop.DBus", "StartServiceByName", g_variant_new ("(su)", self->bus_name, 0), G_VARIANT_TYPE ("(u)"), G_DBUS_CALL_FLAGS_NONE, -1, NULL, indicator_ng_service_started, self); } } /* Get an integer from a keyfile. Returns @default_value if the key * doesn't exist exists or is not an integer */ static gint g_key_file_maybe_get_integer (GKeyFile *keyfile, const gchar *group, const gchar *key, gint default_value) { GError *error = NULL; gint i; i = g_key_file_get_integer (keyfile, group, key, &error); if (error) { g_error_free (error); return default_value; } return i; } static gboolean indicator_ng_load_from_keyfile (IndicatorNg *self, GKeyFile *keyfile, GError **error) { g_assert (self->name == NULL); g_assert (self->object_path == NULL); g_assert (self->menu_object_path == NULL); self->name = g_key_file_get_string (keyfile, "Indicator Service", "Name", error); if (self->name == NULL) return FALSE; self->object_path = g_key_file_get_string (keyfile, "Indicator Service", "ObjectPath", error); if (self->object_path == NULL) return FALSE; self->position = g_key_file_maybe_get_integer (keyfile, "Indicator Service", "Position", -1); /* * Don't throw an error when the profile doesn't exist. Non-existant * profiles are silently ignored by not showing an indicator at all. */ if (g_key_file_has_group (keyfile, self->profile)) { /* however, if the profile exists, it must have "ObjectPath" */ self->menu_object_path = g_key_file_get_string (keyfile, self->profile, "ObjectPath", error); if (self->menu_object_path == NULL) return FALSE; /* a position in the profile overrides the global one */ self->position = g_key_file_maybe_get_integer (keyfile, self->profile, "Position", self->position); } return TRUE; } static gboolean indicator_ng_initable_init (GInitable *initable, GCancellable *cancellable, GError **error) { IndicatorNg *self = INDICATOR_NG (initable); GKeyFile *keyfile; gboolean success = FALSE; self->bus_name = g_path_get_basename (self->service_file); keyfile = g_key_file_new (); if (g_key_file_load_from_file (keyfile, self->service_file, G_KEY_FILE_NONE, error) && indicator_ng_load_from_keyfile (self, keyfile, error)) { self->entry.name_hint = self->name; /* only watch the service when it supports the proile we're interested in */ if (self->menu_object_path) { self->name_watch_id = g_bus_watch_name (G_BUS_TYPE_SESSION, self->bus_name, G_BUS_NAME_WATCHER_FLAGS_AUTO_START, indicator_ng_service_appeared, indicator_ng_service_vanished, self, NULL); } success = TRUE; } g_key_file_free (keyfile); return success; } static void indicator_ng_class_init (IndicatorNgClass *class) { GObjectClass *object_class = G_OBJECT_CLASS (class); IndicatorObjectClass *io_class = INDICATOR_OBJECT_CLASS (class); object_class->get_property = indicator_ng_get_property; object_class->set_property = indicator_ng_set_property; object_class->dispose = indicator_ng_dispose; object_class->finalize = indicator_ng_finalize; io_class->get_entries = indicator_ng_get_entries; io_class->get_position = indicator_ng_get_position; io_class->entry_scrolled = indicator_ng_entry_scrolled; io_class->secondary_activate = indicator_ng_secondary_activate; properties[PROP_SERVICE_FILE] = g_param_spec_string ("service-file", "Service file", "Path of the service file", NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS); properties[PROP_PROFILE] = g_param_spec_string ("profile", "Profile", "Indicator profile", "desktop", G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS); g_object_class_install_properties(object_class, N_PROPERTIES, properties); } static void indicator_ng_initable_iface_init (GInitableIface *initable) { initable->init = indicator_ng_initable_init; } static void indicator_ng_init (IndicatorNg *self) { self->entry.label = (GtkLabel*)g_object_ref_sink (gtk_label_new (NULL)); self->entry.image = (GtkImage*)g_object_ref_sink (gtk_image_new ()); self->entry.menu = (GtkMenu*)g_object_ref_sink (gtk_menu_new ()); g_signal_connect (self->entry.menu, "show", G_CALLBACK (indicator_ng_menu_shown), self); g_signal_connect (self->entry.menu, "hide", G_CALLBACK (indicator_ng_menu_hidden), self); /* work around IndicatorObject's warning that the accessible * description is missing. We never set it on construction, but when * the menu model has arrived on the bus. */ self->accessible_desc = g_strdup (""); self->entry.accessible_desc = self->accessible_desc; self->position = -1; indicator_object_set_visible (INDICATOR_OBJECT (self), FALSE); } IndicatorNg * indicator_ng_new (const gchar *service_file, GError **error) { return g_initable_new (INDICATOR_TYPE_NG, NULL, error, "service-file", service_file, NULL); } IndicatorNg * indicator_ng_new_for_profile (const gchar *service_file, const gchar *profile, GError **error) { return g_initable_new (INDICATOR_TYPE_NG, NULL, error, "service-file", service_file, "profile", profile, NULL); } const gchar * indicator_ng_get_service_file (IndicatorNg *self) { g_return_val_if_fail (INDICATOR_IS_NG (self), NULL); return self->service_file; } const gchar * indicator_ng_get_profile (IndicatorNg *self) { g_return_val_if_fail (INDICATOR_IS_NG (self), NULL); return self->profile; } libayatana-indicator-0.6.2/libayatana-indicator/indicator-ng.h0000644000000000000000000000405413254153536021304 0ustar /* * Copyright 2013 Canonical Ltd. * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License version 3, as published * by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranties of * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . * * Authors: * Lars Uebernickel */ #ifndef __INDICATOR_NG_H__ #define __INDICATOR_NG_H__ #include "indicator-object.h" #define INDICATOR_TYPE_NG (indicator_ng_get_type ()) #define INDICATOR_NG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), INDICATOR_TYPE_NG, IndicatorNg)) #define INDICATOR_NG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), INDICATOR_TYPE_NG, IndicatorNgClass)) #define INDICATOR_IS_NG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), INDICATOR_TYPE_NG)) #define INDICATOR_IS_NG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), INDICATOR_TYPE_NG)) #define INDICATOR_NG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), INDICATOR_TYPE_NG, IndicatorNgClass)) typedef struct _IndicatorNg IndicatorNg; typedef IndicatorObjectClass IndicatorNgClass; GType indicator_ng_get_type (void); IndicatorNg * indicator_ng_new (const gchar *service_file, GError **error); IndicatorNg * indicator_ng_new_for_profile (const gchar *service_file, const gchar *profile, GError **error); const gchar * indicator_ng_get_service_file (IndicatorNg *indicator); const gchar * indicator_ng_get_profile (IndicatorNg *indicator); #endif libayatana-indicator-0.6.2/libayatana-indicator/indicator-object.c0000644000000000000000000007321113254153536022142 0ustar /* An object to represent loadable indicator modules to make loading them easy and objectified. Copyright 2009 Canonical Ltd. Authors: Ted Gould This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version 3.0 for more details. You should have received a copy of the GNU General Public License along with this library. If not, see . */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "indicator.h" #include "indicator-object.h" #include "indicator-object-marshal.h" #include "indicator-object-enum-types.h" /** @ENTRY_INIT: The entry hasn't been initialized yet, so its visibility will depend upon the inital-visibility property. @ENTRY_VISIBLE: The entry is visible @ENTRY_INVISIBLE: The entry is invisible */ typedef enum { ENTRY_INIT, ENTRY_VISIBLE, ENTRY_INVISIBLE } EntryVisibility; typedef struct _IndicatorObjectEntryPrivate { EntryVisibility visibility; } IndicatorObjectEntryPrivate; /** IndicatorObjectPrivate: @module: The loaded module representing the object. Note to subclasses: This will not be set when you're initalized. @entry: A default entry for objects that don't need all the fancy stuff. This works with #get_entries_default. @gotten_entries: A check to see if the @entry has been populated intelligently yet. Structure to define the memory for the private area of the object instance. */ struct _IndicatorObjectPrivate { GModule * module; /* For get_entries_default */ IndicatorObjectEntry entry; gboolean gotten_entries; /* Whether or not entries are visible by default */ gboolean default_visibility; GHashTable * entry_privates; GStrv environments; }; #define INDICATOR_OBJECT_GET_PRIVATE(o) (INDICATOR_OBJECT(o)->priv) /* Signals Stuff */ enum { ENTRY_ADDED, ENTRY_REMOVED, ENTRY_MOVED, ENTRY_SCROLLED, MENU_SHOW, SHOW_NOW_CHANGED, ACCESSIBLE_DESC_UPDATE, SECONDARY_ACTIVATE, LAST_SIGNAL }; /* Properties */ /* Enum for the properties so that they can be quickly found and looked up. */ enum { PROP_0, PROP_GSETTINGS_SCHEMA_ID, PROP_DEFAULT_VISIBILITY, }; static guint signals[LAST_SIGNAL] = { 0 }; /* GObject stuff */ static void indicator_object_class_init (IndicatorObjectClass *klass); static void indicator_object_init (IndicatorObject *self); static void indicator_object_dispose (GObject *object); static void indicator_object_finalize (GObject *object); static void set_property (GObject*, guint prop_id, const GValue*, GParamSpec* ); static void get_property (GObject*, guint prop_id, GValue*, GParamSpec* ); /* entries' visibility */ static GList * get_entries_default (IndicatorObject*); static GList * get_all_entries (IndicatorObject*); static void indicator_object_entry_being_removed (IndicatorObject*, IndicatorObjectEntry*); static void indicator_object_entry_was_added (IndicatorObject*, IndicatorObjectEntry*); static gint indicator_object_real_get_position (IndicatorObject*); static IndicatorObjectEntryPrivate * entry_get_private (IndicatorObject*, IndicatorObjectEntry*); G_DEFINE_TYPE (IndicatorObject, indicator_object, G_TYPE_OBJECT); /* Setup the class and put the functions into the class structure */ static void indicator_object_class_init (IndicatorObjectClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); g_type_class_add_private (klass, sizeof (IndicatorObjectPrivate)); object_class->dispose = indicator_object_dispose; object_class->finalize = indicator_object_finalize; object_class->set_property = set_property; object_class->get_property = get_property; klass->get_label = NULL; klass->get_menu = NULL; klass->get_image = NULL; klass->get_accessible_desc = NULL; klass->get_entries = get_entries_default; klass->get_location = NULL; klass->entry_being_removed = NULL; klass->entry_was_added = NULL; klass->get_position = indicator_object_real_get_position; klass->entry_activate = NULL; klass->entry_activate_window = NULL; klass->entry_close = NULL; /** IndicatorObject::entry-added: @arg0: The #IndicatorObject object @arg1: A pointer to the #IndicatorObjectEntry that is being added. Signaled when a new entry is added and should be shown by the person using this object. */ signals[ENTRY_ADDED] = g_signal_new (INDICATOR_OBJECT_SIGNAL_ENTRY_ADDED, G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (IndicatorObjectClass, entry_added), NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER, G_TYPE_NONE); /** IndicatorObject::entry-removed: @arg0: The #IndicatorObject object @arg1: A pointer to the #IndicatorObjectEntry that is being removed. Signaled when an entry is removed and should be removed by the person using this object. */ signals[ENTRY_REMOVED] = g_signal_new (INDICATOR_OBJECT_SIGNAL_ENTRY_REMOVED, G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (IndicatorObjectClass, entry_removed), NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER, G_TYPE_NONE); /** IndicatorObject::entry-moved: @arg0: The #IndicatorObject object @arg1: A pointer to the #IndicatorObjectEntry that is being moved. @arg2: The old location of the entry @arg3: The new location of the entry When the order of the entries change, then this signal is sent to tell the new location. */ signals[ENTRY_MOVED] = g_signal_new (INDICATOR_OBJECT_SIGNAL_ENTRY_MOVED, G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (IndicatorObjectClass, entry_moved), NULL, NULL, _indicator_object_marshal_VOID__POINTER_UINT_UINT, G_TYPE_NONE, 3, G_TYPE_POINTER, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_NONE); /** IndicatorObject::entry-scrolled: @arg0: The #IndicatorObject object @arg1: A pointer to the #IndicatorObjectEntry that receives the scroll event. @arg2: The delta of the scroll event @arg3: The orientation of the scroll event. When the indicator receives a mouse scroll wheel event from the user, this signal is emitted. */ signals[ENTRY_SCROLLED] = g_signal_new (INDICATOR_OBJECT_SIGNAL_ENTRY_SCROLLED, G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (IndicatorObjectClass, entry_scrolled), NULL, NULL, _indicator_object_marshal_VOID__POINTER_UINT_ENUM, G_TYPE_NONE, 3, G_TYPE_POINTER, G_TYPE_UINT, INDICATOR_OBJECT_TYPE_SCROLL_DIRECTION); /** IndicatorObject::secondary-activate: @arg0: The #IndicatorObject object @arg1: A pointer to the #IndicatorObjectEntry that receives the secondary activate event. @arg2: The timestamp of the event When the indicator receives a secondary activation event from the user, this signal is emitted. */ signals[SECONDARY_ACTIVATE] = g_signal_new (INDICATOR_OBJECT_SIGNAL_SECONDARY_ACTIVATE, G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (IndicatorObjectClass, secondary_activate), NULL, NULL, _indicator_object_marshal_VOID__POINTER_UINT, G_TYPE_NONE, 2, G_TYPE_POINTER, G_TYPE_UINT); /** IndicatorObject::menu-show: @arg0: The #IndicatorObject object @arg1: A pointer to the #IndicatorObjectEntry that is being shown. @arg2: The timestamp of the event Used when the indicator wants to signal up the stack that the menu should be shown. */ signals[MENU_SHOW] = g_signal_new (INDICATOR_OBJECT_SIGNAL_MENU_SHOW, G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (IndicatorObjectClass, menu_show), NULL, NULL, _indicator_object_marshal_VOID__POINTER_UINT, G_TYPE_NONE, 2, G_TYPE_POINTER, G_TYPE_UINT); /** IndicatorObject::show-now-changed: @arg0: The #IndicatorObject object @arg1: A pointer to the #IndicatorObjectEntry that is changing it's state @arg2: The state of whether the entry should be shown Whether the entry should be shown or not has changed so we need to tell whoever is displaying it. */ signals[SHOW_NOW_CHANGED] = g_signal_new (INDICATOR_OBJECT_SIGNAL_SHOW_NOW_CHANGED, G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (IndicatorObjectClass, show_now_changed), NULL, NULL, _indicator_object_marshal_VOID__POINTER_BOOLEAN, G_TYPE_NONE, 2, G_TYPE_POINTER, G_TYPE_BOOLEAN); /** IndicatorObject::accessible-desc-update:: @arg0: The #IndicatorObject object @arg1: A pointer to the #IndicatorObjectEntry whos accessible description has been updated. Signaled when an indicator's accessible description has been updated, so that the displayer of the indicator can fetch the new description. */ signals[ACCESSIBLE_DESC_UPDATE] = g_signal_new (INDICATOR_OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE, G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (IndicatorObjectClass, accessible_desc_update), NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER, G_TYPE_NONE); /* Properties */ GParamSpec * pspec = g_param_spec_boolean (INDICATOR_OBJECT_DEFAULT_VISIBILITY, "default visibility", "Whether or not entries should initially be visible.", TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_DEFAULT_VISIBILITY, pspec); } /* Initialize an instance */ static void indicator_object_init (IndicatorObject *self) { IndicatorObjectPrivate * priv = G_TYPE_INSTANCE_GET_PRIVATE (self, INDICATOR_OBJECT_TYPE, IndicatorObjectPrivate); priv->module = NULL; priv->entry.parent_object = self; priv->entry.menu = NULL; priv->entry.label = NULL; priv->entry.image = NULL; priv->entry.accessible_desc = NULL; priv->entry.name_hint = NULL; priv->entry.parent_window = 0; priv->gotten_entries = FALSE; priv->default_visibility = TRUE; priv->entry_privates = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, g_free); priv->environments = NULL; self->priv = priv; GObject * o = G_OBJECT(self); /* Invoke the entry-being-removed virtual function first */ g_signal_connect (o, INDICATOR_OBJECT_SIGNAL_ENTRY_REMOVED, G_CALLBACK(indicator_object_entry_being_removed), NULL); /* Invoke the entry-was-added virtual function last */ g_signal_connect_after (o, INDICATOR_OBJECT_SIGNAL_ENTRY_ADDED, G_CALLBACK(indicator_object_entry_was_added), NULL); } /* Unref the objects that we're holding on to. */ static void indicator_object_dispose (GObject *object) { /* Ensure that hidden entries are re-added so their widgetry will be cleaned up properly by the client */ indicator_object_set_visible (INDICATOR_OBJECT (object), TRUE); G_OBJECT_CLASS (indicator_object_parent_class)->dispose (object); } /* A small helper function that closes a module but in the function prototype of a GSourceFunc. */ static gboolean module_unref (gpointer data) { if (!g_module_close((GModule *)data)) { /* All we can do is warn. */ g_warning("Unable to close module!"); } return FALSE; } /* Free memory */ static void indicator_object_finalize (GObject *object) { IndicatorObjectPrivate * priv = INDICATOR_OBJECT_GET_PRIVATE(object); if (priv->entry_privates != NULL) { g_hash_table_destroy (priv->entry_privates); priv->entry_privates = NULL; } if (priv->environments != NULL) { g_strfreev(priv->environments); priv->environments = NULL; } if (priv->module != NULL) { /* Wow, this is convoluted. So basically we want to unref the module which will cause the code it included to be removed. But, since its finalize function is the function that called this one, we can't really remove it before it finishes being executed. So we're putting the job into the main loop to remove it the next time it gets a chance. Slightly non-deterministic, but should work. */ g_idle_add(module_unref, priv->module); priv->module = NULL; } G_OBJECT_CLASS (indicator_object_parent_class)->finalize (object); return; } /** indicator_object_new_from_file: @file: Filename containing a loadable module This function builds an #IndicatorObject using the symbols that are found in @file. The module is loaded and the references are all kept by the object. To unload the module the object must be destroyed. Return value: A valid #IndicatorObject or #NULL if error. */ IndicatorObject * indicator_object_new_from_file (const gchar * file) { GObject * object = NULL; GModule * module = NULL; /* Check to make sure the name exists and that the file itself exists */ if (file == NULL) { g_warning("Invalid filename."); return NULL; } if (!g_file_test(file, G_FILE_TEST_EXISTS)) { g_warning("File '%s' does not exist.", file); return NULL; } /* Grab the g_module reference, pull it in but let's keep the symbols local to avoid conflicts. */ module = g_module_open(file, G_MODULE_BIND_LAZY | G_MODULE_BIND_LOCAL); if (module == NULL) { g_warning("Unable to load module: %s", file); return NULL; } /* Look for the version function, error if not found. */ get_version_t lget_version = NULL; if (!g_module_symbol(module, INDICATOR_GET_VERSION_S, (gpointer *)(&lget_version))) { g_warning("Unable to get the symbol for getting the version."); return NULL; } /* Check the version with the macro and make sure we're all talking the same language. */ if (!INDICATOR_VERSION_CHECK(lget_version())) { g_warning("Indicator using API version '%s' we're expecting '%s'", lget_version(), INDICATOR_VERSION); return NULL; } /* The function for grabbing a label from the module execute it, and make sure everything is a-okay */ get_type_t lget_type = NULL; if (!g_module_symbol(module, INDICATOR_GET_TYPE_S, (gpointer *)(&lget_type))) { g_warning("Unable to get '" INDICATOR_GET_TYPE_S "' symbol from module: %s", file); goto unrefandout; } if (lget_type == NULL) { g_warning("Symbol '" INDICATOR_GET_TYPE_S "' is (null) in module: %s", file); goto unrefandout; } /* A this point we allocate the object, any code beyond here needs to deallocate it if we're returning in an error'd state. */ object = g_object_new(lget_type(), NULL); if (object == NULL) { g_warning("Unable to build an object if type '%d' in module: %s", (gint)lget_type(), file); goto unrefandout; } if (!INDICATOR_IS_OBJECT(object)) { g_warning("Type '%d' in file %s is not a subclass of IndicatorObject.", (gint)lget_type(), file); goto unrefandout; } /* Now we can track the module */ INDICATOR_OBJECT_GET_PRIVATE(object)->module = module; return INDICATOR_OBJECT(object); /* Error, let's drop the object and return NULL. Sad when this happens. */ unrefandout: g_clear_object (&object); g_clear_object (&module); g_warning("Error building IndicatorObject from file: %s", file); return NULL; } /* The default get entries function uses the other single entries in the class to create an entry structure and put it into a list. This makes it simple for simple objects to create the list. Small changes from the way they previously were. */ static GList * get_entries_default (IndicatorObject * io) { IndicatorObjectPrivate * priv = INDICATOR_OBJECT_GET_PRIVATE(io); if (!priv->gotten_entries) { IndicatorObjectClass * class = INDICATOR_OBJECT_GET_CLASS(io); priv->entry.parent_object = io; if (class->get_label) { priv->entry.label = class->get_label(io); } if (class->get_image) { priv->entry.image = class->get_image(io); } if (priv->entry.image == NULL && priv->entry.label == NULL) { g_warning("IndicatorObject class does not create an image or a label. We need one of those."); return NULL; } if (class->get_menu) { priv->entry.menu = class->get_menu(io); } if (priv->entry.menu == NULL) { g_warning("IndicatorObject class does not create a menu. We need one of those."); return NULL; } if (class->get_accessible_desc) { priv->entry.accessible_desc = class->get_accessible_desc(io); } if (priv->entry.accessible_desc == NULL) { g_warning("IndicatorObject class does not have an accessible description."); } if (class->get_name_hint) { priv->entry.name_hint = class->get_name_hint(io); } if (class->get_parent_window) { priv->entry.parent_window = class->get_parent_window(io); } priv->gotten_entries = TRUE; } return g_list_append(NULL, &(priv->entry)); } /* returns a list of all IndicatorObjectEntires, visible or not */ static GList* get_all_entries (IndicatorObject * io) { GList * all_entries = NULL, *l; g_return_val_if_fail(INDICATOR_IS_OBJECT(io), NULL); IndicatorObjectClass * class = INDICATOR_OBJECT_GET_CLASS(io); if (class->get_entries == NULL) g_error("No get_entries function on object. It must have been deleted?!?!"); else { all_entries = class->get_entries(io); for (l = all_entries; l; l = l->next) { IndicatorObjectEntry *entry = l->data; if (entry) entry->parent_object = io; } } return all_entries; } /* get the private structure that corresponds to a caller-specified entry */ static IndicatorObjectEntryPrivate * entry_get_private (IndicatorObject * io, IndicatorObjectEntry * entry) { g_return_val_if_fail (INDICATOR_IS_OBJECT(io), NULL); g_return_val_if_fail (io->priv != NULL, NULL); GHashTable * h = io->priv->entry_privates; IndicatorObjectEntryPrivate * priv = g_hash_table_lookup (h, entry); if (priv == NULL) { priv = g_new0 (IndicatorObjectEntryPrivate, 1); priv->visibility = ENTRY_INIT; g_hash_table_insert (h, entry, priv); } return priv; } /** indicator_object_get_entries: @io: #IndicatorObject to query This function returns a list of visible entries. The list is built by calling the object's #IndicatorObjectClass::get_entries virtual function and testing each of the results for visibility. Callers should free the GList with g_list_free(), but the entries are owned by the IndicatorObject and should not be freed. Return value: (element-type IndicatorObjectEntry) (transfer container): A list if #IndicatorObjectEntry structures or NULL on error. */ GList * indicator_object_get_entries (IndicatorObject * io) { GList * l; GList * ret = NULL; GList * all_entries = get_all_entries (io); const gboolean default_visibility = INDICATOR_OBJECT_GET_PRIVATE(io)->default_visibility; for (l=all_entries; l!=NULL; l=l->next) { gboolean show_me; IndicatorObjectEntry * entry = l->data; switch (entry_get_private(io,entry)->visibility) { case ENTRY_VISIBLE: show_me = TRUE; break; case ENTRY_INVISIBLE: show_me = FALSE; break; case ENTRY_INIT: show_me = default_visibility; break; default: show_me = TRUE; g_warn_if_reached(); break; } if (show_me) ret = g_list_prepend (ret, entry); } g_list_free (all_entries); return g_list_reverse (ret); } /** indicator_object_get_location: @io: #IndicatorObject to query @entry: The #IndicatorObjectEntry to look for. This function looks on the class for the object and calls it's #IndicatorObjectClass::get_location function. If the function doesn't exist it returns zero. Return value: Location of the @entry in the display or zero if no location is specified. */ guint indicator_object_get_location (IndicatorObject * io, IndicatorObjectEntry * entry) { g_return_val_if_fail(INDICATOR_IS_OBJECT(io), 0); IndicatorObjectClass * class = INDICATOR_OBJECT_GET_CLASS(io); if (class->get_location) { return class->get_location(io, entry); } return 0; } /** indicator_object_get_show_now: @io: #IndicatorObject to query @entry: The #IndicatorObjectEntry to look for. This function returns whether the entry should be shown with priority on the panel. If the object does not support checking it assumes that its entries should never have priority. Return value: Whether the entry should be shown with priority. */ guint indicator_object_get_show_now (IndicatorObject * io, IndicatorObjectEntry * entry) { g_return_val_if_fail(INDICATOR_IS_OBJECT(io), 0); IndicatorObjectClass * class = INDICATOR_OBJECT_GET_CLASS(io); if (class->get_show_now) { return class->get_show_now(io, entry); } return FALSE; } /** indicator_object_entry_activate_window: @io: #IndicatorObject to query @entry: The #IndicatorObjectEntry whose entry was shown @windowid: ID of the window that is currently focused (or will be very shortly) @timestamp: The X11 timestamp of the event Used to signal to the indicator that the menu on an entry has been clicked on. This can either be an activate or a showing of the menu. Also includes a window ID so that we can know what application is going to be getting focused soon. If there is no override of this function, it is the same as calling indicator_object_entry_activate and in general is preferable if you have that information available. */ void indicator_object_entry_activate_window (IndicatorObject * io, IndicatorObjectEntry * entry, guint windowid, guint timestamp) { g_return_if_fail(INDICATOR_IS_OBJECT(io)); IndicatorObjectClass * class = INDICATOR_OBJECT_GET_CLASS(io); if (class->entry_activate_window != NULL) { return class->entry_activate_window(io, entry, windowid, timestamp); } else { indicator_object_entry_activate(io, entry, timestamp); } return; } /** indicator_object_entry_activate: @io: #IndicatorObject to query @entry: The #IndicatorObjectEntry whose entry was shown @timestamp: The X11 timestamp of the event Used to signal to the indicator that the menu on an entry has been clicked on. This can either be an activate or a showing of the menu. Note, this does not actually show the menu that's left up to the reader. */ void indicator_object_entry_activate (IndicatorObject * io, IndicatorObjectEntry * entry, guint timestamp) { g_return_if_fail(INDICATOR_IS_OBJECT(io)); IndicatorObjectClass * class = INDICATOR_OBJECT_GET_CLASS(io); if (class->entry_activate != NULL) { return class->entry_activate(io, entry, timestamp); } return; } /** indicator_object_entry_close: @io: #IndicatorObject to query @entry: The #IndicatorObjectEntry whose menu was closed @timestamp: The X11 timestamp of the event Used to tell the indicator that a menu has been closed for the entry that is specified. */ void indicator_object_entry_close (IndicatorObject * io, IndicatorObjectEntry * entry, guint timestamp) { g_return_if_fail(INDICATOR_IS_OBJECT(io)); IndicatorObjectClass * class = INDICATOR_OBJECT_GET_CLASS(io); if (class->entry_close != NULL) { return class->entry_close(io, entry, timestamp); } return; } static void indicator_object_entry_being_removed (IndicatorObject * io, IndicatorObjectEntry * entry) { g_return_if_fail(INDICATOR_IS_OBJECT(io)); IndicatorObjectClass * class = INDICATOR_OBJECT_GET_CLASS(io); entry_get_private (io, entry)->visibility = ENTRY_INVISIBLE; if (entry) entry->parent_object = NULL; if (class->entry_being_removed != NULL) { class->entry_being_removed (io, entry); } } static void indicator_object_entry_was_added (IndicatorObject * io, IndicatorObjectEntry * entry) { g_return_if_fail(INDICATOR_IS_OBJECT(io)); IndicatorObjectClass * class = INDICATOR_OBJECT_GET_CLASS(io); entry_get_private (io, entry)->visibility = ENTRY_VISIBLE; if (entry) entry->parent_object = io; if (class->entry_was_added != NULL) { class->entry_was_added (io, entry); } } static gint indicator_object_real_get_position (IndicatorObject *io) { g_return_val_if_fail (INDICATOR_IS_OBJECT (io), -1); return -1; } /** indicator_object_set_environment: @io: #IndicatorObject to set on @env: List of enviroment names to use Sets the names of the environment that the indicator is being loaded into. This allows for indicators to behave differently in different hosts if need be. */ void indicator_object_set_environment (IndicatorObject * io, GStrv env) { /* FIXME: should this be a property? */ g_return_if_fail(INDICATOR_IS_OBJECT(io)); if (io->priv->environments != NULL) { g_strfreev(io->priv->environments); io->priv->environments = NULL; } io->priv->environments = g_strdupv(env); return; } /** indicator_object_get_environment: @io: #IndicatorObject to get the environment from Gets the list of environment strings that this object is placed into. Return value: (transfer none): Gets the list of strings that represent the environment or NULL if none were given. */ GStrv indicator_object_get_environment (IndicatorObject * io) { g_return_val_if_fail(INDICATOR_IS_OBJECT(io), NULL); return io->priv->environments; } /** indicator_object_check_environment: @io: #IndicatorObject to check on @env: Environment that we're looking for Convience function to check to see if the specified environment @env is in our list of environments. Return Value: Whether we're in environment @env */ gboolean indicator_object_check_environment (IndicatorObject * io, const gchar * env) { g_return_val_if_fail(INDICATOR_IS_OBJECT(io), FALSE); g_return_val_if_fail(env != NULL, FALSE); if (io->priv->environments == NULL) { return FALSE; } int i; for (i = 0; io->priv->environments[i] != NULL; i++) { if (g_strcmp0(env, io->priv->environments[i]) == 0) { return TRUE; } } return FALSE; } /** indicator_object_set_visible: @io: #IndicatorObject to check on @visible: whether or not the entries should be visible Used to set all of an indicator's entries to be visible or hidden. */ void indicator_object_set_visible (IndicatorObject * io, gboolean visible) { g_return_if_fail(INDICATOR_IS_OBJECT(io)); GList * l; GList * entries = get_all_entries (io); const guint signal_id = signals[visible ? ENTRY_ADDED : ENTRY_REMOVED]; EntryVisibility visibility = visible ? ENTRY_VISIBLE : ENTRY_INVISIBLE; const GQuark detail = (GQuark)0; for (l=entries; l!=NULL; l=l->next) { IndicatorObjectEntry *entry = l->data; if (entry_get_private (io, entry)->visibility != visibility) g_signal_emit(io, signal_id, detail, entry); } g_list_free (entries); } static void get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec) { IndicatorObject * self = INDICATOR_OBJECT(object); g_return_if_fail(self != NULL); IndicatorObjectPrivate * priv = INDICATOR_OBJECT_GET_PRIVATE(self); g_return_if_fail(priv != NULL); switch (prop_id) { /* *********************** */ case PROP_DEFAULT_VISIBILITY: if (G_VALUE_HOLDS_BOOLEAN(value)) { g_value_set_boolean(value, priv->default_visibility); } else { g_warning("default-visibility property requires a boolean value."); } break; /* *********************** */ default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } static void set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) { IndicatorObject * self = INDICATOR_OBJECT(object); g_return_if_fail (self != NULL); IndicatorObjectPrivate * priv = INDICATOR_OBJECT_GET_PRIVATE(self); g_return_if_fail (priv != NULL); switch (prop_id) { /* *********************** */ case PROP_DEFAULT_VISIBILITY: if (G_VALUE_HOLDS_BOOLEAN(value)) { priv->default_visibility = g_value_get_boolean (value); } else { g_warning("default-visibility property requires a boolean value."); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } gboolean indicator_object_entry_is_visible (IndicatorObject * io, IndicatorObjectEntry * entry) { g_return_val_if_fail (INDICATOR_IS_OBJECT (io), FALSE); return entry_get_private (io, entry)->visibility == ENTRY_VISIBLE; } gint indicator_object_get_position (IndicatorObject *io) { g_return_val_if_fail (INDICATOR_IS_OBJECT (io), FALSE); return INDICATOR_OBJECT_GET_CLASS (io)->get_position (io); } libayatana-indicator-0.6.2/libayatana-indicator/indicator-object-enum-types.c.template0000644000000000000000000000137213254153536026057 0ustar /*** BEGIN file-header ***/ #include "indicator-object-enum-types.h" /*** END file-header ***/ /*** BEGIN file-production ***/ /* enumerations from "@basename@" */ #include "@basename@" /*** END file-production ***/ /*** BEGIN value-header ***/ GType @enum_name@_get_type (void) { static GType enum_type_id = 0; if (G_UNLIKELY (!enum_type_id)) { static const G@Type@Value values[] = { /*** END value-header ***/ /*** BEGIN value-production ***/ { @VALUENAME@, "@VALUENAME@", "@valuenick@" }, /*** END value-production ***/ /*** BEGIN value-tail ***/ { 0, NULL, NULL } }; enum_type_id = g_@type@_register_static (g_intern_static_string ("@EnumName@"), values); } return enum_type_id; } /*** END value-tail ***/ libayatana-indicator-0.6.2/libayatana-indicator/indicator-object-enum-types.h.template0000644000000000000000000000106713254153536026065 0ustar /*** BEGIN file-header ***/ #ifndef __INDICATOR_OBJECT_ENUM_TYPES_H__ #define __INDICATOR_OBJECT_ENUM_TYPES_H__ #include G_BEGIN_DECLS /*** END file-header ***/ /*** BEGIN file-production ***/ /* enumerations from "@basename@" */ /*** END file-production ***/ /*** BEGIN file-tail ***/ G_END_DECLS #endif /* !__INDICATOR_OBJECT_ENUM_TYPES_H__ */ /*** END file-tail ***/ /*** BEGIN value-header ***/ GType @enum_name@_get_type (void) G_GNUC_CONST; #define INDICATOR_OBJECT_TYPE_@ENUMSHORT@ (@enum_name@_get_type()) /*** END value-header ***/ libayatana-indicator-0.6.2/libayatana-indicator/indicator-object.h0000644000000000000000000002424013254153536022145 0ustar /* An object to represent loadable indicator modules to make loading them easy and objectified. Copyright 2009 Canonical Ltd. Authors: Ted Gould This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version 3.0 for more details. You should have received a copy of the GNU General Public License along with this library. If not, see . */ #ifndef __INDICATOR_OBJECT_H__ #define __INDICATOR_OBJECT_H__ #include G_BEGIN_DECLS typedef enum { INDICATOR_OBJECT_SCROLL_UP, INDICATOR_OBJECT_SCROLL_DOWN, INDICATOR_OBJECT_SCROLL_LEFT, INDICATOR_OBJECT_SCROLL_RIGHT } IndicatorScrollDirection; #define INDICATOR_OBJECT_TYPE (indicator_object_get_type ()) #define INDICATOR_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), INDICATOR_OBJECT_TYPE, IndicatorObject)) #define INDICATOR_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), INDICATOR_OBJECT_TYPE, IndicatorObjectClass)) #define INDICATOR_IS_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), INDICATOR_OBJECT_TYPE)) #define INDICATOR_IS_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), INDICATOR_OBJECT_TYPE)) #define INDICATOR_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), INDICATOR_OBJECT_TYPE, IndicatorObjectClass)) #define INDICATOR_OBJECT_SIGNAL_ENTRY_ADDED "entry-added" #define INDICATOR_OBJECT_SIGNAL_ENTRY_ADDED_ID (g_signal_lookup(INDICATOR_OBJECT_SIGNAL_ENTRY_ADDED, INDICATOR_OBJECT_TYPE)) #define INDICATOR_OBJECT_SIGNAL_ENTRY_REMOVED "entry-removed" #define INDICATOR_OBJECT_SIGNAL_ENTRY_REMOVED_ID (g_signal_lookup(INDICATOR_OBJECT_SIGNAL_ENTRY_REMOVED, INDICATOR_OBJECT_TYPE)) #define INDICATOR_OBJECT_SIGNAL_ENTRY_MOVED "entry-moved" #define INDICATOR_OBJECT_SIGNAL_ENTRY_MOVED_ID (g_signal_lookup(INDICATOR_OBJECT_SIGNAL_ENTRY_MOVED, INDICATOR_OBJECT_TYPE)) #define INDICATOR_OBJECT_SIGNAL_ENTRY_SCROLLED "entry-scrolled" #define INDICATOR_OBJECT_SIGNAL_ENTRY_SCROLLED_ID (g_signal_lookup(INDICATOR_OBJECT_SIGNAL_ENTRY_SCROLLED, INDICATOR_OBJECT_TYPE)) #define INDICATOR_OBJECT_SIGNAL_MENU_SHOW "menu-show" #define INDICATOR_OBJECT_SIGNAL_MENU_SHOW_ID (g_signal_lookup(INDICATOR_OBJECT_SIGNAL_MENU_SHOW, INDICATOR_OBJECT_TYPE)) #define INDICATOR_OBJECT_SIGNAL_SHOW_NOW_CHANGED "show-now-changed" #define INDICATOR_OBJECT_SIGNAL_SHOW_NOW_CHANGED_ID (g_signal_lookup(INDICATOR_OBJECT_SIGNAL_SHOW_NOW_CHANGED, INDICATOR_OBJECT_TYPE)) #define INDICATOR_OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE "accessible-desc-update" #define INDICATOR_OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE_ID (g_signal_lookup(INDICATOR_OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE, INDICATOR_OBJECT_TYPE)) #define INDICATOR_OBJECT_SIGNAL_SECONDARY_ACTIVATE "secondary-activate" #define INDICATOR_OBJECT_SIGNAL_SECONDARY_ACTIVATE_ID (g_signal_lookup(INDICATOR_OBJECT_SIGNAL_SECONDARY_ACTIVATE, INDICATOR_OBJECT_TYPE)) /* the name of the property to decide whether or not entries are visible by default */ #define INDICATOR_OBJECT_DEFAULT_VISIBILITY "indicator-object-default-visibility" typedef struct _IndicatorObject IndicatorObject; typedef struct _IndicatorObjectClass IndicatorObjectClass; typedef struct _IndicatorObjectPrivate IndicatorObjectPrivate; typedef struct _IndicatorObjectEntry IndicatorObjectEntry; /** IndicatorObjectClass: @parent_class: #GObjectClass @get_label: Gets the label for this object. Should be set to #NULL if @get_entries is set. Should NOT ref the object. @get_image: Gets the image for this object. Should be set to #NULL if @get_entries is set. Should NOT ref the object. @get_menu: Gets the image for this object. Should be set to #NULL if @get_entries is set. Should NOT ref the object. @get_accessible_desc: Gets the accessible descriptionfor this object. @get_name_hint: Gets the hint of the type of indicator that this is for the caller. @get_entries: Gets all of the entires for this object returning a #GList of #IndicatorObjectEntries. The list should be under the ownership of the caller but the entires will not be. @get_location: Returns the location that a particular entry should be placed in. This is really only relevant for indicators that have more than one entry. @get_show_now: Returns whether the entry is requesting to be shown "right now" in that it has something important to tell the user. @entry_being_removed: Called before an entry is removed. The default implementation is to ref and unparent the entry's widgets so that they can be re-added later. @entry_was_added: Called after an entry is added. The default implementation is to unref the entry's widgets if previously reffed by entry_being_removed's default impementation @entry_activate: Should be called when the menus for a given entry are shown to the user. @entry_close: Called when the menu is closed. @entry_added: Slot for #IndicatorObject::entry-added @entry_removed: Slot for #IndicatorObject::entry-removed @entry_moved: Slot for #IndicatorObject::entry-moved @menu_show: Slot for #IndicatorObject::menu-show @entry_scrolled: Slot for #IndicatorObject::entry-scrolled @show_now_changed: Slot for #IndicatorObject::show-now-changed @accessible_desc_update: Slot for #IndicatorObject::accessible-desc-update @secondary_activate: Slot for #IndicatorObject::secondary-activate @get_position: returns the desired position on the panel (0 is right-most), or -1 */ struct _IndicatorObjectClass { GObjectClass parent_class; /* Virtual Functions */ GtkLabel * (*get_label) (IndicatorObject * io); GtkImage * (*get_image) (IndicatorObject * io); GtkMenu * (*get_menu) (IndicatorObject * io); const gchar * (*get_accessible_desc) (IndicatorObject * io); const gchar * (*get_name_hint) (IndicatorObject * io); GList * (*get_entries) (IndicatorObject * io); guint (*get_location) (IndicatorObject * io, IndicatorObjectEntry * entry); gboolean (*get_show_now) (IndicatorObject * io, IndicatorObjectEntry * entry); void (*entry_being_removed) (IndicatorObject * io, IndicatorObjectEntry * entry); void (*entry_was_added) (IndicatorObject * io, IndicatorObjectEntry * entry); void (*entry_activate) (IndicatorObject * io, IndicatorObjectEntry * entry, guint timestamp); void (*entry_activate_window) (IndicatorObject * io, IndicatorObjectEntry * entry, guint windowid, guint timestamp); void (*entry_close) (IndicatorObject * io, IndicatorObjectEntry * entry, guint timestamp); /* Signals */ void (*entry_added) (IndicatorObject * io, IndicatorObjectEntry * entry, gpointer user_data); void (*entry_removed) (IndicatorObject * io, IndicatorObjectEntry * entry, gpointer user_data); void (*entry_moved) (IndicatorObject * io, IndicatorObjectEntry * entry, guint old_pos, guint new_pos, gpointer user_data); void (*entry_scrolled) (IndicatorObject * io, IndicatorObjectEntry * entry, gint delta, IndicatorScrollDirection direction); void (*menu_show) (IndicatorObject * io, IndicatorObjectEntry * entry, guint timestamp, gpointer user_data); void (*show_now_changed) (IndicatorObject * io, IndicatorObjectEntry * entry, gboolean show_now_state, gpointer user_data); void (*accessible_desc_update) (IndicatorObject * io, IndicatorObjectEntry * entry, gpointer user_data); void (*secondary_activate) (IndicatorObject * io, IndicatorObjectEntry * entry, guint timestamp, gpointer user_data); gint (*get_position) (IndicatorObject *io); guint (*get_parent_window) (IndicatorObject *io); /* Reserved */ void (*reserved1) (void); void (*reserved2) (void); void (*reserved3) (void); }; /** IndicatorObject: @parent: #GObject @priv: A cached reference to the private data for the instance. */ struct _IndicatorObject { GObject parent; IndicatorObjectPrivate * priv; }; /** IndicatorObjectEntry: @parent_object: The #IndicatorObject that created this entry @label: The label to be shown on the panel @image: The image to be shown on the panel @menu: The menu to be added to the menubar @accessible_desc: The accessible description of the indicator @name_hint: A name to describe the indicator being placed to allow the caller to be more aware of the individual entries. @parent_window: the id of the parent window of the indicator entry (if any). @reserved1: Reserved for future use @reserved2: Reserved for future use @reserved3: Reserved for future use */ struct _IndicatorObjectEntry { IndicatorObject * parent_object; GtkLabel * label; GtkImage * image; GtkMenu * menu; const gchar * accessible_desc; const gchar * name_hint; guint parent_window; void (*reserved1) (void); void (*reserved2) (void); void (*reserved3) (void); }; GType indicator_object_get_type (void); IndicatorObject * indicator_object_new_from_file (const gchar * file); GList * indicator_object_get_entries (IndicatorObject * io); guint indicator_object_get_location (IndicatorObject * io, IndicatorObjectEntry * entry); guint indicator_object_get_show_now (IndicatorObject * io, IndicatorObjectEntry * entry); void indicator_object_set_visible (IndicatorObject * io, gboolean visible); gboolean indicator_object_entry_is_visible (IndicatorObject * io, IndicatorObjectEntry * entry); void indicator_object_entry_activate (IndicatorObject * io, IndicatorObjectEntry * entry, guint timestamp); void indicator_object_entry_activate_window (IndicatorObject * io, IndicatorObjectEntry * entry, guint windowid, guint timestamp); void indicator_object_entry_close (IndicatorObject * io, IndicatorObjectEntry * entry, guint timestamp); gint indicator_object_get_position (IndicatorObject *io); void indicator_object_set_environment (IndicatorObject * io, GStrv env); GStrv indicator_object_get_environment (IndicatorObject * io); gboolean indicator_object_check_environment (IndicatorObject * io, const gchar * env); G_END_DECLS #endif libayatana-indicator-0.6.2/libayatana-indicator/indicator-object-marshal.list0000644000000000000000000000013713254153536024315 0ustar VOID: POINTER, UINT, UINT VOID: POINTER, UINT, ENUM VOID: POINTER, UINT VOID: POINTER, BOOLEAN libayatana-indicator-0.6.2/libayatana-indicator/indicator-service.c0000644000000000000000000005126013254153536022334 0ustar /* An object used to provide a simple interface for a service to query version and manage whether it's running. Copyright 2009 Canonical Ltd. Authors: Ted Gould This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version 3.0 for more details. You should have received a copy of the GNU General Public License along with this library. If not, see . */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include /* exit() */ #include #include "indicator-service.h" #include "gen-indicator-service.xml.h" #include "dbus-shared.h" static void unwatch_core (IndicatorService * service, const gchar * name); static void watchers_remove (gpointer value); static void bus_get_cb (GObject * object, GAsyncResult * res, gpointer user_data); static GVariant * bus_watch (IndicatorService * service, const gchar * sender); /* Private Stuff */ /** IndicatorSevicePrivate: @name: The DBus well known name for the service. @timeout: The source ID for the timeout event. @watcher: A list of processes on dbus that are watching us. @this_service_version: The version to hand out that we're implementing. May not be set, so we'll send zero (default). @dbus_registration: The handle for this object being registered on dbus. */ typedef struct _IndicatorServicePrivate IndicatorServicePrivate; struct _IndicatorServicePrivate { gchar * name; GDBusConnection * bus; GCancellable * bus_cancel; guint timeout; guint timeout_length; GHashTable * watchers; guint this_service_version; guint dbus_registration; gboolean replace_mode; }; /* Signals Stuff */ enum { SHUTDOWN, LAST_SIGNAL }; static guint signals[LAST_SIGNAL] = { 0 }; /* Properties */ /* Enum for the properties so that they can be quickly found and looked up. */ enum { PROP_0, PROP_NAME, PROP_VERSION }; /* The strings so that they can be slowly looked up. */ #define PROP_NAME_S "name" #define PROP_VERSION_S "version" /* GObject Stuff */ #define INDICATOR_SERVICE_GET_PRIVATE(o) \ (G_TYPE_INSTANCE_GET_PRIVATE ((o), INDICATOR_SERVICE_TYPE, IndicatorServicePrivate)) static void indicator_service_class_init (IndicatorServiceClass *klass); static void indicator_service_init (IndicatorService *self); static void indicator_service_dispose (GObject *object); static void indicator_service_finalize (GObject *object); /* Other prototypes */ static void set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec); static void get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); static void try_and_get_name (IndicatorService * service); static void bus_method_call (GDBusConnection * connection, const gchar * sender, const gchar * path, const gchar * interface, const gchar * method, GVariant * params, GDBusMethodInvocation * invocation, gpointer user_data); /* GDBus Stuff */ static GDBusNodeInfo * node_info = NULL; static GDBusInterfaceInfo * interface_info = NULL; static GDBusInterfaceVTable interface_table = { method_call: bus_method_call, get_property: NULL, /* No properties */ set_property: NULL /* No properties */ }; /* THE define */ G_DEFINE_TYPE (IndicatorService, indicator_service, G_TYPE_OBJECT); static void indicator_service_class_init (IndicatorServiceClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); g_type_class_add_private (klass, sizeof (IndicatorServicePrivate)); object_class->dispose = indicator_service_dispose; object_class->finalize = indicator_service_finalize; /* Property funcs */ object_class->set_property = set_property; object_class->get_property = get_property; /* Properties */ g_object_class_install_property(object_class, PROP_NAME, g_param_spec_string(PROP_NAME_S, "The DBus name for this service", "This is the name that should be used on DBus for this service.", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property(object_class, PROP_VERSION, g_param_spec_uint(PROP_VERSION_S, "The version of the service that we're implementing.", "A number to represent the version of the other APIs the service provides. This should match across the manager and the service", 0, G_MAXUINT, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /* Signals */ /** IndicatorService::shutdown: @arg0: The #IndicatorService object Signaled when the service should shutdown as no one is listening anymore. */ signals[SHUTDOWN] = g_signal_new (INDICATOR_SERVICE_SIGNAL_SHUTDOWN, G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (IndicatorServiceClass, shutdown), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0, G_TYPE_NONE); /* Setting up the DBus interfaces */ if (node_info == NULL) { GError * error = NULL; node_info = g_dbus_node_info_new_for_xml(_indicator_service, &error); if (error != NULL) { g_error("Unable to parse Indicator Service Interface description: %s", error->message); g_error_free(error); } } if (interface_info == NULL) { interface_info = g_dbus_node_info_lookup_interface(node_info, INDICATOR_SERVICE_INTERFACE); if (interface_info == NULL) { g_error("Unable to find interface '" INDICATOR_SERVICE_INTERFACE "'"); } } return; } /* This function builds the variables, sets up the dbus proxy and registers the object on dbus. Importantly, it does not request a name as we don't know what name we have yet. */ static void indicator_service_init (IndicatorService *self) { IndicatorServicePrivate * priv = INDICATOR_SERVICE_GET_PRIVATE(self); /* Get the private variables in a decent state */ priv->name = NULL; priv->timeout = 0; priv->watchers = NULL; priv->bus = NULL; priv->bus_cancel = NULL; priv->this_service_version = 0; priv->timeout_length = 500; priv->dbus_registration = 0; priv->replace_mode = FALSE; const gchar * timeoutenv = g_getenv("INDICATOR_SERVICE_SHUTDOWN_TIMEOUT"); if (timeoutenv != NULL) { gdouble newtimeout = g_strtod(timeoutenv, NULL); if (newtimeout >= 1.0f) { priv->timeout_length = newtimeout; g_debug("Setting shutdown timeout to: %u", priv->timeout_length); } } const gchar * replaceenv = g_getenv("INDICATOR_SERVICE_REPLACE_MODE"); if (replaceenv != NULL) { priv->replace_mode = TRUE; g_debug("Putting into replace mode"); } /* NOTE: We're using g_free here because that's what needs to happen and we're watchers_remove as well to clean up the dbus watches we've setup. */ priv->watchers = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, watchers_remove); priv->bus_cancel = g_cancellable_new(); g_bus_get(G_BUS_TYPE_SESSION, priv->bus_cancel, bus_get_cb, self); return; } /* Unrefcounting the proxies and making sure that our timeout doesn't come to haunt us. */ static void indicator_service_dispose (GObject *object) { IndicatorServicePrivate * priv = INDICATOR_SERVICE_GET_PRIVATE(object); g_clear_pointer (&priv->watchers, g_hash_table_destroy); if (priv->timeout != 0) { g_source_remove(priv->timeout); priv->timeout = 0; } if (priv->dbus_registration != 0) { g_dbus_connection_unregister_object(priv->bus, priv->dbus_registration); /* Don't care if it fails, there's nothing we can do */ priv->dbus_registration = 0; } g_clear_object (&priv->bus); if (priv->bus_cancel != NULL) { g_cancellable_cancel(priv->bus_cancel); g_object_unref(priv->bus_cancel); priv->bus_cancel = NULL; } G_OBJECT_CLASS (indicator_service_parent_class)->dispose (object); return; } /* Freeing the name we're looking for and all of the information on the watchers we're tracking. */ static void indicator_service_finalize (GObject *object) { IndicatorServicePrivate * priv = INDICATOR_SERVICE_GET_PRIVATE(object); g_free (priv->name); g_clear_pointer (&priv->watchers, g_hash_table_destroy); G_OBJECT_CLASS (indicator_service_parent_class)->finalize (object); return; } /* Either copies a string for the name or it just grabs the value of the version. */ static void set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) { IndicatorService * self = INDICATOR_SERVICE(object); g_return_if_fail(self != NULL); IndicatorServicePrivate * priv = INDICATOR_SERVICE_GET_PRIVATE(self); g_return_if_fail(priv != NULL); switch (prop_id) { /* *********************** */ case PROP_NAME: if (G_VALUE_HOLDS_STRING(value)) { if (priv->name != NULL) { g_error("Name can not be set twice!"); return; } priv->name = g_value_dup_string(value); try_and_get_name(self); } else { g_warning("Name property requires a string value."); } break; /* *********************** */ case PROP_VERSION: priv->this_service_version = g_value_get_uint(value); break; /* *********************** */ default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } return; } /* Copies out the name into a value or the version number. Probably this is the least useful code in this file. */ static void get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec) { IndicatorService * self = INDICATOR_SERVICE(object); g_return_if_fail(self != NULL); IndicatorServicePrivate * priv = INDICATOR_SERVICE_GET_PRIVATE(self); g_return_if_fail(priv != NULL); switch (prop_id) { /* *********************** */ case PROP_NAME: if (G_VALUE_HOLDS_STRING(value)) { g_value_set_string(value, priv->name); } else { g_warning("Name property requires a string value."); } break; /* *********************** */ case PROP_VERSION: g_value_set_uint(value, priv->this_service_version); break; /* *********************** */ default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } return; } /* Callback for getting our connection to DBus */ static void bus_get_cb (GObject * object, GAsyncResult * res, gpointer user_data) { GError * error = NULL; GDBusConnection * connection = g_bus_get_finish(res, &error); if (error != NULL) { g_warning("Unable to get a connection to the session DBus: %s", error->message); g_error_free(error); exit (0); return; } IndicatorServicePrivate * priv = INDICATOR_SERVICE_GET_PRIVATE(user_data); g_warn_if_fail(priv->bus == NULL); priv->bus = connection; if (priv->bus_cancel != NULL) { g_object_unref(priv->bus_cancel); priv->bus_cancel = NULL; } /* Now register our object on our new connection */ priv->dbus_registration = g_dbus_connection_register_object(priv->bus, INDICATOR_SERVICE_OBJECT, interface_info, &interface_table, user_data, NULL, &error); if (error != NULL) { g_error("Unable to register the object to DBus: %s", error->message); g_error_free(error); return; } return; } /* A method has been called from our dbus inteface. Figure out what it is and dispatch it. */ static void bus_method_call (GDBusConnection * connection, const gchar * sender, const gchar * path, const gchar * interface, const gchar * method, GVariant * params, GDBusMethodInvocation * invocation, gpointer user_data) { IndicatorService * service = INDICATOR_SERVICE(user_data); GVariant * retval = NULL; if (g_strcmp0(method, "Watch") == 0) { retval = bus_watch(service, sender); } else if (g_strcmp0(method, "UnWatch") == 0) { unwatch_core(service, sender); } else if (g_strcmp0(method, "Shutdown") == 0) { g_signal_emit(G_OBJECT(service), signals[SHUTDOWN], 0, TRUE); } else { g_warning("Calling method '%s' on the indicator service and it's unknown", method); } g_dbus_method_invocation_return_value(invocation, retval); return; } /* A function to remove the signals on a proxy before we destroy it because in this case we've stopped caring. */ static void watchers_remove (gpointer value) { g_bus_unwatch_name(GPOINTER_TO_UINT(value)); return; } /* This is the function that gets executed if we timeout because there are no watchers. We sent the shutdown signal and hope someone does something sane with it. */ static gboolean timeout_no_watchers (gpointer data) { g_warning("No watchers, service timing out."); if (g_getenv("INDICATOR_ALLOW_NO_WATCHERS") == NULL) { g_signal_emit(G_OBJECT(data), signals[SHUTDOWN], 0, TRUE); } else { g_warning("\tblocked by environment variable."); } return FALSE; } /* Callback saying that the name we were looking for has been found and we've got it. Now start the timer to see if anyone cares about us. */ static void try_and_get_name_acquired_cb (GDBusConnection * connection, const gchar * name, gpointer user_data) { g_return_if_fail(connection != NULL); g_return_if_fail(INDICATOR_IS_SERVICE(user_data)); IndicatorServicePrivate * priv = INDICATOR_SERVICE_GET_PRIVATE(user_data); /* Check to see if we already had a timer, if so we want to extend it a bit. */ if (priv->timeout != 0) { g_source_remove(priv->timeout); priv->timeout = 0; } /* Allow some extra time at start up as things can be in high contention then. */ priv->timeout = g_timeout_add(priv->timeout_length * 2, timeout_no_watchers, user_data); return; } /* Callback saying that we didn't get the name, so we need to shutdown this service. */ static void try_and_get_name_lost_cb (GDBusConnection * connection, const gchar * name, gpointer user_data) { g_return_if_fail(connection != NULL); g_return_if_fail(INDICATOR_IS_SERVICE(user_data)); IndicatorServicePrivate * priv = INDICATOR_SERVICE_GET_PRIVATE(user_data); if (!priv->replace_mode) { g_warning("Name request failed."); g_signal_emit(G_OBJECT(user_data), signals[SHUTDOWN], 0, TRUE); } else { /* If we're in replace mode we can be a little more trickey here. We're going to tell the other guy to shutdown and hope that we get the name. */ GDBusMessage * message = NULL; message = g_dbus_message_new_method_call(name, INDICATOR_SERVICE_OBJECT, INDICATOR_SERVICE_INTERFACE, "Shutdown"); g_dbus_connection_send_message(connection, message, G_DBUS_SEND_MESSAGE_FLAGS_NONE, NULL, NULL); g_object_unref(message); /* Check to see if we need to clean up a timeout */ if (priv->timeout != 0) { g_source_remove(priv->timeout); priv->timeout = 0; } /* Set a timeout for no watchers if we can't get the name */ priv->timeout = g_timeout_add(priv->timeout_length * 4, timeout_no_watchers, user_data); } return; } /* This function sets up the request for the name on dbus. */ static void try_and_get_name (IndicatorService * service) { IndicatorServicePrivate * priv = INDICATOR_SERVICE_GET_PRIVATE(service); g_return_if_fail(priv->name != NULL); g_bus_own_name(G_BUS_TYPE_SESSION, priv->name, G_BUS_NAME_OWNER_FLAGS_NONE, NULL, /* bus acquired */ try_and_get_name_acquired_cb, /* name acquired */ try_and_get_name_lost_cb, /* name lost */ service, NULL); /* user data destroy */ return; } /* When the watcher vanishes we don't really care about it anymore. */ static void watcher_vanished_cb (GDBusConnection * connection, const gchar * name, gpointer user_data) { g_return_if_fail(INDICATOR_IS_SERVICE(user_data)); IndicatorServicePrivate * priv = INDICATOR_SERVICE_GET_PRIVATE(user_data); gpointer finddata = g_hash_table_lookup(priv->watchers, name); if (finddata != NULL) { unwatch_core(INDICATOR_SERVICE(user_data), name); } else { g_warning("Odd, we were watching for '%s' and it disappeard, but then it wasn't in the hashtable.", name); } return; } /* Here is the function that gets called by the dbus interface "Watch" function. It is an async function so that we can get the sender and store that information. We put them in a list and reset the timeout. */ static GVariant * bus_watch (IndicatorService * service, const gchar * sender) { g_return_val_if_fail(INDICATOR_IS_SERVICE(service), NULL); IndicatorServicePrivate * priv = INDICATOR_SERVICE_GET_PRIVATE(service); if (GPOINTER_TO_UINT(g_hash_table_lookup(priv->watchers, sender)) == 0) { guint watch = g_bus_watch_name_on_connection(priv->bus, sender, G_BUS_NAME_WATCHER_FLAGS_NONE, NULL, /* appeared, we dont' care, should have already happened. */ watcher_vanished_cb, service, NULL); if (watch != 0) { g_hash_table_insert(priv->watchers, g_strdup(sender), GUINT_TO_POINTER(watch)); } else { g_warning("Unable watch for '%s'", sender); } } if (priv->timeout != 0) { g_source_remove(priv->timeout); priv->timeout = 0; } return g_variant_new("(uu)", INDICATOR_SERVICE_VERSION, priv->this_service_version); } /* Performs the core of loosing a watcher; it removes them from the list of watchers. If there are none left, it then starts the timer for the shutdown signal. */ static void unwatch_core (IndicatorService * service, const gchar * name) { g_return_if_fail(name != NULL); g_return_if_fail(INDICATOR_IS_SERVICE(service)); IndicatorServicePrivate * priv = INDICATOR_SERVICE_GET_PRIVATE(service); /* Remove us from the watcher list here */ gpointer watcher_item = g_hash_table_lookup(priv->watchers, name); if (watcher_item != NULL) { gchar * safe_name = g_strdup(name); g_hash_table_remove(priv->watchers, safe_name); g_free(safe_name); } else { /* Odd that we couldn't find the person, but, eh */ g_warning("Unable to find watcher who is unwatching: %s", name); } /* If we're out of watchers set the timeout for shutdown */ if (g_hash_table_size(priv->watchers) == 0) { if (priv->timeout != 0) { /* This should never really happen, but let's ensure that bad things don't happen if it does. */ g_warning("No watchers timeout set twice. Resolving, but odd."); g_source_remove(priv->timeout); priv->timeout = 0; } /* If we don't get a new watcher quickly, we'll shutdown. */ priv->timeout = g_timeout_add(priv->timeout_length, timeout_no_watchers, service); } return; } /* API */ /** indicator_service_new: @name: The name for the service on dbus This function creates the service on DBus and tries to get a well-known name specified in @name. If the name can't be estabilished then the #IndicatorService::shutdown signal will be sent. Return value: A brand new #IndicatorService object or #NULL if there is an error. */ IndicatorService * indicator_service_new (gchar * name) { GObject * obj = g_object_new(INDICATOR_SERVICE_TYPE, PROP_NAME_S, name, NULL); return INDICATOR_SERVICE(obj); } /** indicator_service_new_version: @name: The name for the service on dbus @version: The version of the other interfaces provide by the service. This function creates the service on DBus and tries to get a well-known name specified in @name. If the name can't be estabilished then the #IndicatorService::shutdown signal will be sent. Return value: A brand new #IndicatorService object or #NULL if there is an error. */ IndicatorService * indicator_service_new_version (gchar * name, guint version) { GObject * obj = g_object_new(INDICATOR_SERVICE_TYPE, PROP_NAME_S, name, PROP_VERSION_S, version, NULL); return INDICATOR_SERVICE(obj); } libayatana-indicator-0.6.2/libayatana-indicator/indicator-service.h0000644000000000000000000000530013254153536022333 0ustar /* An object used to provide a simple interface for a service to query version and manage whether it's running. Copyright 2009 Canonical Ltd. Authors: Ted Gould This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version 3.0 for more details. You should have received a copy of the GNU General Public License along with this library. If not, see . */ #ifndef __INDICATOR_SERVICE_H__ #define __INDICATOR_SERVICE_H__ #include #include G_BEGIN_DECLS #define INDICATOR_SERVICE_TYPE (indicator_service_get_type ()) #define INDICATOR_SERVICE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), INDICATOR_SERVICE_TYPE, IndicatorService)) #define INDICATOR_SERVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), INDICATOR_SERVICE_TYPE, IndicatorServiceClass)) #define INDICATOR_IS_SERVICE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), INDICATOR_SERVICE_TYPE)) #define INDICATOR_IS_SERVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), INDICATOR_SERVICE_TYPE)) #define INDICATOR_SERVICE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), INDICATOR_SERVICE_TYPE, IndicatorServiceClass)) #define INDICATOR_SERVICE_SIGNAL_SHUTDOWN "shutdown" typedef struct _IndicatorService IndicatorService; typedef struct _IndicatorServiceClass IndicatorServiceClass; /** IndicatorServiceClass: @parent_class: #GObjectClass @shutdown: Slot for IndicatorServiceClass::shutdown @indicator_service_reserved1: Reserved for future use @indicator_service_reserved2: Reserved for future use @indicator_service_reserved3: Reserved for future use @indicator_service_reserved4: Reserved for future use */ struct _IndicatorServiceClass { GObjectClass parent_class; /* Signals */ void (*shutdown) (IndicatorService * service, gpointer user_data); /* Reserved */ void (*indicator_service_reserved1) (void); void (*indicator_service_reserved2) (void); void (*indicator_service_reserved3) (void); void (*indicator_service_reserved4) (void); }; /** IndicatorService: @parent: #GObject */ struct _IndicatorService { GObject parent; }; GType indicator_service_get_type (void); IndicatorService * indicator_service_new (gchar * name); IndicatorService * indicator_service_new_version (gchar * name, guint version); G_END_DECLS #endif libayatana-indicator-0.6.2/libayatana-indicator/indicator-service-manager.c0000644000000000000000000005543513254153536023754 0ustar /* An object used to manage services. Either start them or just connect to them. Copyright 2009 Canonical Ltd. Authors: Ted Gould This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version 3.0 for more details. You should have received a copy of the GNU General Public License along with this library. If not, see . */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include "indicator-service-manager.h" #include "gen-indicator-service.xml.h" #include "dbus-shared.h" /* Private Stuff */ /** IndicatorServiceManagerPrivate: @name: The well known dbus name the service should be on. @service_proxy: The proxy to the service itself. @connected: Whether we're connected to the service or not. @this_service_version: The version of the service that we're looking for. @restart_count: The number of times we've restarted this service. */ typedef struct _IndicatorServiceManagerPrivate IndicatorServiceManagerPrivate; struct _IndicatorServiceManagerPrivate { gchar * name; GDBusProxy * service_proxy; GCancellable * service_proxy_cancel; guint name_watcher; gboolean connected; guint this_service_version; guint restart_count; gint restart_source; GCancellable * watch_cancel; }; /* Signals Stuff */ enum { CONNECTION_CHANGE, LAST_SIGNAL }; static guint signals[LAST_SIGNAL] = { 0 }; /* If this env variable is set, we don't restart */ #define TIMEOUT_ENV_NAME "INDICATOR_SERVICE_RESTART_DISABLE" #define TIMEOUT_MULTIPLIER 100 /* In ms */ /* What to reset the restart_count to if we know that we're in a recoverable error condition, but waiting a little bit will probably make things better. 5 ~= 3 sec. */ #define TIMEOUT_A_LITTLE_WHILE 5 /* Properties */ /* Enum for the properties so that they can be quickly found and looked up. */ enum { PROP_0, PROP_NAME, PROP_VERSION }; /* The strings so that they can be slowly looked up. */ #define PROP_NAME_S "name" #define PROP_VERSION_S "version" /* GDBus Stuff */ static GDBusNodeInfo * node_info = NULL; static GDBusInterfaceInfo * interface_info = NULL; /* GObject Stuff */ #define INDICATOR_SERVICE_MANAGER_GET_PRIVATE(o) \ (G_TYPE_INSTANCE_GET_PRIVATE ((o), INDICATOR_SERVICE_MANAGER_TYPE, IndicatorServiceManagerPrivate)) static void indicator_service_manager_class_init (IndicatorServiceManagerClass *klass); static void indicator_service_manager_init (IndicatorServiceManager *self); static void indicator_service_manager_dispose (GObject *object); static void indicator_service_manager_finalize (GObject *object); /* Prototypes */ static void set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec); static void get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); static void start_service (IndicatorServiceManager * service); static void start_service_again (IndicatorServiceManager * manager); static void unwatch (GDBusProxy * proxy); static void service_proxy_cb (GObject * object, GAsyncResult * res, gpointer user_data); static void service_proxy_name_changed (GDBusConnection * connection, const gchar * sender_name, const gchar * object_path, const gchar * interface_name, const gchar * signal_name, GVariant * parameters, gpointer user_data); G_DEFINE_TYPE (IndicatorServiceManager, indicator_service_manager, G_TYPE_OBJECT); /* Build all of our signals and proxies and tie everything all together. Lovely. */ static void indicator_service_manager_class_init (IndicatorServiceManagerClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); g_type_class_add_private (klass, sizeof (IndicatorServiceManagerPrivate)); object_class->dispose = indicator_service_manager_dispose; object_class->finalize = indicator_service_manager_finalize; /* Property funcs */ object_class->set_property = set_property; object_class->get_property = get_property; /** IndicatorServiceManager::connecton-change: @arg0: The #IndicatorServiceManager object @arg1: The state of the connection, TRUE is connected. Signaled when the service is connected or disconnected depending on it's previous state. */ signals[CONNECTION_CHANGE] = g_signal_new (INDICATOR_SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE, G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (IndicatorServiceManagerClass, connection_change), NULL, NULL, g_cclosure_marshal_VOID__BOOLEAN, G_TYPE_NONE, 1, G_TYPE_BOOLEAN, G_TYPE_NONE); /* Properties */ g_object_class_install_property(object_class, PROP_NAME, g_param_spec_string(PROP_NAME_S, "The DBus name for the service to monitor", "This is the name that should be used to start a service.", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property(object_class, PROP_VERSION, g_param_spec_uint(PROP_VERSION_S, "The version of the service that we're expecting.", "A number to check and reject a service if it gives us the wrong number. This should match across the manager and the service", 0, G_MAXUINT, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /* Setting up the DBus interfaces */ if (node_info == NULL) { GError * error = NULL; node_info = g_dbus_node_info_new_for_xml(_indicator_service, &error); if (error != NULL) { g_error("Unable to parse Indicator Service Interface description: %s", error->message); g_error_free(error); } } if (interface_info == NULL) { interface_info = g_dbus_node_info_lookup_interface(node_info, INDICATOR_SERVICE_INTERFACE); if (interface_info == NULL) { g_error("Unable to find interface '" INDICATOR_SERVICE_INTERFACE "'"); } } return; } /* This inits all the variable and sets up the proxy to dbus. It doesn't look for the service as at this point we don't know it's name. */ static void indicator_service_manager_init (IndicatorServiceManager *self) { IndicatorServiceManagerPrivate * priv = INDICATOR_SERVICE_MANAGER_GET_PRIVATE(self); /* Get the private variables in a decent state */ priv->name = NULL; priv->service_proxy = NULL; priv->service_proxy_cancel = NULL; priv->name_watcher = 0; priv->connected = FALSE; priv->this_service_version = 0; priv->restart_count = 0; priv->restart_source = 0; priv->watch_cancel = NULL; return; } /* If we're connected this provides all the signals to say that we're about to not be. Then it takes down the proxies and tells the service that we're not interested in being its friend anymore either. */ static void indicator_service_manager_dispose (GObject *object) { IndicatorServiceManagerPrivate * priv = INDICATOR_SERVICE_MANAGER_GET_PRIVATE(object); /* Removing the idle task to restart if it exists. */ if (priv->restart_source != 0) { g_source_remove(priv->restart_source); } /* Block any restart calls */ priv->restart_source = -1; /* If we were connected we need to make sure to tell people that it's no longer the case. */ if (priv->connected) { priv->connected = FALSE; g_signal_emit(object, signals[CONNECTION_CHANGE], 0, FALSE, TRUE); } if (priv->name_watcher != 0) { g_dbus_connection_signal_unsubscribe(g_dbus_proxy_get_connection(priv->service_proxy), priv->name_watcher); priv->name_watcher = 0; } /* If we're still getting the proxy, stop looking so we can then clean up some more. */ if (priv->service_proxy_cancel != NULL) { g_cancellable_cancel(priv->service_proxy_cancel); g_object_unref(priv->service_proxy_cancel); priv->service_proxy_cancel = NULL; } /* If we've sent a watch, cancel looking for the reply before sending the unwatch */ if (priv->watch_cancel != NULL) { g_cancellable_cancel(priv->watch_cancel); g_object_unref(priv->watch_cancel); priv->watch_cancel = NULL; } /* If we have a proxy, tell it we're shutting down. Just to be polite about it. */ if (priv->service_proxy != NULL) { unwatch(priv->service_proxy); } /* Destory our service proxy, we won't need it. */ if (priv->service_proxy != NULL) { g_object_unref(G_OBJECT(priv->service_proxy)); priv->service_proxy = NULL; } /* Let's see if our parents want to do anything. */ G_OBJECT_CLASS (indicator_service_manager_parent_class)->dispose (object); return; } /* Ironically, we don't allocate a lot of memory ourselves. */ static void indicator_service_manager_finalize (GObject *object) { IndicatorServiceManagerPrivate * priv = INDICATOR_SERVICE_MANAGER_GET_PRIVATE(object); if (priv->name != NULL) { g_free(priv->name); priv->name = NULL; } G_OBJECT_CLASS (indicator_service_manager_parent_class)->finalize (object); return; } /* Either copies the name into the private variable or sets the version. Do it wrong and it'll get upset. */ static void set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) { IndicatorServiceManager * self = INDICATOR_SERVICE_MANAGER(object); g_return_if_fail(self != NULL); IndicatorServiceManagerPrivate * priv = INDICATOR_SERVICE_MANAGER_GET_PRIVATE(self); g_return_if_fail(priv != NULL); switch (prop_id) { /* *********************** */ case PROP_NAME: if (priv->name != NULL) { g_error("Name can not be set twice!"); return; } priv->name = g_value_dup_string(value); start_service(self); break; /* *********************** */ case PROP_VERSION: priv->this_service_version = g_value_get_uint(value); break; /* *********************** */ default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } return; } /* Grabs the values from the private variables and puts them into the value. */ static void get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec) { IndicatorServiceManager * self = INDICATOR_SERVICE_MANAGER(object); g_return_if_fail(self != NULL); IndicatorServiceManagerPrivate * priv = INDICATOR_SERVICE_MANAGER_GET_PRIVATE(self); g_return_if_fail(priv != NULL); switch (prop_id) { /* *********************** */ case PROP_NAME: g_value_set_string(value, priv->name); break; /* *********************** */ case PROP_VERSION: g_value_set_uint(value, priv->this_service_version); break; /* *********************** */ default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } return; } /* Small little function to make a long function call a little bit cleaner. */ static void unwatch (GDBusProxy * proxy) { g_dbus_proxy_call(proxy, "UnWatch", NULL, /* parameters */ G_DBUS_CALL_FLAGS_NONE, -1, /* timeout */ NULL, /* cancelable */ NULL, /* callback */ NULL); /* user data */ return; } /* A callback from telling a service that we want to watch it. It gives us the service API version and the version of the other APIs it supports. We check both of those. If they don't match then we unwatch it. Otherwise, we signal a connection change to tell the rest of the world that we have a service now. */ static void watch_cb (GObject * object, GAsyncResult * res, gpointer user_data) { GError * error = NULL; IndicatorServiceManagerPrivate * priv = INDICATOR_SERVICE_MANAGER_GET_PRIVATE(user_data); GVariant * params = g_dbus_proxy_call_finish(G_DBUS_PROXY(object), res, &error); if (error != NULL) { g_warning("Unable to set watch on '%s': '%s'", priv->name, error->message); g_error_free(error); start_service_again(INDICATOR_SERVICE_MANAGER(user_data)); return; } guint service_api_version; guint this_service_version; g_variant_get(params, "(uu)", &service_api_version, &this_service_version); g_variant_unref(params); /* We've done it, now let's stop counting. */ /* Note: we're not checking versions. Because, the hope is that the guy holding the name we want with the wrong version will drop and we can start another service quickly. */ priv->restart_count = 0; if (service_api_version != INDICATOR_SERVICE_VERSION) { g_warning("Service is using a different version of the service interface. Expecting %d and got %d.", INDICATOR_SERVICE_VERSION, service_api_version); unwatch(priv->service_proxy); /* Let's make us wait a little while, then try again */ priv->restart_count = TIMEOUT_A_LITTLE_WHILE; start_service_again(INDICATOR_SERVICE_MANAGER(user_data)); return; } if (this_service_version != priv->this_service_version) { g_warning("Service is using a different API version than the manager. Expecting %d and got %d.", priv->this_service_version, this_service_version); unwatch(priv->service_proxy); /* Let's make us wait a little while, then try again */ priv->restart_count = TIMEOUT_A_LITTLE_WHILE; start_service_again(INDICATOR_SERVICE_MANAGER(user_data)); return; } if (!priv->connected) { priv->connected = TRUE; g_signal_emit(G_OBJECT(user_data), signals[CONNECTION_CHANGE], 0, TRUE, TRUE); } return; } /* The function that handles getting us connected to the service. In many cases it will start the service, but if the service is already there it just allocates the service proxy and acts like it was no big deal. */ static void start_service (IndicatorServiceManager * service) { IndicatorServiceManagerPrivate * priv = INDICATOR_SERVICE_MANAGER_GET_PRIVATE(service); g_return_if_fail(priv->name != NULL); if (priv->service_proxy_cancel != NULL) { /* A service proxy is being gotten currently */ return; } if (priv->service_proxy != NULL) { g_object_unref(priv->service_proxy); priv->service_proxy = NULL; } priv->service_proxy_cancel = g_cancellable_new(); g_dbus_proxy_new_for_bus(G_BUS_TYPE_SESSION, G_DBUS_PROXY_FLAGS_NONE, interface_info, priv->name, INDICATOR_SERVICE_OBJECT, INDICATOR_SERVICE_INTERFACE, priv->service_proxy_cancel, service_proxy_cb, service); return; } /* Callback from trying to create the proxy for the service, this could include starting the service. Sometime it'll fail and we'll try to start that dang service again! */ static void service_proxy_cb (GObject * object, GAsyncResult * res, gpointer user_data) { GError * error = NULL; IndicatorServiceManager * service = INDICATOR_SERVICE_MANAGER(user_data); g_return_if_fail(service != NULL); GDBusProxy * proxy = g_dbus_proxy_new_for_bus_finish(res, &error); IndicatorServiceManagerPrivate * priv = INDICATOR_SERVICE_MANAGER_GET_PRIVATE(user_data); if (priv->service_proxy_cancel != NULL) { g_object_unref(priv->service_proxy_cancel); priv->service_proxy_cancel = NULL; } if (error != NULL) { /* Unable to create the proxy, eh, let's try again in a bit */ g_error_free(error); start_service_again(service); return; } gchar * name = g_dbus_proxy_get_name_owner(proxy); if (name == NULL) { /* Hmm, since creating the proxy should start it, it seems very odd that it wouldn't have an owner at this point. But, all we can do is try again. */ g_object_unref(proxy); start_service_again(service); return; } g_free(name); /* Okay, we're good to grab the proxy at this point, we're sure that it's ours. */ priv->service_proxy = proxy; /* Signal for drop */ priv->name_watcher = g_dbus_connection_signal_subscribe( g_dbus_proxy_get_connection(proxy), "org.freedesktop.DBus", "org.freedesktop.DBus", "NameOwnerChanged", "/org/freedesktop/DBus", g_dbus_proxy_get_name(proxy), G_DBUS_SIGNAL_FLAGS_NONE, service_proxy_name_changed, user_data, NULL); /* Build cancelable if we need it */ if (priv->watch_cancel == NULL) { priv->watch_cancel = g_cancellable_new(); } /* Send watch */ g_dbus_proxy_call(priv->service_proxy, "Watch", NULL, /* params */ G_DBUS_CALL_FLAGS_NONE, -1, priv->watch_cancel, watch_cb, user_data); return; } /* Responds to the name owner changing of the proxy, this usually means the service died. We're dropping the proxy and recreating it so that it'll restart the service. */ static void service_proxy_name_changed (GDBusConnection * connection, const gchar * sender_name, const gchar * object_path, const gchar * interface_name, const gchar * signal_name, GVariant * parameters, gpointer user_data) { IndicatorServiceManagerPrivate * priv = INDICATOR_SERVICE_MANAGER_GET_PRIVATE(user_data); const gchar * new_name = NULL; const gchar * prev_name = NULL; g_variant_get(parameters, "(&s&s&s)", NULL, &prev_name, &new_name); if (new_name == NULL || new_name[0] == 0) { if (priv->connected) { priv->connected = FALSE; g_signal_emit(G_OBJECT(user_data), signals[CONNECTION_CHANGE], 0, FALSE, TRUE); } start_service_again(INDICATOR_SERVICE_MANAGER(user_data)); } else { /* If we weren't connected before, we are now. Let's tell the world! */ if (!priv->connected) { priv->connected = TRUE; g_signal_emit(G_OBJECT(user_data), signals[CONNECTION_CHANGE], 0, TRUE, TRUE); } /* If the names are both valid, and they're not the same, it means that we've actually changed. So we need to tell the new guy that we're watching them */ if (new_name != NULL && prev_name != NULL && new_name[0] != 0 && prev_name != 0 && g_strcmp0(prev_name, new_name) != 0) { /* Send watch */ g_dbus_proxy_call(priv->service_proxy, "Watch", NULL, /* params */ G_DBUS_CALL_FLAGS_NONE, -1, priv->watch_cancel, watch_cb, user_data); } } return; } /* The callback that starts the service for real after the timeout as determined in 'start_service_again'. This could be in the idle or a timer. */ static gboolean start_service_again_cb (gpointer data) { IndicatorServiceManagerPrivate * priv = INDICATOR_SERVICE_MANAGER_GET_PRIVATE(data); priv->restart_count++; g_debug("Restarting service '%s' count %d", priv->name, priv->restart_count); start_service(INDICATOR_SERVICE_MANAGER(data)); priv->restart_source = 0; return FALSE; } /* This function tries to start a new service, perhaps after a timeout that it determines. The real issue here is that it throttles restarting if we're not being successful. */ static void start_service_again (IndicatorServiceManager * manager) { IndicatorServiceManagerPrivate * priv = INDICATOR_SERVICE_MANAGER_GET_PRIVATE(manager); /* If we've already got a restart source running then let's not do this again. */ if (priv->restart_source != 0) { return; } /* Allow the restarting to be disabled */ if (g_getenv(TIMEOUT_ENV_NAME)) { return; } if (priv->restart_count == 0) { /* First time, do it in idle */ g_idle_add(start_service_again_cb, manager); } else { /* Not our first time 'round the block. Let's slow this down. */ if (priv->restart_count > 16) priv->restart_count = 16; /* Not more than 1024x */ priv->restart_source = g_timeout_add((1 << priv->restart_count) * TIMEOUT_MULTIPLIER, start_service_again_cb, manager); } return; } /* API */ /** indicator_service_manager_new: @dbus_name: The well known name of the service on DBus This creates a new service manager object. If the service is not running it will start it. No matter what, it will give a IndicatorServiceManager::connection-changed event signal when it gets connected. Return value: A brand new lovely #IndicatorServiceManager object. */ IndicatorServiceManager * indicator_service_manager_new (const gchar * dbus_name) { GObject * obj = g_object_new(INDICATOR_SERVICE_MANAGER_TYPE, PROP_NAME_S, dbus_name, NULL); return INDICATOR_SERVICE_MANAGER(obj); } /** inicator_service_manager_new_version: @dbus_name: The well known name of the service on DBus @version: Version of the service we expect This creates a new service manager object. It also sets the version of the service that we're expecting to see. In general, it behaves similarly to #indicator_service_manager_new() except that it checks @version against the version returned by the service. Return value: A brand new lovely #IndicatorServiceManager object. */ IndicatorServiceManager * indicator_service_manager_new_version (const gchar * dbus_name, guint version) { GObject * obj = g_object_new(INDICATOR_SERVICE_MANAGER_TYPE, PROP_NAME_S, dbus_name, PROP_VERSION_S, version, NULL); return INDICATOR_SERVICE_MANAGER(obj); } /** indicator_service_manager_connected: @sm: #IndicatorServiceManager object to check Checks to see if the service manager is connected to a service. Return value: #TRUE if there is a service connceted. */ gboolean indicator_service_manager_connected (IndicatorServiceManager * sm) { g_return_val_if_fail(INDICATOR_IS_SERVICE_MANAGER(sm), FALSE); IndicatorServiceManagerPrivate * priv = INDICATOR_SERVICE_MANAGER_GET_PRIVATE(sm); return priv->connected; } /** indicator_service_manager_set_refresh: @sm: #IndicatorServiceManager object to configure @time_in_ms: The refresh time in milliseconds Use this function to set the amount of time between restarting services that may crash or shutdown. This is mostly useful for testing and development. NOTE: Not yet implemented. */ void indicator_service_manager_set_refresh (IndicatorServiceManager * sm, guint time_in_ms) { return; } libayatana-indicator-0.6.2/libayatana-indicator/indicator-service-manager.h0000644000000000000000000000650713254153536023755 0ustar /* An object used to manage services. Either start them or just connect to them. Copyright 2009 Canonical Ltd. Authors: Ted Gould This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version 3.0 for more details. You should have received a copy of the GNU General Public License along with this library. If not, see . */ #ifndef __INDICATOR_SERVICE_MANAGER_H__ #define __INDICATOR_SERVICE_MANAGER_H__ #include #include G_BEGIN_DECLS #define INDICATOR_SERVICE_MANAGER_TYPE (indicator_service_manager_get_type ()) #define INDICATOR_SERVICE_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), INDICATOR_SERVICE_MANAGER_TYPE, IndicatorServiceManager)) #define INDICATOR_SERVICE_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), INDICATOR_SERVICE_MANAGER_TYPE, IndicatorServiceManagerClass)) #define INDICATOR_IS_SERVICE_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), INDICATOR_SERVICE_MANAGER_TYPE)) #define INDICATOR_IS_SERVICE_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), INDICATOR_SERVICE_MANAGER_TYPE)) #define INDICATOR_SERVICE_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), INDICATOR_SERVICE_MANAGER_TYPE, IndicatorServiceManagerClass)) #define INDICATOR_SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE "connection-change" typedef struct _IndicatorServiceManager IndicatorServiceManager; typedef struct _IndicatorServiceManagerClass IndicatorServiceManagerClass; /** IndicatorServiceManagerClass: @parent: #GObjectClass @connection_changed: Slot for #IndicatorServiceManager::connection-changed. @indicator_service_manager_reserved1: Reserved for future use. @indicator_service_manager_reserved2: Reserved for future use. @indicator_service_manager_reserved3: Reserved for future use. @indicator_service_manager_reserved4: Reserved for future use. */ struct _IndicatorServiceManagerClass { GObjectClass parent_class; /* Signals */ void (*connection_change) (IndicatorServiceManager * sm, gboolean connected, gpointer user_data); /* Buffer */ void (*indicator_service_manager_reserved1) (void); void (*indicator_service_manager_reserved2) (void); void (*indicator_service_manager_reserved3) (void); void (*indicator_service_manager_reserved4) (void); }; /** IndicatorServiceManager: @parent: #GObject */ struct _IndicatorServiceManager { GObject parent; }; GType indicator_service_manager_get_type (void); IndicatorServiceManager * indicator_service_manager_new (const gchar * dbus_name); IndicatorServiceManager * indicator_service_manager_new_version (const gchar * dbus_name, guint version); gboolean indicator_service_manager_connected (IndicatorServiceManager * sm); void indicator_service_manager_set_refresh (IndicatorServiceManager * sm, guint time_in_ms); G_END_DECLS #endif libayatana-indicator-0.6.2/libayatana-indicator/indicator-service.xml0000644000000000000000000000111513254153536022704 0ustar libayatana-indicator-0.6.2/libayatana-indicator/Makefile.am0000644000000000000000000001104013254153536020602 0ustar if USE_GTK3 VER=3 lib_LTLIBRARIES = libayatana-indicator3.la else VER= lib_LTLIBRARIES = libayatana-indicator.la endif BUILT_SOURCES = indicator-object-enum-types.h indicator-object-enum-types.c CLEANFILES = DISTCLEANFILES = EXTRA_DIST = \ ayatana-indicator3-0.$(INDICATOR_API_VERSION).pc.in.in \ ayatana-indicator-0.$(INDICATOR_API_VERSION).pc.in.in INDICATOR_ABI_VERSION = 7 INDICATOR_API_VERSION = 4 %.pc: %.pc.in sed \ -e "s|\@indicator_api_version\@|$(INDICATOR_API_VERSION)|" \ -e "s|\@indicator_abi_version\@|$(INDICATOR_ABI_VERSION)|" \ $< > $@ CLEANFILES += ayatana-indicator$(VER)-0.$(INDICATOR_API_VERSION).pc include $(top_srcdir)/Makefile.am.marshal libayatana_indicatorincludedir=$(includedir)/libayatana-indicator$(VER)-0.$(INDICATOR_API_VERSION)/libayatana-indicator indicator_headers = \ indicator.h \ indicator-desktop-shortcuts.h \ indicator-image-helper.h \ indicator-object.h \ indicator-service.h \ indicator-service-manager.h if USE_GTK3 indicator_headers += indicator-ng.h endif libayatana_indicatorinclude_HEADERS = \ $(indicator_headers) libayatana_indicator_la_SOURCES = \ $(indicator_headers) \ dbus-shared.h \ gen-indicator-service.xml.h \ gen-indicator-service.xml.c \ indicator-object.c \ indicator-object-enum-types.c \ indicator-desktop-shortcuts.c \ indicator-image-helper.c \ indicator-object-marshal.h \ indicator-object-marshal.c \ indicator-service.c \ indicator-service-manager.c if USE_GTK3 libayatana_indicator_la_SOURCES += indicator-ng.c endif libayatana_indicator_la_CFLAGS = \ $(LIBINDICATOR_CFLAGS) \ $(COVERAGE_CFLAGS) \ -DG_LOG_DOMAIN=\"libayatana-indicator\" \ -Wall -Werror -Wno-error=deprecated-declarations libayatana_indicator_la_LIBADD = \ $(LIBINDICATOR_LIBS) \ $(LIBM) libayatana_indicator_la_LDFLAGS = \ $(COVERAGE_LDFLAGS) \ -version-info $(INDICATOR_ABI_VERSION):0:0 \ -no-undefined \ -export-symbols-regex "^[^_].*" # We duplicate these here because Automake won't let us use $(VER) on the left hand side. # Since we carefully use $(VER) in the right hand side above, we can assign the same values. # Only one version of the library is every compiled at the same time, so it is safe to reuse # the right hand sides like this. libayatana_indicator3includedir = $(libayatana_indicatorincludedir) libayatana_indicator3include_HEADERS = $(indicator_headers) libayatana_indicator3_la_SOURCES = $(libayatana_indicator_la_SOURCES) libayatana_indicator3_la_CFLAGS = $(libayatana_indicator_la_CFLAGS) libayatana_indicator3_la_LIBADD = $(libayatana_indicator_la_LIBADD) libayatana_indicator3_la_LDFLAGS = $(libayatana_indicator_la_LDFLAGS) pkgconfig_DATA = ayatana-indicator$(VER)-0.$(INDICATOR_API_VERSION).pc pkgconfigdir = $(libdir)/pkgconfig glib_marshal_list = indicator-object-marshal.list glib_marshal_prefix = _indicator_object_marshal indicator-object-enum-types.h: s-enum-types-h @true s-enum-types-h: $(indicator_headers) ( cd $(srcdir) && $(GLIB_MKENUMS) --template $(abs_srcdir)/indicator-object-enum-types.h.template \ $(indicator_headers) ) >> tmp-indicator-object-enum-types.h \ && (cmp -s tmp-indicator-object-enum-types.h indicator-object-enum-types.h || cp tmp-indicator-object-enum-types.h indicator-object-enum-types.h ) \ && rm -f tmp-indicator-object-enum-types.h && echo timestamp > $(@F) indicator-object-enum-types.c: s-enum-types-c @true s-enum-types-c: $(indicator_headers) ( cd $(srcdir) && $(GLIB_MKENUMS) --template $(abs_srcdir)/indicator-object-enum-types.c.template \ $(indicator_headers) ) > tmp-indicator-object-enum-types.c \ && (cmp -s tmp-indicator-object-enum-types.c indicator-object-enum-types.c || cp tmp-indicator-object-enum-types.c indicator-object-enum-types.c ) \ && rm -f tmp-indicator-object-enum-types.c EXTRA_DIST += indicator-object-enum-types.h.template indicator-object-enum-types.c.template CLEANFILES += \ indicator-object-enum-types.h \ indicator-object-enum-types.c \ s-enum-types-h \ s-enum-types-c ################################## # DBus Specs ################################## DBUS_SPECS = \ indicator-service.xml gen-%.xml.h: %.xml @echo "Building $@ from $<" @echo "extern const char * _$(subst -,_,$(subst .,_,$(basename $(notdir $<))));" > $@ gen-%.xml.c: %.xml @echo "Building $@ from $<" echo "const char * _$(subst -,_,$(subst .,_,$(basename $(notdir $<)))) = " > $@ @sed -e "s:\":\\\\\":g" -e s:^:\": -e s:\$$:\\\\n\": $< >> $@ @echo ";" >> $@ BUILT_SOURCES += \ gen-indicator-service.xml.h \ gen-indicator-service.xml.c CLEANFILES += $(BUILT_SOURCES) EXTRA_DIST += $(DBUS_SPECS) libayatana-indicator-0.6.2/m4/gcov.m40000644000000000000000000000470513254153536014221 0ustar # Checks for existence of coverage tools: # * gcov # * lcov # * genhtml # * gcovr # # Sets ac_cv_check_gcov to yes if tooling is present # and reports the executables to the variables LCOV, GCOVR and GENHTML. AC_DEFUN([AC_TDD_GCOV], [ AC_ARG_ENABLE(gcov, AS_HELP_STRING([--enable-gcov], [enable coverage testing with gcov]), [use_gcov=$enableval], [use_gcov=no]) if test "x$use_gcov" = "xyes"; then # we need gcc: if test "$GCC" != "yes"; then AC_MSG_ERROR([GCC is required for --enable-gcov]) fi # Check if ccache is being used AC_CHECK_PROG(SHTOOL, shtool, shtool) case `$SHTOOL path $CC` in *ccache*[)] gcc_ccache=yes;; *[)] gcc_ccache=no;; esac if test "$gcc_ccache" = "yes" && (test -z "$CCACHE_DISABLE" || test "$CCACHE_DISABLE" != "1"); then AC_MSG_ERROR([ccache must be disabled when --enable-gcov option is used. You can disable ccache by setting environment variable CCACHE_DISABLE=1.]) fi lcov_version_list="1.6 1.7 1.8 1.9" AC_CHECK_PROG(LCOV, lcov, lcov) AC_CHECK_PROG(GENHTML, genhtml, genhtml) if test "$LCOV"; then AC_CACHE_CHECK([for lcov version], glib_cv_lcov_version, [ glib_cv_lcov_version=invalid lcov_version=`$LCOV -v 2>/dev/null | $SED -e 's/^.* //'` for lcov_check_version in $lcov_version_list; do if test "$lcov_version" = "$lcov_check_version"; then glib_cv_lcov_version="$lcov_check_version (ok)" fi done ]) else lcov_msg="To enable code coverage reporting you must have one of the following lcov versions installed: $lcov_version_list" AC_MSG_ERROR([$lcov_msg]) fi case $glib_cv_lcov_version in ""|invalid[)] lcov_msg="You must have one of the following versions of lcov: $lcov_version_list (found: $lcov_version)." AC_MSG_ERROR([$lcov_msg]) LCOV="exit 0;" ;; esac if test -z "$GENHTML"; then AC_MSG_ERROR([Could not find genhtml from the lcov package]) fi ac_cv_check_gcov=yes ac_cv_check_lcov=yes # Remove all optimization flags from CFLAGS changequote({,}) CFLAGS=`echo "$CFLAGS" | $SED -e 's/-O[0-9]*//g'` changequote([,]) # Add the special gcc flags COVERAGE_CFLAGS="-O0 -fprofile-arcs -ftest-coverage" COVERAGE_CXXFLAGS="-O0 -fprofile-arcs -ftest-coverage" COVERAGE_LDFLAGS="-lgcov" # Check availability of gcovr AC_CHECK_PROG(GCOVR, gcovr, gcovr) if test -z "$GCOVR"; then ac_cv_check_gcovr=no else ac_cv_check_gcovr=yes fi fi ]) # AC_TDD_GCOV libayatana-indicator-0.6.2/Makefile.am0000644000000000000000000000043713254153536014533 0ustar ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS} SUBDIRS = \ data \ libayatana-indicator \ tools tools: libayatana-indicator if WANT_TESTS SUBDIRS += \ tests tests: libayatana-indicator endif DISTCLEANFILES = \ libayatana-indicator-*.tar.gz include $(top_srcdir)/Makefile.am.coverage libayatana-indicator-0.6.2/Makefile.am.coverage0000644000000000000000000000256113254153536016325 0ustar # Coverage targets EXTRA_DIST = trim-lcov.py .PHONY: clean-gcno clean-gcda \ coverage-html generate-coverage-html clean-coverage-html \ coverage-gcovr generate-coverage-gcovr clean-coverage-gcovr clean-local: clean-gcno clean-coverage-html clean-coverage-gcovr if HAVE_GCOV clean-gcno: @echo Removing old coverage instrumentation -find -name '*.gcno' -print | xargs -r rm clean-gcda: @echo Removing old coverage results -find -name '*.gcda' -print | xargs -r rm coverage-html: clean-gcda -$(MAKE) $(AM_MAKEFLAGS) -k check $(MAKE) $(AM_MAKEFLAGS) generate-coverage-html generate-coverage-html: @echo Collecting coverage data $(LCOV) --directory $(top_builddir) --capture --no-checksum --compat-libtool | $(top_srcdir)/trim-lcov.py > coverage.info LANG=C $(GENHTML) --prefix $(top_builddir) --output-directory coveragereport --title "Code Coverage" --legend --show-details coverage.info clean-coverage-html: clean-gcda -$(LCOV) --directory $(top_builddir) -z -rm -rf coverage.info coveragereport if HAVE_GCOVR coverage-gcovr: clean-gcda -$(MAKE) $(AM_MAKEFLAGS) -k check $(MAKE) $(AM_MAKEFLAGS) generate-coverage-gcovr generate-coverage-gcovr: @echo Generating coverage GCOVR report $(GCOVR) -x -r $(top_builddir) -o $(top_builddir)/coverage.xml clean-coverage-gcovr: clean-gcda -rm -rf $(top_builddir)/coverage.xml endif # HAVE_GCOVR endif # HAVE_GCOV libayatana-indicator-0.6.2/Makefile.am.marshal0000644000000000000000000000223613254153536016160 0ustar # Rules for generating marshal files using glib-genmarshal # # Define: # glib_marshal_list = marshal list file # glib_marshal_prefix = prefix for marshal functions # # before including Makefile.am.marshal. You will also need to have # the following targets already defined: # # CLEANFILES # DISTCLEANFILES # BUILT_SOURCES # EXTRA_DIST # # Author: Emmanuele Bassi marshal_h = $(glib_marshal_list:.list=.h) marshal_c = $(glib_marshal_list:.list=.c) CLEANFILES += stamp-marshal DISTCLEANFILES += $(marshal_h) $(marshal_c) BUILT_SOURCES += $(marshal_h) $(marshal_c) EXTRA_DIST += $(glib_marshal_list) stamp-marshal: $(glib_marshal_list) $(QUIET_GEN)$(GLIB_GENMARSHAL) \ --prefix=$(glib_marshal_prefix) \ --header \ $(srcdir)/$(glib_marshal_list) > xgen-mh \ && (cmp -s xgen-mh $(marshal_h) || cp -f xgen-mh $(marshal_h)) \ && rm -f xgen-mh \ && echo timestamp > $(@F) $(marshal_h): stamp-marshal @true $(marshal_c): $(marshal_h) $(QUIET_GEN)(echo "#include \"$(marshal_h)\"" ; \ $(GLIB_GENMARSHAL) \ --prefix=$(glib_marshal_prefix) \ --body \ $(srcdir)/$(glib_marshal_list)) > xgen-mc \ && cp xgen-mc $(marshal_c) \ && rm -f xgen-mc libayatana-indicator-0.6.2/NEWS0000644000000000000000000000000013254153536013160 0ustar libayatana-indicator-0.6.2/NEWS.Canonical0000644000000000000000000000142213254153536015057 0ustar 12.10.1 - merge lp:~charlesk/libindicator/lp-1045372 to remove the 'cloak' code that caused libreoffice's menubars in unity to be greyed out after opening any dialog or switching windows (lp: 1045372) 12.10.0 - merge lp:~evgeni/libindicator/multiarch-same-devheaders so that we don't include build-time filenames in comments of the enum header files. If we do, the header files may be different on each build. This is especially harmful when building multiple times for multiple architectures and expecting the files to be identical. - merge lp:~charlesk/libindicator/fix-test-sources to fix a copy-and-paste error in specifying the tests' source files - merge lp:~charlesk/libindicator/cxx to constify the constructors for indicator_service_manager libayatana-indicator-0.6.2/README0000644000000000000000000000272613254153536013362 0ustar The indicator service file format ================================= Modern desktop panels find out about indicator by looking at indicator service files in `/usr/share/ayatana/indicators`. These files have to have the same name as the well-known D-Bus name that the corresponding service owns. An indicator file is a normal key file (like desktop files). It must have an `[Indicator Service]` section, that must contain the service's name (`Name`) and the object path at which its action group is found (`ObjectPath`). For example: [Indicator Service] Name=indicator-example ObjectPath=/org/ayatana/indicator/example It should also contain a hint to where the indicator should appear in the panel: Position=70 The smaller the position, the further to the right (or left when RTL is enabled) the indicator appears. An indicator can only export one action group, but a menu for each profile ("desktop", "greeter", "phone") supports. There must be a section for each of those profiles, containing the object path on which the menu is exported: [desktop] ObjectPath=/org/ayatana/indicator/example/desktop [greeter] ObjectPath=/org/ayatana/indicator/example/desktop [phone] ObjectPath=/org/ayatana/indicator/example/phone Object paths can be reused for different profiles (the greeter uses the same menu as the desktop in the above example). There are no fallbacks. If a profile is not mentioned in the service file, the indicator will not show up for that profile. libayatana-indicator-0.6.2/tests/dummy-indicator-blank.c0000644000000000000000000000134113254153536020172 0ustar /* Test for libindicator Copyright 2009 Canonical Ltd. Authors: Ted Gould This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version 3.0 for more details. You should have received a copy of the GNU General Public License along with this library. If not, see . */ #include "libayatana-indicator/indicator.h" INDICATOR_SET_VERSION libayatana-indicator-0.6.2/tests/dummy-indicator-entry-func.c0000644000000000000000000000622313254153536021201 0ustar /* Test for libindicator Copyright 2012 Canonical Ltd. Authors: Ted Gould This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version 3.0 for more details. You should have received a copy of the GNU General Public License along with this library. If not, see . */ #include "dummy-indicator-entry-func.h" GType dummy_indicator_entry_func_get_type (void); INDICATOR_SET_VERSION INDICATOR_SET_TYPE(DUMMY_INDICATOR_ENTRY_FUNC_TYPE) GtkLabel * get_label (IndicatorObject * io) { return NULL; } GtkImage * get_icon (IndicatorObject * io) { return NULL; } GtkMenu * get_menu (IndicatorObject * io) { return NULL; } const gchar * get_accessible_desc (IndicatorObject * io) { return NULL; } static void entry_activate (IndicatorObject * io, IndicatorObjectEntry * entry, guint timestamp) { DummyIndicatorEntryFunc * self = DUMMY_INDICATOR_ENTRY_FUNC(io); self->entry_activate_called = TRUE; return; } static void entry_activate_window (IndicatorObject * io, IndicatorObjectEntry * entry, guint windowid, guint timestamp) { DummyIndicatorEntryFunc * self = DUMMY_INDICATOR_ENTRY_FUNC(io); self->entry_activate_window_called = TRUE; return; } static void entry_close (IndicatorObject * io, IndicatorObjectEntry * entry, guint timestamp) { DummyIndicatorEntryFunc * self = DUMMY_INDICATOR_ENTRY_FUNC(io); self->entry_close_called = TRUE; return; } static void dummy_indicator_entry_func_class_init (DummyIndicatorEntryFuncClass *klass); static void dummy_indicator_entry_func_init (DummyIndicatorEntryFunc *self); static void dummy_indicator_entry_func_dispose (GObject *object); static void dummy_indicator_entry_func_finalize (GObject *object); G_DEFINE_TYPE (DummyIndicatorEntryFunc, dummy_indicator_entry_func, INDICATOR_OBJECT_TYPE); static void dummy_indicator_entry_func_class_init (DummyIndicatorEntryFuncClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->dispose = dummy_indicator_entry_func_dispose; object_class->finalize = dummy_indicator_entry_func_finalize; IndicatorObjectClass * io_class = INDICATOR_OBJECT_CLASS(klass); io_class->get_label = get_label; io_class->get_image = get_icon; io_class->get_menu = get_menu; io_class->get_accessible_desc = get_accessible_desc; io_class->entry_activate = entry_activate; io_class->entry_activate_window = entry_activate_window; io_class->entry_close = entry_close; return; } static void dummy_indicator_entry_func_init (DummyIndicatorEntryFunc *self) { return; } static void dummy_indicator_entry_func_dispose (GObject *object) { G_OBJECT_CLASS (dummy_indicator_entry_func_parent_class)->dispose (object); return; } static void dummy_indicator_entry_func_finalize (GObject *object) { G_OBJECT_CLASS (dummy_indicator_entry_func_parent_class)->finalize (object); return; } libayatana-indicator-0.6.2/tests/dummy-indicator-entry-func.h0000644000000000000000000000410613254153536021204 0ustar /* Test for libindicator Copyright 2012 Canonical Ltd. Authors: Ted Gould This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version 3.0 for more details. You should have received a copy of the GNU General Public License along with this library. If not, see . */ #ifndef __DUMMY_INDICATOR_ENTRY_FUNC__ #define __DUMMY_INDICATOR_ENTRY_FUNC__ #include #include #include "libayatana-indicator/indicator.h" #include "libayatana-indicator/indicator-object.h" G_BEGIN_DECLS #define DUMMY_INDICATOR_ENTRY_FUNC_TYPE (dummy_indicator_entry_func_get_type ()) #define DUMMY_INDICATOR_ENTRY_FUNC(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), DUMMY_INDICATOR_ENTRY_FUNC_TYPE, DummyIndicatorEntryFunc)) #define DUMMY_INDICATOR_ENTRY_FUNC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), DUMMY_INDICATOR_ENTRY_FUNC_TYPE, DummyIndicatorEntryFuncClass)) #define IS_DUMMY_INDICATOR_ENTRY_FUNC(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), DUMMY_INDICATOR_ENTRY_FUNC_TYPE)) #define IS_DUMMY_INDICATOR_ENTRY_FUNC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), DUMMY_INDICATOR_ENTRY_FUNC_TYPE)) #define DUMMY_INDICATOR_ENTRY_FUNC_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), DUMMY_INDICATOR_ENTRY_FUNC_TYPE, DummyIndicatorEntryFuncClass)) typedef struct _DummyIndicatorEntryFunc DummyIndicatorEntryFunc; typedef struct _DummyIndicatorEntryFuncClass DummyIndicatorEntryFuncClass; struct _DummyIndicatorEntryFuncClass { IndicatorObjectClass parent_class; }; struct _DummyIndicatorEntryFunc { IndicatorObject parent; gboolean entry_activate_called; gboolean entry_activate_window_called; gboolean entry_close_called; }; #endif /* __DUMMY_INDICATOR_ENTRY_FUNC__ */ libayatana-indicator-0.6.2/tests/dummy-indicator-null.c0000644000000000000000000000642213254153536020062 0ustar /* Test for libindicator Copyright 2009 Canonical Ltd. Authors: Ted Gould This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version 3.0 for more details. You should have received a copy of the GNU General Public License along with this library. If not, see . */ #include #include #include "libayatana-indicator/indicator.h" #include "libayatana-indicator/indicator-object.h" #define DUMMY_INDICATOR_NULL_TYPE (dummy_indicator_null_get_type ()) #define DUMMY_INDICATOR_NULL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), DUMMY_INDICATOR_NULL_TYPE, DummyIndicatorNull)) #define DUMMY_INDICATOR_NULL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), DUMMY_INDICATOR_NULL_TYPE, DummyIndicatorNullClass)) #define IS_DUMMY_INDICATOR_NULL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), DUMMY_INDICATOR_NULL_TYPE)) #define IS_DUMMY_INDICATOR_NULL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), DUMMY_INDICATOR_NULL_TYPE)) #define DUMMY_INDICATOR_NULL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), DUMMY_INDICATOR_NULL_TYPE, DummyIndicatorNullClass)) typedef struct _DummyIndicatorNull DummyIndicatorNull; typedef struct _DummyIndicatorNullClass DummyIndicatorNullClass; struct _DummyIndicatorNullClass { IndicatorObjectClass parent_class; }; struct _DummyIndicatorNull { IndicatorObject parent; }; GType dummy_indicator_null_get_type (void); INDICATOR_SET_VERSION INDICATOR_SET_TYPE(DUMMY_INDICATOR_NULL_TYPE) GtkLabel * get_label (IndicatorObject * io) { return NULL; } GtkImage * get_icon (IndicatorObject * io) { return NULL; } GtkMenu * get_menu (IndicatorObject * io) { return NULL; } const gchar * get_accessible_desc (IndicatorObject * io) { return NULL; } static void dummy_indicator_null_class_init (DummyIndicatorNullClass *klass); static void dummy_indicator_null_init (DummyIndicatorNull *self); static void dummy_indicator_null_dispose (GObject *object); static void dummy_indicator_null_finalize (GObject *object); G_DEFINE_TYPE (DummyIndicatorNull, dummy_indicator_null, INDICATOR_OBJECT_TYPE); static void dummy_indicator_null_class_init (DummyIndicatorNullClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->dispose = dummy_indicator_null_dispose; object_class->finalize = dummy_indicator_null_finalize; IndicatorObjectClass * io_class = INDICATOR_OBJECT_CLASS(klass); io_class->get_label = get_label; io_class->get_image = get_icon; io_class->get_menu = get_menu; io_class->get_accessible_desc = get_accessible_desc; return; } static void dummy_indicator_null_init (DummyIndicatorNull *self) { return; } static void dummy_indicator_null_dispose (GObject *object) { G_OBJECT_CLASS (dummy_indicator_null_parent_class)->dispose (object); return; } static void dummy_indicator_null_finalize (GObject *object) { G_OBJECT_CLASS (dummy_indicator_null_parent_class)->finalize (object); return; } libayatana-indicator-0.6.2/tests/dummy-indicator-signaler.c0000644000000000000000000001130613254153536020711 0ustar /* Test for libindicator Copyright 2009 Canonical Ltd. Authors: Ted Gould This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version 3.0 for more details. You should have received a copy of the GNU General Public License along with this library. If not, see . */ #include #include #include "libayatana-indicator/indicator.h" #include "libayatana-indicator/indicator-object.h" #define DUMMY_INDICATOR_SIGNALER_TYPE (dummy_indicator_signaler_get_type ()) #define DUMMY_INDICATOR_SIGNALER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), DUMMY_INDICATOR_SIGNALER_TYPE, DummyIndicatorSignaler)) #define DUMMY_INDICATOR_SIGNALER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), DUMMY_INDICATOR_SIGNALER_TYPE, DummyIndicatorSignalerClass)) #define IS_DUMMY_INDICATOR_SIGNALER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), DUMMY_INDICATOR_SIGNALER_TYPE)) #define IS_DUMMY_INDICATOR_SIGNALER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), DUMMY_INDICATOR_SIGNALER_TYPE)) #define DUMMY_INDICATOR_SIGNALER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), DUMMY_INDICATOR_SIGNALER_TYPE, DummyIndicatorSignalerClass)) typedef struct _DummyIndicatorSignaler DummyIndicatorSignaler; typedef struct _DummyIndicatorSignalerClass DummyIndicatorSignalerClass; struct _DummyIndicatorSignalerClass { IndicatorObjectClass parent_class; }; struct _DummyIndicatorSignaler { IndicatorObject parent; IndicatorObjectEntry *entries; }; GType dummy_indicator_signaler_get_type (void); INDICATOR_SET_VERSION INDICATOR_SET_TYPE(DUMMY_INDICATOR_SIGNALER_TYPE) GtkLabel * get_label (IndicatorObject * io) { return GTK_LABEL(gtk_label_new("Signaler Item")); } GtkImage * get_icon (IndicatorObject * io) { return GTK_IMAGE(gtk_image_new()); } GtkMenu * get_menu (IndicatorObject * io) { GtkMenu * main_menu = GTK_MENU(gtk_menu_new()); GtkWidget * loading_item = gtk_menu_item_new_with_label("Loading..."); gtk_menu_shell_append(GTK_MENU_SHELL(main_menu), loading_item); gtk_widget_show(GTK_WIDGET(loading_item)); return main_menu; } const gchar * get_accessible_desc (IndicatorObject * io) { return "Signaler Item"; } static void dummy_indicator_signaler_class_init (DummyIndicatorSignalerClass *klass); static void dummy_indicator_signaler_init (DummyIndicatorSignaler *self); static void dummy_indicator_signaler_dispose (GObject *object); static void dummy_indicator_signaler_finalize (GObject *object); G_DEFINE_TYPE (DummyIndicatorSignaler, dummy_indicator_signaler, INDICATOR_OBJECT_TYPE); static void dummy_indicator_signaler_class_init (DummyIndicatorSignalerClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->dispose = dummy_indicator_signaler_dispose; object_class->finalize = dummy_indicator_signaler_finalize; IndicatorObjectClass * io_class = INDICATOR_OBJECT_CLASS(klass); io_class->get_label = get_label; io_class->get_image = get_icon; io_class->get_menu = get_menu; io_class->get_accessible_desc = get_accessible_desc; io_class->entry_being_removed = NULL; io_class->entry_was_added = NULL; return; } static gboolean idle_signal (gpointer data) { DummyIndicatorSignaler * self = DUMMY_INDICATOR_SIGNALER(data); IndicatorObjectEntry *added_entry, *removed_entry, *moved_entry; added_entry = &self->entries[0]; moved_entry = &self->entries[1]; removed_entry = &self->entries[2]; added_entry->name_hint = "added"; moved_entry->name_hint = "moved"; removed_entry->name_hint = "removed"; g_signal_emit(G_OBJECT(self), INDICATOR_OBJECT_SIGNAL_ENTRY_ADDED_ID, 0, added_entry); g_signal_emit(G_OBJECT(self), INDICATOR_OBJECT_SIGNAL_ENTRY_MOVED_ID, 0, moved_entry, 0, 1); g_signal_emit(G_OBJECT(self), INDICATOR_OBJECT_SIGNAL_ENTRY_REMOVED_ID, 0, removed_entry); return FALSE; /* Don't queue again */ } static void dummy_indicator_signaler_init (DummyIndicatorSignaler *self) { self->entries = g_new0(IndicatorObjectEntry, 3); g_idle_add(idle_signal, self); return; } static void dummy_indicator_signaler_dispose (GObject *object) { G_OBJECT_CLASS (dummy_indicator_signaler_parent_class)->dispose (object); return; } static void dummy_indicator_signaler_finalize (GObject *object) { DummyIndicatorSignaler * self = DUMMY_INDICATOR_SIGNALER(object); g_free (self->entries); G_OBJECT_CLASS (dummy_indicator_signaler_parent_class)->finalize (object); return; } libayatana-indicator-0.6.2/tests/dummy-indicator-simple.c0000644000000000000000000000722113254153536020377 0ustar /* Test for libindicator Copyright 2009 Canonical Ltd. Authors: Ted Gould This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version 3.0 for more details. You should have received a copy of the GNU General Public License along with this library. If not, see . */ #include #include #include "libayatana-indicator/indicator.h" #include "libayatana-indicator/indicator-object.h" #define DUMMY_INDICATOR_SIMPLE_TYPE (dummy_indicator_simple_get_type ()) #define DUMMY_INDICATOR_SIMPLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), DUMMY_INDICATOR_SIMPLE_TYPE, DummyIndicatorSimple)) #define DUMMY_INDICATOR_SIMPLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), DUMMY_INDICATOR_SIMPLE_TYPE, DummyIndicatorSimpleClass)) #define IS_DUMMY_INDICATOR_SIMPLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), DUMMY_INDICATOR_SIMPLE_TYPE)) #define IS_DUMMY_INDICATOR_SIMPLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), DUMMY_INDICATOR_SIMPLE_TYPE)) #define DUMMY_INDICATOR_SIMPLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), DUMMY_INDICATOR_SIMPLE_TYPE, DummyIndicatorSimpleClass)) typedef struct _DummyIndicatorSimple DummyIndicatorSimple; typedef struct _DummyIndicatorSimpleClass DummyIndicatorSimpleClass; struct _DummyIndicatorSimpleClass { IndicatorObjectClass parent_class; }; struct _DummyIndicatorSimple { IndicatorObject parent; }; GType dummy_indicator_simple_get_type (void); INDICATOR_SET_VERSION INDICATOR_SET_TYPE(DUMMY_INDICATOR_SIMPLE_TYPE) GtkLabel * get_label (IndicatorObject * io) { return GTK_LABEL(gtk_label_new("Simple Item")); } GtkImage * get_icon (IndicatorObject * io) { return GTK_IMAGE(gtk_image_new()); } GtkMenu * get_menu (IndicatorObject * io) { GtkMenu * main_menu = GTK_MENU(gtk_menu_new()); GtkWidget * loading_item = gtk_menu_item_new_with_label("Loading..."); gtk_menu_shell_append(GTK_MENU_SHELL(main_menu), loading_item); gtk_widget_show(GTK_WIDGET(loading_item)); return main_menu; } const gchar * get_accessible_desc (IndicatorObject * io) { return "Simple Item"; } static void dummy_indicator_simple_class_init (DummyIndicatorSimpleClass *klass); static void dummy_indicator_simple_init (DummyIndicatorSimple *self); static void dummy_indicator_simple_dispose (GObject *object); static void dummy_indicator_simple_finalize (GObject *object); G_DEFINE_TYPE (DummyIndicatorSimple, dummy_indicator_simple, INDICATOR_OBJECT_TYPE); static void dummy_indicator_simple_class_init (DummyIndicatorSimpleClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->dispose = dummy_indicator_simple_dispose; object_class->finalize = dummy_indicator_simple_finalize; IndicatorObjectClass * io_class = INDICATOR_OBJECT_CLASS(klass); io_class->get_label = get_label; io_class->get_image = get_icon; io_class->get_menu = get_menu; io_class->get_accessible_desc = get_accessible_desc; return; } static void dummy_indicator_simple_init (DummyIndicatorSimple *self) { return; } static void dummy_indicator_simple_dispose (GObject *object) { G_OBJECT_CLASS (dummy_indicator_simple_parent_class)->dispose (object); return; } static void dummy_indicator_simple_finalize (GObject *object) { G_OBJECT_CLASS (dummy_indicator_simple_parent_class)->finalize (object); return; } libayatana-indicator-0.6.2/tests/dummy-indicator-visible.c0000644000000000000000000001111613254153536020541 0ustar /* Test for libindicator Copyright 2012 Canonical Ltd. Authors: Charles Kerr This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version 3.0 for more details. You should have received a copy of the GNU General Public License along with this library. If not, see . */ #include #include #include "libayatana-indicator/indicator.h" #include "libayatana-indicator/indicator-object.h" #define DUMMY_INDICATOR_VISIBLE_TYPE (dummy_indicator_visible_get_type ()) #define DUMMY_INDICATOR_VISIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), DUMMY_INDICATOR_VISIBLE_TYPE, DummyIndicatorVisible)) #define DUMMY_INDICATOR_VISIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), DUMMY_INDICATOR_VISIBLE_TYPE, DummyIndicatorVisibleClass)) #define IS_DUMMY_INDICATOR_VISIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), DUMMY_INDICATOR_VISIBLE_TYPE)) #define IS_DUMMY_INDICATOR_VISIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), DUMMY_INDICATOR_VISIBLE_TYPE)) #define DUMMY_INDICATOR_VISIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), DUMMY_INDICATOR_VISIBLE_TYPE, DummyIndicatorVisibleClass)) typedef struct _DummyIndicatorVisible DummyIndicatorVisible; typedef struct _DummyIndicatorVisibleClass DummyIndicatorVisibleClass; struct _DummyIndicatorVisibleClass { IndicatorObjectClass parent_class; }; struct _DummyIndicatorVisible { IndicatorObject parent; }; GType dummy_indicator_visible_get_type (void); INDICATOR_SET_VERSION INDICATOR_SET_TYPE(DUMMY_INDICATOR_VISIBLE_TYPE) GtkLabel * get_label (IndicatorObject * io) { return GTK_LABEL(gtk_label_new("Visible Item")); } GtkImage * get_icon (IndicatorObject * io) { return GTK_IMAGE(gtk_image_new()); } GtkMenu * get_menu (IndicatorObject * io) { GtkMenu * main_menu = GTK_MENU(gtk_menu_new()); GtkWidget * loading_item = gtk_menu_item_new_with_label("Loading..."); gtk_menu_shell_append(GTK_MENU_SHELL(main_menu), loading_item); gtk_widget_show(GTK_WIDGET(loading_item)); return main_menu; } const gchar * get_accessible_desc (IndicatorObject * io) { return "Visible Item"; } static void dummy_indicator_visible_class_init (DummyIndicatorVisibleClass *klass); static void dummy_indicator_visible_init (DummyIndicatorVisible *self); static void dummy_indicator_visible_dispose (GObject *object); static void dummy_indicator_visible_finalize (GObject *object); G_DEFINE_TYPE (DummyIndicatorVisible, dummy_indicator_visible, INDICATOR_OBJECT_TYPE); static void dummy_indicator_entry_being_removed (IndicatorObject * io, IndicatorObjectEntry * entry) { IndicatorObjectClass * indicator_object_class = INDICATOR_OBJECT_CLASS (dummy_indicator_visible_parent_class); g_object_set_data(G_OBJECT(entry->label), "is-hidden", GINT_TO_POINTER(1)); if (indicator_object_class->entry_being_removed != NULL) { indicator_object_class->entry_being_removed (io, entry); } } static void dummy_indicator_entry_was_added (IndicatorObject * io, IndicatorObjectEntry * entry) { IndicatorObjectClass * indicator_object_class = INDICATOR_OBJECT_CLASS (dummy_indicator_visible_parent_class); g_object_steal_data(G_OBJECT(entry->label), "is-hidden"); if (indicator_object_class->entry_was_added != NULL) { indicator_object_class->entry_was_added (io, entry); } } static void dummy_indicator_visible_class_init (DummyIndicatorVisibleClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->dispose = dummy_indicator_visible_dispose; object_class->finalize = dummy_indicator_visible_finalize; IndicatorObjectClass * io_class = INDICATOR_OBJECT_CLASS(klass); io_class->get_label = get_label; io_class->get_image = get_icon; io_class->get_menu = get_menu; io_class->get_accessible_desc = get_accessible_desc; io_class->entry_being_removed = dummy_indicator_entry_being_removed; io_class->entry_was_added = dummy_indicator_entry_was_added; } static void dummy_indicator_visible_init (DummyIndicatorVisible *self) { } static void dummy_indicator_visible_dispose (GObject *object) { G_OBJECT_CLASS (dummy_indicator_visible_parent_class)->dispose (object); } static void dummy_indicator_visible_finalize (GObject *object) { G_OBJECT_CLASS (dummy_indicator_visible_parent_class)->finalize (object); } libayatana-indicator-0.6.2/tests/indicator-test-service.c0000644000000000000000000000655313254153536020401 0ustar #include typedef struct { GSimpleActionGroup *actions; GMenu *menu; guint actions_export_id; guint menu_export_id; } IndicatorTestService; static void bus_acquired (GDBusConnection *connection, const gchar *name, gpointer user_data) { IndicatorTestService *indicator = user_data; GError *error = NULL; indicator->actions_export_id = g_dbus_connection_export_action_group (connection, "/org/ayatana/indicator/test", G_ACTION_GROUP (indicator->actions), &error); if (indicator->actions_export_id == 0) { g_warning ("cannot export action group: %s", error->message); g_error_free (error); return; } indicator->menu_export_id = g_dbus_connection_export_menu_model (connection, "/org/ayatana/indicator/test/desktop", G_MENU_MODEL (indicator->menu), &error); if (indicator->menu_export_id == 0) { g_warning ("cannot export menu: %s", error->message); g_error_free (error); return; } } static void name_lost (GDBusConnection *connection, const gchar *name, gpointer user_data) { IndicatorTestService *indicator = user_data; if (indicator->actions_export_id) g_dbus_connection_unexport_action_group (connection, indicator->actions_export_id); if (indicator->menu_export_id) g_dbus_connection_unexport_menu_model (connection, indicator->menu_export_id); } static void activate_show (GSimpleAction *action, GVariant *parameter, gpointer user_data) { g_message ("showing"); } int main (int argc, char **argv) { IndicatorTestService indicator = { 0 }; GMenuItem *item; GMenu *submenu; GActionEntry entries[] = { { "_header", NULL, NULL, "{'label': <'Test'>," " 'icon': <'indicator-test'>," " 'accessible-desc': <'Test indicator'> }", NULL }, { "show", activate_show, NULL, NULL, NULL } }; GMainLoop *loop; indicator.actions = g_simple_action_group_new (); g_simple_action_group_add_entries (indicator.actions, entries, G_N_ELEMENTS (entries), NULL); submenu = g_menu_new (); g_menu_append (submenu, "Show", "indicator.show"); item = g_menu_item_new (NULL, "indicator._header"); g_menu_item_set_attribute (item, "x-canonical-type", "s", "org.ayatana.indicator.root"); g_menu_item_set_submenu (item, G_MENU_MODEL (submenu)); indicator.menu = g_menu_new (); g_menu_append_item (indicator.menu, item); g_bus_own_name (G_BUS_TYPE_SESSION, "org.ayatana.indicator.test", G_BUS_NAME_OWNER_FLAGS_NONE, bus_acquired, NULL, name_lost, &indicator, NULL); loop = g_main_loop_new (NULL, FALSE); g_main_loop_run (loop); g_object_unref (submenu); g_object_unref (item); g_object_unref (indicator.actions); g_object_unref (indicator.menu); g_object_unref (loop); return 0; } libayatana-indicator-0.6.2/tests/Makefile.am0000644000000000000000000003427013254153536015677 0ustar if USE_GTK3 INDICATOR_LIB = -layatana-indicator3 else INDICATOR_LIB = -layatana-indicator endif TESTS = DISTCLEANFILES = XFAIL_TESTS = check_PROGRAMS = lib_LTLIBRARIES = \ libdummy-indicator-blank.la \ libdummy-indicator-null.la \ libdummy-indicator-signaler.la \ libdummy-indicator-simple.la \ libdummy-indicator-visible.la \ libdummy-indicator-entry-func.la DBUS_RUNNER=dbus-test-runner --dbus-config /usr/share/dbus-test-runner/session.conf XVFB_RUN=". $(srcdir)/run-xvfb.sh" EXTRA_DIST = \ run-xvfb.sh \ session.conf.in \ service-manager-connect.service.in \ service-version-bad.service.in \ service-version-good.service.in \ org.ayatana.indicator.test.service.in ############################# # Test Loader ############################# check_PROGRAMS += test-loader test_loader_SOURCES = \ test-loader.c test_loader_CFLAGS = \ -Wall -Werror \ $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) \ -DBUILD_DIR="\"$(builddir)\"" test_loader_LDADD = \ $(LIBINDICATOR_LIBS) \ -L$(top_builddir)/libayatana-indicator/.libs \ $(INDICATOR_LIB) ############################# # Test Desktop Shortcuts ############################# check_PROGRAMS += test-desktop-shortcuts test_desktop_shortcuts_SOURCES = \ test-desktop-shortcuts.c test_desktop_shortcuts_CFLAGS = \ -Wall -Werror \ -DSRCDIR="\"$(srcdir)\"" \ $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) \ -DBUILD_DIR="\"$(abs_builddir)\"" test_desktop_shortcuts_LDADD = \ $(LIBINDICATOR_LIBS) \ -L$(top_builddir)/libayatana-indicator/.libs \ $(INDICATOR_LIB) DS_XML_REPORT = desktop-shortcuts-check-results.xml DS_HTML_REPORT = desktop-shortcuts-check-results.html test-desktop-shortcuts-tester: test-desktop-shortcuts Makefile.am @echo "#!/bin/bash" > $@ @echo $(XVFB_RUN) >> $@ @echo gtester -k --verbose -o=$(XML_REPORT) ./test-desktop-shortcuts >> $@ @chmod +x $@ TESTS += test-desktop-shortcuts-tester DISTCLEANFILES += test-desktop-shortcuts-tester \ test-desktop-shortcuts-touch-test \ $(DS_XML_REPORT) \ $(DS_HTML_REPORT) EXTRA_DIST += test-well-formed.desktop ############################# # Dummy Indicator Blank ############################# libdummy_indicator_blank_la_SOURCES = \ dummy-indicator-blank.c libdummy_indicator_blank_la_CFLAGS = \ -Wall -Werror \ $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) libdummy_indicator_blank_la_LIBADD = \ $(LIBINDICATOR_LIBS) \ -L$(top_builddir)/libayatana-indicator/.libs \ $(INDICATOR_LIB) libdummy_indicator_blank_la_LDFLAGS = \ -module \ -avoid-version ############################# # Dummy Indicator NULL ############################# libdummy_indicator_null_la_SOURCES = \ dummy-indicator-null.c libdummy_indicator_null_la_CFLAGS = \ -Wall -Werror \ $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) libdummy_indicator_null_la_LIBADD = \ $(LIBINDICATOR_LIBS) \ -L$(top_builddir)/libayatana-indicator/.libs \ $(INDICATOR_LIB) libdummy_indicator_null_la_LDFLAGS = \ -module \ -avoid-version ############################# # Dummy Indicator Signaler ############################# libdummy_indicator_signaler_la_SOURCES = \ dummy-indicator-signaler.c libdummy_indicator_signaler_la_CFLAGS = \ -Wall -Werror \ $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) libdummy_indicator_signaler_la_LIBADD = \ $(LIBINDICATOR_LIBS) \ -L$(top_builddir)/libayatana-indicator/.libs \ $(INDICATOR_LIB) libdummy_indicator_signaler_la_LDFLAGS = \ -module \ -avoid-version ############################# # Dummy Indicator Simple ############################# libdummy_indicator_simple_la_SOURCES = \ dummy-indicator-simple.c libdummy_indicator_simple_la_CFLAGS = \ -Wall -Werror \ $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) libdummy_indicator_simple_la_LIBADD = \ $(LIBINDICATOR_LIBS) \ -L$(top_builddir)/libayatana-indicator/.libs \ $(INDICATOR_LIB) libdummy_indicator_simple_la_LDFLAGS = \ -module \ -avoid-version ############################# # Dummy Indicator Entry Func ############################# libdummy_indicator_entry_func_la_SOURCES = \ dummy-indicator-entry-func.c \ dummy-indicator-entry-func.h libdummy_indicator_entry_func_la_CFLAGS = \ -Wall -Werror \ $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) libdummy_indicator_entry_func_la_LIBADD = \ $(LIBINDICATOR_LIBS) \ -L$(top_builddir)/libayatana-indicator/.libs \ $(INDICATOR_LIB) libdummy_indicator_entry_func_la_LDFLAGS = \ -module \ -avoid-version ############################# # Dummy Indicator Visible ############################# libdummy_indicator_visible_la_SOURCES = \ dummy-indicator-visible.c libdummy_indicator_visible_la_CFLAGS = \ -Wall -Werror \ $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) libdummy_indicator_visible_la_LIBADD = \ $(LIBINDICATOR_LIBS) \ -L$(top_builddir)/libayatana-indicator/.libs \ $(INDICATOR_LIB) libdummy_indicator_visible_la_LDFLAGS = \ -module \ -avoid-version ############################# # Service Shutdown Timeout ############################# check_PROGRAMS += service-shutdown-timeout service_shutdown_timeout_SOURCES = \ service-shutdown-timeout.c service_shutdown_timeout_CFLAGS = \ -Wall -Werror \ $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) service_shutdown_timeout_LDADD = \ $(LIBINDICATOR_LIBS) \ -L$(top_builddir)/libayatana-indicator/.libs \ $(INDICATOR_LIB) service-shutdown-timeout-tester: service-shutdown-timeout Makefile @echo "#!/bin/sh" > service-shutdown-timeout-tester @echo $(DBUS_RUNNER) --task ./service-shutdown-timeout >> service-shutdown-timeout-tester @chmod +x service-shutdown-timeout-tester TESTS += service-shutdown-timeout-tester DISTCLEANFILES += service-shutdown-timeout-tester ############################# # Service Manager No Connect ############################# check_PROGRAMS += service-manager-no-connect service_manager_no_connect_SOURCES = \ service-manager-no-connect.c service_manager_no_connect_CFLAGS = \ -Wall -Werror \ $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) service_manager_no_connect_LDADD = \ $(LIBINDICATOR_LIBS) \ -L$(top_builddir)/libayatana-indicator/.libs \ $(INDICATOR_LIB) service-manager-no-connect-tester: service-manager-no-connect Makefile.am @echo "#!/bin/sh" > service-manager-no-connect-tester @echo $(DBUS_RUNNER) --task ./service-manager-no-connect >> service-manager-no-connect-tester @chmod +x service-manager-no-connect-tester TESTS += service-manager-no-connect-tester DISTCLEANFILES += service-manager-no-connect-tester ############################# # Service Manager Connect ############################# session.conf: $(srcdir)/session.conf.in Makefile.am sed -e "s|\@servicedir\@|$(abs_builddir)|" $< > $@ service-manager-connect.service: $(srcdir)/service-manager-connect.service.in Makefile.am sed -e "s|\@builddir\@|$(abs_builddir)|" $< > $@ check_PROGRAMS += service-manager-connect service_manager_connect_SOURCES = \ service-manager-connect.c service_manager_connect_CFLAGS = \ -Wall -Werror \ $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) service_manager_connect_LDADD = \ $(LIBINDICATOR_LIBS) \ -L$(top_builddir)/libayatana-indicator/.libs \ $(INDICATOR_LIB) check_PROGRAMS += service-manager-connect-service service_manager_connect_service_SOURCES = \ service-manager-connect-service.c service_manager_connect_service_CFLAGS = \ -Wall -Werror \ $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) service_manager_connect_service_LDADD = \ $(LIBINDICATOR_LIBS) \ -L$(top_builddir)/libayatana-indicator/.libs \ $(INDICATOR_LIB) service-manager-connect-tester: service-manager-connect service-manager-connect-service session.conf service-manager-connect.service Makefile.am @echo "#!/bin/sh" > service-manager-connect-tester @echo dbus-test-runner --dbus-config $(builddir)/session.conf --task ./service-manager-connect >> service-manager-connect-tester @chmod +x service-manager-connect-tester TESTS += service-manager-connect-tester DISTCLEANFILES += service-manager-connect-tester session.conf service-manager-connect.service ############################# # Service Versions ############################# service-version-good.service: $(srcdir)/service-version-good.service.in Makefile.am sed -e "s|\@builddir\@|$(abs_builddir)|" $< > $@ service-version-bad.service: $(srcdir)/service-version-bad.service.in Makefile.am sed -e "s|\@builddir\@|$(abs_builddir)|" $< > $@ check_PROGRAMS += service-version-manager service_version_manager_SOURCES = \ service-version-values.h \ service-version-manager.c service_version_manager_CFLAGS = \ -Wall -Werror \ $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) service_version_manager_LDADD = \ $(LIBINDICATOR_LIBS) \ -L$(top_builddir)/libayatana-indicator/.libs \ $(INDICATOR_LIB) check_PROGRAMS += service-version-bad-service service_version_bad_service_SOURCES = \ service-version-values.h \ service-version-bad-service.c service_version_bad_service_CFLAGS = \ -Wall -Werror \ $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) service_version_bad_service_LDADD = \ $(LIBINDICATOR_LIBS) \ -L$(top_builddir)/libayatana-indicator/.libs \ $(INDICATOR_LIB) check_PROGRAMS += service-version-good-service service_version_good_service_SOURCES = \ service-version-values.h \ service-version-good-service.c service_version_good_service_CFLAGS = \ -Wall -Werror \ $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) service_version_good_service_LDADD = \ $(LIBINDICATOR_LIBS) \ -L$(top_builddir)/libayatana-indicator/.libs \ $(INDICATOR_LIB) service-version-tester: service-version-manager service-version-bad-service service-version-good-service session.conf service-version-bad.service service-version-good.service Makefile.am @echo "#!/bin/sh" > $@ @echo dbus-test-runner --dbus-config $(builddir)/session.conf --task ./service-version-manager >> $@ @chmod +x $@ TESTS += service-version-tester DISTCLEANFILES += service-version-tester service-version-bad.service service-version-good.service ############################# # Service Versions ############################# check_PROGRAMS += service-version-multiwatch-manager service_version_multiwatch_manager_SOURCES = \ service-version-values.h \ service-version-multiwatch-manager.c service_version_multiwatch_manager_CFLAGS = \ -Wall -Werror \ $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) service_version_multiwatch_manager_LDADD = \ $(LIBINDICATOR_LIBS) \ -L$(top_builddir)/libayatana-indicator/.libs \ $(INDICATOR_LIB) check_PROGRAMS += service-version-multiwatch-manager-impolite service_version_multiwatch_manager_impolite_SOURCES = \ service-version-values.h \ service-version-multiwatch-manager-impolite.c service_version_multiwatch_manager_impolite_CFLAGS = \ -Wall -Werror \ $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) service_version_multiwatch_manager_impolite_LDADD = \ $(LIBINDICATOR_LIBS) \ -L$(top_builddir)/libayatana-indicator/.libs \ $(INDICATOR_LIB) check_PROGRAMS += service-version-multiwatch-service service_version_multiwatch_service_SOURCES = \ service-version-values.h \ service-version-multiwatch-service.c service_version_multiwatch_service_CFLAGS = \ -Wall -Werror \ $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) service_version_multiwatch_service_LDADD = \ $(LIBINDICATOR_LIBS) \ -L$(top_builddir)/libayatana-indicator/.libs \ $(INDICATOR_LIB) service-version-multiwatch-tester: service-version-multiwatch-manager service-version-multiwatch-service service-version-multiwatch-manager-impolite Makefile.am @echo "#!/bin/sh" > $@ @echo dbus-test-runner --task ./service-version-multiwatch-service --task-name Service --task ./service-version-multiwatch-manager --task-name Manager1 --task ./service-version-multiwatch-manager --task-name Manager2 --task ./service-version-multiwatch-manager --task-name Manager3 --task ./service-version-multiwatch-manager --task-name Manager4 --task ./service-version-multiwatch-manager --task-name Manager5 --task ./service-version-multiwatch-manager-impolite --task-name Impolite1 --task ./service-version-multiwatch-manager-impolite --task-name Impolite2 --task ./service-version-multiwatch-manager-impolite --task-name Impolite3 >> $@ @chmod +x $@ TESTS += service-version-multiwatch-tester DISTCLEANFILES += service-version-multiwatch-tester ############################# # Service Manager Shutdown ############################# check_PROGRAMS += service-manager-nostart-connect service_manager_nostart_connect_SOURCES = \ service-manager-nostart-connect.c service_manager_nostart_connect_CFLAGS = \ -Wall -Werror \ $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) service_manager_nostart_connect_LDADD = \ $(LIBINDICATOR_LIBS) \ -L$(top_builddir)/libayatana-indicator/.libs \ $(INDICATOR_LIB) service-manager-connect-nostart-tester: service-manager-nostart-connect service-manager-connect-service Makefile.am @echo "#!/bin/sh" > $@ @echo dbus-test-runner --task ./service-manager-nostart-connect --task ./service-manager-connect-service >> $@ @chmod +x $@ TESTS += service-manager-connect-nostart-tester DISTCLEANFILES += service-manager-connect-nostart-tester ############################# # Test stuff ############################# XML_REPORT = loader-check-results.xml HTML_REPORT = loader-check-results.html loader-tester: test-loader libdummy-indicator-null.la libdummy-indicator-simple.la libdummy-indicator-entry-func.la Makefile @echo "#!/bin/bash" > loader-tester @echo $(XVFB_RUN) >> $@ @echo gtester -k --verbose -o=$(XML_REPORT) ./test-loader >> loader-tester @chmod +x loader-tester TESTS += loader-tester DISTCLEANFILES += loader-tester DISTCLEANFILES += $(XML_REPORT) $(HTML_REPORT) ############################# # Indicator-ng ############################# if USE_GTK3 org.ayatana.indicator.test.service: org.ayatana.indicator.test.service.in Makefile.am sed -e "s|\@builddir\@|$(abs_builddir)|" $< > $@ check_PROGRAMS += test-indicator-ng test_indicator_ng_SOURCES = test-indicator-ng.c test_indicator_ng_CFLAGS = \ $(LIBINDICATOR_CFLAGS) \ -I$(top_srcdir) \ -DSRCDIR="\"$(srcdir)\"" \ -DBUILD_DIR="\"$(abs_builddir)\"" \ -Wall test_indicator_ng_LDADD = \ $(LIBINDICATOR_LIBS) \ -L$(top_builddir)/libayatana-indicator/.libs \ $(INDICATOR_LIB) TESTS += test-indicator-ng DISTCLEANFILES += test-indicator-ng # Mock indicator service check_PROGRAMS += indicator-test-service indicator_test_service_SOURCES = indicator-test-service.c indicator_test_service_CFLAGS = $(LIBINDICATOR_CFLAGS) indicator_test_service_LDADD = $(LIBINDICATOR_LIBS) EXTRA_indicator_test_service_DEPENDENCIES = org.ayatana.indicator.test.service DISTCLEANFILES += indicator-test-service org.ayatana.indicator.test.service endif libayatana-indicator-0.6.2/tests/org.ayatana.indicator.no-such-service0000644000000000000000000000011713254153536022747 0ustar [Indicator Service] Name=indicator-test ObjectPath=/org/ayatana/indicator/test libayatana-indicator-0.6.2/tests/org.ayatana.indicator.test0000644000000000000000000000021113254153536020707 0ustar [Indicator Service] Name=indicator-test ObjectPath=/org/ayatana/indicator/test [desktop] ObjectPath=/org/ayatana/indicator/test/desktop libayatana-indicator-0.6.2/tests/org.ayatana.indicator.test.service.in0000644000000000000000000000012713254153536022761 0ustar [D-BUS Service] Name=org.ayatana.indicator.test Exec=@builddir@/indicator-test-service libayatana-indicator-0.6.2/tests/run-xvfb.sh0000644000000000000000000000161413254153536015742 0ustar if [ "$DISPLAY" == "" ]; then Xvfb -ac -noreset -screen 0 800x600x16 -help 2>/dev/null 1>&2 XID=`for id in 101 102 103 104 105 106 107 197 199 211 223 227 293 307 308 309 310 311 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 4703 4721 4723 4729 4733 4751 9973 9974 9975 9976 9977 9978 9979 9980 9981 9982 9983 9984 9985 9986 9987 9988 9989 9990 9991 9992 9993 9994 9995 9996 9997 9998 9999 ; do test -e /tmp/.X$id-lock || { echo $id; exit 0; }; done; exit 1` { Xvfb -ac -noreset -screen 0 800x600x16 :$XID -screen 0 800x600x16 -nolisten tcp -auth /dev/null >/dev/null 2>&1 & trap "kill -15 $! " 0 HUP INT QUIT TRAP USR1 PIPE TERM ; } || { echo "Gtk+Tests:ERROR: Failed to start Xvfb environment for X11 target tests."; exit 1; } DISPLAY=:$XID export DISPLAY echo Setting display: $DISPLAY fi libayatana-indicator-0.6.2/tests/service-manager-connect.c0000644000000000000000000000354013254153536020502 0ustar /* Test for libindicator Copyright 2009 Canonical Ltd. Authors: Ted Gould This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version 3.0 for more details. You should have received a copy of the GNU General Public License along with this library. If not, see . */ #include #include "libindicator/indicator-service-manager.h" static GMainLoop * mainloop = NULL; static gboolean passed = FALSE; gboolean timeout (gpointer data) { passed = FALSE; g_error("Timeout with no connection."); g_main_loop_quit(mainloop); return FALSE; } void connection (IndicatorServiceManager * sm, gboolean connected, gpointer user_data) { static gboolean has_connected = FALSE; if (has_connected && connected) { g_warning("We got two connected signals. FAIL."); passed = FALSE; return; } if (!connected) { g_debug("Not connected"); return; } has_connected = TRUE; g_debug("Connection"); passed = TRUE; g_main_loop_quit(mainloop); return; } int main (int argc, char ** argv) { g_log_set_always_fatal(G_LOG_LEVEL_CRITICAL); IndicatorServiceManager * is = indicator_service_manager_new("org.ayatana.test"); g_signal_connect(G_OBJECT(is), INDICATOR_SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE, G_CALLBACK(connection), NULL); g_timeout_add_seconds(1, timeout, NULL); mainloop = g_main_loop_new(NULL, FALSE); g_main_loop_run(mainloop); g_object_unref(is); g_debug("Quiting"); if (passed) { g_debug("Passed"); return 0; } g_debug("Failed"); return 1; } libayatana-indicator-0.6.2/tests/service-manager-connect-service.c0000644000000000000000000000271013254153536022136 0ustar /* Test for libindicator Copyright 2009 Canonical Ltd. Authors: Ted Gould This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version 3.0 for more details. You should have received a copy of the GNU General Public License along with this library. If not, see . */ #include #include "libindicator/indicator-service.h" static GMainLoop * mainloop = NULL; static gboolean passed = FALSE; gboolean timeout (gpointer data) { passed = FALSE; g_debug("Timeout with no shutdown."); g_main_loop_quit(mainloop); return FALSE; } void shutdown (void) { g_debug("Shutdown"); passed = TRUE; g_main_loop_quit(mainloop); return; } int main (int argc, char ** argv) { g_debug("Starting service"); IndicatorService * is = indicator_service_new("org.ayatana.test"); g_signal_connect(G_OBJECT(is), INDICATOR_SERVICE_SIGNAL_SHUTDOWN, shutdown, NULL); g_timeout_add_seconds(5, timeout, NULL); mainloop = g_main_loop_new(NULL, FALSE); g_main_loop_run(mainloop); g_debug("Quiting"); if (passed) { g_debug("Passed"); return 0; } g_debug("Failed"); return 1; } libayatana-indicator-0.6.2/tests/service-manager-connect.service.in0000644000000000000000000000012613254153536022322 0ustar [D-BUS Service] Name=org.ayatana.test Exec=@builddir@/service-manager-connect-service libayatana-indicator-0.6.2/tests/service-manager-no-connect.c0000644000000000000000000000300513254153536021110 0ustar /* Test for libindicator Copyright 2009 Canonical Ltd. Authors: Ted Gould This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version 3.0 for more details. You should have received a copy of the GNU General Public License along with this library. If not, see . */ #include #include "libindicator/indicator-service-manager.h" static GMainLoop * mainloop = NULL; static gboolean passed = FALSE; gboolean timeout (gpointer data) { passed = TRUE; g_debug("Timeout with no connection."); g_main_loop_quit(mainloop); return FALSE; } void connection (void) { g_debug("Connection"); passed = FALSE; g_main_loop_quit(mainloop); return; } int main (int argc, char ** argv) { g_log_set_always_fatal(G_LOG_LEVEL_CRITICAL); IndicatorServiceManager * is = indicator_service_manager_new("my.test.name"); g_signal_connect(G_OBJECT(is), INDICATOR_SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE, connection, NULL); g_timeout_add_seconds(1, timeout, NULL); mainloop = g_main_loop_new(NULL, FALSE); g_main_loop_run(mainloop); g_debug("Quiting"); if (passed) { g_debug("Passed"); return 0; } g_debug("Failed"); return 1; } libayatana-indicator-0.6.2/tests/service-manager-nostart-connect.c0000644000000000000000000000356413254153536022200 0ustar /* Test for libindicator Copyright 2009 Canonical Ltd. Authors: Ted Gould This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version 3.0 for more details. You should have received a copy of the GNU General Public License along with this library. If not, see . */ #include #include "libindicator/indicator-service-manager.h" static GMainLoop * mainloop = NULL; static gboolean passed = FALSE; gboolean timeout (gpointer data) { passed = FALSE; g_error("Timeout with no connection."); g_main_loop_quit(mainloop); return FALSE; } void connection (IndicatorServiceManager * sm, gboolean connected, gpointer user_data) { static gboolean has_connected = FALSE; if (has_connected && connected) { g_warning("We got two connected signals. FAIL."); passed = FALSE; return; } if (!connected) { g_debug("Not connected"); return; } has_connected = TRUE; g_debug("Connection"); passed = TRUE; g_main_loop_quit(mainloop); return; } int main (int argc, char ** argv) { g_log_set_always_fatal(G_LOG_LEVEL_CRITICAL); g_usleep(150000); IndicatorServiceManager * is = indicator_service_manager_new("org.ayatana.test"); g_signal_connect(G_OBJECT(is), INDICATOR_SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE, G_CALLBACK(connection), NULL); g_timeout_add_seconds(1, timeout, NULL); mainloop = g_main_loop_new(NULL, FALSE); g_main_loop_run(mainloop); g_object_unref(is); g_debug("Quiting"); if (passed) { g_debug("Passed"); return 0; } g_debug("Failed"); return 1; } libayatana-indicator-0.6.2/tests/service-shutdown-timeout.c0000644000000000000000000000264513254153536021005 0ustar /* Test for libindicator Copyright 2009 Canonical Ltd. Authors: Ted Gould This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version 3.0 for more details. You should have received a copy of the GNU General Public License along with this library. If not, see . */ #include #include "libindicator/indicator-service.h" static GMainLoop * mainloop = NULL; static gboolean passed = FALSE; gboolean timeout (gpointer data) { passed = FALSE; g_error("Timeout with no shutdown."); g_main_loop_quit(mainloop); return FALSE; } void shutdown (void) { g_debug("Shutdown"); passed = TRUE; g_main_loop_quit(mainloop); return; } int main (int argc, char ** argv) { IndicatorService * is = indicator_service_new("my.test.name"); g_signal_connect(G_OBJECT(is), INDICATOR_SERVICE_SIGNAL_SHUTDOWN, shutdown, NULL); g_timeout_add_seconds(2, timeout, NULL); mainloop = g_main_loop_new(NULL, FALSE); g_main_loop_run(mainloop); g_debug("Quiting"); if (passed) { g_debug("Passed"); return 0; } g_debug("Failed"); return 1; } libayatana-indicator-0.6.2/tests/service-version-bad-service.c0000644000000000000000000000276113254153536021314 0ustar /* Test for libindicator Copyright 2009 Canonical Ltd. Authors: Ted Gould This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version 3.0 for more details. You should have received a copy of the GNU General Public License along with this library. If not, see . */ #include #include "libindicator/indicator-service.h" #include "service-version-values.h" static GMainLoop * mainloop = NULL; static gboolean passed = FALSE; gboolean timeout (gpointer data) { passed = FALSE; g_debug("Timeout with no shutdown."); g_main_loop_quit(mainloop); return FALSE; } void shutdown (void) { g_debug("Shutdown"); passed = TRUE; g_main_loop_quit(mainloop); return; } int main (int argc, char ** argv) { IndicatorService * is = indicator_service_new_version("org.ayatana.version.bad", SERVICE_VERSION_BAD); g_signal_connect(G_OBJECT(is), INDICATOR_SERVICE_SIGNAL_SHUTDOWN, shutdown, NULL); g_timeout_add_seconds(1, timeout, NULL); mainloop = g_main_loop_new(NULL, FALSE); g_main_loop_run(mainloop); g_debug("Quiting"); if (passed) { g_debug("Passed"); return 0; } g_debug("Failed"); return 1; } libayatana-indicator-0.6.2/tests/service-version-bad.service.in0000644000000000000000000000013113254153536021466 0ustar [D-BUS Service] Name=org.ayatana.version.bad Exec=@builddir@/service-version-bad-service libayatana-indicator-0.6.2/tests/service-version-good-service.c0000644000000000000000000000317313254153536021514 0ustar /* Test for libindicator Copyright 2009 Canonical Ltd. Authors: Ted Gould This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version 3.0 for more details. You should have received a copy of the GNU General Public License along with this library. If not, see . */ #include #include "libindicator/indicator-service.h" #include "service-version-values.h" static GMainLoop * mainloop = NULL; static gboolean passed = FALSE; static IndicatorService * is = NULL; gboolean timeout (gpointer data) { passed = FALSE; g_debug("Timeout with no shutdown."); if (is != NULL) { g_object_unref(is); is = NULL; } g_main_loop_quit(mainloop); return FALSE; } void shutdown (void) { g_debug("Shutdown"); passed = TRUE; if (is != NULL) { g_object_unref(is); is = NULL; } g_main_loop_quit(mainloop); return; } int main (int argc, char ** argv) { is = indicator_service_new_version("org.ayatana.version.good", SERVICE_VERSION_GOOD); g_signal_connect(G_OBJECT(is), INDICATOR_SERVICE_SIGNAL_SHUTDOWN, shutdown, NULL); g_timeout_add_seconds(1, timeout, NULL); mainloop = g_main_loop_new(NULL, FALSE); g_main_loop_run(mainloop); g_debug("Quiting"); if (passed) { g_debug("Passed"); return 0; } g_debug("Failed"); return 1; } libayatana-indicator-0.6.2/tests/service-version-good.service.in0000644000000000000000000000013313254153536021672 0ustar [D-BUS Service] Name=org.ayatana.version.good Exec=@builddir@/service-version-good-service libayatana-indicator-0.6.2/tests/service-version-manager.c0000644000000000000000000000440013254153536020532 0ustar /* Test for libindicator Copyright 2009 Canonical Ltd. Authors: Ted Gould This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version 3.0 for more details. You should have received a copy of the GNU General Public License along with this library. If not, see . */ #include #include "libindicator/indicator-service-manager.h" #include "service-version-values.h" static GMainLoop * mainloop = NULL; static gboolean con_good = FALSE; static gboolean con_bad = FALSE; gboolean timeout (gpointer data) { g_debug("Timeout."); g_main_loop_quit(mainloop); return FALSE; } void connection_bad (IndicatorServiceManager * sm, gboolean connected, gpointer user_data) { if (!connected) return; g_debug("Connection From Bad!"); con_bad = TRUE; return; } void connection_good (IndicatorServiceManager * sm, gboolean connected, gpointer user_data) { if (!connected) return; g_debug("Connection From Good."); con_good = TRUE; return; } int main (int argc, char ** argv) { g_log_set_always_fatal(G_LOG_LEVEL_CRITICAL); g_print("Manager: DBUS_SESSION_BUS_ADDRESS = %s\n", g_getenv("DBUS_SESSION_BUS_ADDRESS")); IndicatorServiceManager * goodis = indicator_service_manager_new_version("org.ayatana.version.good", SERVICE_VERSION_GOOD); g_signal_connect(G_OBJECT(goodis), INDICATOR_SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE, G_CALLBACK(connection_good), NULL); IndicatorServiceManager * badis = indicator_service_manager_new_version("org.ayatana.version.bad", SERVICE_VERSION_GOOD); g_signal_connect(G_OBJECT(badis), INDICATOR_SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE, G_CALLBACK(connection_bad), NULL); g_timeout_add_seconds(1, timeout, NULL); mainloop = g_main_loop_new(NULL, FALSE); g_main_loop_run(mainloop); g_object_unref(goodis); g_object_unref(badis); g_debug("Quiting"); if (con_good && !con_bad) { g_debug("Passed"); return 0; } g_debug("Failed"); return 1; } libayatana-indicator-0.6.2/tests/service-version-multiwatch-manager.c0000644000000000000000000000372213254153536022717 0ustar /* Test for libindicator Copyright 2009 Canonical Ltd. Authors: Ted Gould This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version 3.0 for more details. You should have received a copy of the GNU General Public License along with this library. If not, see . */ #include #include "libindicator/indicator-service-manager.h" #include "service-version-values.h" static GMainLoop * mainloop = NULL; static gboolean passed = FALSE; static IndicatorServiceManager * goodis = NULL; gboolean timeout (gpointer data) { g_debug("Timeout."); passed = FALSE; g_main_loop_quit(mainloop); return FALSE; } void connection_good (IndicatorServiceManager * sm, gboolean connected, gpointer user_data) { if (!connected) return; g_debug("Connection From Service."); passed = TRUE; g_main_loop_quit(mainloop); return; } gboolean delay_start (gpointer data) { g_debug("Starting Manager"); goodis = indicator_service_manager_new_version("org.ayatana.version.good", SERVICE_VERSION_GOOD); g_signal_connect(G_OBJECT(goodis), INDICATOR_SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE, G_CALLBACK(connection_good), NULL); g_timeout_add_seconds(1, timeout, NULL); return FALSE; } int main (int argc, char ** argv) { g_log_set_always_fatal(G_LOG_LEVEL_CRITICAL); g_print("Manager: DBUS_SESSION_BUS_ADDRESS = %s\n", g_getenv("DBUS_SESSION_BUS_ADDRESS")); g_timeout_add(500, delay_start, NULL); mainloop = g_main_loop_new(NULL, FALSE); g_main_loop_run(mainloop); g_object_unref(goodis); g_debug("Quiting"); if (passed) { g_debug("Passed"); return 0; } g_debug("Failed"); return 1; } libayatana-indicator-0.6.2/tests/service-version-multiwatch-manager-impolite.c0000644000000000000000000000367013254153536024541 0ustar /* Test for libindicator Copyright 2009 Canonical Ltd. Authors: Ted Gould This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version 3.0 for more details. You should have received a copy of the GNU General Public License along with this library. If not, see . */ #include #include "libindicator/indicator-service-manager.h" #include "service-version-values.h" static GMainLoop * mainloop = NULL; static gboolean passed = FALSE; static IndicatorServiceManager * goodis = NULL; gboolean timeout (gpointer data) { g_debug("Timeout."); passed = FALSE; g_main_loop_quit(mainloop); return FALSE; } void connection_good (IndicatorServiceManager * sm, gboolean connected, gpointer user_data) { if (!connected) return; g_debug("Connection From Service."); passed = TRUE; g_main_loop_quit(mainloop); return; } gboolean delay_start (gpointer data) { g_debug("Starting Manager"); goodis = indicator_service_manager_new_version("org.ayatana.version.good", SERVICE_VERSION_GOOD); g_signal_connect(G_OBJECT(goodis), INDICATOR_SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE, G_CALLBACK(connection_good), NULL); g_timeout_add_seconds(1, timeout, NULL); return FALSE; } int main (int argc, char ** argv) { g_log_set_always_fatal(G_LOG_LEVEL_CRITICAL); g_print("Manager: DBUS_SESSION_BUS_ADDRESS = %s\n", g_getenv("DBUS_SESSION_BUS_ADDRESS")); g_timeout_add(500, delay_start, NULL); mainloop = g_main_loop_new(NULL, FALSE); g_main_loop_run(mainloop); g_debug("Quiting"); if (passed) { g_debug("Passed"); return 0; } g_debug("Failed"); return 1; } libayatana-indicator-0.6.2/tests/service-version-multiwatch-service.c0000644000000000000000000000302213254153536022736 0ustar /* Test for libindicator Copyright 2009 Canonical Ltd. Authors: Ted Gould This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version 3.0 for more details. You should have received a copy of the GNU General Public License along with this library. If not, see . */ #include #include "libindicator/indicator-service.h" #include "service-version-values.h" static GMainLoop * mainloop = NULL; static gboolean passed = FALSE; gboolean timeout (gpointer data) { passed = FALSE; g_debug("Timeout with no shutdown."); g_main_loop_quit(mainloop); return FALSE; } void shutdown (void) { g_debug("Shutdown"); passed = TRUE; g_main_loop_quit(mainloop); return; } int main (int argc, char ** argv) { g_debug("Service starting"); IndicatorService * is = indicator_service_new_version("org.ayatana.version.good", SERVICE_VERSION_GOOD); g_signal_connect(G_OBJECT(is), INDICATOR_SERVICE_SIGNAL_SHUTDOWN, shutdown, NULL); g_timeout_add_seconds(2, timeout, NULL); mainloop = g_main_loop_new(NULL, FALSE); g_main_loop_run(mainloop); g_debug("Quiting"); if (passed) { g_debug("Passed"); return 0; } g_debug("Failed"); return 1; } libayatana-indicator-0.6.2/tests/service-version-values.h0000644000000000000000000000134513254153536020431 0ustar /* Test for libindicator Copyright 2009 Canonical Ltd. Authors: Ted Gould This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version 3.0 for more details. You should have received a copy of the GNU General Public License along with this library. If not, see . */ #define SERVICE_VERSION_GOOD 1342 #define SERVICE_VERSION_BAD 543 libayatana-indicator-0.6.2/tests/session.conf.in0000644000000000000000000000316213254153536016576 0ustar session unix:tmpdir=/tmp @servicedir@ 60000 1000000000 1000000000 1000000000 120000 240000 100000 10000 100000 10000 50000 50000 50000 300000 libayatana-indicator-0.6.2/tests/test-desktop-shortcuts.c0000644000000000000000000001007413254153536020465 0ustar /* Test for libindicator Copyright 2009 Canonical Ltd. Authors: Ted Gould This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version 3.0 for more details. You should have received a copy of the GNU General Public License along with this library. If not, see . */ #include #include "libindicator/indicator-desktop-shortcuts.h" /* Basic object creation and destruction. Stop big f*** ups here. */ void test_desktop_shortcuts_creation (void) { IndicatorDesktopShortcuts * ids = indicator_desktop_shortcuts_new(SRCDIR "/test-well-formed.desktop", "France"); g_assert(ids != NULL); g_object_add_weak_pointer(G_OBJECT(ids), (gpointer *)&ids); g_object_unref(G_OBJECT(ids)); g_assert(ids == NULL); return; } /* Tests that the NotShowIn the desktop group is watched for */ void test_desktop_shortcuts_globalnoshow (void) { IndicatorDesktopShortcuts * ids = indicator_desktop_shortcuts_new(SRCDIR "/test-well-formed.desktop", "Germany"); g_assert(ids != NULL); const gchar ** nicks = indicator_desktop_shortcuts_get_nicks(ids); g_assert(nicks[0] == NULL); g_object_unref(ids); return; } gboolean nicks_contains (const gchar ** nicks, const gchar * search) { if (nicks[0] == NULL) return FALSE; if (g_strcmp0(nicks[0], search) == 0) return TRUE; return nicks_contains(&nicks[1], search); } /* Checking that the local show OnlyIn works. */ void test_desktop_shortcuts_localfilter (void) { IndicatorDesktopShortcuts * ids = indicator_desktop_shortcuts_new(SRCDIR "/test-well-formed.desktop", "France"); g_assert(ids != NULL); const gchar ** nicks = indicator_desktop_shortcuts_get_nicks(ids); g_assert(nicks_contains(nicks, "bob")); g_assert(nicks_contains(nicks, "alvin")); g_assert(!nicks_contains(nicks, "jim")); g_object_unref(ids); return; } /* Nick names -- checks to see they all have names */ void test_desktop_shortcuts_nicknames (void) { IndicatorDesktopShortcuts * ids = indicator_desktop_shortcuts_new(SRCDIR "/test-well-formed.desktop", "France"); g_assert(ids != NULL); const gchar ** nicks = indicator_desktop_shortcuts_get_nicks(ids); gint i = 0; while (nicks[i] != NULL) { gchar * expectedstr = g_strdup_printf("%s's shortcut", nicks[i]); gchar * name = indicator_desktop_shortcuts_nick_get_name(ids, nicks[i]); g_assert(name != NULL); gboolean same = (g_strcmp0(expectedstr, name) == 0); g_free(name); g_free(expectedstr); g_assert(same); i++; } g_object_unref(ids); return; } /* Try executing a shortcut which will touch a file */ void test_desktop_shortcuts_launch (void) { return; IndicatorDesktopShortcuts * ids = indicator_desktop_shortcuts_new(SRCDIR "/test-well-formed.desktop", "TouchTest"); g_assert(ids != NULL); const gchar ** nicks = indicator_desktop_shortcuts_get_nicks(ids); g_assert(nicks_contains(nicks, "touch")); g_assert(indicator_desktop_shortcuts_nick_exec_with_context(ids, "touch", NULL)); g_usleep(100000); g_assert(g_file_test(BUILD_DIR "/test-desktop-shortcuts-touch-test", G_FILE_TEST_EXISTS)); g_object_unref(ids); return; } /* Build our test suite */ void test_desktop_shortcuts_suite (void) { g_test_add_func ("/libindicator/desktopshortcuts/creation", test_desktop_shortcuts_creation); g_test_add_func ("/libindicator/desktopshortcuts/globalnosho", test_desktop_shortcuts_globalnoshow); g_test_add_func ("/libindicator/desktopshortcuts/nicknames", test_desktop_shortcuts_nicknames); g_test_add_func ("/libindicator/desktopshortcuts/launch", test_desktop_shortcuts_launch); return; } int main (int argc, char ** argv) { g_test_init (&argc, &argv, NULL); gtk_init(&argc, &argv); test_desktop_shortcuts_suite(); g_log_set_always_fatal(G_LOG_LEVEL_CRITICAL); return g_test_run(); } libayatana-indicator-0.6.2/tests/test-indicator-ng.c0000644000000000000000000001177113254153536017343 0ustar #include static void indicator_ng_test_func (gconstpointer user_data) { GTestFunc test_func = user_data; GTestDBus *bus; bus = g_test_dbus_new (G_TEST_DBUS_NONE); g_test_dbus_add_service_dir (bus, BUILD_DIR); g_test_dbus_up (bus); test_func (); g_test_dbus_down (bus); g_object_unref (bus); } #define indicator_ng_test_add(name, test_func) \ g_test_add_data_func ("/indicator-ng/" name, test_func, indicator_ng_test_func) static gboolean stop_main_loop (gpointer user_data) { GMainLoop *loop = user_data; g_main_loop_quit (loop); return FALSE; } static void test_non_existing (void) { IndicatorNg *indicator; GError *error = NULL; indicator = indicator_ng_new (SRCDIR "/org.ayatana.does.not.exist.indicator", &error); g_assert (indicator == NULL); g_assert_error (error, G_FILE_ERROR, G_FILE_ERROR_NOENT); g_clear_error (&error); } static void test_instantiation (void) { IndicatorNg *indicator; GError *error = NULL; GMainLoop *loop; indicator = indicator_ng_new (SRCDIR "/org.ayatana.indicator.no-such-service", &error); g_assert (indicator); g_assert (error == NULL); g_assert_cmpstr (indicator_ng_get_service_file (indicator), ==, SRCDIR "/org.ayatana.indicator.no-such-service"); g_assert_cmpstr (indicator_ng_get_profile (indicator), ==, "desktop"); { gchar *service_file; gchar *profile; g_object_get (indicator, "service-file", &service_file, "profile", &profile, NULL); g_assert_cmpstr (service_file, ==, SRCDIR "/org.ayatana.indicator.no-such-service"); g_assert_cmpstr (profile, ==, "desktop"); g_free (service_file); g_free (profile); } loop = g_main_loop_new (NULL, FALSE); g_timeout_add (200, stop_main_loop, loop); g_main_loop_run (loop); /* no such service, so there shouldn't be any indicators */ g_assert (indicator_object_get_entries (INDICATOR_OBJECT (indicator)) == NULL); g_main_loop_unref (loop); g_object_unref (indicator); } static void test_instantiation_with_profile (void) { IndicatorNg *indicator; GError *error = NULL; indicator = indicator_ng_new_for_profile (SRCDIR "/org.ayatana.indicator.test", "greeter", &error); g_assert (indicator); g_assert (error == NULL); g_assert_cmpstr (indicator_ng_get_profile (indicator), ==, "greeter"); g_object_unref (indicator); } /* From gtk+/testsuite/gtk/gtkmenu.c * * Returns the label of a GtkModelMenuItem, for which * gtk_menu_item_get_label() returns NULL, because it uses its own * widgets to accommodate an icon. * */ static const gchar * get_label (GtkMenuItem *item) { GList *children = gtk_container_get_children (GTK_CONTAINER (item)); const gchar *label = NULL; while (children) { if (GTK_IS_CONTAINER (children->data)) children = g_list_concat (children, gtk_container_get_children (children->data)); else if (GTK_IS_LABEL (children->data)) label = gtk_label_get_text (children->data); children = g_list_delete_link (children, children); } return label; } static void test_menu (void) { IndicatorNg *indicator; GError *error = NULL; GMainLoop *loop; GList *entries; IndicatorObjectEntry *entry; indicator = indicator_ng_new (SRCDIR "/org.ayatana.indicator.test", &error); g_assert (indicator); g_assert (error == NULL); loop = g_main_loop_new (NULL, FALSE); g_timeout_add (500, stop_main_loop, loop); g_main_loop_run (loop); entries = indicator_object_get_entries (INDICATOR_OBJECT (indicator)); g_assert_cmpint (g_list_length (entries), ==, 1); entry = entries->data; g_assert_cmpstr (entry->name_hint, ==, "indicator-test"); g_assert_cmpstr (entry->accessible_desc, ==, "Test indicator"); g_assert_cmpstr (gtk_label_get_label (entry->label), ==, "Test"); g_assert (gtk_image_get_storage_type (entry->image) == GTK_IMAGE_ICON_NAME); { GList *children; GtkMenuItem *item; g_assert (entry->menu != NULL); children = gtk_container_get_children (GTK_CONTAINER (entry->menu)); g_assert_cmpint (g_list_length (children), ==, 1); item = children->data; g_assert (GTK_IS_MENU_ITEM (item)); g_assert (gtk_widget_is_sensitive (GTK_WIDGET (item))); g_assert_cmpstr (get_label (item), ==, "Show"); g_list_free (children); } g_list_free (entries); g_main_loop_unref (loop); g_object_unref (indicator); } int main (int argc, char **argv) { /* gvfs, dconf, and appmenu-gtk leak GDbusConnections, which confuses * g_test_dbus_down. Make sure we're not using any of those. */ g_setenv ("GIO_USE_VFS", "local", TRUE); g_setenv ("GSETTINGS_BACKEND", "memory", TRUE); g_unsetenv ("UBUNTU_MENUPROXY"); g_test_init (&argc, &argv, NULL); gtk_init (&argc, &argv); indicator_ng_test_add ("non-existing", test_non_existing); indicator_ng_test_add ("instantiation", test_instantiation); indicator_ng_test_add ("instantiation-with-profile", test_instantiation_with_profile); indicator_ng_test_add ("menu", test_menu); return g_test_run (); } libayatana-indicator-0.6.2/tests/test-loader.c0000644000000000000000000002535313254153536016234 0ustar /* Test for libindicator Copyright 2009 Canonical Ltd. Authors: Ted Gould This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version 3.0 for more details. You should have received a copy of the GNU General Public License along with this library. If not, see . */ #include #include "libayatana-indicator/indicator-object.h" #include "dummy-indicator-entry-func.h" void entry_func_swap (IndicatorObject * io) { static void (*saved_func) (IndicatorObject * io, IndicatorObjectEntry * entry, guint windowid, guint timestamp) = NULL; IndicatorObjectClass * klass = INDICATOR_OBJECT_GET_CLASS(io); if (saved_func == NULL) { saved_func = klass->entry_activate_window; } if (klass->entry_activate_window == NULL) { klass->entry_activate_window = saved_func; } else { klass->entry_activate_window = NULL; } return; } void test_loader_entry_func_window (void) { IndicatorObject * object = indicator_object_new_from_file(BUILD_DIR "/.libs/libdummy-indicator-entry-func.so"); g_assert(object != NULL); DummyIndicatorEntryFunc * entryfunc = (DummyIndicatorEntryFunc *)(object); entryfunc->entry_activate_called = FALSE; entryfunc->entry_activate_window_called = FALSE; entryfunc->entry_close_called = FALSE; entry_func_swap(object); indicator_object_entry_activate_window(object, NULL, 0, 0); g_assert(entryfunc->entry_activate_called); entry_func_swap(object); indicator_object_entry_activate_window(object, NULL, 0, 0); g_assert(entryfunc->entry_activate_window_called); g_object_unref(object); return; } void test_loader_entry_funcs (void) { IndicatorObject * object = indicator_object_new_from_file(BUILD_DIR "/.libs/libdummy-indicator-entry-func.so"); g_assert(object != NULL); DummyIndicatorEntryFunc * entryfunc = (DummyIndicatorEntryFunc *)(object); entryfunc->entry_activate_called = FALSE; entryfunc->entry_activate_window_called = FALSE; entryfunc->entry_close_called = FALSE; indicator_object_entry_activate(object, NULL, 0); g_assert(entryfunc->entry_activate_called); indicator_object_entry_activate_window(object, NULL, 0, 0); g_assert(entryfunc->entry_activate_window_called); indicator_object_entry_close(object, NULL, 0); g_assert(entryfunc->entry_close_called); g_object_unref(object); return; } void destroy_cb (gpointer data, GObject * object); void entry_change_cb (IndicatorObject * io, IndicatorObjectEntry * entry, gpointer data) { IndicatorObjectEntry *other_entry = data; other_entry->name_hint = entry->name_hint; other_entry->parent_object = entry->parent_object; return; } void entry_move_cb (IndicatorObject * io, IndicatorObjectEntry * entry, gint old, gint new, gpointer data) { return entry_change_cb(io, entry, data); } void test_loader_filename_dummy_signaler (void) { IndicatorObject * object = indicator_object_new_from_file(BUILD_DIR "/.libs/libdummy-indicator-signaler.so"); g_assert(object != NULL); IndicatorObjectEntry *added_entry, *moved_entry, *removed_entry; IndicatorObjectEntry entries[3]; added_entry = &entries[0]; moved_entry = &entries[1]; removed_entry = &entries[2]; g_signal_connect_after(G_OBJECT(object), INDICATOR_OBJECT_SIGNAL_ENTRY_ADDED, G_CALLBACK(entry_change_cb), added_entry); g_signal_connect_after(G_OBJECT(object), INDICATOR_OBJECT_SIGNAL_ENTRY_MOVED, G_CALLBACK(entry_move_cb), moved_entry); g_signal_connect_after(G_OBJECT(object), INDICATOR_OBJECT_SIGNAL_ENTRY_REMOVED, G_CALLBACK(entry_change_cb), removed_entry); GList * list = indicator_object_get_entries(object); g_assert(list != NULL); g_list_free(list); while (g_main_context_pending(NULL)) { g_main_context_iteration(NULL, TRUE); } g_assert(g_strcmp0(added_entry->name_hint, "added") == 0); g_assert(g_strcmp0(removed_entry->name_hint, "removed") == 0); g_assert(g_strcmp0(moved_entry->name_hint, "moved") == 0); g_assert(added_entry->parent_object == object); g_assert(removed_entry->parent_object == NULL); g_object_unref(object); return; } /*** **** ***/ static void visible_entry_added (IndicatorObject * io, IndicatorObjectEntry * entry, gpointer box) { GtkWidget * child = GTK_WIDGET (entry->label); g_assert (child != NULL); if (g_object_get_data (G_OBJECT(child), "frame-parent") == NULL) { GtkWidget * frame = gtk_frame_new (NULL); gtk_container_add (GTK_CONTAINER(frame), child); gtk_box_pack_start (GTK_BOX(box), frame, FALSE, FALSE, 0); g_object_set_data (G_OBJECT(child), "frame-parent", frame); } } static void visible_entry_removed (IndicatorObject * io, IndicatorObjectEntry * entry, gpointer box) { GtkWidget * child = GTK_WIDGET (entry->label); g_assert (child != NULL); g_assert (g_object_get_data (G_OBJECT(child), "frame-parent") != NULL); } void test_loader_filename_dummy_visible (void) { const GQuark is_hidden_quark = g_quark_from_static_string ("is-hidden"); IndicatorObject * object = indicator_object_new_from_file(BUILD_DIR "/.libs/libdummy-indicator-visible.so"); g_assert(object != NULL); // create our local parent widgetry #if GTK_CHECK_VERSION(3,0,0) GtkWidget * box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); #else GtkWidget * box = gtk_hbox_new (TRUE, 0); #endif g_signal_connect(object, INDICATOR_OBJECT_SIGNAL_ENTRY_ADDED, G_CALLBACK(visible_entry_added), box); g_signal_connect(object, INDICATOR_OBJECT_SIGNAL_ENTRY_REMOVED, G_CALLBACK(visible_entry_removed), box); // on startup, DummyVisible has one entry and it has a label GList * list = indicator_object_get_entries(object); g_assert(g_list_length(list) == 1); IndicatorObjectEntry * entry = list->data; g_assert(entry != NULL); g_list_free(list); g_assert(GTK_IS_LABEL(entry->label)); g_assert(entry->parent_object == object); g_assert(INDICATOR_IS_OBJECT(entry->parent_object)); GtkWidget * label = GTK_WIDGET(entry->label); g_assert(g_object_get_qdata(G_OBJECT(label), is_hidden_quark) == NULL); // add the inital entry to our local parent widgetry visible_entry_added (object, entry, box); entry = NULL; list = gtk_container_get_children (GTK_CONTAINER(box)); g_assert(g_list_length(list) == 1); g_list_free(list); // hide the entries and confirm that the label survived indicator_object_set_visible (object, FALSE); while (g_main_context_pending(NULL)) g_main_context_iteration(NULL, TRUE); g_assert(GTK_IS_LABEL(label)); g_assert(g_object_get_qdata(G_OBJECT(label), is_hidden_quark) != NULL); list = gtk_container_get_children (GTK_CONTAINER(box)); g_assert(g_list_length(list) == 1); g_list_free(list); // restore the entries and confirm that the label survived indicator_object_set_visible (object, TRUE); while (g_main_context_pending(NULL)) g_main_context_iteration(NULL, TRUE); g_assert(GTK_IS_LABEL(label)); g_assert(g_object_get_qdata(G_OBJECT(label), is_hidden_quark) == NULL); list = gtk_container_get_children (GTK_CONTAINER(box)); g_assert(g_list_length(list) == 1); g_list_free(list); // cleanup g_object_unref(object); gtk_widget_destroy(box); } /*** **** ***/ void test_loader_filename_dummy_simple_location (void) { IndicatorObject * object = indicator_object_new_from_file(BUILD_DIR "/.libs/libdummy-indicator-simple.so"); g_assert(object != NULL); GList * entries = indicator_object_get_entries(object); g_assert(entries != NULL); g_assert(g_list_length(entries) == 1); IndicatorObjectEntry *entry = entries->data; g_assert(indicator_object_get_location(object, entry) == 0); g_assert(indicator_object_get_location(object, NULL) == 0); g_assert(entry->parent_object == object); g_object_unref(object); return; } void test_loader_filename_dummy_simple_accessors (void) { IndicatorObject * object = indicator_object_new_from_file(BUILD_DIR "/.libs/libdummy-indicator-simple.so"); g_assert(object != NULL); g_assert(indicator_object_get_entries(object) != NULL); g_object_unref(object); return; } void test_loader_filename_dummy_simple (void) { IndicatorObject * object = indicator_object_new_from_file(BUILD_DIR "/.libs/libdummy-indicator-simple.so"); g_assert(object != NULL); gboolean unreffed = FALSE; g_object_weak_ref(G_OBJECT(object), destroy_cb, &unreffed); g_object_unref(object); g_assert(unreffed == TRUE); return; } void test_loader_filename_dummy_blank (void) { IndicatorObject * object = indicator_object_new_from_file(BUILD_DIR "/.libs/libdummy-indicator-blank.so"); g_assert(object == NULL); return; } void test_loader_filename_dummy_null (void) { IndicatorObject * object = indicator_object_new_from_file(BUILD_DIR "/.libs/libdummy-indicator-null.so"); g_assert(object != NULL); g_assert(indicator_object_get_entries(object) == NULL); g_object_unref(G_OBJECT(object)); return; } void test_loader_filename_bad (void) { IndicatorObject * object = indicator_object_new_from_file("/this/file/should/not/exist.so"); g_assert(object == NULL); return; } void destroy_cb (gpointer data, GObject * object) { gboolean * bob = (gboolean *)data; *bob = TRUE; return; } void test_loader_refunref (void) { GObject * object = g_object_new(INDICATOR_OBJECT_TYPE, NULL); gboolean unreffed = FALSE; g_object_weak_ref(object, destroy_cb, &unreffed); g_object_unref(object); g_assert(unreffed == TRUE); return; } void test_loader_creation_deletion_suite (void) { g_test_add_func ("/libindicator/loader/ref_and_unref", test_loader_refunref); g_test_add_func ("/libindicator/loader/filename_bad", test_loader_filename_bad); g_test_add_func ("/libindicator/loader/dummy/null_load", test_loader_filename_dummy_null); g_test_add_func ("/libindicator/loader/dummy/blank_load", test_loader_filename_dummy_null); g_test_add_func ("/libindicator/loader/dummy/simple_load", test_loader_filename_dummy_simple); g_test_add_func ("/libindicator/loader/dummy/simple_accessors", test_loader_filename_dummy_simple_accessors); g_test_add_func ("/libindicator/loader/dummy/simple_location", test_loader_filename_dummy_simple_location); g_test_add_func ("/libindicator/loader/dummy/signaler", test_loader_filename_dummy_signaler); g_test_add_func ("/libindicator/loader/dummy/entry_funcs", test_loader_entry_funcs); g_test_add_func ("/libindicator/loader/dummy/entry_func_window", test_loader_entry_func_window); g_test_add_func ("/libindicator/loader/dummy/visible", test_loader_filename_dummy_visible); return; } int main (int argc, char ** argv) { g_test_init (&argc, &argv, NULL); gtk_init(&argc, &argv); test_loader_creation_deletion_suite(); g_log_set_always_fatal(G_LOG_LEVEL_CRITICAL); return g_test_run(); } libayatana-indicator-0.6.2/tests/test-well-formed.desktop0000644000000000000000000000061713254153536020426 0ustar [Desktop Entry] Name=My Application Exec=ls NotShowIn=Germany Actions=bob;alvin;jim;touch [Desktop Action bob] Name=bob's shortcut Exec=ls bob [Desktop Action alvin] Name=alvin's shortcut Exec=ls alvin OnlyShowIn=France [Desktop Action jim] Name=Jim's shortcut Exec=ls jim NotShowIn=France [Desktop Action touch] Name=Touch Test Exec=touch test-desktop-shortcuts-touch-test OnlyShowIn=TouchTest libayatana-indicator-0.6.2/tools/80indicator-debugging0000644000000000000000000000117313254153536017635 0ustar # These are environment variables that effect the behavior of # libayatana-indicator's service manager and ayatana-indicator # service objects. They turn off various robustness features # that make debugging difficult and are not recommended for # daily use. Development use only! # To use: either copy or symbolicly link this file to the # Xsession dictory. Specifically: /etc/X11/Xsession.d # Timeout after 1 minute export INDICATOR_SERVICE_SHUTDOWN_TIMEOUT=60000 # If no one connects, still stay alive export INDICATOR_ALLOW_NO_WATCHERS=1 # Don't restart the services if they crash export INDICATOR_SERVICE_RESTART_DISABLE=1 libayatana-indicator-0.6.2/tools/indicator-loader.c0000644000000000000000000002423713254153536017227 0ustar /* * A small test loader for loading indicators in test suites * and during development of them. * * Copyright 2009 Canonical Ltd. * * Authors: * Ted Gould * Lars Uebernickel * Charles Kerr * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * version 3.0 as published by the Free Software Foundation. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License version 3.0 for more details. * * You should have received a copy of the GNU General Public * License along with this library. If not, see * . */ #include #include #include #if GTK_CHECK_VERSION (3,0,0) #include #endif static GHashTable * entry_to_menu_item = NULL; G_DEFINE_QUARK (indicator_loader, entry_data) static void activate_entry (GtkWidget * widget, gpointer user_data) { gpointer entry; g_return_if_fail (INDICATOR_IS_OBJECT(user_data)); entry = g_object_get_qdata (G_OBJECT(widget), entry_data_quark()); if (entry == NULL) { g_debug("Activation on: (null)"); } else { indicator_object_entry_activate (INDICATOR_OBJECT(user_data), entry, gtk_get_current_event_time()); } } static void scroll_entry (GtkWidget *widget, GdkEventScroll* event, gpointer user_data) { gpointer entry; g_return_if_fail (INDICATOR_IS_OBJECT(user_data)); entry = g_object_get_qdata (G_OBJECT(widget), entry_data_quark()); IndicatorScrollDirection direction = G_MAXINT; switch (event->direction) { case GDK_SCROLL_UP: direction = INDICATOR_OBJECT_SCROLL_UP; break; case GDK_SCROLL_DOWN: direction = INDICATOR_OBJECT_SCROLL_DOWN; break; case GDK_SCROLL_LEFT: direction = INDICATOR_OBJECT_SCROLL_LEFT; break; case GDK_SCROLL_RIGHT: direction = INDICATOR_OBJECT_SCROLL_RIGHT; break; default: break; } if (entry == NULL) { g_debug("Scroll on: (null)"); } else if (direction == G_MAXINT) { g_debug("Scroll direction not supported"); } else { g_signal_emit_by_name(INDICATOR_OBJECT(user_data), INDICATOR_OBJECT_SIGNAL_ENTRY_SCROLLED, entry, 1, direction); } } static GtkWidget* create_menu_item (IndicatorObjectEntry * entry) { GtkWidget * menu_item; GtkWidget * hbox; gpointer w; menu_item = gtk_menu_item_new(); #if GTK_CHECK_VERSION (3,0,0) hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3); #else hbox = gtk_hbox_new (FALSE, 3); #endif if ((w = entry->image)) gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET(w), FALSE, FALSE, 0); if ((w = entry->label)) gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET(w), FALSE, FALSE, 0); gtk_container_add (GTK_CONTAINER(menu_item), hbox); gtk_widget_show (hbox); if ((w = entry->menu)) gtk_menu_item_set_submenu (GTK_MENU_ITEM(menu_item), GTK_WIDGET(w)); return menu_item; } static void entry_added (IndicatorObject * io, IndicatorObjectEntry * entry, gpointer user_data) { GtkWidget * menu_item; g_debug ("Signal: Entry Added"); g_warn_if_fail (entry->parent_object != NULL); menu_item = g_hash_table_lookup (entry_to_menu_item, entry); if (menu_item == NULL) { g_debug ("creating a menuitem for new entry %p", entry); menu_item = create_menu_item (entry); g_hash_table_insert (entry_to_menu_item, entry, menu_item); g_object_set_qdata (G_OBJECT(menu_item), entry_data_quark(), entry); g_signal_connect (menu_item, "activate", G_CALLBACK(activate_entry), io); gtk_widget_set_events (menu_item, gtk_widget_get_events (menu_item) | GDK_SCROLL_MASK); g_signal_connect (menu_item, "scroll-event", G_CALLBACK(scroll_entry), io); gtk_menu_shell_append (GTK_MENU_SHELL(user_data), menu_item); } gtk_widget_show (menu_item); } static void entry_removed (IndicatorObject * io, IndicatorObjectEntry * entry, gpointer user_data) { GtkWidget * w; g_debug ("Signal: Entry Removed"); if ((w = g_hash_table_lookup (entry_to_menu_item, entry))) gtk_widget_hide (w); } static void menu_show (IndicatorObject * io, IndicatorObjectEntry * entry, guint timestamp, gpointer user_data) { const char * text; if (entry == NULL) text = "(null)"; else if (entry->label == NULL) text = "(no label)"; else text = gtk_label_get_text (entry->label); g_debug ("Show Menu: %s", text); } /*** **** ***/ static IndicatorObject * load_module (const gchar * file_name) { IndicatorObject * io = NULL; if (file_name && g_str_has_suffix (file_name, G_MODULE_SUFFIX)) { io = indicator_object_new_from_file (file_name); if (io == NULL) g_warning ("could not load indicator from '%s'", file_name); } return io; } static IndicatorObject * load_profile (const char * file_name, const char * profile) { IndicatorObject * io = NULL; #if GTK_CHECK_VERSION (3,0,0) GError * error = NULL; io = INDICATOR_OBJECT (indicator_ng_new_for_profile (file_name, profile, &error)); if (error != NULL) { g_warning ("couldn't load profile '%s' from '%s': %s", profile, file_name, error->message); g_error_free (error); } #endif return io; } /*** **** ***/ static void add_indicator_to_menu (GtkMenuShell * menu_shell, IndicatorObject * io) { GList * entries; GList * entry; g_return_if_fail (INDICATOR_IS_OBJECT (io)); /* connect to its signals */ g_signal_connect (io, INDICATOR_OBJECT_SIGNAL_ENTRY_ADDED, G_CALLBACK(entry_added), menu_shell); g_signal_connect (io, INDICATOR_OBJECT_SIGNAL_ENTRY_REMOVED, G_CALLBACK(entry_removed), menu_shell); g_signal_connect (io, INDICATOR_OBJECT_SIGNAL_MENU_SHOW, G_CALLBACK(menu_show), NULL); /* process the entries */ entries = indicator_object_get_entries(io); for (entry=entries; entry!=NULL; entry=entry->next) entry_added (io, entry->data, menu_shell); g_list_free (entries); } static void add_menu_to_grid (GtkGrid * grid, int top, const char * text_, GtkWidget * menu) { gchar * text; GtkWidget * label; text = g_strdup_printf ("%s:", text_); label = gtk_label_new (text); g_free (text); gtk_grid_attach (GTK_GRID(grid), label, 0, top, 1, 1); gtk_grid_attach (GTK_GRID(grid), menu, 1, top, 1, 1); g_object_set (label, "halign", GTK_ALIGN_START, "hexpand", FALSE, "margin-right", 6, "valign", GTK_ALIGN_CENTER, NULL); g_object_set (menu, "halign", GTK_ALIGN_START, "hexpand", TRUE, NULL); } /*** **** ***/ int main (int argc, char ** argv) { int menu_count = 0; const gchar * file_name; gchar * base_name; GtkWidget * grid; if (argc != 2) { base_name = g_path_get_basename (argv[0]); g_warning ("Use: %s filename", base_name); g_free (base_name); return 0; } /* make sure we don't proxy to ourselves */ g_setenv ("UBUNTU_MENUPROXY", "0", TRUE); gtk_init (&argc, &argv); ido_init (); entry_to_menu_item = g_hash_table_new (g_direct_hash, g_direct_equal); file_name = argv[1]; grid = g_object_new (GTK_TYPE_GRID, "margin", 4, "column-spacing", 6, "row-spacing", 12, NULL); /* if it's an old-style indicator... */ if (g_str_has_suffix (file_name, G_MODULE_SUFFIX)) { IndicatorObject * io = load_module (file_name); GtkWidget * menu = gtk_menu_bar_new (); add_indicator_to_menu (GTK_MENU_SHELL(menu), io); base_name = g_path_get_basename (file_name); add_menu_to_grid (GTK_GRID(grid), menu_count++, base_name, menu); g_free (base_name); } else /* treat it as a GMenu indicator's keyfile */ { GError * error; GKeyFile * key_file; key_file = g_key_file_new (); error = NULL; g_key_file_load_from_file (key_file, file_name, G_KEY_FILE_NONE, &error); if (error != NULL) { g_warning ("loading '%s' failed: %s", file_name, error->message); g_error_free (error); } else { gchar ** groups; int i; groups = g_key_file_get_groups (key_file, NULL); for (i=0; groups && groups[i]; i++) { const gchar * const profile = groups[i]; IndicatorObject * io; if (!g_strcmp0 (profile, "Indicator Service")) continue; if ((io = load_profile (file_name, profile))) { GtkWidget * menu = gtk_menu_bar_new (); add_indicator_to_menu (GTK_MENU_SHELL(menu), io); add_menu_to_grid (GTK_GRID(grid), menu_count++, profile, menu); } } g_strfreev (groups); } g_key_file_free (key_file); } if (menu_count > 0) { GtkWidget * window = gtk_window_new (GTK_WINDOW_TOPLEVEL); base_name = g_path_get_basename (file_name); gtk_window_set_title (GTK_WINDOW(window), base_name); g_free (base_name); g_signal_connect (window, "destroy", G_CALLBACK(gtk_main_quit), NULL); gtk_container_add (GTK_CONTAINER(window), grid); gtk_widget_show_all (window); gtk_main (); } /* cleanup */ g_hash_table_destroy (entry_to_menu_item); return 0; } libayatana-indicator-0.6.2/tools/Makefile.am0000644000000000000000000000217413254153536015673 0ustar if USE_GTK3 INDICATOR_LIB = -layatana-indicator3 libexec_PROGRAMS = ayatana-indicator-loader3 VER=3 endif ############################# # Indicator Loader ############################# ayatana_indicator_loader_SOURCES = \ indicator-loader.c ayatana_indicator_loader_CFLAGS = \ -Wall -Werror \ $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) \ -DBUILD_DIR="\"$(builddir)\"" ayatana_indicator_loader_LDADD = \ $(LIBINDICATOR_LIBS) \ -L$(top_builddir)/libayatana-indicator/.libs \ $(INDICATOR_LIB) # We duplicate these here because Automake won't let us use $(VER) on the left hand side. # Since we carefully use $(VER) in the right hand side above, we can assign the same values. # Only one version of the library is every compiled at the same time, so it is safe to reuse # the right hand sides like this. ayatana_indicator_loader3_SOURCES = $(ayatana_indicator_loader_SOURCES) ayatana_indicator_loader3_CFLAGS = $(ayatana_indicator_loader_CFLAGS) ayatana_indicator_loader3_LDADD = $(ayatana_indicator_loader_LDADD) xsessiondir = $(pkgdatadir) xsession_DATA = 80indicator-debugging EXTRA_DIST = $(xsession_DATA) DISTCLEANFILES = Makefile.in libayatana-indicator-0.6.2/trim-lcov.py0000755000000000000000000000400013254153536014756 0ustar #!/usr/bin/python # Copyright 2013 Canonical Ltd. # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # version 3.0 as published by the Free Software Foundation. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License version 3.0 for more details. # # You should have received a copy of the GNU General Public # License along with this library. If not, see # . # # Author: Ryan Lortie # This script removes branch and/or line coverage data for lines that # contain a particular substring. # # In the interest of "fairness" it removes all branch or coverage data # when a match is found -- not just negative data. It is therefore # likely that running this script will actually reduce the total number # of lines and branches that are marked as covered (in absolute terms). # # This script intentionally avoids checking for errors. Any exceptions # will trigger make to fail. import sys line_suppress = ['g_assert_not_reached'] branch_suppress = ['g_assert', 'g_return_if_fail', 'g_return_val_if_fail', 'G_DEFINE_TYPE'] def check_suppress(suppressions, source, data): line, _, rest = data.partition(',') line = int(line) - 1 assert line < len(source) for suppression in suppressions: if suppression in source[line]: return True return False source = [] for line in sys.stdin: line = line[:-1] keyword, _, rest = line.partition(':') # Source file if keyword == 'SF': source = file(rest).readlines() # Branch coverage data elif keyword == 'BRDA': if check_suppress(branch_suppress, source, rest): continue # Line coverage data elif keyword == 'DA': if check_suppress(line_suppress, source, rest): continue print line