ayatana-indicator-application-26.6.0/AUTHORS 0000664 0000000 0000000 00000000761 15213316506 015444 0 ustar Allan LeSage
Aurelien Gateau
Aurélien Gâteau
C10uD
Charles Kerr
Chris Coulson
Cody Russell
Conor Curran
Didier Roche
Emmanuele Bassi
Hernando Torque
Jan Arne Petersen
Jason Smith
Jeremy Bicha
Jo Shields
Ken Vandine
Ken VanDine
Krzysztof Klimonda
Luke Yelavich
Marco Trevisan (Treviño)
Martin Pitt
Mathieu Trudel-Lapierre
Michael Terry
Mike Gabriel
Neil Jagdish Patel
Neil J Patel
Robert Collins
Robert Tari
Ryan Lortie
Sebastien Bacher
Sense Egbert Hofstede
Sense Hofstede
Sven Baars
Ted Gould
ayatana-indicator-application-26.6.0/.build.yml 0000664 0000000 0000000 00000011440 15213316506 016270 0 ustar #########################################################
# THE FOLLOWING LINES IS USED BY docker-build
##########################################################
requires:
archlinux:
# Useful URL: https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=ayatana-indicator-application
- clang
- gcc
- git
- make
- startup-notification
- which
- cmake
- cmake-extras
- xorg-server-xvfb
- glib2
- gtk3
- dbus-glib
- json-glib
- intltool
- libdbusmenu-glib
- libdbusmenu-gtk3
- systemd
- vala
debian:
# Useful URL: https://salsa.debian.org/debian-ayatana-team/ayatana-indicator-application
- clang
- clang-tools
- g++
- cppcheck
- git
- cmake
- cmake-extras
- cli-common-dev
- intltool
- libdbus-1-dev
- libdbus-glib-1-dev
- libdbusmenu-glib-dev
- libdbusmenu-gtk3-dev
- libglib2.0-dev
- libgtk-3-dev
- gtk-sharp3-gapi
- libgtk3.0-cil-dev
- libjson-glib-dev
- libnunit-cil-dev
- libxml2-utils
- mono-devel
- systemd
- gobject-introspection
- gtk-doc-tools
- libgirepository1.0-dev
- libgtest-dev
- libx11-dev
- libxi-dev
- valac
- dbus-test-runner
- xauth
- xvfb
ubuntu:
- clang
- clang-tools
- g++
- git
- cmake
- cmake-extras
- cli-common-dev
- intltool
- libdbus-1-dev
- libdbus-glib-1-dev
- libdbusmenu-glib-dev
- libdbusmenu-gtk3-dev
- libglib2.0-dev
- libgtk-3-dev
- gtk-sharp3-gapi
- libgtk3.0-cil-dev
- libjson-glib-dev
- libnunit-cil-dev
- libxml2-utils
- mono-devel
- systemd
- gobject-introspection
- gtk-doc-tools
- libgirepository1.0-dev
- libgtest-dev
- libx11-dev
- libxi-dev
- valac
- dbus-test-runner
- xauth
- xvfb
variables:
- 'CHECKERS="
-enable-checker deadcode.DeadStores
-enable-checker alpha.deadcode.UnreachableCode
-enable-checker alpha.core.CastSize
-enable-checker alpha.core.CastToStruct
-enable-checker alpha.core.IdenticalExpr
-enable-checker alpha.core.SizeofPtr
-enable-checker alpha.security.ArrayBoundV2
-enable-checker alpha.security.MallocOverflow
-enable-checker alpha.security.ReturnPtrRange
-enable-checker alpha.unix.SimpleStream
-enable-checker alpha.unix.cstring.BufferOverlap
-enable-checker alpha.unix.cstring.NotNullTerminated
-enable-checker alpha.unix.cstring.OutOfBounds
-enable-checker alpha.core.FixedAddr
-enable-checker security.insecureAPI.strcpy"'
before_scripts:
- cd ${START_DIR}
- if [ ! -d ayatana-ido-build ]; then
- git clone --depth 1 https://github.com/AyatanaIndicators/ayatana-ido.git ayatana-ido-build
- fi
- cd ayatana-ido-build
- cmake . -DCMAKE_INSTALL_PREFIX=/usr
- make
- make install
- cd -
- rm -Rf ayatana-ido-build/
-
- cd ${START_DIR}
- if [ ! -d libayatana-indicator-build ]; then
- git clone --depth 1 https://github.com/AyatanaIndicators/libayatana-indicator.git libayatana-indicator-build
- fi
- cd libayatana-indicator-build
- cmake . -DCMAKE_INSTALL_PREFIX=/usr
- make
- make install
- cd -
- rm -Rf libayatana-indicator-build/
-
- cd ${START_DIR}
- if [ ! -d libayatana-appindicator-build ]; then
- git clone --depth 1 https://github.com/AyatanaIndicators/libayatana-appindicator-glib.git libayatana-appindicator-build
- fi
- cd libayatana-appindicator-build
- cmake . -DCMAKE_INSTALL_PREFIX=/usr
- make
- make install
- rm -Rf libayatana-appindicator-build/
build_scripts:
- if [ ${DISTRO_NAME} == "debian" ];then
- cppcheck --enable=warning,style,performance,portability,information,missingInclude .
- fi
-
- if [ -e ./CMakeLists.txt ]; then
- if [ ${DISTRO_NAME} == "debian" ];then
- scan-build $CHECKERS cmake . -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_VERBOSE_MAKEFILE=ON -DENABLE_TESTS=ON
- else
- scan-build $CHECKERS cmake . -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_VERBOSE_MAKEFILE=ON
- fi
- else
- exit 1
- fi
-
- if [ $CPU_COUNT -gt 1 ]; then
- if [ ${DISTRO_NAME} == "debian" ];then
- scan-build $CHECKERS --keep-cc --use-cc=clang --use-c++=clang++ -o html-report make -j $CPU_COUNT
- make clean
- fi
- scan-build $CHECKERS --keep-cc -o html-report make -j $CPU_COUNT
- else
- if [ ${DISTRO_NAME} == "debian" ];then
- scan-build $CHECKERS --keep-cc --use-cc=clang --use-c++=clang++ -o html-report make
- make clean
- fi
- scan-build $CHECKERS --keep-cc -o html-report make
- fi
# - XVFB_RUN="$(which xvfb-run || true)"
# - if [ ${DISTRO_NAME} == "debian" ];then
# - if [ -e ./CMakeLists.txt ]; then
# - ${XVFB_RUN} env CTEST_OUTPUT_ON_FAILURE=1 make test
# - fi
# - fi
ayatana-indicator-application-26.6.0/ChangeLog 0000664 0000000 0000000 00000476437 15213316506 016167 0 ustar 2026-06-13 Mike Gabriel
* Release 26.6.0 (HEAD -> main, tag: 26.6.0)
2025-07-11 Mike Gabriel
* Merge branch 'sunweaver-pr/appindicator-glib-support' (c4c5f3f)
2025-03-09 Robert Tari
* src/ayatana-application-service-marshal.list: Replace deprecated
BOOL token (aa8c202)
* src/indicator-application.c: Replace deprecated
gtk_widget_get_style (4b03679)
2024-10-18 Robert Tari
* Allow the service to handle tooltips (f61a6ca)
2025-06-06 Robert Tari
* d/control: Build with libayatana-appindicator-glib (d171bba)
2024-09-26 Robert Tari
* Allow the service to handle both legacy menus and the new GMenu
(7949738)
* Whitespace fix (26523e2)
2024-10-18 Robert Tari
* Whitespace fix (42aa573)
2022-02-17 Mike Gabriel
* release 22.2.0 (20bf807) (tag: 22.2.0)
* Merge branch 'tari01-pr/cleanup-compile-flags' (0ef4fc1)
2022-02-17 Robert Tari
* .build.yml: Drop extra compilation flags (ef11732)
* Clean up compilation flags (8f7d4d4)
2022-02-16 Mike Gabriel
* Merge branch 'tari01-pr/drop-cmake-install-full-pkglibexecdir'
(3bbc1d0)
2022-02-15 Robert Tari
* data/CMakeLists.txt: Drop unused CMAKE_INSTALL_FULL_PKGLIBEXECDIR
(46041c5)
2022-02-08 Robert Tari
* .travis.yml: Run CI builds on Travis CI's Ubuntu focal base system
(f011bb9)
2022-01-27 Mike Gabriel
* release 0.8.91 (0240328) (tag: 0.8.91)
2022-01-27 Robert Tari
* Merge branch
'sunweaver-pr/use-pkg-config-indicatordir-for-library-path'
(edbee76)
2022-01-26 Mike Gabriel
* data/CMakeLists.txt: Update detection of SYSTEMD_USER_DIR, use
systemd's pkg-config variable if possible. (3c432ed)
* CMakeLists.txt: Fix project name (ayatana-indicator-application,
not ayatana-appindicator-application). (a986a42)
2022-01-27 Robert Tari
* Merge branch 'sunweaver-pr/fix-systemd-unit-file-location'
(8b83c01)
2022-01-26 Mike Gabriel
* src/CMakeLists.txt: Use pkg-config's indicatordir as library
installation path. (c8de140)
* data/CMakeLists.txt: Update detection of SYSTEMD_USER_DIR, use
systemd's pkg-config variable if possible. (b70b185)
* CMakeLists.txt: Fix project name (ayatana-indicator-application,
not ayatana-appindicator-application). (d49af68)
2021-11-18 Mike Gabriel
* release 0.8.90 (91143cb) (tag: 0.8.90)
2021-10-25 Robert Tari
* Merge branch 'sunweaver-pr/travis-cleanup' (03225f2)
2021-10-20 Robert Tari
* .travis.yml: Temporarily disable ppc64le builds (a80c027)
2021-09-02 Robert Tari
* Fix Travis status image (3ea315f)
2021-10-25 Mike Gabriel
* .build.yml: Comment out running unit tests (no tests in project).
(6eec5b5)
* .build.yml: Remove source code of locally built dependencies after
they have been installed. (fd4b492)
* .build.yml: Run unit tests in build_scripts: target. (d20a158)
* .build.yml: Drop autogen.sh support. (441c558)
2021-10-20 Robert Tari
* .travis.yml: Temporarily disable ppc64le builds (6a05699)
2021-09-02 Robert Tari
* Fix Travis status image (b6d0146)
2021-08-29 Mike Gabriel
* debian/rules: Enable unit tests (if there were any). (bff6bb8)
2021-08-28 Mike Gabriel
* .travis.yml: Fix branch name what is now the default branch in
ayatana-dev-scripts. (f33deb5)
2021-08-10 Mike Gabriel
* Merge branch 'tari01-pr/add-enable-werror-option' (82ddfcc)
2021-08-09 Robert Tari
* Add ENABLE_WERROR option (f4c60ba)
2021-06-27 Mike Gabriel
* README.md: Add missing parenthesis close. (b83b458)
2021-06-15 Robert Tari
* Merge branch 'sunweaver-pr/travis-build-our-libs-from-source'
(2ce2a0e)
2021-05-25 Mike Gabriel
* .build.yml: During CI builds, build latest ayatana-ido,
libayatana-indicator and libayatana-indicator and use
those for CI builds of ayatana-indicator-application.
(4546805)
2021-06-11 Mike Gabriel
* Merge branch 'tari01-pr/fix-runtime-install' (ba1630b)
2021-06-11 Robert Tari
* Fix .desktop file install location (c1bd489)
* Fix service file installation (4a70621)
2021-06-11 Mike Gabriel
* Merge branch 'tari01-pr/fix-xdg-location' (e9c253b)
2021-06-11 Robert Tari
* Fix .desktop file install location (111b61a)
2021-06-10 Mike Gabriel
* Merge branch 'tari01-pr/cmake-install-full' (95a9f27)
2021-06-10 Robert Tari
* Use CMAKE_INSTALL_FULL_*DIR locations (d4cf711)
2021-06-07 Mike Gabriel
* README.md: Rephrase where this indicator is used, currently not
used in Lomiri. (71205ee)
* Merge branch 'tari01-pr/add-documentation' (6704d8a)
2021-06-04 Robert Tari
* README: Drop old file (7887ac6)
* Add documentation and install instructions (9abc758)
2021-05-25 Robert Tari
* Merge branch 'sunweaver-pr/debian-pkging-adjusted-to-cmake'
(6bac351)
2021-05-25 Mike Gabriel
* debian/{control,rules}: Adjust to the CMake build system switch.
(96821b5)
* Merge branch 'tari01-pr/move-to-cmake' (fe5ae6b)
2021-03-04 Robert Tari
* Remove unused files (b9a91db)
* Remove Automake files (10b786c)
* Add CMakeLists.txt files (5f5d6d7)
* data: Fix ayatana-indicator-application.service.in (65be49d)
* data: Fix ayatana-indicator-application.desktop.in (51c9025)
2021-05-04 Robert Tari
* Merge branch 'sunweaver-pr/travis-ci' (dd675b4)
2021-05-04 Mike Gabriel
* .travis.yml: Don't run autotools builds twice (once via script,
once directly). (0d7148e)
* src/Makefile.am: Drop -Werror compiler flag for now. Not helpful
when setting up CI builds for dirty code. (b7faf4f)
* Travis CI: Initial draft for CI builds. (cfea3be)
2020-08-17 Mike Gabriel
* release 0.8.0 (eee97a7) (tag: 0.8.0)
2020-08-10 Mike Gabriel
* configure.ac: Drop data/upstart/Makefile from AC_OUTPUT. Regresion
fix for 172e6823. (a95fa57)
2020-08-10 Robert Tari
* Merge branch 'sunweaver-pr/drop-upstart-support' Attributes GH PR
#4:
https://github.com/AyatanaIndicators/ayatana-indicator-application/pull/4
(c6909fa)
* Merge branch 'pr/drop-upstart-support' of
https://github.com/sunweaver/ayatana-indicator-application
into sunweaver-pr/drop-upstart-support Attributes GH PR
#4:
https://github.com/AyatanaIndicators/ayatana-indicator-application/pull/4
(c7c7c61)
* Merge branch 'sunweaver-pr/fix-systemd' Attributes GH PR #3:
https://github.com/AyatanaIndicators/ayatana-indicator-application/pull/3
(9e09aaa)
2020-08-10 Mike Gabriel
* Drop all references to upstart. (172e682)
* debian/*: Install systemd user service file correctly into DEB
package. (ac816c0)
* Start indicator in systemd when ayatana-indicators.target is
started. (bcd0095)
* debian/control: Improve dh-autoreconf build-dependency. (05e0a70)
2019-11-27 Mike Gabriel
* Drop release/build cruft file src/ChangeLog. (1aa5f07)
* release 0.5.3 (e86b005) (tag: 0.5.3)
* Avoid deprecated g_type_class_add_private. (8b967ee)
2017-12-04 Mike Gabriel
* debian/changelog: Bump upstream to a development version. (75ffda9)
* post-release fix debian/changelog for 0.5.1 and 0.5.2 (517180e)
2017-10-26 Mike Gabriel
* autogen.sh: Adapt PKG_NAME autogen.sh to ayatana- namespace.
(3589a31)
* configure.ac: White-space fix and beginning of file. (7cf4fcf)
* {configure.ac,Makefile.am}: Drop distcheck features. (3207212)
2017-10-06 Mike Gabriel
* debian/control: Modify B-D on systemd: only required on linux-any
hosts. (1b6f7b2)
* Make systemd optional. If systemd is not available at build-time,
the creation of the .service file is omitted. (2c6c3ad)
* release 0.5.2 (c21840e) (tag: 0.5.2)
2017-09-26 Mike Gabriel
* data/ayatana-indicator-application.desktop.in: Add Budgie as
candidate for launching ayatana-indicator-application.
(1fb04e5)
* data/ayatana-indicator-application.desktop.in: Add XFCE as
candidate for launching ayatana-indicator-application.
(6f0baea)
2017-06-07 Mike Gabriel
* debian/{rules/watch}: Add get-orig-source rule and watch file to
make upstream packaging as close to official Debian
packaging. (9ea282b)
* debian/upstream: Add GnuPG pubkey for upstream devs. (7a0de9b)
* debian/patches: Add README for patches/ subfolder. (5810507)
2017-05-31 Mike Gabriel
* data/ayatana-indicator-application.desktop.in (7ce7832)
2017-05-30 Mike Gabriel
* XDG-autostart this indicator in MATE, too. (630f47c)
2017-05-29 Mike Gabriel
* release 0.5.1 (21a3517) (tag: 0.5.1)
2017-05-26 Mike Gabriel
* src/application-service-watcher.c: Comment out upstart specific
code for now. We can reintroduce it once we know if our
session is upstart-managed (or systemd-managed). (af351b0)
2017-05-15 Mike Gabriel
* data/Makefile.am: Indentation/white-space fix. (0858a56)
* upstart service files: Fix namespace overlapping with the project
we forked from. (fe747e1)
2017-05-15 Michael Terry
* Work inside a snap by prefixing hard coded paths with . (LP:
#1629009) (3661214)
2017-05-15 Jeremy Bicha
* Hide 'Indicator Application' from Startup Applications (LP:
#1637379) (LP: #1637379) (f20bc23)
2017-05-15 Ted Gould
* Adding a systemd user unit. (a099394)
2017-05-15 Mike Gabriel
* build system: Switch to mate-common. (9afe090)
2015-11-11 Mike Gabriel
* Add forgotten file...
(src/ayatana-application-service-marshal.list). (dcb6427)
* dbus-shared.h: Use org.ayatana namespace for the DBus service
object. (2349431)
* Fork from Ubuntu's indicator-application code project. (13e1544)
2015-01-28 CI Train Bot
* Releasing 12.10.1+15.04.20150128-0ubuntu1 (6935795)
2015-01-28 Ted Gould
* Remove XFCE from the OnlyShowIn list
Fixes: #1411959 Approved by:
Antti Kaijanmäki, PS Jenkins bot (61f83a5)
2015-01-27 Ted Gould
* Update gcov.m4 (57a37ce)
2015-01-20 Ted Gould
* Remove XFCE from the OnlyShowIn list (d941082)
2014-04-07 CI bot
* Releasing 12.10.1+14.04.20140407-0ubuntu1 (f08a10d)
2014-04-07 Ted Gould
* Fix the upstart job and desktop config for GNOME2
Fixes: 1302123
(72e1242)
* Switching to single equals (6f1a0f7)
2014-04-02 CI bot
* Releasing 12.10.1+14.04.20140402-0ubuntu1 (b3b0fc8)
2014-04-02 Sebastien Bacher
* Don't output warnings about properties re-requests, debug is enough
Fixes: 1297437 (343963f)
2014-03-25 Ted Gould
* Switch session checking to be in pre-start (d0042b5)
2014-03-25 Sebastien Bacher
* Don't output warnings about properties re-requests, debug is enough
(04a7c41)
2014-03-24 CI bot
* Releasing 12.10.1+14.04.20140324-0ubuntu1 (4b29e70)
2014-03-24 Sebastien Bacher
* Don't mention "library", that's a separate source nowadays
(2906f8d)
2014-03-21 Sebastien Bacher
* Don't mention "library", that's a separate source nowadays
(38f5543)
2014-02-26 Ted Gould
* Update for gnome-fallback (02d2362)
* Switch to not being ubuntu-touch for other desktops (d0e78b3)
2014-02-25 Ted Gould
* Synchronize process management across indicators. (e51f4d9)
2014-02-20 Ted Gould
* Switch to a name watch (7ae14a3)
* Own the name (b12215e)
* Removes the indicator service code (e48b26b)
2014-02-19 Ted Gould
* Switch to using pkglibexecdir (dd359a1)
* Build the upstart desktop file in its own directory (f179a2c)
* Adding a desktop file for the Upstart override (c6a36f4)
* Make sure this is for Unity and XFCE (4d7566c)
2014-02-14 Ted Gould
* Fixing the autostart file (cbe78c0)
* Respawn limit and better rules (7d97429)
2014-01-17 Automatic PS uploader
* Releasing 12.10.1+14.04.20140117-0ubuntu1 (revision 244 from
lp:indicator-application). (ae7db09)
* Releasing 12.10.1+14.04.20140117-0ubuntu1, based on r244 (bd2e50e)
2014-01-17 Sebastien Bacher
* don't error out on deprecated declarations. (0a8bd5a)
* include new lcov version (8fbbd6b)
2014-01-16 Sebastien Bacher
* don't error out on deprecated declarations (c4eb40f)
2013-11-25 Automatic PS uploader
* Releasing 12.10.1+14.04.20131125-0ubuntu1 (revision 242 from
lp:indicator-application). (74305fa)
* Releasing 12.10.1+14.04.20131125-0ubuntu1, based on r242 (70d3aea)
2013-10-31 Ted Gould
* Switch indicator application over to having an upstart job for
managing the service. Also make it emit it's own event
for when application indicators should be started so we
can clean up the boot sequence.
Fixes:
https://bugs.launchpad.net/bugs/1185565. (f2ce0ee)
2013-10-28 Ted Gould
* Adding an XDG Autostart file (96efd3b)
* Merge trunk (6623650)
2013-10-24 Charles Kerr
* When we can't get a handle to the system bus, exit gracefully
instead of crashing.
Fixes:
https://bugs.launchpad.net/bugs/1197788. (da34f0c)
2013-10-23 Charles Kerr
* don't crash if we can't get the session bus. (5e409a4)
2013-08-27 Ted Gould
* Dropping debugging for system-wide support (bcd73f4)
2013-07-12 Ted Gould
* Add the indicator-services-end condition (f3246fc)
* Add the indicator-services-start condition (77943e2)
* Make sure to have proper syntax (e5d5f1a)
2013-05-29 Ted Gould
* Dropping service from extra dist and clean (634e24e)
* Limiting to only the ubuntu session (7b8ff47)
* A comment, because comments rock. (fe92d7d)
* When we get our name, then start app indicators (3051b7a)
* Dropping the dbus service file (a6999f4)
* Adding an upstart job configuration (477cf6a)
2013-01-25 Automatic PS uploader
* Releasing 12.10.1daily13.01.25-0ubuntu1 to ubuntu. (fe77f0e)
* Releasing 12.10.1daily13.01.25-0ubuntu1, based on r239 (fb406e1)
2013-01-23 Charles Kerr
* remove g_type_init() calls; introduce explicit glib requirements to
configure.ac and debian/control (36d8b41)
2013-01-22 Charles Kerr
* add a glib minimum to configure.ac, debian/control. remove
g_type_init() calls. (f788c22)
2013-01-11 Automatic PS uploader
* Releasing 12.10.1daily13.01.11-0ubuntu1 to ubuntu. (f8a22d3)
* Releasing 12.10.1daily13.01.11-0ubuntu1, based on r237 (b9c040b)
2012-12-18 Marco Trevisan (Treviño)
* Indicator-application: removing the deprecated approver support.
(22ee6bf)
* Indicator-application: removing the deprecated approver support
(d5c42de)
2012-11-22 Didier Roche
* Bootstrap message for automated daily uploda. (6f43d3e)
* boostrap message (0f8800c)
2012-11-22 Sebastien Bacher
* Import packaging. (3ff7ad1)
2012-11-21 Mathieu Trudel-Lapierre
* debian/copyright: simplify into one File: stanza. (e21f29c)
* Update Vcs-Bzr, Vcs-Browser and add a notice to uploaders.
(60c5d50)
2012-11-20 Mathieu Trudel-Lapierre
* Add gnome-common to Build-Depends. (e88b951)
* Reorganize Build-Depends for consistency with other indicator
packages. (a873cad)
* Add and export DPKG_GENSYMBOLS_CHECK_LEVEL. (a90599b)
* - Add dh-autoreconf to Build-Depends. - Override dh_autoreconf
to call autogen.sh and not call configure. (0688e47)
* debian/rules: - Use dh_autoreconf with dh sequencer. (a5c187b)
* debian/control: - Update style to match other indicator
packages. (a22957c)
* Tell bzr-builddeb to build this package using split mode (6a6c91d)
* Import debian/ from lp:~ubuntu-desktop/indicator-application/ubuntu
(e174cb0)
2012-08-22 Sebastien Bacher
* releasing version 12.10.0-0ubuntu2 (6603fe4)
* debian/control: Build-Depends on dbus-test-runner and xvfb, dh9
runs make check for us and the tests require those
(e863c24)
* releasing version 12.10.0-0ubuntu1 (bd61f1d)
* New upstream release: - Require GTK3 in Indicators (lp:
#996607); Dropped GTK2 build; Updated packaging to the
current standards (a89e5cc)
* Import upstream version 12.10.0 (9df80bf)
2012-08-21 Charles Kerr
* 12.10.0 (90e5ec8)
2012-06-22 Charles Kerr
* remove gtk2 support.
Fixes: https://bugs.launchpad.net/bugs/996607.
Approved by Lars Uebernickel. (f2ace01)
2012-05-07 Charles Kerr
* require gtk3 (a6590cc)
2012-04-11 Ken VanDine
* releasing version 0.5.0-0ubuntu1 (ed31788)
* New upstream release. * Improved gcov rules in our Automake
files. * Fix parent pointer object for
unity-panel-service. (486e1b3)
2012-04-11 Charles Kerr
* releasing version 0.5.0-0ubuntu1~ppa1 (7201938)
* New upstream release. * Improved gcov rules in our Automake
files. * Fix parent pointer object for
unity-panel-service. (a88bd1a)
* Import upstream version 0.5.0 (cb8844b)
* Sync from Ubuntu Desktop (f0e4fc0)
* 0.5.0 (ab3fc0e) (tag: 0.5.0)
* merge lp:~allanlesage/indicator-application/TDD to improve our
automake gcov rules (3a3e89e)
2012-04-10 Charles Kerr
* merge lp:~ted/indicator-application/parent-pointer to add in the
parent object pointer for unity-panel-service. (0404809)
2012-04-09 Ted Gould
* Set the parent object pointer to help unity-panel-service (1833f44)
2012-03-27 Allan LeSage
* Pedantic name change for gcovr xml coverage results. (22ff9e1)
* Removed gcovr dependency, moved coverage targets to own makefile,
cleaning up *.gcno. (18da8cd)
2012-03-21 Ken VanDine
* releasing version 0.4.94-0ubuntu1 (5a7ebb9)
* New upstream release. * Memory leak (LP: #957992); New
upstream release. * Fix a dbus memory leak. (LP:
#953585) * Fix potential integer overflow (LP: #944234)
(be63d57)
* Merging shared upstream rev into target branch. (086cedb)
* Prepared upstream tree for merging into target branch. (9aa7545)
* Merging shared upstream rev into target branch. (5e75991)
* Prepared upstream tree for merging into target branch. (86bfcf3)
2012-03-21 Ted Gould
* releasing version 0.4.94-0ubuntu1~ppa1 (3aac21d)
* New upstream release. * Memory leak (LP: #957992) (9871b47)
* Import upstream version 0.4.94 (63e76db)
* Sync to Ubuntu Desktop (48d44ef)
* Merging shared upstream rev into target branch. (14455a2)
* Prepared upstream tree for merging into target branch. (2b3f1e6)
* 0.4.94 (daf30a3) (tag: 0.4.94)
2012-03-20 Charles Kerr
* merge lp:~charlesk/indicator-application/hashtable-mem-bugs to fix
memory errors reported in lp bug #957992 (54d6c14)
2012-03-17 Charles Kerr
* Fix two memory bugs with clearing out out directories from our icon
search path. (e80b857)
2012-03-14 Sebastien Bacher
* releasing version 0.4.93-0ubuntu1 (b907100)
* New upstream release: - Coverity INTEGER_OVERFLOW - CID 10716
(lp: #944234) - small memory leak caused by inline use
of dbus_g_method_get_sender() (lp: #953585) (cc14b53)
* Import upstream version 0.4.93 (de6e9e4)
2012-03-13 Charles Kerr
* releasing version 0.4.93-0ubuntu1~ppa (244eff8)
* releasing version 0.4.93-0ubuntu1~ppa (71265fd)
* New upstream release. * Fix a dbus memory leak. (LP: #953585)
* Fix potential integer overflow (LP: #944234) (c102fa5)
* Import upstream version 0.4.93 (fed02bf)
* Sync from Ubuntu Desktop (2c9a58b)
* 0.4.93 (8e26e84) (tag: 0.4.93)
2012-03-12 Charles Kerr
* in generate_id(), we have a handful of local guint8's that get
left-shifted to the point of potential overflow -- so
change them to guint32 instead. Bug reported by coverity
in lp ticket #944234 (e6d8a51)
* change local guint8 fields that get left-shifted to guint32 to
prevent overflow, as reported by coverity in lp bug
#944234 (256988d)
* merge lp:~htorque/indicator-application/fix-small-memleak to fix a
small memory leak described in lp bug #953585 (ec7981d)
2012-03-12 Hernando Torque
* Fix small memory leak by freeing string returned by
dbus_g_method_get_sender. (67847ad)
2012-03-12 Ken VanDine
* releasing version 0.4.92-0ubuntu1 (80459a4)
* New upstream release. * Explicitly specifying GVariant Builder
types * Cleaning up a switch statement (LP: #944236)
(bc0fd0f)
2012-03-09 Ted Gould
* releasing version 0.4.92-0ubuntu1~ppa1 (7045c3e)
* New upstream release. * Explicitly specifying GVariant Builder
types * Cleaning up a switch statement (LP: #944236)
(889f6d9)
* Import upstream version 0.4.92 (d518799)
* Merge from U. Desktop (9b0c61b)
* 0.4.92 (29bf37b) (tag: 0.4.92)
2012-03-05 Charles Kerr
* merge lp:~ted/indicator-application/lp944236 to fix the warning
that Coverity reported in bug #944236 (d6769d5)
2012-03-05 Sebastien Bacher
* releasing version 0.4.91-0ubuntu2 (1c5dbfe)
* Backport an upstream fix for a gvariant misuse, thanks desrt for
it! (e3d1d6d)
2012-03-02 Ted Gould
* Cleaning up switch statement to be more readable (5960d8f)
* Add full type to GVariantBuilder (e2bbff7)
2012-03-02 Ryan Lortie
* make proper use of g_variant_builder_init() (a140461)
2012-02-15 Sebastien Bacher
* releasing version 0.4.91-0ubuntu1 (68e3c2d)
2012-02-15 Ted Gould
* releasing version 0.4.91-0ubuntu1~ppa1 (3ed68eb)
* New upstream release. * Unref approval data after use (568df37)
* Import upstream version 0.4.91 (1401a3d)
* Sync to Ubuntu Desktop (c87f1ae)
* 0.4.91 (9ea46ae) (tag: 0.4.91)
2012-02-12 Ted Gould
* Unreffing the result of the approval message (e985113)
2012-02-11 Sven Baars
* Free the result of g_dbus_proxy_call_finish after use (6d9ffd0)
2012-02-08 Ken VanDine
* releasing version 0.4.90-0ubuntu1 (4b35057)
* New upstream release. * Adding in a code coverage based build
target * Fixing useless variable setting * Fixing
variant usage * Adding support for the Title property
* Fixing to work with Dbusmenu 0.5.90; debian/control:
Dbusmenu bump to 0.5.90 (9b28d1b)
2012-02-08 Ted Gould
* releasing version 0.4.90-0ubuntu1~ppa1 (6350c37)
* debian/control: Dbusmenu bump to 0.5.90 (0bf3d06)
* New upstream release. * Adding in a code coverage based build
target * Fixing useless variable setting * Fixing
variant usage * Adding support for the Title property
* Fixing to work with Dbusmenu 0.5.90 (44cc6e7)
* Import upstream version 0.4.90 (2296595)
* Sync to U. Desktop (e548f85)
* 0.4.90 (8c0ecc8) (tag: 0.4.90)
* Adding in a code coverage based build target (1652735)
* Fixing useless variable setting (4e1deeb)
* Fixing variant usage (8a1e30e)
* Adding support for the Title property (0492224)
* Fixing to work with Dbusmenu 0.5.90 (8aa53e2)
2012-02-03 Ted Gould
* Oops, forgot one (a85b08a)
* Making sure to initial string pointers (4145c58)
* Make sure to initialize values before free'ing them (ee1ac0d)
* Ensuring that the values are initialized to NULL before using that
later. (18b2217)
* Attaching bug (7614d41)
* Fixing variant usage (79e3bfe)
* Ignoring generated files (11f93eb)
* Fixing some of the variant usage to free strings appropriately
(3bfb6d6)
* Changing the signatures on the indicator side, we don't care much
about title though. (432817d)
* Don't need the ID as that's already the hint (bc7f44a)
* Changing the output signatures (cef6f0f)
* Adding in service versions to detect the dbus API change (3ceb032)
* Adding to more strings to the standard structure, ID and title
(1b2a457)
* Changing the service description to match (2a7a9f3)
* If we have a mega-change of things, let's signal a title change
(c1f07f7)
* Handling the 'NewTitle' signal coming from the application
indicator (c91e6fc)
* Add the title to the structure for the application indicator
(716e613)
* Fixing includes to match dbusmenu v0.5.90 (37d7bd7)
* Requiring dbusmenu 0.5.90 (996e46e)
2012-01-25 Ken VanDine
* releasing version 0.4.0-0ubuntu2 (0e850cc)
2012-01-24 Charles Kerr
* fix dead store found by clang static analyzer (3cfb188)
2012-01-24 Ken VanDine
* no change rebuild for libindicator7 (2e6ca53)
2011-12-06 Allan LeSage
* Added coverage reporting via gcov config and targets. (dd6a60c)
2011-09-28 Ken VanDine
* releasing version 0.4.0-0ubuntu1 (dfb47bb)
* New upstream release. * Fix memory leak (LP: #829961) (f4999fe)
2011-09-28 Ted Gould
* Merge U. Desktop (749e1fc)
* releasing version 0.4.0-0ubuntu1~ppa1 (77b5c42)
* New upstream release. * Fix memory leak (LP: #829961) (60db507)
* Import upstream version 0.4.0 (61ce124)
* 0.4.0 (ec05da4) (tag: 0.4.0)
2011-09-16 Ted Gould
* Memory leaks on double calls for properties (ac5c445)
* Pulling in mterry's additional fixes (bed6607)
* Ensure we set a default value for aicon (21a6e47)
2011-09-16 Michael Terry
* free application fields before resetting them to new values
(a11c876)
2011-09-14 Ted Gould
* Freeing properties on second run of building the app indicator
(2f9133d)
2011-08-11 Sebastien Bacher
* releasing version 0.3.92-0ubuntu1 (256899d)
* debian/rules: - update the translations template (c538da3)
* New upstream release. * Support middle click actions and send
as Ayatana Activates * Fix signature for null sets
(8735cde)
2011-08-11 Ted Gould
* releasing version 0.3.92-0ubuntu1~ppa1 (09cbd15)
* New upstream release. * Support middle click actions and send
as Ayatana Activates * Fix signature for null sets
(e66b698)
* Import upstream version 0.3.92 (e7d1dd3)
* Merge from U. Desktop (6773f89)
* 0.3.92 (3bb503c) (tag: 0.3.92)
2011-07-22 Ted Gould
* Enabling Secondary Activate support (bc8e1d9)
* Fixing the signal prototype (6e7a1fe)
2011-07-21 Marco Trevisan (Treviño)
* (11bf1f5)
* Up (2426537)
* Use g_variant_new_uint32 as we just have one parameter (f1a3038)
* Don't use "SecondaryActivate" method (7cd7056)
2011-07-10 Marco Trevisan (Treviño)
* Add support to the "SecondaryActivate" method (1a569c2)
2011-07-09 Marco Trevisan (Treviño)
* Merge with upstream (81714fd)
2011-07-08 Sebastien Bacher
* releasing version 0.3.91-0ubuntu2 (432dd0a)
2011-07-08 Ted Gould
* Fixing the signature on the startup functions. (f255dfc)
* Forgot an 's' in the case of no app indicators (3770d74)
2011-07-08 Sebastien Bacher
* releasing version 0.3.91-0ubuntu1 (39322c2)
2011-07-07 Ted Gould
* Merging Ken's branch as well. (b7c636a)
* releasing version 0.3.91-0ubuntu1~ppa1 (3eca9a2)
* New upstream release. * Build with libindicator 0.4 (1e42fac)
* Import upstream version 0.3.91 (457dd74)
* U. Desktop Sync (f374f8e)
* 0.3.91 (75eadfd) (tag: 0.3.91)
* Putting in name hints for the indicators (3d3beb6)
* Oops, should be a free (510e1e1)
* Making sure to unref() the result if we get one. (3640e44)
* Setting the name hints through the stack. (2902ab6)
* Migrated to libindicator 0.4 (1af03e8)
2011-07-02 Marco Trevisan (Treviño)
* Use the "entry-scrolled" signal instead of the old ones (62c7490)
* Fix compilation with GTK+-2.0 (0ab53a4)
2011-06-28 Ken VanDine
* releasing version 0.3.90-0ubuntu2 (f099efd)
* Make sure gtk2 builds get pkgconfig info for appindicator-0.1
instead of appindicator3-0.1 (2799ed4)
2011-06-22 Ken VanDine
* releasing version 0.3.90-0ubuntu1 (f2c00ec)
* New upstream release. * GTK3 Port (3315ba5)
2011-06-22 Ted Gould
* releasing version 0.3.90-0ubuntu1~ppa1 (e27d98a)
* New upstream release. * GTK3 Port (c15ad5e)
* Import upstream version 0.3.90 (3eea1be)
* Merging Ubuntu Desktop (1152e6d)
* 0.3.90 (58779f7) (tag: 0.3.90)
* Changing where to find the header (1a9efdf)
* Making tests use proper version of libappindicator and cleaning up
libappindicator usage to use the same enum headers.
(58f4756)
2011-06-10 Ted Gould
* Add path for GTK3 indicator and make GTK3 default (b5aec1c)
2011-05-26 Michael Terry
* change to gtk3 by default (fc4bf64)
* use indicator3 path if using gtk3 (484079b)
2011-04-14 Ken VanDine
* releasing version 0.3.2-0ubuntu1 (361d963)
2011-04-14 Ted Gould
* releasing version 0.3.2-0ubuntu1~ppa1 (28549d9)
* New upstream release. ∘ Free app using application_free() instead
of just freeing the memory (LP: #743564) ∘ Protect against
cancellation ∘ Make it so that we can cancel GetAll() (LP:
#725665) ∘ Make it so that we can cancel Approver requests
(d8f7ec7)
* Import upstream version 0.3.2 (b8ece12)
* 0.3.2 (ba6c0b1) (tag: 0.3.2)
2011-04-12 Ted Gould
* releasing version 0.3.1-0ubuntu3~ppa1 (36e1489)
* Make it so that we can cancel Approver requests (9ee516c)
* Make approver signals cancelable (4803742)
* * Protect against cancelation * Make it so that we can cancel
GetAll() (LP: #725665) (8589bf9)
* Ensure we can cancel GetAll() (0edabc6)
* Protect from canceling (dd97a3c)
* Drop debian/patches/lp_743564.patch as merged upstream. (a595799)
* Upstream Merge * Free app using application_free() instead of
just freeing the memory (LP: #743564) (f428921)
* Merge to U. Desktop (0536a41)
* Makes sure to free the application using the application_free()
function (d24fd27)
2011-04-12 Michael Terry
* cancel approver requests too (e029f89)
2011-04-11 Michael Terry
* make sure we can cancel GetAll call (ce5dcdd)
* catch one more cancel-before-accessing freed memory instance --
this one resulting in a double free (bee98f7)
2011-04-08 Ken VanDine
* releasing version 0.3.1-0ubuntu2 (e25a3f6)
2011-04-08 Michael Terry
* don't merely free an app, it has to be properly removed from list
and such (2e0265d)
2011-04-07 Ken VanDine
* releasing version 0.3.1-0ubuntu1 (c361700)
2011-04-07 Ted Gould
* releasing version 0.3.1-0ubuntu1~ppa1 (72fbb08)
* New upstream release. ∘ Fix the name of "nm-applet" in the
overrides file ∘ Handle async tasks being canceled (LP:
#752998) (d468238)
* Import upstream version 0.3.1 (b0a027c)
* Sync to U. Desktop (b07cb5f)
* 0.3.1 (f17f35f) (tag: 0.3.1)
* Handle async cancels (e4e135f)
2011-04-07 Michael Terry
* cancel-guard several callback functions (f57f2e7)
2011-04-06 Ted Gould
* Fixing the name of the network manager applet (108f239)
2011-03-23 Ken VanDine
* releasing version 0.3.0-0ubuntu1 (06c66da)
2011-03-23 Ted Gould
* releasing version 0.3.0-0ubuntu1~ppa1 (01b1054)
* New upstream release. * Version number bump (8a87e5c)
* Import upstream version 0.3.0 (fe82495)
* Merge from U. Desktop (a919e35)
* 0.3.0 (2e52cac) (tag: 0.3.0)
2011-03-16 Ken VanDine
* releasing version 0.2.95-0ubuntu1 (e8ef564)
2011-03-16 Ted Gould
* releasing version 0.2.95-0ubuntu1~ppa1 (1058de2)
* Drop debian/patches/fix-null-string-to-variant-crash.patch
(c98c03e)
* New upstream release. ∘ Fix ordering of indicators ∘ No more
duplication of indicators on the panel (LP: #708243) ∘
Using proper object on async call (LP: #734584) ∘ Protect
from the accessible description being NULL. (LP: #724767)
(7c64f15)
* Import upstream version 0.2.95 (57bf196)
* 0.2.95 (4492990) (tag: 0.2.95)
* Fix ordering of indicators (eb6a863)
* Moving iBus and keyboard under advice of mpt (9e0c4a2)
2011-03-15 Ted Gould
* Handle the case of getting application signals while still waiting
on the full list. (a601eb2)
* Using the proper object to finish the call (a76d0eb)
2011-03-14 Ted Gould
* Use the passed in proxy to get the result to ensure it's valid.
(1aeeeb0)
* Inserting network manager applet at the front (b0e008b)
* Debug message on missing override file. (b29c6f2)
* Debug message on missing override file. (31299f3)
* Do a sort after deciding the ordering ID (e5d2b6b)
* Noticing a missing unref (e2adde1)
2011-03-11 Ted Gould
* Adding bug (a0387eb)
* If we're requeuing we don't really want to continue to process the
signal (00a8865)
* Removing applications before adding new ones. (a11d8f1)
* A couple memory leaks (d3c5e25)
* Only clear the cancel if we're not being cancelled (c892f84)
* Unrefing the object, it might not happen right away, so let's clear
it ourselves. (bc6a7d9)
* If we're in the middle of a GetApplications and we get another
signal, let's try again. (a4e9c0b)
* Add a cancellable object for the GetApplications call (c6313ac)
2011-03-03 Ted Gould
* Merge from U. Desktop (c8b3e36)
2011-03-02 Ted Gould
* Protect from the accessible description being NULL (7b31678)
2011-02-25 Michael Terry
* debian/control, debian/rules: - Add quilt as a patch syste.
debian/patches/fix-null-string-to-variant-crash.patch: -
Don't pass a null string to GVariant, it hates it. LP:
#724767 (c638472)
* fix crash on null string passed to GVariant (6a1c35a)
2011-02-24 Ken VanDine
* releasing version 0.2.94-0ubuntu1 (8ea37c5)
2011-02-24 Ted Gould
* releasing version 0.2.94-0ubuntu1~ppa1 (a45a01a)
* New upstream release. * Make the accessible description NULL so
that indicator-applet doesn't crash (LP: #721533) *
emit LabelChanged signal along with the IconChanged signal
(LP: #712581) (4b3ebd6)
* Import upstream version 0.2.94 (87fb997)
* 0.2.94 (63807a0) (tag: 0.2.94)
* releasing version 0.2.93-0ubuntu5~ppa2 (7357145)
* Fix, let's not talk about it. (fcdd637)
* Making sure we have a description for the variant world (419c9a4)
* releasing version 0.2.93-0ubuntu5~ppa1 (b61f621)
* Upstream Merge * Adding in support for Accssible Descriptions
(14fc5ff)
* Sync with U.Desktop (2c1ee7d)
* Adding support for accessible descriptions (22dee03)
* Switching things around so the icon switches with the description
all the way up the stack (1cfc978)
2011-02-23 Ted Gould
* Adding a missing brace (ab57d41)
2011-02-21 Ted Gould
* Make sure to NULL out the structure (c507ab1)
2011-02-19 Ken VanDine
* releasing version 0.2.93-0ubuntu4 (c893dfd)
2011-02-18 Ted Gould
* Ensures the accessible description is NULL (f614bf0)
2011-02-17 Ken VanDine
* releasing version 0.2.93-0ubuntu3 (1fa5506)
2011-02-16 Ted Gould
* Remove g_error's to stop abortion. (0c56561)
* On status change update the label as well (14df3d3)
2011-02-11 Ken VanDine
* releasing version 0.2.93-0ubuntu2 (e3db442)
2011-02-11 Michael Terry
* don't abort on various unexpected situations; just spit out
critical warning (fb64a7a)
* update label too in update_status (d2a8021)
2011-02-11 Luke Yelavich
* Use the ACCESSIBLE_DESC_UPDATE signal to refresh the accessible
description. (70d0a4d)
2011-02-08 Luke Yelavich
* accessible_name -> accessible_desc (a958e07)
* Merge from trunk (8c46407)
2011-02-07 Ted Gould
* Build fix to get libindicator header (3cca546)
2011-02-07 Luke Yelavich
* Add accessible name support (e6a59a7)
* Include indicator-object.h to reference INDICATOR_OBJECT_SCROLL_UP
(5568288)
2011-02-03 Ken VanDine
* releasing version 0.2.93-0ubuntu1 (24664ec)
2011-02-03 Ted Gould
* releasing version 0.2.93-0ubuntu1~ppa1 (56bc4ef)
* Dropping old entry (dc643bf)
* Merge from U. Desktop (2c42caf)
* New upstream release. * Support the scroll wheel event and send
it to applications. (18e5be1)
* Import upstream version 0.2.93 (cd55d42)
* 0.2.93 (f780ca4) (tag: 0.2.93)
* Adding in the indicator-object header (2a36982)
* Support scroll events from libindicator on down to sending them to
the applications. (dc47b4e)
2011-01-29 Marco Trevisan (Treviño)
* Use INDICATOR_OBJECT_SCROLL instead of GDK_SCROLL enum value
(70bc5ad)
* Using the SNI method "Scroll" instead of "XAyatanaScrollAction"
(df3e144)
* indicator-application: rename the method ApplicationScrollSignal to
ApplicationScrollEvent (016feb9)
2011-01-27 Ken VanDine
* releasing version 0.2.92-0ubuntu1 (c3f02be)
2011-01-27 Ted Gould
* releasing version 0.2.92-0ubuntu1~ppa1 (e08f548)
* New upstream release. * Fix naming of the approver interface
* Fix a bug in the builders (6379235)
* Import upstream version 0.2.92 (2c6ef4e)
* Sync to Ubuntu Desktop (94b8617)
* 0.2.92 (82c80cd) (tag: 0.2.92)
2011-01-26 Ted Gould
* Fix the use of variant builder (40d7a61)
2011-01-27 Marco Trevisan (Treviño)
* application-appstore: support for ApplicationScrollSignal method
(6adb897)
* indicator-application: catch "scroll-entry" signal and send
ApplicationScrollSignal to appstore (e6f4e51)
2011-01-26 Ted Gould
* Protecting against empty application lists, fixing the builder to
be on the stack and using it correctly. (0bd9ddc)
2011-01-18 Ted Gould
* Switch to canonical.com (85761bc)
2011-01-17 Ted Gould
* Changing the name of the approver interface (2e57848)
2011-01-14 Ken VanDine
* releasing version 0.2.91-0ubuntu2 (7ac8601)
* Updated for the gir abi transition; debian/control - build
depend on dbusmenu >= 0.3.90 - Fixes FTBFS (LP: #684949)
(fe9f030)
* releasing version 0.2.91-0ubuntu1 (81a4a72)
* Import upstream version 0.2.91 (9dee1e2)
* Reverted changelog for merge (93ada25)
* distcheck fixes, use notdir to wrap basename (ada08ac) (tag:
0.2.91)
* Version bump, 0.2.91 (d0fa7ae)
2011-01-14 Ted Gould
* Porting to GDBus and fixing some other misc. issus. (1edb21b)
2011-01-13 Michael Terry
* merge ken's com.canonical branch (fe8048c)
* make sure to free pre-validated applications; add applications to
the app list as soon as we create them, to avoid apps that
spam us (like gnome-power-manager) from creating multiple
apps in our list (a3311f4)
2011-01-13 Ken VanDine
* com.canonical rename for the indicator (7f2ea1f)
2011-01-13 Michael Terry
* reduce debug spew (3992c95)
* don't use cached properties for new icons or new aicons either.
Instead, just ask for all properties again (520b3c3)
* actually request properties from applications; using cached
properties doesn't seem to work (6f02e42)
* don't second guess service's new application, which caused our
positions to get out of sync with the service if it was a
bit confused (06e5e14)
* watch for name change, instead of name owner change for approver
connections (dcde0f7)
2011-01-12 Michael Terry
* fix issue where icons never went away (16734d8)
* fix bug with gvariant string; port test (4b0e072)
2011-01-11 Ken VanDine
* check for dbusmenu 0.3.90 (1434c5b)
2011-01-11 Michael Terry
* port to gdbus (af582ad)
2010-12-16 Ken VanDine
* releasing version 0.2.90-0ubuntu4 (54c9e64)
2010-12-10 Ken VanDine
* releasing version 0.2.90+r170-0ubuntu1 (bc0f5cc)
2010-12-09 Ken VanDine
* releasing version 0.2.90-0ubuntu3 (6e9fee7)
2010-12-08 Ted Gould
* releasing version 0.2.90-0ubuntu4~ppa1 (1f80de2)
* Upstream Merge * Removing libappindicator from the tarbal.
Autogen; debian/control: Removing all libappindicator
packages (4b13b78)
* Sync to trunk (951f22d)
* Remove the library from the build (6c905a6)
* releasing version 0.2.90-0ubuntu4~ppa1~nolib1 (961ba26)
* debian/control: Removing all libappindicator packages (39febd0)
* Autogen (7df1ae5)
* Dbusmenu API update (940a2eb)
* Updating to new dbusmenu, no API changes here (97fcd26)
* Upstream Merge * Removing libappindicator from the tarball
(6e142fb)
* Updating to trunk with mostly libappindicator changes. (01a3193)
* Merge from Ubuntu Desktop for dual builds (3acbfb5)
2010-12-08 Ken VanDine
* debian/control - build depend on dbusmenu >= 0.3.90 (b917f6f)
* releasing version 0.2.90-0ubuntu2 (a227646)
* releasing version 0.2.90-0ubuntu1 (1860f39)
* New upstream release. * A race fix on the dbus name (LP:
#526499) * Fixing the Watcher Interface * Fixes to
build with GTK 2/3 * Fixes to build with valac-0.1.
debian/control - Changed the valac build depends to
valac-0.12; debian/python-appindicator.install - Make
sure python2.6 and python2.7 files get include.
debian/rules - Fix builds for multiple python versions
- disable parallel builds, it breaks the mono binding
generation (be69a42)
2010-12-07 Ted Gould
* releasing version 0.2.90-0ubuntu1~ppa1 (c05b64a)
* New upstream release. * Fixes to build with GTK 2/3 * Fixes
to build with valac-0.12 (4478b59)
* Import upstream version 0.2.90 (a413eba)
* 0.2.90 (12d94d3) (tag: 0.2.90)
* Update to newest g-ir-scanner and vapigen (eef3316)
2010-12-03 Ted Gould
* Merging with trunk to get the GTK 3 build. Though, we don't really
use it yet. (fe4253d)
* Merging in support for GTK3/2 dual build (5ffa185)
2010-12-03 Ken VanDine
* Build fixes with the latest g-ir-scanner and vapigen (0a09bca)
* Explicitly call ShowAll on the menu, otherwise it isn't show.
Specify a panel icon that exists for the example (e7e4604)
2010-12-02 Ted Gould
* Fixing up the test so it builds and runs (6456a3f)
* Removing some unneeded files (1a1a2e3)
* Linking to the install directory of libappindicator for the header
files (6e2c639)
* Adding the libappindicator dep for the tests (7c3589d)
* Dropping the library tests (68fd1cc)
* Removing the example (caf5eeb)
* Removing the C files and build (8b85dae)
* Removing doc and introspection build options (683065b)
* Remove m4 files and including them in dist (a5eb518)
* Removing LGPL (14aebb7)
* Removing bindings (aae875c)
* Removing docs (3fee20a)
* Removing library deps, bindings and documentation that are included
with the lib (938d4e2)
* Splitting the deps (69ee3a2)
2010-11-01 Ted Gould
* releasing version 0.2.9-0ubuntu2~ppa2 (15d58f5)
* Upstream Merge * A race fix on the dbus name (LP: #526499)
(ea40161)
* Sync to trunk (7ab5839)
* Race fixup (9c008cd)
2010-10-20 Ted Gould
* releasing version 0.2.9-0ubuntu2~ppa2~race2 (52c2b07)
* Upstream Merge * Making a printout (77d4ced)
* Uhg, we need a message to know if we've fixed the bug. (b176944)
2010-10-19 Ted Gould
* releasing version 0.2.9-0ubuntu2~ppa2~race1 (7fa4cd4)
* Upstream Merge * A race fix on the dbus name (ed10f8d)
* releasing version 0.2.9-0ubuntu2~ppa1 (5bfdd2a)
* Upstream Merge * Fixing the Watcher Interface (f5573ca)
* Merge with Ubuntu Desktop (597ba2a)
* Add a nice little warning in (ccea5af)
* Adding a check for the name to ensure we didn't miss it (3758df5)
2010-10-13 Michael Terry
* ship both pc files in EXTRA_DIST (e8289f9)
2010-10-08 Ted Gould
* Fixing the Watcher interface (50440e6)
2010-10-08 Aurelien Gateau
* NotificationHost => StatusNotifierHost, Service =>
StatusNotifierItem (ea206ef)
* Fix implementation of org.kde.StatusNotifierWatcher interface
(6f032f5)
2010-10-06 Michael Terry
* instead of always building gtk2 and gtk3, add a --with-gtk= flag to
configure to specify which to build with (3551eb1)
2010-09-22 Didier Roche
* releasing version 0.2.9-0ubuntu1 (853fe81)
* debian/libappindicator0.1-cil.installcligac: Add the 0.1 policy
file.; debian/control: - build with latest
libindicator-dev for ABI breakage (LP: #637692) (2b4effa)
2010-09-22 Ted Gould
* releasing version 0.2.9-0ubuntu1~ppa2 (fbedfce)
* debian/libappindicator0.1-cil.installcligac: Add the 0.1 policy
file. (d1f389d)
* Adding a new library line for configure so that we don't end up
with extra libs in the library. (eab2ebe)
* releasing version 0.2.9-0ubuntu1~ppa1 (a182b72)
* New upstream release. * Fix submenus with Glade applications
(LP: #608219) * Add new functions to Mono and Python
bindings (a374c74)
* Import upstream version 0.2.9 (f5e7b8e)
* 0.2.9 (fe08c86) (tag: 0.2.9)
2010-09-21 Ted Gould
* Fixes for the bindings (7a891ca)
2010-09-21 Sense Egbert Hofstede
* Resolving conflict when merging with trunk (f8bbae1)
* Undoing a previous commit that had nothing to do with what I want
to achive in my merge request. That's what you get for
misusing old branches\! (e9ed8cb)
* Created a second policy file to make sure that applications
depending on 'appindicator-sharp' will not have to be
recompiled. Changes to the packaging is required to make
sure the policy file gets installed. (df5dbe2)
2010-09-21 Ted Gould
* releasing version 0.2.8-0ubuntu2~ppa1 (76442cd)
* Autogen.sh (dca441b)
* Upstream Merge * Fix Mono binding versioning and build (LP:
#636132) (2491cd3)
* Merge ubuntu-desktop (50aa305)
* Fixing Mono bindings to build versions correctly. (1be18c5)
2010-09-20 Sense Egbert Hofstede
* Remove the redudant set and get functions for the ordering_index
property from the Mono bindings as we want programmers to
work witht the property directly. (12d7f82)
* * Adding Python bindings for the new API additons * Updating the
Mono assembly version to reflect the changes to the API *
Remove two redundant elements from the Mono bindings'
metadata file (3f3c6a0)
* Merging Jo Shields' fixes to the build infrastructure to shut GAPI
up. (482276f)
2010-09-19 Jo Shields
* Bump SONAME in Mono binding to libappindicator.so.1 (316dbc5)
* The purpose of a dllmap is to turn a DllImport for "foo" into a
dlopen of "bar". This is most commonly used to make apps
more cross-platform, by specifying the Windows library
name (foo.dll) into a Linux/OSX/etc filename
(libfoo.so.0). (4247b7e)
* gapi2-parser cannot cope with multiple signals connected to the
same method - it will bail out, complaining it cannot find
a method to match the second signal. (b598108)
2010-09-18 Sense Egbert Hofstede
* Updating to trunk (6c8da9e)
* Commit latest changes before merging with trunk (e050bfc)
2010-09-15 Ted Gould
* Adding a disthook for AUTHORS (c2aee8a)
2010-09-15 Ken VanDine
* releasing version 0.2.8-0ubuntu1 (fee0915)
2010-09-15 Ted Gould
* releasing version 0.2.8-0ubuntu1~ppa1 (b8eb440)
* * Update the icon if the item is visible (LP: #639643); New
upstream release. * Handle double registration of
indicators (LP: #621838) (db852e8)
* Import upstream version 0.2.8 (c876d26)
* 0.2.8 (a4dc11a) (tag: 0.2.8)
* Merging of Ubuntu Desktop (859281b)
* releasing version 0.2.7-0ubuntu1~ppa2 (9ee069f)
* Update the icon if the item is visible (LP: #639643) (fecd2e9)
* Upstream Merge * Update the icon if the item is visible
(7d4feea)
* Merging trunk (f30ec96)
* Making it when we see changes we always update the icon. (9485bb3)
* releasing version 0.2.7-0ubuntu1~ppa2~attention1 (0e5b5b6)
* Upstream Merge * Update the icon if the item is visible
(7ccd345)
* Allowing updates if the item is visible. (8e221f4)
2010-09-09 Ken VanDine
* releasing version 0.2.7-0ubuntu1 (d7a7c77)
2010-09-09 Ted Gould
* releasing version 0.2.7-0ubuntu1~ppa1 (4054bd4)
* Merge from Ubuntu Desktop (4057700)
* New upstream release. * Handle double registration of
indicators (LP: #621838) (250c2b0)
* Import upstream version 0.2.7 (b6d9801)
* 0.2.7 (b39568d) (tag: 0.2.7)
* Handle double registration of indicators. (1f5808c)
2010-09-07 Ted Gould
* Check for duplicate additions of applications and just rerequest
properties. (c560340)
* Extra debugging info (01ca0dc)
* Logging status change (d18fdf6)
2010-09-02 Ken VanDine
* releasing version 0.2.6-0ubuntu1 (5e8e9f5)
2010-08-26 Ted Gould
* releasing version 0.2.6-0ubuntu1~ppa1 (d3dcecf)
* Merging from Ubuntu Desktop (6e060fd)
* New upstream release. (84b7100)
* Import upstream version 0.2.6 (17e7865)
* 0.2.6 (7b3e58b) (tag: 0.2.6)
2010-08-25 Ted Gould
* releasing version 0.2.5-0ubuntu1~ppa2 (166096e)
* Upstream Merge * Fixing the position of new indicators (LP:
#623205) * Position the ibus and keyboard layout
indicators correctly. (87c04ea)
* Ordering i18n and keyboard indicators (c74bade)
* Putting new icons in the right place (ee3fb93)
2010-08-24 Sense Egbert Hofstede
* Merging with trunk (c553ba5)
2010-08-20 Ted Gould
* Get the proper position for an application when it becomes visible.
(81de048)
* Handling the typo (35924b4)
* Adding keyboard and ibus to overrides (d74f776)
2010-08-19 Ken VanDine
* releasing version 0.2.5-0ubuntu1 (6e18a72)
2010-08-19 Ted Gould
* releasing version 0.2.5-0ubuntu1~ppa1 (618737a)
* New upstream release. * Allowing approvers to change thier mind
(f71709a)
* Import upstream version 0.2.5 (101c8ff)
* 0.2.5 (b51c1de) (tag: 0.2.5)
* Fix approver for function change (ced1792)
* releasing version 0.2.4-0ubuntu2~ppa3 (80345b2)
* Upstream Merge * Allowing approvers to change thier mind
(1c12616)
* releasing version 0.2.4-0ubuntu2~ppa2 (1051775)
* Adding a signal for approvers to be able to change their mind
(0ed6b99)
* Merging Ubuntu Desktop (18cbc6a)
* Upstream Merge * Making it so the approver actually approves
indicators * Fixing a small memory leak (6881133)
* Sync to trunk (425894a)
* Changing the state machine to have approvers actually aprove
things. (e930a47)
* Fixing a memory leak Cody noticed. (fbb9323)
2010-08-18 Ted Gould
* Flesh out the revise judgement handler to update the list of
approvers. (9fc60ae)
* Refactor so that there is a function to look for applications.
(1865cf3)
* Connecting into the signal coming from the approver (ca21363)
* Adding a signal to the approver interface (12c8cd4)
* Changing function name as well. (a1e4f99)
* XAyatana the register interface (1d51365)
* Start some approvin' (e71beec)
2010-08-16 Ted Gould
* releasing version 0.2.4-0ubuntu2~ppa1~approver3 (82c8332)
* Upstream Merge * Fixing approvers retiring off the bus
(f1a43bb)
* Commenting out debug message (72c93f2)
* Making it so that we don't set the proxy to null right away.
(fb1811e)
* Making the list so that if there are errors we handle them well.
(93f92e8)
2010-08-13 Ted Gould
* releasing version 0.2.4-0ubuntu2~ppa1~approver2 (c712bf0)
* * Making it so the approver actually approves indicators; New
upstream release. * Add in ordering IDs * Adding label
support into the library * Adding label support into the
indicator * Breaking the ABI in order to get more space
in the class structure. * Allow the icon theme path
to be changed dynamically (LP: #607831); debian/control:
Moving libappindicator0 to libappindicator.
debian/rules: Moving libappindicator0 to libappindicator1
* Rebuild with the new gobject introspection (61fbb6f)
* Upstream Merge * Updating to trunk * Fixing application list
(45fc7d9)
* Making sure to remove our applications from the list as well.
(ba5b85a)
* Responding to approver errors like they're approval. (a0023d1)
* Uhg, broken merge. (c04a7cf)
* Updating to trunk (564b2af)
* Freeing the allocated keys. (eadc69d)
2010-08-12 Ken VanDine
* releasing version 0.2.4-0ubuntu1 (2840a6f)
2010-08-12 Ted Gould
* releasing version 0.2.4-0ubuntu1~ppa1 (2368f53)
* New upstream release. * Adding label support into the library
* Adding label support into the indicator * Allow the
icon theme path to be changed dynamically (LP: #607831.
Rebuild with the new gobject introspection (468ac3c)
* Import upstream version 0.2.4 (0d7fd31)
* 0.2.4 (d81670c) (tag: 0.2.4)
* Merging in Ubuntu Desktop branch (47aa858)
* releasing version 0.2.3-0ubuntu2~ppa6 (92aca3c)
* Upstream Merge * Add in ordering IDs (374ce0d)
* Sync to trunk (6769e30)
* Switching to using ordering IDs instead of the LRU file. (f6b5ccd)
2010-08-11 Ted Gould
* releasing version 0.2.3-0ubuntu2~ppa6~approver1 (91c8163)
* Upstream Merge * Making it so the approver actually approves
indicators (081c349)
* Changing it so that the list of applications has all the
applications in it, independent of visible state.
(7a4bfc9)
* Making sure to only list the visible applications. (98252b2)
* Switching the get_position() function to look at the visibility of
the applications. (fa45eaa)
* Handle the proxy being destroyed, and cleaning up the approver.
(d722653)
* Simplifying the visual state to just be shown/hidden while letting
the status show which icon is shown. (360e8a4)
* Switching a few status checks to look at the visible state
(0db4eb5)
* Make it so that an approver that gets free'd gets removed from the
applications list of approval. (4398a69)
* Moving some TODOs (ba69049)
* Changing the apply_status function to be less about applying the
status and more about trying to apply a visual state that
can be determined by things like approvers. This means
that it doesn't get passed the status. (b7419c3)
* Making sure to clean up the approved by list (ddd8746)
* Adding a visible state entry to the application structure (a635d68)
* Managing the list with the approver returns. (fbdf4bf)
* Changing to a list, we're going to need to track who so when they
disconnect we can know the state change. (e8b76a6)
* Adding a count for the number of approvers that have approved the
application. (efd7be1)
* Merging in the XLabel branch to handle conflicts. (b7d28a1)
* releasing version 0.2.3-0ubuntu2~ppa5~order5 (c1b795e)
* Upstream Merge * Various fixes to the ordering index
calculation * Putting ordering indexes in the X
namespace (1486db2)
* Fighting wrap around (f34b5e5)
* Better debug printing. (d678c35)
* Using unsigned chars for calculating, we want no sign extension.
(cfe735b)
* We were using the wrong function, we want categories not statuses!
(a0c8fb0)
* Making a wrapper property for the 'X' domain (9346cf3)
* Adding the wrapper properties to the get. (7330f01)
* Adding in a wrapper signal (1fbc480)
* Adding a set of wrapper properties that can be used by the dbus
interface. (ea682be)
* Changing the app store (2a0f0b9)
* Changing the Dbus interface. (16cdfbc)
* Putting the ordering index into the 'x' domain. (818f7c4)
* Making it so that applications will pass '0' over dbus if they
don't have a set ordering index. (7301841)
* releasing version 0.2.3-0ubuntu2~ppa5~order4 (bd56ec8)
* Upstream Merge * Cleaning up the ID creation and ordering to
put low numbers to the right. (68b7423)
* Ignoring the generate id library object file. (0dd2e79)
* Instead of using a struct just using multiply, which in all
reality, is more clear and the compiler will optimize it
for us. (8bfbd55)
* Making the categories a case statement. (38c7a01)
* Switching to be more opaque, but also more sane. (26d50df)
* Flipping the order (fd956d9)
* releasing version 0.2.3-0ubuntu2~ppa5 (15f7dee)
* Autogen (5d6feac)
* releasing version 0.2.3-0ubuntu2~ppa5~order3 (5dcb1d4)
* Upstream Merge * Checking to make sure we get a list of keys
before using them. * Fixing typo for group name in
overrides file. (3e415d5)
* Typo (77343b7)
* releasing version 0.2.3-0ubuntu2~ppa5~order2 (bceb5ac)
* debian/indicator-application.install: Adding in the
ordering-override file to this package. (d47d1f1)
* Ensuring that we got a list of keys so we don't crash (bdd9c85)
2010-08-11 Sebastien Bacher
* releasing version 0.2.3-0ubuntu2 (77beaba)
2010-08-10 Ted Gould
* Autogen (3d26f16)
* Upstream Merge * Adding in override files for the ordering IDs
(21fcf7a)
* Checking for an override and applying it. (51de4ce)
* Fleshing out the loading overrides function. (de6c40d)
* Putting together the pieces to look for override files (f4b22a7)
* Adding an override hash table (dad491a)
* Installing the override file in the package specific data
directory. (73fb38c)
* Adding in an override keyfile (6c0afe2)
* releasing version 0.2.3-0ubuntu2~ppa5~order1 (1c31b31)
* Doc fixes (3a5a1f6)
* Autogen (e85c5b2)
* Fixing documentation with new API. (79436bd)
* Upstream Merge * Add in ordering IDs (3b61df4)
* Updating to trunk (a34479e)
* Removing the LRU file object. (d2c36a2)
* Removing the LRU file (bf3f4c6)
* Pulling in the generate ID function as well (961575a)
* Setting the ordering ID. (c27a7a9)
* Adding in an ordering index for application structures (09e6c21)
* I like 'index' better than 'id' -- now everything is consistent.
(06c0194)
* Adding 'OrderingIndex' and realigning. (1cac2ea)
* Providing accessors for the ordering_id property (f04dd09)
* Storing the value and allowing the get to use a generated value.
(220d6a3)
* Uhg, wrong library (4a52e90)
* Brining generate-id into the fold (5bffdaf)
* Writing a small little function to generate the ID. (bd2b24f)
* Adding the ordering id property. (fe604c4)
* releasing version 0.2.3-0ubuntu2~ppa4 (e4484ff)
* debian/rules: Moving libappindicator0 to libappindicator1 (352c666)
* debian/control: Moving libappindicator0 to libappindicator1
(294f162)
* Upstream Merge * Breaking the ABI in order to get more space in
the class structure. (e2305c3)
* releasing version 0.2.3-0ubuntu2~ppa3 (2fd1a6b)
* Breaking the ABI so we have more space in the class structure
(d7c7a2a)
* Upstream Merge * Adding label support into the library *
Adding label support into the indicator; Autogen *
Upstream Merge * Fixing the check of the function
signature (29311fb)
* Sync to trunk (0e21b91)
* Adding label support into the indicator (87bd896)
* Adding label support into the library. (398dce8)
2010-08-09 Ted Gould
* Adding the Ordering Index property (c43dd8f)
* Start with the ABI break. (afac3d9)
2010-08-05 Ted Gould
* Changing the size of the class structure, the reason for the break.
(8918685)
* Incrementing the major version number (18628e9)
* Adding label support (649c799)
* releasing version 0.2.3-0ubuntu2~ppa1~label7 (4e4e053)
* Updating to trunk (79896b0)
* Bringing in indicator stuff (1ba6811)
* Syncing with trunk and resolving conflicts (c4045e9)
* Fixing merge (d377c94)
* Updating to trunk and resolve conflicts (b1daa47)
* releasing version 0.2.3-0ubuntu2~ppa1 (9e24b87)
* Upstream Merge * Allow the icon theme path to be changed
dynamically (LP: #607831) (e4c14f7)
* Support dynamically changing the icon theme path. (9291697)
* releasing version 0.2.3-0ubuntu2~ppa1~label6 (8ceb58c)
* Upstream Merge * Adding a helper update of the icon when
rebuilding (141558f)
* Updating with helper when rebuilding. (c1aaada)
* Tracking the long name along with the application entry. (225167d)
* Check for suffix when updating icon as well! (593c6b8)
* releasing version 0.2.3-0ubuntu2~ppa1~label5 (085b99e)
* Add the ability to toggle the label (83aa68f)
* Upstream Merge * Handle label updating and use the guide to
guess the size. (7f91215)
* Adding the ability to toggle the label on and off (23e9b56)
* Showing and hiding the entries with removal. (54c6103)
* Reshuffling the signaling and making sure to ref the label.
(b17e625)
* Not really sure what this TODO meant, so I'm removing it. (38074f5)
* Some slight refactoring and comments along with the ability to
remove the entries and recreate them. (08a2c88)
* Building a label in the case that we don't have one already.
(a644617)
2010-08-05 Sense Egbert Hofstede
* Partial, segfaulting, fix for LP: #608219, requires GTK+ change
attached to same bug report. (1a0c666)
2010-08-05 Ted Gould
* Adding updating the guide and label size to the label update signal
(62a5f41)
* Storing the guide and using it to bound the size of the label.
(9c46c11)
2010-08-05 Sense Egbert Hofstede
* Passing the updated icon theme path along with the DBus signal,
saving a DBus call. (247e5a1)
2010-08-05 Ted Gould
* releasing version 0.2.3-0ubuntu2~ppa1~label4 (3a3ea03)
* Upstream Merge * Fixing the prototype of the added signal
(0450275)
* Changing the prototype of the added function. (fff357c)
2010-08-04 Ted Gould
* releasing version 0.2.3-0ubuntu2~ppa1~label3 (e4dd5ca)
* Fixing the signal prototype (05be20a)
* Upstream Merge * Making the test program count to 100 (77b2b6f)
* Make sure we get to 100 (1f04ea2)
* Fixing the prototype for the label changed signal. (208fc00)
* releasing version 0.2.3-0ubuntu2~ppa1~label2 (1e7513c)
* Upstream Merge * Fixing the check of the function signature
(2ffcd74)
* Fix the check for the updated function signature. (b83a74c)
* releasing version 0.2.3-0ubuntu2~ppa1~label1 (1baa860)
* Adding label support into the indicator (be5cab0)
* Upstream Merge * Adding label support into the library
(6eeaa49)
* Setting the label in the simple client (f2b8083)
* If it changes, let's update. (c25bb3c)
* If we get passed a label let's make a GTK one for fun. (91c8b42)
* Connecting to the application signal for new label and handling it
appropriately. (83f5634)
* Cast once, be happy (04fd119)
* Sending the label and the guide over dbus if we have them.
(788b0db)
* Start tracking the label and the label guide allong with the other
application properties. (0d11bf6)
* Whitespace fix (ff9b7b4)
* Adding in a base signal handler for the label change (d06c102)
* Adding signal for label changing. (4dea77d)
* Adding the new entries to the list of the get_apps function.
(e33d50b)
* Updating signal emition to match new API (d58186a)
* Changing prototypes to match DBus API change. (1f1bb2c)
* Adding labels to the service interface (faf2859)
* Adding defines for the new properties and signal. (4189a76)
* Merging in the API changes (8b0b19a)
2010-08-03 Ted Gould
* More signalling tests. (43e185e)
* Setting up a basic signals test (6882b4c)
* Stupid reverse logic in the string comparison. (2925384)
* Turning null strings into NULLs (f721168)
* Adding a test to set the label and guides a bunch. (a2e95f1)
* Signaling when the labels change in the idle loop (52bfc9d)
* Putting the new define into the docs (0422fcb)
* Reusing the application service marshallers, not beautiful, but it
works for now. (84821ec)
* Adding in a signal to tell when the label is updated. (fc9d5d4)
* Adding the label funcs to the documentation. (e0f472f)
* Adding in the convience wrappers (706a72b)
* Adding the label and guide fields to the private struct and tying
that into the properties. (e541156)
* Setting up the label and lable guide properties. (44e84ed)
* Adding a property to guide the size of the label (89a5ffe)
* These have needed to be ignored for a while. (6de3d6f)
* This shouldn't be in Bazaar (9f0e3c6)
* Adding the label property and a signal for it changing. (456347a)
2010-07-22 Sense Hofstede
* Fixed two G_PARAM_SPECS and made it even more possible to remove
the custom icon theme path. (0a8c09e)
* Fix wrong naming that caused the signal to be missed (0dbf34a)
* Clean-up and renaming variables and functions everywhere to use
icon_theme_path for the sake of consistency. (0bbee36)
2010-07-22 C10uD
* forgot some files (3fb0e11)
* trying to implement runtime theme-path changing (4780617)
2010-07-15 Ted Gould
* Updating to Ubuntu Desktop (3f326bd)
2010-07-15 Ken VanDine
* releasing version 0.2.3-0ubuntu1 (38feb55)
2010-07-15 Ted Gould
* releasing version 0.2.3-0ubuntu1~ppa1 (8faa8b6)
* New upstream release. (a32741d)
* Import upstream version 0.2.3 (863cd1c)
* 0.2.3 (17dea09) (tag: 0.2.3)
2010-07-13 Ted Gould
* releasing version 0.2.2-0ubuntu2~ppa2 (76c177b)
* Autogen update (c95f517)
* Merge upstream * Fixing test for slower machines (35cad52)
* Adjusting the tests so they can deal with slow systems better.
(37d583e)
2010-07-12 Ted Gould
* Ignoring the tester script (e1dc7c0)
* Add a fail timeout so this test can't block. (930a79a)
* Adding in setting the environment variable to adjust the timeout to
be twice as long for slow systems. (8a0649a)
* releasing version 0.2.2-0ubuntu2~ppa1 (0de45ad)
* Autogen update (791daf2)
* Merge upstream * Adding an Approver API to remove things from
the AppIndicators. (e273b81)
* Putting in a basic approver API. (7ef1834)
2010-07-09 Ted Gould
* Need the built headers too (25b69bb)
* Oops, with a menu we're all GTK now. (1b89529)
* Building up to a formal test (3c43fed)
* Filling out the approve function. (12c8596)
* Filling out the approver prototype (0bf54f5)
* Building an application indicator too! (d7c39d7)
* Making the registration async to clean things up, and async is
better anyway. (ed8163b)
* Some more error handling and better debug messages. (5b41b1e)
* Helpful debug info (018bf0e)
* Okay, so now we're detecing when the watcher comes up, and
registering ourselves as the approver. (fd3e18e)
* Adding a new sample approver (8072a97)
* When we have new apps we can ask the approver about them. (306a78b)
* Looking at all the applications when we get a new approver.
(b3a0f3e)
* Building the approver structure and putting it in the list.
(a281700)
* Comments (4f7e748)
* Adding some structures for approvers and making them real.
(93572f1)
* For DBus to real objects, the signal shall travel. (2986445)
* Adding a function to bring in approvers (d7c7324)
* Sync to trunk (fb4da4a)
2010-07-08 Ted Gould
* Sync to Ubuntu Desktop branch (4e2c23b)
* Use a private pointer instead of a lookup. (1ddd622)
2010-07-08 Sense Hofstede
* Removed all but one calls to the
APPLICATION_SERVICE_APPSTORE_GET_PRIVATE() macro (925e3d8)
2010-07-08 Sebastien Bacher
* releasing version 0.2.2-0ubuntu1 (22da24c)
2010-07-08 Ted Gould
* releasing version 0.2.2-0ubuntu1~ppa1 (8ce01c5)
* New upstream release. ∘ Work with updated container signal names
(2a931ef)
* Import upstream version 0.2.2 (44880df)
* 0.2.2 (a627c07) (tag: 0.2.2)
2010-07-07 Ted Gould
* Merging this branch, but I think it's fixes must have gone in with
another. (cf31f2f)
* Working with the better container signals (eed6cf0)
2010-07-06 Ted Gould
* Updating to Ubuntu Desktop (033b032)
2010-07-01 Ted Gould
* Return a boolean (a8aac3a)
2010-06-25 Ted Gould
* Adding in a template function to register approvers. (6cf35d7)
* Adding a function to register an approver. (4c9f434)
* Adding an approver interface. (a46a27a)
2010-06-22 Didier Roche
* releasing version 0.2.1-0ubuntu1 (711cb0b)
2010-06-21 Ken VanDine
* New upstream release. * Fix icon updating (LP: #594199) *
Change Mono bindings to only parse particular files (LP:
#592706) * Make a policy for migrating the mono bindings
* Test fixes to make them more reliabl.
debian/control: Fixing version numbers; debian/control:
Making the 0.1-cil replace and provide the 0.0-ci.
debian/libappindicator0.1-cil.installcligac: Add the
policy.dll file to the install.; Upstream release 0.0.2
* Updates API to use GTK instead of dbusmenu to make it
easier for upstream developers to use. (90a5410)
2010-06-21 Ted Gould
* releasing version 0.2.1-0ubuntu1~ppa1 (61a4f68)
* Making some files match upstream relases that don't. (1c6a483)
* New upstream release. * Fix icon updating (LP: #594199) *
Change Mono bindings to only parse particular files (LP:
#592706) * Make a policy for migrating the mono bindings
* Test fixes to make them more reliable (0ac50a3)
* Import upstream version 0.2.1 (3439224)
* 0.2.1 (20f0c1d) (tag: 0.2.1)
* Fixing versions of concflicts. (458ad9a)
* Fixing policy version numbers. (a4976d3)
2010-06-21 Ken VanDine
* Don't conflict with libappindicator0.0-cil, just replace and
provide (db008b0)
* Use full assembly version for the policy file (ac400f7)
* Specify versions for Replaces/Conflicts for libappindicator0.0-cil
(e48a4c7)
2010-06-21 Ted Gould
* releasing version 0.2.0-0ubuntu4~ppa6 (55e7722)
2010-06-19 Michael Terry
* use gtk3 versions of dbusmenu and indicator; use appindicator3 0.1
rather than appindicator 3.1 (60abdc2)
* first pass at gtk3 version of libappindicator (e1f36a8)
2010-06-18 Ted Gould
* Conflicts as well (bec7e4e)
* debian/control: Making the 0.1-cil replace and provide the 0.0-cil
(591b407)
* debian/control: Fixing version numbers (d2a540c)
* releasing version 0.2.0-0ubuntu4~ppa5 (b741fd3)
* debian/libappindicator0.1-cil.installcligac: Changing version
policy applies to. (b1f6a47)
* Autogen (fe4f2d9)
* Upstream merge * Changing the policy to be for 0.0 (7eac5d7)
* Setting the policy version. (9745469)
* releasing version 0.2.0-0ubuntu4~ppa4 (955c737)
* debian/libappindicator0.1-cil.installcligac: Add the policy.dll
file to the install.; Autogen (570ea94)
* Upstream merge * Make a policy for migrating the mono bindings
(6bee066)
* Fix mono versioning. (f9a13d5)
* Cleaning up file name definitions (787b920)
* Adding the policy config to the installed files. (f23786e)
* Switching to the policy name. (c5c2670)
* Swithcing the version to be the assembly version. (64a712f)
* Fixup the gacutil stuff. Still doesn't ununinstall. (c012b2a)
* Fixing policy name (f8f18e9)
* Replacing the macros with the proper data (35915da)
* Forgot to merge in packaging branch. Linking now. (16680b1)
* releasing version 0.2.0-0ubuntu4~ppa3 (b076c2b)
* Adding bug number (910aa3a)
* Upstream merge * Fix icon updating (LP: #594199) (4eb17f9)
* Make icon switching work again. (87d82b8)
* Fixing the distcheck by cleaning up (e434b93)
* Readjusting so that the policy file is in the same directory as the
DLL (c0f6417)
* Fixing directories (5ea2df7)
* Typo (814bed1)
* Generating a policy dll (f399d89)
* releasing version 0.2.0-0ubuntu4~ppa2 (ceac804)
* Upstream Merge * Change Mono bindings to only parse particular
files; Autogen. For fun and profit.; Upstream release
0.0.2 * Updates API to use GTK instead of dbusmenu to
make it easier for upstream developers to use.
(4b33012)
* Sync to trunk (0299891)
* Fix mono bindings by restricting gapi2-parser (250a731)
* Remove the assert with checking if the value is NULL. (d4f5fa7)
2010-06-17 Ted Gould
* releasing version 0.2.0-0ubuntu4~ppa2~icons3 (782f9e5)
* Upstream merge * Using class_ref and unref to allocate the type
if need be (985eb70)
* Use class ref and unref to allocate it if need be. (ce25d4c)
* releasing version 0.2.0-0ubuntu4~ppa2~icons2 (c204273)
* Upstream Merge * Fixing the enum lookup from nick (28a5a2e)
* Reworking to make more clear and use the GEnumValue structure
correctly. (e589eca)
* releasing version 0.2.0-0ubuntu4~ppa2~icons1 (6ee70d2)
* Upstream Merge * Making it so that icons can be changed at any
time. (81e0ff2)
* releasing version 0.2.0-0ubuntu4~ppa1 (9119e00)
* Upstream Merge * Test fixes to make them more reliable
(c4314c8)
* Icon name shouldn't be construct only. (fc6b18b)
* Linking Bug (a835081)
* releasing version 0.2.0-0ubuntu4~ppa1~monofix2 (9a0770c)
* Autogen. For fun and profit. (b6e10ee)
* releasing version 0.2.0-0ubuntu4~ppa1~monofix1 (b62203f)
* Upstream Merge * Change Mono bindings to only parse particular
files * Test fixes for Hudson builds (dc1a9ec)
* Only work with specific files instead of the whole directory.
(750406e)
* Sync to Ubuntu desktop (53d1e55)
2010-06-14 Ken VanDine
* renamed cil binary to libappindicator0.1 to match the assembly
version (LP: #592706) (c6734d2)
2010-06-11 Ted Gould
* Changing signal names and getting the ones on the base menu as
well. (95c7907)
* Changing the signal names (34a4af9)
* More time for initial fallback. (cdb0efc)
* Increase the timeouts, but make it so that the watcher shutsdown
when seen. (6eedd6e)
* Increasing timeout to hopefully make it work on Hudson with load.
(259c519)
2010-06-11 Ken VanDine
* renamed cil binary to libappindicator0.1 to match the assembly
version (0eb105d)
2010-06-08 Sebastien Bacher
* releasing version 0.2.0-0ubuntu2 (52ebd17)
2010-06-07 Sebastien Bacher
* releasing version 0.2.0-0ubuntu1 (0fb6915)
2010-06-04 Ken VanDine
* New upstream release. * Unref the child that was created *
Build GIR and VAPI files (LP: #510610) * Fixes to
documentation and enum construction * Fix distcheck *
Merging patch to add assembly information to Mono
binding (LP: #547195); debian/control: Add GObject
Introspection and Vala build dependencies.; Added
debian/gir1.0-libappindicator-0.1.install and modified
debian/control and debian/libappindicator-dev.install to
handle the VAPI and GI files.
debian/libappindicator0.0-cil.install: Fixing directory of
cli files (83ea782)
2010-06-03 Ted Gould
* releasing version 0.2.0-0ubuntu1~ppa1 (ebc5cbf)
* Fixing control file (5ffc5c9)
* Fixing typo (d5f07a0)
* debian/libappindicator0-cli.install: Fixing directory of cli files
(fa7673f)
* Fixing so files that got lost. (ec772ab)
* Getting some files back... where did they go. (d7f06e7)
* Added debian/gir1.0-libappindicator-0.1.install and modified
debian/control and debian/libappindicator-dev.install to
handle the VAPI and GI files. (ead73d0)
* Build GIR and VAPI files (LP: #510610) (da48072)
* debian/control: Add GObject Introspection and Vala build
dependencies. (f50f08a)
* New upstream release. * Build GIR and VAPI files * Fixes to
documentation and enum construction * Fix distcheck
(614e30a)
* Import upstream version 0.2.0 (0f7ba97)
* Changing revision for merge-upstream (d3216b9)
* 0.2.0 (27fe45b) (tag: 0.2.0)
2010-06-01 Ted Gould
* Distcheck fixes (3651994)
* Merging in trunk (1b748b2)
* Fixes to docuementation and making the enums build correctly with
gtk-mkenum (e0ddc2d)
2010-05-23 Sense Hofstede
* Documentation and introspection fixes and such (01fafa4)
2010-05-20 Ted Gould
* Sync to trunk to ensure no conflicts. (0e3c221)
* Merging in the 0.1 series branch (ef11b71)
* Merging in updates from the 0.1 series branch (f7fd52b)
* releasing version 0.0.21-0ubuntu1~ppa1 (7cb5463)
* New upstream release. * Adding AssemblyInfo.cs for building
(144908d)
* Import upstream version 0.0.21 (84e75c6)
* releasing version 0.0.20-0ubuntu1~ppa1 (2cbdb9f)
* 0.0.21 (6fcbfe5) (tag: 0.0.21)
* Build fix to include the AssemblyInfo.cs file (38c5c10)
* Forgot to drop the patch (d16ae42)
* New upstream release. * Unref the child when created in
libappindicator (LP: #569273) * Merging patch to add
assembly information to Mono binding (LP: #547195.
Remove child-leakage.patch as merged upstream (086d22c)
* Import upstream version 0.0.20 (9b028d9)
* Desktop sync (bdec505)
* 0.0.20 (cd4c6e0) (tag: 0.0.20)
* Only grab the app indicator files. (20a976b)
* Ignoring the lru file header (29a3d02)
* Fixing which sources are marked as BUILT (6efcf99)
* Bringing along the AssemblyInfo.cs file and fixing its path
(9366eb0)
* Okay, now everyone is in the right directory, I think. (a403884)
* Need to look for things in the source directory too! (a106e8d)
* Fix C includes fro teh VAPI/GIR files (8f8efd3)
* Adding GIR/VAPI support and flattening directories (e09b459)
* releasing version 0.2.0~dev-0ubuntu1~ppa2 (3c5b3e5)
* Upstream Merge * Unref the child that was created (6a47d48)
* Woot, trunked (80633ae)
* Stopping the leakage of children. (ea79d7f)
* Fixing the ref leakage of a child object. (22423f9)
2010-05-20 Sebastien Bacher
* releasing version 0.0.19-0ubuntu5 (3096e10)
2010-05-20 Ken VanDine
* debian/patches/child-leakage.patch - Fixes a memory leak (LP:
#569273) (1e43a91)
2010-05-19 Ted Gould
* releasing version 0.2.0~dev-0ubuntu1~ppa2~childleak1 (f777fc6)
* Upstream Merge * Unref the child that was created (8620702)
* releasing version 0.2.0~dev-0ubuntu1~ppa1 (6293246)
* Upstream Merge * kicking off new branch (0f690c2)
* Dummy commit (d469436)
* Changing it so the object gets unref'd (8566afc)
2010-04-29 Ted Gould
* Ignoring built VAPI file (0b09164)
* Now, build us a VAPI! (fae0a61)
* Fixing the ignore list. (f5c58a8)
* Building the GIR file (3ef5fec)
* Removing the libappindicator directory to make things simpler
(ba1fd39)
* Add introspection stuff here (0bd103a)
2010-04-28 Ted Gould
* Adding the introspection.m4 for our new rules (27490e3)
* Adding introspection and VAPI checks (3dc48c0)
2010-04-21 Sebastien Bacher
* releasing version 0.0.19-0ubuntu4 (86518f0)
2010-04-16 Ted Gould
* Patch for package names (04a9942)
* Sync to desktop (b53899d)
2010-04-14 Sebastien Bacher
* releasing version 0.0.19-0ubuntu3 (4f93e61)
2010-04-14 Ted Gould
* Sync to Ubuntu Desktop (d15e362)
* Merging patch to add assembly information to Mono binding (LP:
#547195) (1d8e044)
* Adding assembly info for Mono bindings (2c90c6c)
2010-04-14 Cody Russell
* Add AssemblyInfo.cs to the Mono bindings. (6b3689e)
2010-04-14 Sebastien Bacher
* releasing version 0.0.19-0ubuntu2 (73b7491)
2010-04-14 Ted Gould
* debian/control: + Set libappindicator0-cil and
libappindicator-cil-dev to Arch: all + Make
libappindicator0-cil depend on libappindicator0 >=
${source:Version} instead; debian/rules: + Fix
ordering of dh_*cli* (LP: #560095.
debian/libappindicator0-cil.install,
debian/libappindicator0-cil.installcligac: + Fix CLI
policy breakage: - Wrong installation paths for GAC'd
CLI libraries - Direct installation of GAC'd libraries
(d38c39a)
* Sync to desktop (abb09f2)
2010-04-13 Neil Jagdish Patel
* Add G_LOG_DOMAIN support to the various targets for better messages
(7210a54)
2010-04-01 Sebastien Bacher
* releasing version 0.0.19-0ubuntu1 (40b74a1)
2010-04-01 Ted Gould
* releasing version 0.0.19-0ubuntu1~ppa1 (734b874)
* New upstream release. * Don't set the fallback timer if we're
already in a fallback mode to avoid unfalling back
excessively. (LP: #529052) * Fix distcheck of
documentation (45e7b47)
* Import upstream version 0.0.19 (d005a22)
* Disable merge mode (70600e1)
* 0.0.19 (1fbc5af) (tag: 0.0.19)
* Fixing documentation distcheck (2ee85c2)
* Moving field documentation into a different comment block so that
they're private (ba28468)
* Making it so the timer doesn't get set if we're already in the
fallback case. (ff63763)
* Catch up to trunk (bf2c8f1)
* Don't store the panel suffix, just add it for the fallback icons.
(5055af8)
* Adding in documentation for the private structure. (14aebe4)
* Make it so that we don't store the panel-suffix icons but we do use
them with the status icon. (5aa064c)
* No timer if we're already in fallback. (d6bb68c)
2010-03-30 Ted Gould
* releasing version 0.0.18-0ubuntu2~ppa1 (4ed0753)
* Upstream Merge * Setup the icons to use the -panel variants
even when falling back to status icons. (LP: #547072)
* Change python bindings to use _with_path so that they
can set the icon path. (LP: #527061) (8ca677a)
* Updating to Ubuntu Desktop (2d7ae83)
* Merging fix to make it so that python apps can set an icon path.
(d3026a2)
2010-03-30 C10uD
* Patch 001 from bug 527061 (4bbf4c0)
2010-03-30 Sebastien Bacher
* releasing version 0.0.18-0ubuntu1 (fd1ec3c) (tag: 0.0.18-0ubuntu1)
2010-03-29 Ken VanDine
* Upstream Release 0.0.18 * Change when there are updates to
Check and Radio buttons via their actions. (LP:
#542221) * Fixing icon updating with themes and naming
fallbacks with the status icon fallback. (LP:
#532858) (64eef1a)
2010-03-29 Ted Gould
* Tracking the icon name and included the panel suffix for fallback
usage. (9fddbf6)
2010-03-25 Krzysztof Klimonda
* use gchar instead of for the clarity (1d03452)
* Make app_indicator_set_property also set the suffixed icon_name.
(5bf0d10)
* Make GtkStatusIcon use icons with the panel suffix if available.
(64c0273)
2010-03-25 Ted Gould
* releasing version 0.0.18-0ubuntu1~ppa1 (dd8d40d)
* Upstream Release 0.0.18 * Change when there are updates to
Check and Radio buttons via their actions. (LP:
#542221) * Fixing icon updating with themes and naming
fallbacks with the status icon fallback. (LP:
#532858) (5483c83)
* 0.0.18 (9919c5e) (tag: 0.0.18)
* Fixing tests to use GTK for icon theme fixes. (b4e1960)
* Fixing icon changing with fallbacks. (275909f)
2010-03-25 Krzysztof Klimonda
* remove g_object_ref_sink call from status_icon_changes (26a1f26)
2010-03-23 Ted Gould
* Update to track toggle changes in actions. (105b2a0)
2010-03-22 Krzysztof Klimonda
* Use app_indicator_get_icon/app_indicator_get_attention_icon methods
to get the right icon. (85400dc)
* Move g_signal_connect for the theme-changed signal to
app_indicator_init () (c80fe4d)
* don't use indicator_image_helper () (16a9a73)
2010-03-20 Krzysztof Klimonda
* Fix the missing icon on theme change if old icon has different name
(b531c56)
2010-03-19 Sense Hofstede
* Make sure the state of GtkCheckMenuItems and GtkRadioMenuItems gets
updated even when they're changed via their actions.
(c18de95)
2010-03-18 Sebastien Bacher
* releasing version 0.0.17-0ubuntu1 (05da30c) (tag: 0.0.17-0ubuntu1)
2010-03-18 Ken VanDine
* Upstream Release 0.0.17 * Support GTK's show menu items
property (LP: #528527) * Fix status and category nicks
in Python bindings (LP: #539858) * Switch domains to
org.kde instead of org.freedesktop as spec was never
officially approved by that body. (5581a39)
2010-03-18 Ted Gould
* releasing version 0.0.17-0ubuntu1~ppa1 (543f7fc)
* Upstream Release 0.0.17 * Support GTK's show menu items
property (LP: #528527) * Fix status and category nicks
in Python bindings (LP: #539858) * Switch domains to
org.kde instead of org.freedesktop as spec was never
officially approved by that body. (d5717ba)
* Sync to Ubuntu Desktop (b839c8a)
* 0.0.17 (42de500) (tag: 0.0.17)
2010-03-17 Ted Gould
* Fix nicks on Python bindings. (65febbd)
2010-03-16 Sense Hofstede
* Make the nicks of the AppIndicatorCategory and AppIndicatorStatus
types adhere the specification in the Python bindings as
well (Closes: #539858) (414b5f8)
2010-03-15 Ted Gould
* Changing from freedesktop to kde as the spec was never approved
finally by freedesktop. (9be1c6d)
2010-03-15 Aurelien Gateau
* org.freedesktop.StatusNotifier* => org.kde.StatusNotifier*
(42fd4ba)
2010-03-15 Sebastien Bacher
* releasing version 0.0.16-0ubuntu2 (ddee75a) (tag: 0.0.16-0ubuntu2)
2010-03-15 Ted Gould
* Make the icons follow the show menu icons property. (c88bf0b)
2010-03-15 Jan Arne Petersen
* Only show images if "gtk-menu-images" settings or
"always-show-image" property is TRUE. (4ade827)
2010-03-11 Sebastien Bacher
* releasing version 0.0.16-0ubuntu1 (04fecf2) (tag: 0.0.16-0ubuntu1)
2010-03-11 Ted Gould
* releasing version 0.0.16-0ubuntu1~ppa1 (0be5c8b)
* debian/control: Increasing the libindicator-dev dependency to 0.3.5
to match upstream. (079ae03)
* Upstream release 0.0.16 * Use libindicator icon loading helper
* Workaround for label changes on GtkActions * Testing
fix for using xvfb (837d679)
* Update to ubuntu-desktop (9504966)
* 0.0.16 (bf1f152) (tag: 0.0.16)
* Adding a two second wait to make seting up Xvfb more reliable.
This is similar to xvfb-run. (1720ce3)
* Using the new image loader utilities in libindicator (9f09be2)
* Switching to use the update function. (6b6a72d)
* Upping libindicator required version to 0.3.5 (b3f9c44)
2010-03-10 Ted Gould
* Removing design team size (c9b8c0a)
* Also using the helper when changing icons. (e785284)
* Switching to using the libindicator image helper (249bcd9)
2010-03-08 Ted Gould
* Workaround to make action label updates get caught and update the
label. (a503e71)
2010-03-08 Jan Arne Petersen
* Listen also to label changes on actions related to menu items to
workaround a gtk+ bug. (27a7bb9)
2010-03-04 Sebastien Bacher
* releasing version 0.0.15-0ubuntu1 (8dcf6e3) (tag: 0.0.15-0ubuntu1)
2010-03-04 Ted Gould
* releasing version 0.0.15-0ubuntu1~ppa1 (3174368)
* Upstream release 0.0.15 * Icon size fix to 22 px * Status
icon correctly removed in fallback * Fixed test suite to
run better on slow machines. (03519bd)
* 0.0.15 (fa72360) (tag: 0.0.15)
2010-03-02 Ted Gould
* Lengthing kill timer to be a little longer for slow systems.
(588e856)
* Fixing application icon size. (1323afb)
2010-03-01 Ted Gould
* Switching from hide to visible. (cda145d)
2010-02-28 Ted Gould
* Merge with Ubuntu Desktop (d7ff915)
2010-02-27 Chris Coulson
* Use gtk_status_icon_set_visible to hide the status icon.
GtkStatusIcon is not derived from GtkWidget, so
gtk_widget_hide doesn't work (70c46ca)
2010-02-26 Ted Gould
* Switching from menu size to design team size (cc62e3c)
2010-02-25 Sebastien Bacher
* releasing version 0.0.14-0ubuntu1 (55be444) (tag: 0.0.14-0ubuntu1)
2010-02-25 Ken VanDine
* Upstream release 0.0.14 ∘ Fix mono bindings to include proper
metadata (LP: #526620) ∘ Send connection changed signal
when the proxy is created and destroyed (LP: #527082) ∘
Hide the fallback status icon before unrefing it. (LP:
#526041) ∘ Increase dbus-glib version check to 0.82 ∘
Handle menu layout changes and visibility changes better.
∘ Improve testing stability ∘ Read menu sensitivity on
startup. ∘ Handle null strings when evaluating whether we
have an attention icon. ∘ Remove dbus objects when we
fallback ∘ Disconnect client_menu_changed signal handlers
on cleanup. ∘ Handle cases where the menu gets unset on
updates. ∘ Fix custom labels on stock items. ∘ Adds
support for submenus (089972e)
2010-02-25 Ted Gould
* releasing version 0.0.14-0ubuntu1~ppa1 (23541b9)
* Upstream release 0.0.14 ∘ Fix mono bindings to include proper
metadata (LP: #526620) ∘ Send connection changed signal
when the proxy is created and destroyed (LP: #527082) ∘
Hide the fallback status icon before unrefing it. (LP:
#526041) ∘ Increase dbus-glib version check to 0.82 ∘
Handle menu layout changes and visibility changes better.
∘ Improve testing stability ∘ Read menu sensitivity on
startup. ∘ Handle null strings when evaluating whether we
have an attention icon. ∘ Remove dbus objects when we
fallback ∘ Disconnect client_menu_changed signal handlers
on cleanup. ∘ Handle cases where the menu gets unset on
updates. ∘ Fix custom labels on stock items. ∘ Adds
support for submenus (579c1e0)
* 0.0.14 (bc5b940) (tag: 0.0.14)
* Ignoring everything. (ddbb7c0)
* Changing the metadata to have the proper signal names in it.
(806f651)
* Emitting the connection changed signal when the proxy is created
and destroyed. (464e29f)
* Hide the status icon when unref'd (bb72be9)
* Hiding the notification icon before unreffing it. (1cfa837)
2010-02-25 Sense Hofstede
* Do send the connection-changed signal, in check_connect() -- when
a new connection is established --
watcher_proxy_destroyed() and app_indicator_dispose()
(Closes LP: #527082) (e8fe4dd)
* Correct the Mono bindings metadata to properly bind with the
signals (Closes LP: #526620) (2aec0b9)
2010-02-23 Ted Gould
* Sync to Ubuntu Desktop (9d1ecc8)
2010-02-23 Sebastien Bacher
* releasing version 0.0.13-0ubuntu8 (b42f475) (tag: 0.0.13-0ubuntu8)
2010-02-23 Ted Gould
* releasing version 0.0.13-0ubuntu8~ppa1 (1d1afe2)
* debian/control: Checking for dbus-glib >= 0.82 (0d3da8e)
* Upstream Merge * Checking for dbus-glib version 0.82 (50aff10)
* Adding a check for dbus-glib version. The patch to unregister
requires v. 0.82 (1572f64)
* Updating to ubuntu-desktop revision (8af2c8c)
* releasing version 0.0.13-0ubuntu3~ppa4 (cbdd6a7)
* Handling the visibility of menus better (1e5be58)
* Upstream merge * Fixing automatic updating of menus *
Handling the visibility of menus better * Improve
testing to be more reliable * Handle null string
attention icons (8c0532f)
* Fixes to get the menus updated and visibility all handled nicely.
(2fdd555)
* Updated patch for the visibility field (100dd09)
2010-02-23 Jan Arne Petersen
* Second patch on 524150 (44ff7ab)
2010-02-22 Ted Gould
* releasing version 0.0.13-0ubuntu3~ppa3~menu3 (4589ee8)
* Upstream Merge * Blocking tearoffs (1b76f58)
* NO TEARY! (78429e8)
* releasing version 0.0.13-0ubuntu3~ppa3~menu2 (bc743fa)
* Upstream Merge * Using foreach instead of forall (0940357)
* Looking at children with foreach instead of forall (1d6eba2)
* releasing version 0.0.13-0ubuntu3~ppa3~menu1 (3676f11)
* Upstream merge * Menu updates connections (dd2a9a5)
2010-02-22 Jan Arne Petersen
* Creates and event handler for the add and remove signals to
recreate the menu (75ccac5)
2010-02-22 Ted Gould
* Making the fallback test more robust on slow systems. (225f291)
* Fall out of the while, sometime, if we really think it's not
recoverable. (bf13c7a)
* Trying to make the test a little more robust by waiting for the
other process to register on the bus, and then waiting.
(a067b5b)
2010-02-22 Sebastien Bacher
* releasing version 0.0.13-0ubuntu7 (d0087bc) (tag: 0.0.13-0ubuntu7)
2010-02-22 Ted Gould
* Patch to read sensitivity on startup. (e5612de)
* Fixes bug 522151 (7b02e4c)
2010-02-22 Jan Arne Petersen
* Set the sensitive state when starting out. (271d86b)
2010-02-22 Ted Gould
* Properly look for null strings in the attention icon. (0135db5)
2010-02-19 Ted Gould
* Improving the dbus tests so that they have a mock watcher in them.
(96f2eb9)
* Adding a mock server here as well (7e683f7)
* Putting in a mock watcher so we don't fall back. (e035620)
2010-02-19 Martin Pitt
* releasing version 0.0.13-0ubuntu6 (05db164) (tag: 0.0.13-0ubuntu6)
2010-02-19 Ken VanDine
* set to UNRELEASED (5308b54)
* Cherrypick fix to check for a null string as the attention ico.
Cherrypick fix to remove the registration of dbus objects
(LP: #497870) - lets us drop
debian/patches/unregister.patch (a889ee7)
* Cherry picked fix to check for a null string as the attention icon
(b1e72a5)
2010-02-19 Ted Gould
* Checking for a null string as the attention icon. (780acae)
2010-02-19 Martin Pitt
* releasing version 0.0.13-0ubuntu5 (494d1b1) (tag: 0.0.13-0ubuntu5)
2010-02-19 Ken VanDine
* debian/patches/unregister.patch - Fix to remove the
registration of dbus objects (LP: #497870) (d90b4c3)
2010-02-19 Ted Gould
* Fix to remove the registration of dbus objects (435edba)
* Attaching bug (b0a873f)
* Removing debug output (b79a5bb)
2010-02-19 Jan Arne Petersen
* Fix to unregister the object (9012c49)
2010-02-17 Ted Gould
* Disconnect signal handlers when unreffing the menu. (42e1e57)
2010-02-17 Sebastien Bacher
* releasing version 0.0.13-0ubuntu4 (2ac7533) (tag: 0.0.13-0ubuntu4)
2010-02-17 Cody Russell
* Disconnect 'client_menu_changed' in dispose method. (715d752)
2010-02-16 Ted Gould
* releasing version 0.0.13-0ubuntu3~ppa2 (386128a)
* Upstream Merge * Fixing a crash by checking for NULL (66e7fd1)
2010-02-16 Cody Russell
* Check priv->menu for non-NULL (de406e5)
2010-02-16 Ted Gould
* releasing version 0.0.13-0ubuntu3~ppa1 (99f3dd5)
* Upstream Merge * Submenu support * Updating menus (1b3b3fe)
2010-02-16 Sebastien Bacher
* releasing version 0.0.13-0ubuntu3 (60b206c) (tag: 0.0.13-0ubuntu3)
2010-02-12 Ted Gould
* Fixing visibility changes and when menuitems get added and deleted.
(2cc377b)
2010-02-12 Cody Russell
* Minor cleanup (84137b6)
* Change the indentation for this case to be the same as the others.
(e18cf83)
* Just to be safe, let's connect these at the end. (1c7a301)
* Use dbusmenu_menuitem_property_set_bool(), and also fix some
indenting. (02b6144)
2010-02-12 Ted Gould
* Fixing labels on stock items. (350a701)
2010-02-12 Cody Russell
* Handle menuitem visibility changes, and additions/removals from
menus. (8b257dc)
2010-02-12 Sense Hofstede
* * When a GtkImageMenuItem has got a stock icon set don't just
assume it's also using the stock label, but check first.
(Closes: #520048) (e192dea)
2010-02-12 Ted Gould
* Updating to Ubuntu Desktop (5fef5a2)
2010-02-12 Sebastien Bacher
* releasing version 0.0.13-0ubuntu2 (be1ce77) (tag: 0.0.13-0ubuntu2)
2010-02-11 Ted Gould
* Adding in submenu support. (a98fd45)
2010-02-11 Cody Russell
* Submenus (af5ac81)
2010-02-11 Ken VanDine
* releasing version 0.0.13-0ubuntu1 (4102c4d) (tag: 0.0.13-0ubuntu1)
2010-02-11 Ted Gould
* releasing version 0.0.13-0ubuntu1 (f7b909c)
* Upstream release 0.0.13 * Changing the menu property to be a
proper DBus object path * Make object paths unique by
including application IDs in them (bbebb7a)
* Sync to Ubuntu Desktop (a94ef5f)
* 0.0.13 (14abe9a) (tag: 0.0.13)
* Fix to make the dbus paths unique by using the ID of the
application. (0e783eb)
2010-02-10 Ted Gould
* Making sure our new tests with gtk_init() in them have an X server
to talk to. (ec5e7ea)
* Building a menu so this item will show (6f79c17)
* Moving the clean_id code to get set when we set the ID and checking
for it when building the menu. (cc9f014)
* Changing to ID based naming and setting a menu to get init
(8418f3a)
* Creating a clean ID that doesn't take any illegal dbus characters
and using that in the path. (aafaa31)
* Making the menu path also include the ID (907253f)
* Making it so that you can't set an ID twice instead of just issuing
a warning. (f5b69fe)
* Moving the registration of the object to when we want to connect
everything, and making the path include the item ID to
ensure it's unique. (370c87f)
* Switching menu property to be an object path. (07cba33)
* Falling back on string if that's what we get. Makes things
compatible. (8be6fe7)
2010-02-08 Ken VanDine
* releasing version 0.0.12-0ubuntu1 (c9d339f) (tag: 0.0.12-0ubuntu1)
2010-02-08 Ted Gould
* releasing version 0.0.12-0ubuntu1~ppa1 (b881da9)
* Merging in ubuntu-desktop (ef5c412)
* Upstream release 0.0.12 (c5ba9dd)
* 0.0.12 (fb4952b) (tag: 0.0.12)
* releasing version 0.0.11-0ubuntu1~ppa3 (c21b71a)
* Upstream Merge * Handling the service restarting better by
removing the icons after a small delay to ensure they
don't return. * Fixing a crash where a proxy was created
while the previous one was being destroyed. (89972d2)
* Handling the service resetting much better. Clearing out the old,
but after ensuring they won't come back. (e6056c5)
* releasing version 0.0.11-0ubuntu1~ppa2 (08f04e0)
* Cause the proxy to get built outside of the other proxy destroy
callback. (a11cf7a)
* Upstream Merge * Fixing copying of the attention icon *
Adding status changing to the example application *
Adding a test for status changing getting sent over DBus.
(585f9e3)
* Sync to trunk (821e845)
* Fixing status updates and adding tests to help debug status
changing. (c273ac9)
2010-02-06 Ted Gould
* Ready to recieve the boxed type on the other side. (28b0ba5)
* Changing the type of the property and setting it with boxed
(035f565)
* Boolean again! (b3be172)
* Adding check to look for privates gotten on invalid objects.
(ffbe6e8)
* Handling if we get duplicate entries added, just recycling.
(aca3270)
* Now we're actively killing. (85b920f)
* Setting up the disconnected helpers and structure. (2440214)
* Changing the proxy to only build if we need it, and not destroy
itself on killing the process. There's really no reason
for that. (130e93c)
* Making room for a disconnected function. (87a7acd)
* Putting the proxy construction in an idle function. (5f4f1eb)
* Reffing the connection so we ensure that we have it even when folks
die. (53bb574)
* releasing version 0.0.11-0ubuntu1~ppa2~aicon1 (3f35b1d)
* Upstream Merge * Fixing grabbing of attention icon (f6ea519)
* Getting the wrong string for the Attention Icon when looking at the
properties (987c4b5)
* More logging from our app indicator on icon changes (c2e186c)
* Adding a menu item to toggle the attention state. (5b94301)
* Making sure the client has time to setup. (982498c)
* Changing to 100 instead of 1000 (b9152c3)
* Lengthening the time a little bit to make sure we don't miss
messages. (74c6657)
* Now setting status ALOT (d004765)
* Loose the timeout (39bf2cc)
* Adjusting the status test to watch for toggles (119bd7a)
2010-02-05 Ted Gould
* Typo (d27570e)
* Adding a test for changing the status. Just a copy of the standard
dbus test. (1a8b83c)
2010-02-04 Sebastien Bacher
* releasing version 0.0.11-0ubuntu1 (b8830e1) (tag: 0.0.11-0ubuntu1)
2010-02-04 Ted Gould
* releasing version 0.0.11-0ubuntu1~ppa1 (5bd2875)
* debian/control: Increasing dbusmenu* deps to 0.2.2 (1e12054)
* Upstream release 0.0.11 * Interoperability Fixes * Adding in
XVFB support for tests * Adding support for icons with
the '-panel' suffix (33edaca)
* 0.0.11 (f8ab455) (tag: 0.0.11)
* Interop fixes. (8808bcb)
* Migrating to the new dbusmenu (4f81ab9)
* Merging in signal change. (b6cda58)
* Changing the #defines (b3f174d)
* Upping Dbusmenu required version (5f2baa8)
* Wrong srcdir (901d87f)
* Wrong filename (a313884)
* Adding in XVFB support (a8b197a)
* Getting run-xvfb on the tests (8398c58)
2010-02-03 Aurelien Gateau
* Merged timestamp fix (4fc1824)
2010-02-02 Aurelien Gateau
* icon -> icon-name sensitive -> enabled toggle-checked ->
toggle-state toggle-state type is now an int (770470f)
2010-02-02 Ted Gould
* Changing the prototype of the activate signal (4b0a319)
2010-02-01 Conor Curran
* Checking for the nunit dependency with a specific version.
(3a8354f)
* changed dependency nunit2.4 to nunit since this is the name of the
package (aa89c97)
2010-02-01 Ted Gould
* Fixing the name of the enum strings to match the StatusNotifier
spec. (d6090e4)
* Adding code to look for special panel versions of the icon with a
'-panel' with the AppIndicators. (ae7bfd4)
* Changing the suffix to 'panel' (8a8c965)
2010-01-27 Ted Gould
* Changing the category in the fallback test as well. (c73f5af)
* Changing strings in the test suite as well. (d415cb6)
* Changing the strings in the #defines here, but really we should be
using the enum. (53821e9)
* Making it so there is another level of translation so that we can
use different strings in the enum. (1b40a68)
2010-01-24 Ted Gould
* Truth. Bad, Bad, truth. (e68b4e3)
* When setting or changing an icon first check to see if there is a
panel specific icon that we should be using. (79cd82f)
2010-01-21 Ken VanDine
* releasing version 0.0.10-0ubuntu2 (10c9c76) (tag: 0.0.10-0ubuntu2)
* releasing version 0.0.10-0ubuntu1 (6ac376a) (tag: 0.0.10-0ubuntu1)
2010-01-21 Ted Gould
* releasing version 0.0.10-0ubuntu1~ppa1 (f25e2f0)
* debian/control: Adjusted back changes in 0.0.9-0ubuntu3 as this
branch is still on Karmic. Changes are in Lucid.
(f5582e9)
* Upstream release 0.0.10; debian/control: Adding dependency for
json-glib to build. (e38c251)
* Updating to ubuntu-desktop branch (9c8e204)
* releasing version 0.0.9-0ubuntu1~ppa4 (8140c6f)
* Upstream merge * Adding in a file to position the indicator.
debian/control: Adding dependency for json-glib to build.
(1650aa3)
* Sync to trunk (1f9ee73)
* 0.0.10 (bb106d1) (tag: 0.0.10)
* Require libindicator 0.3.1 (2377df3)
* Adding support for a file tracking add and touch times for
applications for ordering them. (f2b8365)
* releasing version 0.0.9-0ubuntu1~ppa4~order2 (678e097)
* debian/control: Adding dependency for json-glib to build. (770afff)
* releasing version 0.0.9-0ubuntu1~ppa4~order1 (d4f211a)
* Upstream merge * Adding in a file to position the indicators
(2c3e17d)
2010-01-20 Ted Gould
* Implements the get_location function to place the entires.
(a9bf196)
* Looking at the last touch date of entries as we're loading the file
and removing ones that are very old. (da6242b)
* License headers. (0ccf950)
* Moving directory and filename into defines (26a0d6f)
* Moving the JSON file values into #defines (33644ed)
* Fleshing out loading of the LRU file and realizing we need a
json-glib dep and the 'category' field in the output.
(5317706)
* Updating to trunk (surprisingly without conflict) (de65968)
* releasing version 0.0.9-0ubuntu1~ppa3 (2062afe)
* Upstream update * Ref counting theme directories as they get
added and removed * Use the right callback function for
fallback (LP: #507975) (78417dc)
* Add tracking and refcounting of theme directories. Unregister them
when we're done. (38e8ceb)
* Use the right function in the fallback. (93d5972)
* releasing version 0.0.9-0ubuntu1~ppa2 (0ba7549)
* Upstream update * Support getting the app list from a running
service. (f279a2d)
* Sync to trunk (3d7c9e2)
* Merge to get the current list of applications on startup. (b22c464)
* Switch to building a string and writing it out instead of async
writes as the order doesn't seem to be predictable.
(7243272)
* Build the directory and some debugging info (39c33f7)
* Fleshing out the cleaning and dirtying functions. Now we should
write out a file. (de476ff)
* Making a sort function that looks at two Apps and determines their
ordering. (77f24c0)
* Fleshing out touching. (064fd75)
* Allocating memory and objects in the lur world (c663b23)
* Ref'ing the image and menu so that when we remove them we don't get
warnings. (ba6eadc)
2010-01-19 Ted Gould
* Switching to inserting in the application array using a sort
function. Looking that up in the LRU file DB. (a634890)
* Adding in the 'id' and 'category' fields to the application
structure. (570fc94)
* Protecting our _new a little bit. (e8d4604)
* Adding a _new function for the appstore and using it. It now takes
the lru file. (08fef8d)
* Building the LRU file. (85394de)
* Adding some API to our LRU file (2f82ed5)
* Sync to trunk (8b32f5e)
2010-01-19 Sebastien Bacher
* releasing version 0.0.9-0ubuntu3 (6b648fd) (tag: 0.0.9-0ubuntu3)
* releasing version 0.0.9-0ubuntu2 (92c127a) (tag: 0.0.9-0ubuntu2)
2010-01-19 Ted Gould
* Attaching bug (f8da1e7)
* Changing to use the status wrapper for handling the status signal's
different prototype. (3344b7d)
2010-01-19 Cody Russell
* Handling duplication applications getting added. (0b8b85b)
* Move the check for duplicates. (e9fafdf)
2010-01-19 Ted Gould
* Adding an object to start tracking the lru of the app indicators
(f8d65da)
2010-01-15 Ted Gould
* Cleaning out dead code and turning a printout into an assert.
(9c545b7)
* releasing version 0.0.9-0ubuntu1~ppa2~applist2 (fd7d6e6)
* Upstream update * Simplify and correct the structure handling.
* Pass the correct object path over the bus. We want the
menu. (e709d9b)
* Using the menu path instead of the item path. (93f32fd)
* Using a straight value array and making sure to pass the
application (2579e9f)
* releasing version 0.0.9-0ubuntu1~ppa2~applist1 (36e7fd1)
* Upstream update * Support getting the app list from a running
service. (a75c3de)
* Fleshing out the get_applications function so that we do something
with the list we now get. (b447c26)
* Setting the proper type for the GValue of an 'o' (8045abd)
* Better init value and adding error to prototype. (00cad2e)
2010-01-14 Ted Gould
* Returning truth. (eddc0d0)
* Need icon path in the list as well. (321ae86)
* Fleshing out returning the list of apps already there. (7a001c7)
2010-01-14 Cody Russell
* Only add the Application if it doesn't already exist in the
appstore. (abd499a)
2010-01-14 Ted Gould
* Removing shutdown printf (831a83c)
* Actually unref'ing the dir and fixing the truth there. (76ef80d)
* Merging in the warnings branch. (c302241)
* Debug message for directories. (5a93b5e)
* We should have kept ref's to these. (fe7f3dc)
* Fleshing out the ref and the unref functions for the theme
directories. (3712733)
* Adding in our hash table of refs. (9393ffc)
2010-01-14 Ken VanDine
* Upstream Release 0.0.9 * Add fallback support for situations
where the NotificationWatcher isn't available.
(8cc2e35)
2010-01-14 Ted Gould
* Forgot to merge in the 'fallback' packing branch. All in sync now.
(bd7118f)
* Sync to trunk (4d4273f)
* releasing version 0.0.9-0ubuntu1~ppa1 (8240163)
* Upstream Release 0.0.9 * Add fallback support for situations
where the NotificationWatcher isn't available.
(6e43740)
* 0.0.9 (f0104e1) (tag: 0.0.9)
* Update to desktop. (e43ee66)
* Fallback support to XEmbed based notify item. (39b0dc9)
* Returning the icon we've created. (09442ab)
* Making a more descriptive error on 'unfallback' not existing.
(2bfabeb)
* Using better naming for 'do_it_now' parameter. (544ac3a)
2010-01-14 Ken VanDine
* [merge] Upstream release 0.0.8 (1a2eabc)
2010-01-13 Ted Gould
* Realized that we didn't really use the 'notify' signal... now using
the better ones anyway. (c303c0c)
* Making it so that the icon will update in the fallback case with
changes to the properties of the AppIndicator. (c26cab9)
* Showing the toggle_item as well as the others. (67493d4)
* Popping up menu on activate. (6068e6c)
* Showing items in sample (10521bb)
* Adding in a get_menu function. (9489aa2)
* releasing version 0.0.8-0ubuntu1~ppa2~fallback5 (b83df5e)
* Upstream update * Looking at StatusIcon fallback (15176e3)
* Connecting to the activate signal (bf390ec)
* releasing version 0.0.8-0ubuntu1~ppa2~fallback4 (556b0bc)
* Upstream update * Removing the 'destroy' signal handler
(1583b1b)
* Remove the 'destroy' signal handler before destroying the watcher
proxy. (ef95891)
* releasing version 0.0.8-0ubuntu1~ppa2~fallback3 (8baa1ed)
* Upstream update * More checking. (c1d9e7d)
* Checking more for whether we have an APP_INDICATOR object (e67b856)
* Explicitly checking for the APP_INDICATOR. Confused. (303db3c)
* releasing version 0.0.8-0ubuntu1~ppa2~fallback2 (df2c07b)
* Upstream update * Checking fallback function params (b7f9aaf)
* releasing version 0.0.8-0ubuntu1~ppa2~fallback1 (519e03c)
* Checking for the status of the variable getting passed in.
(6023693)
* Upstream update * Fallback support (21c5cc4)
* Fleshing out the fallback function, so it should create an icon.
(b1b9134)
* Really we should have gotten the final cleanup unfallback, which we
weren't testing for either. (5d07598)
* Getting the class the proper way (88c99ac)
* Clear the fallback timer pointer after using it. (89aa4a7)
* Adding a function to watch if the watcher proxy gets destroyed.
(c959db1)
* Removing a warning. (06a6bb7)
* Making sure to return a value so that unfallback gets called.
(5898ca0)
* Calling the unfallback function if we're doing this for the second
time. (5739297)
* Ignoring the generated fallback test itself (3ac18fb)
2010-01-12 Ted Gould
* Setting up a dbus proxy and starting to look at owner change events
on it when we don't have a NotificationWatcher to look at.
(7e0feb2)
* Adding a menu so that the app indicator will init (f55bf25)
* Wrong class function (bded6da)
* Adding the fallback test to the suite (7783a49)
* Adding state transitions that'll get us to a passed state.
(9a21024)
* Adding a kill function and letting the test fail over it. (a216db2)
* Printing status in watcher (d0abe1e)
* Adding in the item side of things. (cc31c23)
* Woah, this is pretty sweet. I hope it works. (348bcfb)
* Getting the start of the fallback tests in place. (4a1b722)
* Setup the fallback timer and flesh out it's actions. (36d47b5)
* Fallback timer pointer lifecycle. (9518459)
* Some comments (7e5e095)
* Start timer fallback (40d3056)
* Updating to trunk (b2198be)
2010-01-12 Ken VanDine
* merged 0.0.8 (2ceb846)
* Upstream Release 0.0.8 (0eea33a)
2010-01-12 Ted Gould
* releasing version 0.0.8-0ubuntu1~ppa1 (5ca2ed3)
* Upstream release 0.0.8 * Mirror icon changes over dbus
(44efa30)
* 0.0.8 (abd41dd) (tag: 0.0.8)
2010-01-12 Cody Russell
* Mirror the icon changes over dbus (6fe9571)
2010-01-12 Ken VanDine
* autoreconf (7e77e90)
* debian/patches/mono_bindings_fix.patch - Mono bindings fixes
(LP: #505923) (6d6c8e4)
2010-01-12 Cody Russell
* Remove debugging code (6ae0ede)
2010-01-12 Ted Gould
* releasing version 0.0.7-0ubuntu1~ppa5 (06145a0)
* Upstream update * Distcheck fixes to tests and cleanfiles
(c20fb45)
* Adding the middle API file to the cleanfiles for distcheck
(0fda6a0)
* Fixing the path for the tests. (bd7a48f)
2010-01-11 Ted Gould
* releasing version 0.0.7-0ubuntu1~ppa4 (f905b80)
* Upstream update * Better default object names. (356a1ce)
* Updating path names to have more reasonable defaults. (d104014)
* releasing version 0.0.7-0ubuntu1~ppa3 (807982e)
* Upstream update * Fixes for the mono binding properties
(481ad31)
* releasing version 0.0.7-0ubuntu1~ppa2 (983ceaf)
* Upstream Merge * Sensitivity to label changes (ed18ce8)
* Sync to trunk (2e6c62f)
* Fixes for the mono bindings to make the properties work with enums
and the #define'd string names. (e04e32f)
* releasing version 0.0.7-0ubuntu1~ppa2~mono1 (4d42c62)
* Fixing makefiles (8bb5b38)
* Adding back in the MIDDLE_API and sed magic (d6ae58e)
* Upstream update * Fixes for the mono binding properties
(1e13ebd)
* Removing the middle API stuff and cleaning up Makefile (f466763)
* Cody's customs (d09369b)
2010-01-11 Cody Russell
* Mono binding fixes. (af45b19)
2010-01-11 Ted Gould
* Adding in customs support (9c04a32)
* Use sed to get rid of the #defines (bebf565)
* Switching the metadata to not use #defines (9035e52)
* Initing and destroying the status_icon variable (f8d6a7d)
* Having better default paths that look a little more professional.
(73afc35)
* Setting the fallback functions so that we can go round trip on
setting up this API. (d8c7246)
2010-01-11 Cody Russell
* trunk merge (b7ec550)
* Label fu (724261a)
2010-01-11 Ted Gould
* Adding in the class functions for handling the fallback. (2a91387)
2010-01-11 Cody Russell
* Watching several properties and updating them as they change.
(e979943)
2010-01-08 Ken VanDine
* debian/control - bump build depends version of libdbusmenu to
0.2.0 (820eb75)
* Upstream Release 0.0.7 * Making the Notification Watcher
register for it's own DBus name to keep the service
one unique. * Adding support for icons changing through
the service and in the indicator. * Fixing the
generated headers for DBus Properties calls * Fixing
libappindicator set_icon to set the right icon. * Adding
in icon path support. * Switching DBus interface to
org.freedesktop * Adding check/radio support to menu
parsing * Adding ChangeLog to dist * Adding check item
support to menu parsing (64df46b)
2010-01-08 Cody Russell
* Remove debugging code. (b56f250)
* Watch for changes to label and sensitivity. (ecb11f0)
2010-01-08 Ted Gould
* releasing version 0.0.7-0ubuntu1~ppa1 (c1010b6)
* Upstream Release 0.0.7 (54708c2)
* 0.0.7 (5787ec0) (tag: 0.0.7)
* Merging with the desktop branch (a7e0e79)
* releasing version 0.0.6-0ubuntu1~ppa6 (21f677f)
* Upstream merge: * Making the Notification Watcher register for
it's own DBus name to keep the service one unique.
(a3bf98e)
* Making the Notification Watcher get it's own interface name.
(e5fbe72)
* releasing version 0.0.6-0ubuntu1~ppa5 (7f93d0d)
* Upstream merge: * Adding support for icons changing through the
service and in the indicator. * Fixing the generated
headers for DBus Properties calls * Fixing
libappindicator set_icon to set the right icon. (7a78594)
* Sync to trunk (c4b431a)
* Supporting icons changing and status changing. (98237f0)
* Reactivate kill switch (bb71fc2)
* Making applications register to the watcher address so they work on
KDE (8d0d0e4)
* Make the watcher register it's own name (34bb6cb)
* Making the service have a name different than the watcher
interface. (087c7f0)
* Icons branch (d8cb0ba)
* releasing version 0.0.6-0ubuntu1~ppa4~icon2 (8e8fc16)
* Fixing everything by putting the slots on correctly. (6c2b2fd)
* Putting the signal on the Class instead of the Instance. (5f797d7)
* Debug message cleanup. (f8e9a51)
* Fixing shutdown signal, but disabling for now (7970210)
* When destroying the application free all the proxies. (12aab96)
* Fleshing out some of the remove function. For some reason the
appstore is getting disposed, but that's the next thing to
look at. (ad42e10)
* releasing version 0.0.6-0ubuntu1~ppa4~icon1 (ae5ff4b)
* Syncing with all the other branches.; Upstream update * Adding
in icon path support.; Upstream update * Switching DBus
interface to org.freedesktop * Adding check/radio
support to menu parsing; Upstream update * Adding
ChangeLog to dist * Adding check item support to menu
parsing (4e91ad3)
* Updating to trunk (96e4332)
* Syncing to final icon-path changes (5d97173)
* releasing version 0.0.6-0ubuntu1~ppa4 (aaa7438)
* Upstream update * Adding in icon path support. (e824c0b)
* Sync to trunk (a12df72)
* Final icon-path merge. (2b000f7)
* Sync to karmic packaging branch (458b67c)
* releasing version 0.0.6-0ubuntu1~ppa3 (ab7949f)
* Upstream update * Switching DBus interface to org.freedesktop
* Adding check/radio support to menu parsing (d5b5933)
* Adding in the ability for applications to specify a directory path
to get added to the icon theme search path. (a575382)
2010-01-08 Aurélien Gâteau
* Changing to freedesktop.org namespace and fixing some of the
function names and interfaces that weren't matching the
FD.o spec. (1c834b9)
2010-01-08 Aurelien Gateau
* Merged lp:~ted/indicator-application/fdo (5f86c72)
2010-01-08 Ted Gould
* Adjusting so that we use the parameter if it's not an object but a
path. (0c8cf85)
* Using the #defines for the property names instead of strings.
Define them once. (8226d6c)
* Changing the property to 'IconThemePath' to make it more clear
about what it adjusts. (83b4f68)
2010-01-08 Sebastien Bacher
* Typo in documentation using wrong values for the enum. (d7719b9)
* Use correct status syntax in the api description (lp: #504700)
(69f4b95)
2010-01-07 Ted Gould
* releasing version 0.0.6-0ubuntu1~ppa2~icon4 (8fdbf38)
* Upstream merge: * Fixing the generated headers for DBus
Properties calls * Fixing libappindicator set_icon to
set the right icon. (a375e41)
* Pretty major cut and paste error. Wrong icon. (cb14ba3)
* Changing dbus-properties header to be static and not built from the
XML as it needs a fix. (d1fbe4a)
* releasing version 0.0.6-0ubuntu1~ppa2~icon3 (8ddab95)
* Upstream merge: * Adding support for icons changing through the
service and in the indicator. (2fef3d4)
* Merging in the icon_path branch to start to handle conflicts from
there. (b1ffef3)
* A small refactoring of the code to get the position of an
application. (2cc15ba)
* Fleshing out the signal functions for updates. Some do more
callbacks. (4abe47b)
* Moving the list of applications management into the state change
function. This makes it so that we can handle it
appearing and disappearing all in one special place.
(45e742e)
* Adding in a status variable (16fb78b)
* Responding to the icon changed signal in the indicator. (655f6d1)
* releasing version 0.0.6-0ubuntu1~ppa2 (7f27006)
* Adding an icon_changed signal to the application store (2c767da)
* Cleaning up signal handlers. (f7e660f)
* Upstream update * Adding ChangeLog to dist * Adding check
item support to menu parsing (99b4888)
2010-01-07 Cody Russell
* Support for check items in the libappindicator menu parser.
(e76d63c)
2010-01-07 Ted Gould
* Setting up and connecting to the item signals (6d922ea)
2010-01-07 Cody Russell
* Toggle events (a60f25e)
2010-01-07 Ted Gould
* Allowing for the default path if one is not given. (199f3d2)
2010-01-07 Aurelien Gateau
* Revert part of previous revision: pass the path, not the service
name to register_status_item (17476bd)
2010-01-07 Cody Russell
* More checkbox related updates. (6bde6a4)
* Checkmark support (bf0be37)
2010-01-07 Aurelien Gateau
* Use org.freedesktop namespace (0aaa6a2)
2010-01-07 Ted Gould
* releasing version 0.0.6-0ubuntu1~ppa2~icon2ubuntu1 (13de14e)
* Debug message (6575026)
* Adding a path based debug message (ad8ca0d)
* releasing version 0.0.6-0ubuntu1~ppa2~icon2 (6223c53)
* Fixing the signals. (11984c8)
* Forgot to adjust the parameter count. (e16d383)
2010-01-06 Ted Gould
* Handle the case of no icon path more gracefully, by just passing
along the null string. (eec2466)
* Ignoring some of the generated files (150a0d7)
2009-12-23 Aurelien Gateau
* Previous commit was not meant to be pushed to trunk Revert my mess
(dd2ed95)
* Make it work on KDE (95b5ea9)
2009-12-20 Ted Gould
* releasing version 0.0.6-0ubuntu1~ppa2~icon1 (06b735f)
* Adding in icon path support. (28d5fae)
* Appending the new icon path to the theme search. (cd57997)
* Adding the icon path to the app entry struct (3915de9)
* Adding in the icon path to the list of parameters that are passed
when we have a new application. (9185eee)
* Adding new constructor to docs. (a9c6b6e)
* Forgot to get these from the private struct. (b3542e0)
* Making the icon-path property construct only and making a
constructor to set it. (c44c00b)
* Adding the icon_path property to the code. (2f82dde)
* Adding of a new property, icon path, to store the path to the
icons. (8d4ca51)
2009-12-17 Ted Gould
* Adding ChangeLog to tarball (312dadc)
2009-12-17 Ken VanDine
* include ChangeLog in EXTRA_DIST (929d2e8)
* Upstream release 0.0.6 * Include Python binding * Include
Mono binding * Minor bug fixes * Fixing when menus are
set twice. (LP: #497812) * Keeping a constant signature
for the library instead of building it each time.
debian/control, debian/python-appindicator.install:
Building a binary package for the python bindings.
debian/control: Adding python building build dep.
debian/control, debian/libappindicator0-cil.install:
Building a binary package for the Mono bindings.
debian/control: Adding Mono building build deps (60e78aa)
* version bump (951c79d)
2009-12-17 Ted Gould
* releasing version 0.0.6-0ubuntu1~ppa1 (75de7c2)
* Upstream release 0.0.6 * Keeping a constant signature for the
library instead of building it each time. (71a9247)
* 0.0.6 (7eb8f46) (tag: 0.0.6)
* Using a constant snk file instead of generating it each time.
(f789e13)
2009-12-17 Ken VanDine
* merged (cca4d63)
* merged (4e8176e)
* use srcdir for the path to appindicator-sharp.snk (52c77eb)
* Don't create the signature during build (af81423)
2009-12-17 Ted Gould
* releasing version 0.0.5-0ubuntu1~ppa1 (e173606)
* Upstream release 0.0.5 * Include Python binding * Include
Mono binding * Minor bug fixes; debian/control,
debian/python-appindicator.install: Building a binary
package for the python bindings.; debian/control: Adding
python building build deps; debian/control,
debian/libappindicator0-cil.install: Building a binary
package for the Mono bindings.; debian/control: Adding
Mono building build deps (2c6df6b)
* 0.0.5 (6d8c312) (tag: 0.0.5)
2009-12-17 Ken VanDine
* Linking Mono bindings to versioned library and fixing the example
with licensing info and a menu. (6a7f7db)
* Added license/copyright to the example and un-commented out the
code that adds the menu. (84d7e5e)
* added libnunit2.4-cil build-depends (c64d79b)
* link against the versioned library (d1fbd5d)
2009-12-17 Ted Gould
* releasing version 0.0.4-0ubuntu3~ppa4 (3280544)
* Upstream updates: * Fixing when menus are set twice. (LP:
#497812) (bdff04c)
* Fix issue with setting a menu twice by only allocating one dbusmenu
server. (d11b8c9)
2009-12-17 Cody Russell
* Only create the dbusmenu server if it doesn't exist (09c4ec2)
2009-12-17 Ted Gould
* Initing 'menuservice' to NULL (6af83d4)
* Only build a dbusmenu server if we don't have one. (f4c9af7)
2009-12-17 Ken VanDine
* Moved Build-Depend-indep to Build-Depends (f87e935)
2009-12-17 Ted Gould
* releasing version 0.0.4-0ubuntu3~ppa3 (e2f1257)
* debian/control: Fixing the libdbusmenu-glib version dep. (24abbb1)
* debian/control: Removing architecture independent build
dependencies are no architecture dependent. (5918076)
* releasing version 0.0.4-0ubuntu3~ppa2 (3995123)
* Upstream updates: * Mono build fixes. * Mono metadata file
cleanups. (1443165)
* Mono build cleanups (4d95601)
* debian/control: Adding a build-dep on nunit (d293bbf)
* Updates to Mono bindings to make them more Mono-onic. (7219db0)
2009-12-17 Ken VanDine
* merged from trunk (33beea5)
2009-12-17 Ted Gould
* releasing version 0.0.4-0ubuntu3~ppa1 (c4f20d6)
2009-12-17 Ken VanDine
* Upstream release - debian/libappindicator0-cil.install -
debian/libappindicator0-cil-dev.install - debian/control
(7ebdc97)
2009-12-17 Ted Gould
* Integrating a ton of work. (511ef69)
* Added mono bindings; debian/rules - don't use gnome.mk,
specify all the targets to build python bindings for
each supported python version; Adding in Python bindings.
* debian/control, debian/python-appindicator.install:
Building a binary package for the python bindings.
debian/control: Adding python building build dep.
debian/control - make libappindicator0 recommend
indicator-application; debian/rules: - removed the
disable-scrollkeeper configure arg - don't include .la
and .a files; debian/patches/clean_up_docs.patch -
removed, merged upstream; debian/control: - removed
Build-Depend for scrollkeeper - libappindicator-dev
needs to depend on libdbusmenu-glib-dev - bump standards
version to 3.8.3 - libappindicator-doc doesn't need to
depend on libappindicator0 - set libappindicator-doc
arch all - make libappindicator-dev depend on
libappindicator0; debian/copyright - Include the proper
licenses (LGPL-2.1 and LGPL-3) (5aed77c)
2009-12-17 Ken VanDine
* Install the assembly in the gac (6af5c99)
2009-12-17 Ted Gould
* Upstream work * Python bindings * Mono binding clean up
(20a7ac2)
* Mono and Pythong bindings living together. (97f6e62)
2009-12-16 Ken VanDine
* set version back to 0.0.4 (394f015)
* merged from trunk (cef679b)
* Added mono bindings (2ba572c)
* Use a versioned assemblydir (8a26b8c)
* use more macros (ceef246)
* Reference the correct dll (7996187)
* fixed path to python bindings (23b19e9)
* debian/rules - don't use gnome.mk, specify all the targets to
build python bindings for each supported python
version; Adding in Python bindings.; debian/control,
debian/python-appindicator.install: Building a binary
package for the python bindings.; debian/control: Adding
python building build deps (2a5cad3)
* merged in python bindings branch and some of my fixes needed for
packaging (4d9d260)
* exclude the path in subst replace in the dbus-binding-tool command
(251da6d)
2009-12-16 Jason Smith
* Make mono bindings less redundant and more mono friendly (7aee325)
2009-12-15 Ken VanDine
* make libappindicator0 recommend indicator-application (53d5f10)
* release (c4a5888)
* debian/control - make libappindicator0 depend on
indicator-application (c593131)
2009-12-14 Sebastien Bacher
* releasing version 0.0.4-0ubuntu1 (add48dd) (tag: 0.0.4-0ubuntu1)
2009-12-14 Ted Gould
* releasing version 0.0.4-0ubuntu1~ppa2 (0d66efa)
* debian/control: Adding in mono build depends. (1ae9e02)
* Upstream work * Mono bindings (0d59bd4)
2009-12-14 Ken VanDine
* use path to find includes (c66e720)
2009-12-14 Ted Gould
* Merging in mono bindings. (985c449)
* Looking for the assembly files in the right location. (bb6fa61)
* Adding the test files to dist and making sure we find them in the
right directory. (04e218d)
* Merging in Jason's fix of Cody's branch. Yeah, seriously.
(aebb91e)
2009-12-14 Jason Smith
* Nicer fix (5e6e5ba)
* Make build work right (3d0245f)
2009-12-12 Cody Russell
* Try to add SetMenu() (40f3778)
* Initial stab at setting up test/example fu (59526b6)
2009-12-11 Ted Gould
* Fixing the build system to link everything all happy like.
(a3a42b9)
* Adding the Python build system into the indicator-application one.
(a602f42)
2009-12-11 Neil J. Patel
* Stealing a bunch of Neil's python binding code. (f7ba47b)
2009-12-11 Ken VanDine
* fixed typo in the Vcs-Bzr line (1c008f5)
* merged from trunk (7158acf)
* set to UNRELEASED (e75075f)
* - bump standards version to 3.8.3 - libappindicator-doc doesn't
need to depend on libappindicator0 (fd5003d)
* libappindicator-dev needs to depend on libdbusmenu-glib-dev
(2da3664)
* fix the path used for deleting the .la and .a files (2f0f25f)
2009-12-11 Cody Russell
* Fix distcheck (ed48108)
2009-12-11 Ken VanDine
* don't include .la and .a files (54099ef)
2009-12-11 Ted Gould
* Merging in Ken's Lucid changes. (a5dfa76)
2009-12-11 Cody Russell
* Move appindicator-sharp.pc to appindicator-sharp-0.1.pc (7783eb6)
* trunk merge, resolve conflicts (8de2753)
2009-12-11 Ted Gould
* releasing version 0.0.4-0ubuntu1~ppa1 (52f97ba)
* Upstream release 0.0.4 * Adding files to the tarball *
Putting version number in docs * Removing cruft in docs
(c5d3cf3)
* 0.0.4 (d303893) (tag: 0.0.4)
2009-12-11 Cody Russell
* Add missing Makefile.am (5fe114e)
2009-12-11 Ken VanDine
* Adding extra files to the distribution tarball and making the
documentation include the version number. (ab6e7dd)
* removed the disable-scrollkeeper configure arg (f9d90d2)
2009-12-11 Cody Russell
* Move to bindings/mono (88a109e)
* Build for Mono bindings (6d3743e)
2009-12-11 Ken VanDine
* include autogen.sh, COPYING.LGPL.2.1 and COPYING.LGPL.3 in
EXTRA_DIST (8205193)
* Merged changes from trunk (8063616)
* Bump version to 0.0.4; Include version in the generated docs
(3e2f1b6)
* fixed parse error in changelog (d032af1)
* debian/control: - removed Build-Depend for scrollkeeper
(020d8bb)
* Upstream release 0.0.4; debian/rules: - removed
disable-scrollkeeper - set DOC_SERVER used for doc.
debian/patches/clean_up_docs.patch - removed, merged
upstream (7263623)
2009-12-10 Ted Gould
* releasing version 0.0.3-0ubuntu2~ppa1 (c52a914)
* debian/patches/clean_up_docs.patch: Remove as merged upstream.
(e11024f)
2009-12-10 Ken VanDine
* Documentation cleanups (d0ff3d2)
2009-12-10 Ted Gould
* Merging in Ken's fixes. (9ef452b)
2009-12-10 Sebastien Bacher
* releasing version 0.0.3-0ubuntu1 (c5ceaf1) (tag: 0.0.3-0ubuntu1)
2009-12-10 Ken VanDine
* debian/copyright - Include the proper licenses (LGPL-2.1 and
LGPL-3) (4358884)
* - set libappindicator-doc arch all - make libappindicator-dev
depend on libappindicator0 (af73889)
* set to UNRELEASED (767f3d4)
* set release to lucid (bd32dd0)
* set a title and remove releaseinfo, we haven't set it yet.
(27f8252)
* added simple-patchsys.mk (ff35c76)
* debian/patches/clean_up_docs.patch - Remove template values and
set a proper title (a634b49)
* fixed a typo in libappindicator-doc.install (7c04550)
* debian/libappindicator-doc.install - install the developer docs
* debian/rules - enable-gtk-doc (86e4f6e)
* added bzr-builddeb/default.conf (87560be)
* debian/control - set Vcs-Bzr to ~ubuntu-desktop (fb2b3cf)
2009-12-10 Ted Gould
* Merging in Ken's updates (e44eaf4)
* releasing version 0.0.3-0ubuntu1~ppa1 (7dcc785)
* debian/control: Increasing libdbusmenu requirements to 0.1.8
(94cc8a7)
* Upstream release 0.0.3 * More GtkMenu support in
libappindicator (eab11a2)
* 0.0.3 (6b3e25f) (tag: 0.0.3)
2009-12-10 Ken Vandine
* Increasing libindicator requirement to 0.3.0 (dc31293)
2009-12-10 Ken VanDine
* Bump required version for libindicator to 0.3.0 (ad85df3)
* debian/control - Updated Vcs-Bzr, project urls and description
(2227fe0)
* debian/watch: - Updated url to point to the LP project
(f87a074)
2009-12-09 Cody Russell
* Adding support for separators. (9e7a9fb)
* Add support for separator menuitems (6cb0e1a)
2009-12-09 Ted Gould
* Switching back to the calling style with all the parameters.
Otherwise the --enable-gtk-doc gets lost. (0e959b1)
* Fixing up documentation and making it error if symbols are missing.
(5ed9363)
* Adding a directory name on the distribution of the .pc.in file
(ecd7cd9)
* releasing version 0.0.2-0ubuntu1~ppa2 (59f09d6)
* debian/control: Adding a build dep on gtk-doc-tools (afd0904)
* debian/libappindicator-dev.install: Adding pkgconfig files.
(b478a86)
* Getting the install files with the right names. (4e25a45)
* Upstream update * Adding in documentation * Adding a
pkg-config .pc file for libappindicator (b67737d)
2009-12-09 Cody Russell
* Add pkgconfig support, fixes bug #494583 (bae74ef)
* pkgconfig Libs and Requires fixes (02ab21b)
* merge from trunk (875e290)
2009-12-09 Ted Gould
* Fix to autogen.sh to support configure options. (cd2a4a9)
2009-12-09 Cody Russell
* fix autogen.sh (6519597)
* pkgconfig file (3f16792)
2009-12-08 Ted Gould
* Improved menu item parsing from Cody. (e0bf73e)
2009-12-08 Cody Russell
* Beefed up and stuff. (284188b)
2009-12-08 Ted Gould
* Putting gtk-doc-check into a wrapper to it runs in srcdir (e4cdb13)
* Adding in some section documentation. (a29bb3d)
* Documenting the AppIndicatorClass as well. (b8e1a71)
* Fixing function documentation. (79d9410)
* Adding documentation for the signal string defines. (c80692f)
* Adding in documentation for the Object/Class macros (46799c6)
* Adding a check rule for documentation. (b63e880)
* Adding support for building gtk-doc documentation. (4a19cb4)
* Making it so that we have a local gtk-doc.make file that will pass
a dist without the lib being built. (cf4dd4a)
* Ken's gtk-doc integration branch (fbb083f)
2009-12-08 Ken VanDine
* Removed a commented variable (86b124f)
* Clean up some cruft I left around (0c816c3)
* Fixes for make distcheck and default configure args (199da20)
* Added some missing gtk-doc related files (5ebc39a)
* don't run gtkdocize with autogen.sh (43eac26)
2009-12-07 Jason Smith
* Add script to automate building (someone should do this without
autofoo) (dc33785)
* Ensure names are nice and pretty (6335098)
* Make build work (e945be8)
* Add mono xml api file (a7dec87)
2009-12-07 Ted Gould
* Adding in an activate signal. (bfb9e77)
2009-12-07 Cody Russell
* Add 'activate' signal support (95ecb48)
2009-12-05 Ken VanDine
* remove --enable-gtk-doc from autogen.sh (fb20a31)
* generate gtk-doc (9306d83)
2009-12-04 Ted Gould
* releasing version 0.0.2-0ubuntu1~ppa1 (ec3c1be)
* Upstream release 0.0.2 * Updates API to use GTK instead of
dbusmenu to make it easier for upstream developers to
use. (5498681)
* Increasing to version 0.0.2 (2906ee4) (tag: 0.0.2)
* Test suite fixes for the GTK Menu changes. (fe16a24)
2009-12-04 Cody Russell
* Remove the menu test (c9670e6)
* test fix (6f39584)
* Test fixes (670019c)
2009-12-04 Ted Gould
* Adding GTK Menu support to libappindicator and removing dbusmenu
support. (17478a9)
2009-12-04 Cody Russell
* credit :) (7406617)
* Small cleanup (17d72ed)
* Fix up some docs (5f4c6f8)
2009-12-03 Cody Russell
* API changes, gtk menu support (580f2be)
2009-12-02 Ted Gould
* releasing version 0.0.1-0ubuntu3~ppa4 (25d7d99)
* Adding in copyright headers and licenses (fb3c300)
* Adding legal headers on files and licenses. (92a3e89)
* releasing version 0.0.1-0ubuntu3~ppa3 (5710b62)
* Massive name change.; debian/* changing packaging to not be
"custom" anymore and now everything is "application.
debian/control: Splitting out libappindicator; Adding
debian/libappindicator0.install,
debian/libappindicator-dev.install,
debian/indicator-application.install (5317413)
* Sync to trunk (5c4e31a)
* Changing the name from indicator-custom to indicator-application
(984759e)
* releasing version 0.0.1-0ubuntu3~ppa2 (f897644)
* Implementing the service and having the indicator and app library
start using it. (29ef598)
* Sync from trunk (69448c0)
* Create a service and start using it. Also updating to libindicator
0.3.0. (47741f6)
2009-12-01 Ted Gould
* releasing version 0.0.1-0ubuntu3~ppa1~newname1 (dc560c7)
* debian/* changing packaging to not be "custom" anymore and now
everything is "application"; debian/control: Splitting
out libappindicator; Adding
debian/libappindicator0.install,
debian/libappindicator-dev.install,
debian/indicator-application.install (c0b7c89)
* Massive name change. (1566a99)
* Updating to service-me-please branch. (113fc34)
* Updating to trunk packaging (1933cc6)
* releasing version 0.0.1-0ubuntu3~ppa1 (71797b3)
* Flesh out the library to have stuff working.; Updating test
suite to run under dbus-test-runner. (c860f69)
2009-11-30 Ted Gould
* Copyright notice for marshallers definition. (1895dec)
* Header for a DBus interface description, not sure if that's right
or not. (dfb7524)
* Adding in GPLv3 headers. (9028f21)
* Adding in LGPL v3/2 headers (d8e73df)
* Adding GPLv3 headers. (8027b94)
* GPL header (91013e4)
* Adding in copying license files. (45f5d8c)
* Getting the right named files. (44be8d2)
* Changing the insides to remove the custom stuff. (f0881be)
* De-customizing the directory stuff. (35d5c71)
* Migrating to the new 'app' world. (7cc02cf)
* Shortening the object names as well. People hate typing. (a7c7079)
* Massive custom to application find and replace throughout the code.
(672b725)
* Ignoring happily again. (fdd8e21)
* Shortening the file names as well. (997bdb5)
* Making the directory name shorter (8eff74d)
* Changing file names, and some fallouts from that. (5b2dcab)
* Total insane rename. Probably broke more than a few things.
(fc1e08a)
* Another name change. (e0cb52e)
2009-11-24 Ted Gould
* Changing all the dbus names. (ad2afb8)
* Name changed (f4d0952)
* Name changes (8fa7b92)
* A bunch of code. (f0fcaa6)
* releasing version 0.0.1-0ubuntu3~ppa1~service8 (2edb47b)
* Sync to trunk and fix distcheck by delaying connecting to the
service by checking for data. (62a7252)
* Moving the connection code into a function that is called to check
to see if we have enough data. This fixes distcheck after
the merge from main. (8c7ce8f)
* Merging in changes on trunk. Resolving a conflict. (acbab33)
* releasing version 0.0.1-0ubuntu3~ppa1~service7 (7c86b00)
* Woot, basic remove support. Causes warnings, but it works.
(4b23fc3)
* Showing the icon. Now we can put things up in the menu! Finally.
(ce09817)
* Ignoring the marshallers (254386f)
* Building a little more of a menu item for testing. (314754f)
* Fixing Marshallers so that everything is happy-happy. (c8faaf3)
2009-11-23 Ted Gould
* releasing version 0.0.1-0ubuntu3~ppa1~service6 (bfd3806)
* I really shouldn't have to register marshalers. Srsly. (6caead9)
* Moving the registration of the marshallers until after the proxy.
Odd that I'd have to do this, but let's try. (f0b58f5)
* releasing version 0.0.1-0ubuntu3~ppa1~service5 (cecee4c)
* Forgot return types. (28f794c)
* Forgot return types. (756b6c9)
* releasing version 0.0.1-0ubuntu3~ppa1~service4 (c27868e)
* Registering marshallers for DBus in the indicator. (25d690a)
* Adding a debug message on getting an application. (009e468)
* Making a simple client (62f0373)
* releasing version 0.0.1-0ubuntu3~ppa1~service3 (b6b57bd)
* Adding more fun. Now we're cookin'! (59b0398)
* Connecting to a notification watcher. (2c04418)
* Adding in a TODO (9a48354)
* Commenting. (5a87d20)
* Fixing custom indicator watcher object path. (efd63e3)
* Cleaning up main a little bit and handling the 'disconnected' case
that doesn't yet quite exist. (f22ff6a)
* Adding a remove function and switching to the position in the list
being the position. (f7cfd25)
2009-11-09 Ted Gould
* Adding in the dbus shared header. (3d71f7f)
* A simple little app. (5c797c3)
* Adding a defualt file for a little appliction that'll grow into a
full app. (23d6b5d)
2009-11-08 Ted Gould
* releasing version 0.0.1-0ubuntu3~ppa1~service2 (9738887)
* Building the service and getting things in better shape. (3d0184b)
2009-11-06 Ted Gould
* Grabbing the properties and going to town. Turning back into
another signal. (d0abdda)
* Adding some XML for dbus properties interface. (ffd9962)
* Building the property proxy. (4bcfbf4)
* Forgot to save. (1cee2f3)
* Building a proxy. (8b92c1c)
* Adding an application list. (e25d64f)
* Getting the registration signal, and passing it up the stack.
(bca77a7)
* Adding app add/remove to appstore (78a6d0d)
* Woot! Now we have signals in our watcher. Let's rock on!
(591311a)
* Connecting the watcher and the appstore. And actually building
one. We're on DBus now. (ced0ec2)
* Moving the watcher stuff to the new object. (fa2ac00)
* Creating a new object to be our watcher. Apparently we can't have
two DBus interfaces on the same object :( (ab660ab)
* Adding in teh source directory for distcheck (c894aa5)
* Adding in a set of marshallers to make our signals all happy.
(53f654e)
* Putting some signals on here. (3ea189e)
* Changing some API and implementing the simple stuff. (4644370)
* Fleshing out the application added stuff (faef47f)
* Fleshing out get_entries (463ca24)
* Making for a list of applications that we can build and destroy at
will. (1dc8a8a)
* Hooking up to the proxy. Let's do this! (349af66)
* Fleshing out connected to start bringing up the proxy. (10d1d2e)
* Migrating over to the libindicator 0.3.0 API. (7532947)
2009-11-04 Ted Gould
* Put the cleanup of gtester on the wrong variable. (f23c54f)
* A small fix to make things run under dbus-test-runner so that we
start a dbus test session. (2d5018b)
2009-11-03 Ted Gould
* Put the gtester test under a dbus-test-runner to ensure that we
have a session bus to test with. (8ef7ed5)
* Fleshing out the library so that the interface is implemented.
Also tests for the library. (be7d032)
* Removing the checks on private being NULL when we're already
testing the object. (cd7ec27)
2009-11-02 Ted Gould
* releasing version 0.0.1-0ubuntu3~ppa1~service1 (3345ad5)
* releasing version 0.0.1-0ubuntu2 (88be27c) (tag: 0.0.1-0ubuntu2)
* debian/control: Splitting out libcustomindicator; Adding
debian/libcustomindicator0.install,
debian/libcustomindicator-dev.install,
debian/indicator-custom.install to make all the
different packages. (9d043e6)
* Merging project name change. (81d7988)
* Changing the package name (a260225)
* releasing version 0.0.1-0ubuntu2~ppa1~service1 (733c841)
* Grabbing from the service development branch (8d4cdc7)
* We've got a service manager. Now we'll start ourselves up!
(d496d7a)
* Getting the name into a header. (9aff9ba)
* Boom, make us an indicator service. (3d1c4c4)
2009-11-02 Robert Collins
* Draft packaging. (df182c1)
2009-10-28 Ted Gould
* Building our app store (f2c4a15)
* Registering ourselves on dbus (714f372)
* Boom! Now we're implementing dbus. (8903841)
* Adding an appstore object to hold all of our apps. (ecf44bf)
* Adding the custom-service interface. (ec8cd68)
* Pulling in the unreviewed lib-flesh branch (b6d06ca)
2009-10-22 Ted Gould
* 'Merging' in trunk. No changes. Better history. (9c868b9)
* Adding in testing the location of the dbusmenuserver (1b71a85)
* Looking for the wrong property, we can only set the object.
(d6cc939)
* We can't get the enum values from the string param spec, we need to
find the enum one and then use that. (20caa2f)
* Property name changes. Boo. (6030445)
* Changes due to the properties changes. (6a255c6)
* Gimme a break (0256208)
* Adding a set of read-only properties that deal with the strings for
dbus, and let the other properties do the real work.
(00f4a53)
* Branch building up the interface for the library. (20d116a)
* Checking the category and state (b04e0de)
* All strings work. (af10235)
* Fleshing out the property counting. (e99a6fe)
* Settng the right path (199365d)
* If we fail, we need to really fail. (9db2ce5)
* Adding a kill function, just in case. (e0d35fc)
* Basic code calling all the properties. (a8b1009)
* Fleshing out the server to setup a simple custom indicator.
(83a3d84)
* Switching to using a little autotest as well. (23b7242)
* Adding in two little client server binaries for testing the custom
indicator. (bca9b7e)
2009-10-21 Ted Gould
* Change the enums to match the KDE ones to make life simpler even
though I dislike the names. (0df50d7)
* Turning on verbose output and showing the status of all tests.
(5e34573)
* Getting the prototype right. (5aeff27)
* The signal should have a string not a enum value. (02cb525)
* Making sure to signal if we change the status. (b08b158)
* Adding test to test the property change signals. (5e1d1d9)
* Checking all the set functions. (dc43af9)
* Switching from doing the GValues as enums to the more specific
types. (d11f7e6)
* Silly, these are enums not ints. (fdd9a5d)
* Adding a test that sets a bunch of properties. (795f7d9)
2009-10-21 Cody Russell
* Ah, forgot a return. Cody would kill me! Oh, no. (0093c37)
2009-10-21 Ted Gould
* Woot! We can build a custom indicator, and it exists. (10e9550)
2009-10-20 Ted Gould
* Now we're building a test, woot! (5e928c9)
* Tests directory. (d28010e)
* Fleshing out the get functions. (ada3399)
* Fleshing out the set functions. (e932bfa)
* Filling out some prototypes. (08c19ed)
* Okay, connecting this little thing into DBus already. (81afbd1)
* Making sure to free and unref all of our private variables.
(484b489)
* Now for some 'set' code. Bringin' it. (59d8fbd)
* Fleshing out get parameters... (23fdc86)
* Adding in a bunch of things to the private struct. We now have
data! (b52ac88)
* Basic property case statements. (56cd30a)
2009-10-19 Ted Gould
* Creating a connected property to check easily. (b82c8da)
* Boom, there are some signals. (9dbe19d)
* Adding in the dbus signals from that interface. (6587e75)
* Header comments and a new signal that we'll need to deal with.
(bf1efc1)
* Wow, properties. The properties system in gobject is a little
insane. (6da6b6b)
2009-10-17 Ted Gould
* Changing the name to match the changes in the previous commit.
(9e25a77)
* Switching the name to be more consistent. (49bddff)
* Getting the name change into the templates properly. (72815e1)
* Making the enums camel case. I prefer the other, but it seems best
to match GTK style (06111bc)
* Making sure to get the property names into defines so that we can
ensure they're all the same. (7b45f65)
* Filling out the property list. (a49c643)
2009-10-16 Ted Gould
* Putting in our first property, status. Woo hoo! (85b61a4)
* Oops, shouldn't be CLUTTER there. (8dc712f)
* Forgot to change the package name (63e10a6)
* Set and get properties (31f519d)
* Merging in the library interface. (227666e)
* Adding the possibility of making the directories silently.
(50e28fd)
* Some small changes to make 'distcheck' happy. (f4f482c)
* Another object file bites the dust (174af37)
* Fixing the templates. (00c4764)
* Filling out the enums to have values. (0b6ffb4)
* Adding the C file into the build as well. (d7e3756)
* Putting in the enum templates and building them. (ba81d4a)
* Setting up build to build the enums. (5b8ab09)
* Adding programs for buiding enums and marsherers and all that jazz
(0336cb4)
2009-10-16 Emmanuele Bassi
* Stealing these makefile segments to build enums and marshallers
(8ad3fb0)
2009-10-16 Ted Gould
* Building a basic prototype of the API for the lib. (1101075)
* Adding in the DBus interface files and building of those. (664bc74)
2009-10-15 Ted Gould
* Building a basic library starting out. (b666cc1)
* We need a directory. (be305bc)
* We're on the dbus branch now (e576b28)
* Ignoring the generated dbus interfaces. (afd1d17)
* Building the ChangeLog on dist (d6fb194)
2009-10-13 Ted Gould
* Making sure we get our specs and clean up after ourselves.
Distcheck magic. (df1cc80)
* Getting some functions so that we can link happy like. (89ebfc6)
* Fixing symbol names. (17192c2)
* Getting to building all these header files nicely. (7b2c29f)
* Some dbus y'all! (9fc5dd8)
* A basical build system and basic files. (e265e46)
* Building a basic indicator and the service to go along with it.
(fb328a4)
* Cleaning up status (d7640ed)
* Local install on distcheck, now it passes. (683109e)
* Wrong version (5b565b0)
* DBus Service file (6e1d6b9)
* Autogen and friends (7bd4902)
* Very basic. (8f6b6e0)
* First version (140fda5)
ayatana-indicator-application-26.6.0/CMakeLists.txt 0000664 0000000 0000000 00000002715 15213316506 017135 0 ustar cmake_minimum_required(VERSION 3.13)
project(ayatana-indicator-application C)
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
SET(CMAKE_INSTALL_PREFIX "/usr" CACHE PATH "..." FORCE)
endif(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
# Options
option(ENABLE_TESTS "Enable all tests and checks" OFF)
option(ENABLE_COVERAGE "Enable coverage reports (includes enabling all tests and checks)" OFF)
option(ENABLE_WERROR "Treat all build warnings as errors" OFF)
if(ENABLE_COVERAGE)
set(ENABLE_TESTS ON)
set(CMAKE_BUILD_TYPE "Coverage")
else()
set(CMAKE_BUILD_TYPE "Release")
endif()
if(ENABLE_WERROR)
add_definitions("-Werror")
endif()
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
add_definitions("-Weverything")
else()
add_definitions("-Wall")
endif()
# Check for prerequisites
set(CMAKE_BUILD_TYPE "Release")
find_package(PkgConfig REQUIRED)
pkg_check_modules(PROJECT_DEPS REQUIRED glib-2.0>=2.58 ayatana-indicator3-0.4>=0.6.2 gtk+-3.0>=3.24 dbus-glib-1>=0.110 dbusmenu-gtk3-0.4 ayatana-appindicator-glib)
# Set global variables
include(GNUInstallDirs)
set(PROJECT_VERSION "26.6.0")
set(PROJECT_NAME "ayatana-indicator-application")
# Make everything
add_subdirectory(data)
add_subdirectory(src)
if (ENABLE_TESTS)
include(CTest)
enable_testing()
endif()
# Display config info
message(STATUS "Install prefix: ${CMAKE_INSTALL_PREFIX}")
message(STATUS "Unit tests: ${ENABLE_TESTS}")
message(STATUS "Build with -Werror: ${ENABLE_WERROR}")
ayatana-indicator-application-26.6.0/COPYING 0000664 0000000 0000000 00000104513 15213316506 015427 0 ustar 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
.
ayatana-indicator-application-26.6.0/data/ayatana-indicator-application.desktop.in 0000664 0000000 0000000 00000000402 15213316506 025166 0 ustar [Desktop Entry]
Type=Application
Name=Ayatana Indicator Application
Exec=@CMAKE_INSTALL_FULL_LIBEXECDIR@/ayatana-indicator-application/ayatana-indicator-application-service
StartupNotify=false
Terminal=false
OnlyShowIn=Unity;MATE;XFCE;Budgie;
NoDisplay=true
ayatana-indicator-application-26.6.0/data/ayatana-indicator-application.service.in 0000664 0000000 0000000 00000000464 15213316506 025165 0 ustar [Unit]
Description=Ayatana Indicator Application Service
PartOf=graphical-session.target
PartOf=ayatana-indicators.target
[Service]
ExecStart=@CMAKE_INSTALL_FULL_LIBEXECDIR@/ayatana-indicator-application/ayatana-indicator-application-service
Restart=on-failure
[Install]
WantedBy=ayatana-indicators.target
ayatana-indicator-application-26.6.0/data/CMakeLists.txt 0000664 0000000 0000000 00000002463 15213316506 020046 0 ustar # ayatana-indicator-application.service
###########################
# Systemd Job
###########################
pkg_check_modules(SYSTEMD systemd)
if (${SYSTEMD_FOUND})
# where to install
pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
set (SYSTEMD_USER_NAME "${CMAKE_PROJECT_NAME}.service")
set (SYSTEMD_USER_FILE "${CMAKE_CURRENT_BINARY_DIR}/${SYSTEMD_USER_NAME}")
set (SYSTEMD_USER_FILE_IN "${CMAKE_CURRENT_SOURCE_DIR}/${SYSTEMD_USER_NAME}.in")
# build it
configure_file ("${SYSTEMD_USER_FILE_IN}" "${SYSTEMD_USER_FILE}")
# install it
install (FILES "${SYSTEMD_USER_FILE}"
DESTINATION "${SYSTEMD_USER_DIR}")
endif()
###########################
# XDG Autostart
###########################
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/ayatana-indicator-application.desktop.in" "${CMAKE_CURRENT_BINARY_DIR}/ayatana-indicator-application.desktop" @ONLY)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/ayatana-indicator-application.desktop" DESTINATION "/etc/xdg/autostart")
###########################
# ordering-override.keyfile
###########################
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/ordering-override.keyfile" DESTINATION "${CMAKE_INSTALL_FULL_DATADIR}/ayatana-indicator-application")
ayatana-indicator-application-26.6.0/data/ordering-override.keyfile 0000664 0000000 0000000 00000000152 15213316506 022277 0 ustar [Ordering Index Overrides]
nm-applet=1
gnome-power-manager=2
ibus=3
gst-keyboard-xkb=4
gsd-keyboard-xkb=5
ayatana-indicator-application-26.6.0/INSTALL.md 0000664 0000000 0000000 00000001614 15213316506 016022 0 ustar # Build and installation instructions
## Compile-time build dependencies
- cmake (>= 3.13)
- cmake-extras
- glib-2.0 (>= 2.58)
- ayatana-indicator3-0.4 (>= 0.6.2)
- gtk+-3.0 (>= 3.24)
- ayatana-appindicator-glib
- dbus-glib-1 (>=0.110)
- dbusmenu-gtk3-0.4
- systemd
- intltool
- gtest (>= 1.6.0)
- gmock
- gcovr (>= 2.4)
- lcov (>= 1.9)
## For end-users and packagers
```
cd ayatana-indicator-application-X.Y.Z
mkdir build
cd build
cmake ..
make
sudo make install
```
## For testers - unit tests only
```
cd ayatana-indicator-application-X.Y.Z
mkdir build
cd build
cmake .. -DENABLE_TESTS=ON
make
make test
```
## For testers - both unit tests and code coverage
```
cd ayatana-indicator-application-X.Y.Z
mkdir build
cd build
cmake .. -DENABLE_COVERAGE=ON
make
make test
make coverage-html
```
**The install prefix defaults to `/usr`, change it with `-DCMAKE_INSTALL_PREFIX=/some/path`**
ayatana-indicator-application-26.6.0/NEWS 0000664 0000000 0000000 00000005443 15213316506 015075 0 ustar Overview of changes in ayatana-indicator-application 26.6.0
- src/ayatana-application-service-marshal.list: Replace deprecated
BOOL token.
- src/indicator-application.c: Replace deprecated
gtk_widget_get_style.
- Allow the service to handle tooltips.
- Allow the service to handle both legacy menus and the new GMenu.
Overview of changes in ayatana-indicator-application 22.2.0
- Upstream version bump to new release versioning scheme:
.., where . will be
bumped in Ayatana Indicators bundle releases and
gets incremented with minor changeset releases.
- Clean up compilation flags.
- data/CMakeLists.txt: Drop unused CMAKE_INSTALL_FULL_PKGLIBEXECDIR.
Overview of changes in ayatana-indicator-application 0.8.91
- CMake: Update systemd unit target dir detection.
- CMake: Install .so file to indicator dir as provided by
pkg-config file ayatana-indicator3-0.4.pc.
- Fix project name in CMakeLists.txt.
Overview of changes in ayatana-indicator-application 0.8.90
- Add documentation and install instructions.
- Port to CMake.
Overview of changes in ayatana-indicator-application 0.8.0
- Version bump to bring all system indicators (and the
renderer libraries to the same version level).
- Start the indicator with the ayatana-indicators.target.
- Drop upstart support.
Overview of changes in ayatana-indicator-application 0.5.3
- Avoid deprecated g_type_class_add_private.
- autogen.sh: Adapt PKG_NAME autogen.sh to ayatana- namespace.
- {configure.ac,Makefile.am}: Drop distcheck features.
- Make systemd optional. If systemd is not available at build-time,
the creation of the .service file is omitted.
Overview of changes in ayatana-indicator-application 0.5.2
- data/ayatana-indicator-application.desktop.in: Add Budgie as
candidate for launching ayatana-indicator-application.
- data/ayatana-indicator-application.desktop.in: Add XFCE as candidate
for launching ayatana-indicator-application.
- data/ayatana-indicator-application.desktop.in: Drop AutostartCondition,
drop GNOME from OnlyShowIn.
- XDG-autostart this indicator in MATE, too.
Overview of changes in ayatana-indicator-application 0.5.1
- src/application-service-watcher.c: Comment out upstart specific code
for now. We can reintroduce it once we know if our session is
upstart-managed (or systemd-managed).
- upstart service files: Fix namespace overlapping with the project we
forked from.
- Work inside a snap by prefixing hard coded paths with.
- Hide 'Indicator Application' from Startup Applications.
- Adding a systemd user unit.
- build system: Switch to mate-common.
- dbus-shared.h: Use org.ayatana namespace for the DBus service object.
- Fork from Ubuntu's indicator-application code project.
ayatana-indicator-application-26.6.0/README.md 0000664 0000000 0000000 00000004053 15213316506 015651 0 ustar # ayatana-indicator-application - Ayatana Indicator Application Service [](https://travis-ci.com/github/AyatanaIndicators/ayatana-indicator-application)
## About Ayatana Indicators
The Ayatana Indicators project is the continuation of Application
Indicators and System Indicators, two technologies developed by Canonical
Ltd. for the Unity7 desktop.
Application Indicators are a GTK implementation of the StatusNotifierItem
Specification (SNI) that was originally submitted to freedesktop.org by
KDE.
System Indicators are an extensions to the Application Indicators idea.
System Indicators allow for far more widgets to be displayed in the
indicator's menu.
The Ayatana Indicators project is the new upstream for application
indicators, system indicators and associated projects with a focus on
making Ayatana Indicators a desktop agnostic technology.
On GNU/Linux, Ayatana Indicators are currently available for desktop
envinronments like MATE (used by default in [Ubuntu
MATE](https://ubuntu-mate.com)), XFCE (used by default in
[Xubuntu](https://bluesabre.org/2021/02/25/xubuntu-21-04-progress-update/),
LXDE, and the Budgie Desktop).
The Lomiri Operating Environment (UI of the Ubuntu Touch OS, formerly
known as Unity8) uses Ayatana Indicators for rendering its notification
area and the [UBports](https://ubports.com) project is a core contributor
to the Ayatana Indicators project.
For further info, please visit:
https://ayatana-indicators.org
## About this Software Component
The -application Ayatana System Indicator is an application menu indicator
for Unity7 and optionally for others, e.g. MATE, XFCE, LXDE). The
indicator takes menus from applications and places them into the panel.
Its behavior and features are listed at
https://wiki.ayatana-indicators.org/AyatanaIndicatorApplication
## License and Copyright
See COPYING and AUTHORS file in this project.
## Building and Testing
For instructions on building and running built-in tests, see the INSTALL.md file.
ayatana-indicator-application-26.6.0/src/app-indicator-enum-types.c.in 0000664 0000000 0000000 00000003413 15213316506 022567 0 ustar /*** BEGIN file-header ***/
/*
An object to represent the application as an application indicator
in the system panel.
Copyright 2009 Canonical Ltd.
Authors:
Ted Gould
This program is free software: you can redistribute it and/or modify it
under the terms of either or both of the following licenses:
1) the GNU Lesser General Public License version 3, as published by the
Free Software Foundation; and/or
2) the GNU Lesser General Public License version 2.1, 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 applicable version of the GNU Lesser General Public
License for more details.
You should have received a copy of both the GNU Lesser General Public
License version 3 and version 2.1 along with this program. If not, see
*/
#include "app-indicator-enum-types.h"
/*** END file-header ***/
/*** BEGIN file-production ***/
#include "@filename@"
/*** END file-production ***/
/*** BEGIN value-header ***/
/**
@enum_name@_get_type:
Builds a GLib type for the #@EnumName@ enumeration.
Return value: A unique #GType for the #@EnumName@ enum.
*/
GType
@enum_name@_get_type (void)
{
static GType etype = 0;
if (G_UNLIKELY(etype == 0)) {
static const G@Type@Value values[] = {
/*** END value-header ***/
/*** BEGIN value-production ***/
{ @VALUENAME@, "@VALUENAME@", "@valuenick@" },
/*** END value-production ***/
/*** BEGIN value-tail ***/
{ 0, NULL, NULL}
};
etype = g_@type@_register_static (g_intern_static_string("@EnumName@"), values);
}
return etype;
}
/*** END value-tail ***/
ayatana-indicator-application-26.6.0/src/app-indicator-enum-types.h.in 0000664 0000000 0000000 00000003016 15213316506 022573 0 ustar /*** BEGIN file-header ***/
/*
An object to represent the application as an application indicator
in the system panel.
Copyright 2009 Canonical Ltd.
Authors:
Ted Gould
This program is free software: you can redistribute it and/or modify it
under the terms of either or both of the following licenses:
1) the GNU Lesser General Public License version 3, as published by the
Free Software Foundation; and/or
2) the GNU Lesser General Public License version 2.1, 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 applicable version of the GNU Lesser General Public
License for more details.
You should have received a copy of both the GNU Lesser General Public
License version 3 and version 2.1 along with this program. If not, see
*/
#ifndef __APP_INDICATOR_ENUM_TYPES_H__
#define __APP_INDICATOR_ENUM_TYPES_H__
#include
G_BEGIN_DECLS
/*** END file-header ***/
/*** BEGIN file-tail ***/
G_END_DECLS
#endif /* __APP_INDICATOR_ENUM_TYPES_H__ */
/*** END file-tail ***/
/*** BEGIN file-production ***/
/* Enumerations from file: "@filename@" */
/*** END file-production ***/
/*** BEGIN value-header ***/
GType @enum_name@_get_type (void) G_GNUC_CONST;
#define APP_INDICATOR_TYPE_@ENUMSHORT@ (@enum_name@_get_type())
/*** END value-header ***/
ayatana-indicator-application-26.6.0/src/application-service-appstore.c 0000664 0000000 0000000 00000137610 15213316506 023127 0 ustar /*
An object that stores the registration of all the application
indicators. It also communicates this to the indicator visualization.
Copyright 2009 Canonical Ltd.
Copyright 2024-2025 Robert Tari
Authors:
Ted Gould
Robert Tari
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 .
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include
#include
#include
#include "application-service-appstore.h"
#include "ayatana-application-service-marshal.h"
#include "dbus-shared.h"
#include "generate-id.h"
/* DBus Prototypes */
static GVariant * get_applications (ApplicationServiceAppstore * appstore);
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);
static void props_cb (GObject * object, GAsyncResult * res, gpointer user_data);
#include "gen-ayatana-application-service.xml.h"
#define NOTIFICATION_ITEM_PROP_ID "Id"
#define NOTIFICATION_ITEM_PROP_CATEGORY "Category"
#define NOTIFICATION_ITEM_PROP_STATUS "Status"
#define NOTIFICATION_ITEM_PROP_ICON_NAME "IconName"
#define NOTIFICATION_ITEM_PROP_ICON_DESC "IconAccessibleDesc"
#define NOTIFICATION_ITEM_PROP_AICON_NAME "AttentionIconName"
#define NOTIFICATION_ITEM_PROP_AICON_DESC "AttentionAccessibleDesc"
#define NOTIFICATION_ITEM_PROP_ICON_THEME_PATH "IconThemePath"
#define NOTIFICATION_ITEM_PROP_MENU "Menu"
#define NOTIFICATION_ITEM_PROP_LABEL "XAyatanaLabel"
#define NOTIFICATION_ITEM_PROP_LABEL_GUIDE "XAyatanaLabelGuide"
#define NOTIFICATION_ITEM_PROP_TITLE "Title"
#define NOTIFICATION_ITEM_PROP_ORDERING_INDEX "XAyatanaOrderingIndex"
#define NOTIFICATION_ITEM_PROP_TOOLTIP "ToolTip"
#define NOTIFICATION_ITEM_SIG_NEW_ICON "NewIcon"
#define NOTIFICATION_ITEM_SIG_NEW_AICON "NewAttentionIcon"
#define NOTIFICATION_ITEM_SIG_NEW_STATUS "NewStatus"
#define NOTIFICATION_ITEM_SIG_NEW_LABEL "XAyatanaNewLabel"
#define NOTIFICATION_ITEM_SIG_NEW_ICON_THEME_PATH "NewIconThemePath"
#define NOTIFICATION_ITEM_SIG_NEW_TITLE "NewTitle"
#define NOTIFICATION_ITEM_SIG_NEW_TOOLTIP "NewToolTip"
#define OVERRIDE_GROUP_NAME "Ordering Index Overrides"
#define OVERRIDE_FILE_NAME "ordering-override.keyfile"
/* Private Stuff */
typedef struct {
GCancellable * bus_cancel;
GDBusConnection * bus;
guint dbus_registration;
GList * applications;
GHashTable * ordering_overrides;
} ApplicationServiceAppstorePrivate;
typedef enum {
VISIBLE_STATE_HIDDEN,
VISIBLE_STATE_SHOWN
} visible_state_t;
#define STATE2STRING(x) ((x) == VISIBLE_STATE_HIDDEN ? "hidden" : "visible")
typedef struct _Application Application;
struct _Application {
gchar * id;
gchar * category;
gchar * dbus_name;
gchar * dbus_object;
ApplicationServiceAppstore * appstore; /* not ref'd */
GCancellable * dbus_proxy_cancel;
GDBusProxy * dbus_proxy;
GCancellable * props_cancel;
gboolean queued_props;
GDBusProxy * props;
gboolean validated; /* Whether we've gotten all the parameters and they look good. */
AppIndicatorStatus status;
gchar * icon;
gchar * icon_desc;
gchar * aicon;
gchar * aicon_desc;
gchar * menu;
gchar * icon_theme_path;
gchar * label;
gchar * guide;
gchar * title;
gboolean currently_free;
guint ordering_index;
visible_state_t visible_state;
guint name_watcher;
gchar *sTooltipIcon;
gchar *sTooltipTitle;
gchar *sTooltipDescription;
};
/* 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 */
};
/* GObject stuff */
static void application_service_appstore_class_init (ApplicationServiceAppstoreClass *klass);
static void application_service_appstore_init (ApplicationServiceAppstore *self);
static void application_service_appstore_dispose (GObject *object);
static void application_service_appstore_finalize (GObject *object);
static gint app_sort_func (gconstpointer a, gconstpointer b, gpointer userdata);
static void load_override_file (GHashTable * hash, const gchar * filename);
static AppIndicatorStatus string_to_status(const gchar * status_string);
static void apply_status (Application * app);
static AppIndicatorCategory string_to_cat(const gchar * cat_string);
static Application * find_application (ApplicationServiceAppstore * appstore, const gchar * address, const gchar * object);
static Application * find_application_by_menu (ApplicationServiceAppstore * appstore, const gchar * address, const gchar * menuobject);
static void bus_get_cb (GObject * object, GAsyncResult * res, gpointer user_data);
static void dbus_proxy_cb (GObject * object, GAsyncResult * res, gpointer user_data);
static void app_receive_signal (GDBusProxy * proxy, gchar * sender_name, gchar * signal_name, GVariant * parameters, gpointer user_data);
static void get_all_properties (Application * app);
static void application_free (Application * app);
G_DEFINE_TYPE_WITH_PRIVATE (ApplicationServiceAppstore, application_service_appstore, G_TYPE_OBJECT);
static void
application_service_appstore_class_init (ApplicationServiceAppstoreClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->dispose = application_service_appstore_dispose;
object_class->finalize = application_service_appstore_finalize;
/* Setting up the DBus interfaces */
if (node_info == NULL) {
GError * error = NULL;
node_info = g_dbus_node_info_new_for_xml(_ayatana_application_service, &error);
if (error != NULL) {
g_critical("Unable to parse Application 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_APPLICATION_DBUS_IFACE);
if (interface_info == NULL) {
g_critical("Unable to find interface '" INDICATOR_APPLICATION_DBUS_IFACE "'");
}
}
return;
}
static void
application_service_appstore_init (ApplicationServiceAppstore *self)
{
ApplicationServiceAppstorePrivate * priv = application_service_appstore_get_instance_private(self);
priv->applications = NULL;
priv->bus_cancel = NULL;
priv->dbus_registration = 0;
priv->ordering_overrides = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL);
load_override_file(priv->ordering_overrides, DATADIR "/" OVERRIDE_FILE_NAME);
gchar * userfile = g_build_filename(g_get_user_data_dir(), "indicators", "application", OVERRIDE_FILE_NAME, NULL);
load_override_file(priv->ordering_overrides, userfile);
g_free(userfile);
priv->bus_cancel = g_cancellable_new();
g_bus_get(G_BUS_TYPE_SESSION,
priv->bus_cancel,
bus_get_cb,
self);
return;
}
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_critical("OMG! Unable to get a connection to DBus: %s", error->message);
g_error_free(error);
return;
}
ApplicationServiceAppstorePrivate * priv = application_service_appstore_get_instance_private(APPLICATION_SERVICE_APPSTORE(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_APPLICATION_DBUS_OBJ,
interface_info,
&interface_table,
user_data,
NULL,
&error);
if (error != NULL) {
g_critical("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)
{
ApplicationServiceAppstore * service = APPLICATION_SERVICE_APPSTORE(user_data);
GVariant * retval = NULL;
Application *app = NULL;
gchar *dbusaddress = NULL;
gchar *dbusmenuobject = NULL;
if (g_strcmp0(method, "GetApplications") == 0) {
retval = get_applications(service);
} else if (g_strcmp0(method, "ApplicationScrollEvent") == 0) {
gchar *orientation = NULL;
gint delta;
guint direction;
g_variant_get (params, "(ssiu)", &dbusaddress, &dbusmenuobject,
&delta, &direction);
switch (direction) {
case INDICATOR_OBJECT_SCROLL_UP:
delta = -delta;
orientation = "vertical";
break;
case INDICATOR_OBJECT_SCROLL_DOWN:
/* delta unchanged */
orientation = "vertical";
break;
case INDICATOR_OBJECT_SCROLL_LEFT:
delta = -delta;
orientation = "horizontal";
break;
case INDICATOR_OBJECT_SCROLL_RIGHT:
/* delta unchanged */
orientation = "horizontal";
break;
default:
g_assert_not_reached();
break;
}
app = find_application_by_menu(service, dbusaddress, dbusmenuobject);
if (app != NULL && app->dbus_proxy != NULL && orientation != NULL) {
g_dbus_proxy_call(app->dbus_proxy, "Scroll",
g_variant_new("(is)", delta, orientation),
G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
}
} else if (g_strcmp0(method, "ApplicationSecondaryActivateEvent") == 0) {
guint time;
g_variant_get (params, "(ssu)", &dbusaddress, &dbusmenuobject, &time);
app = find_application_by_menu(service, dbusaddress, dbusmenuobject);
if (app != NULL && app->dbus_proxy != NULL) {
g_dbus_proxy_call(app->dbus_proxy, "XAyatanaSecondaryActivate",
g_variant_new("(u)", time),
G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
}
} else {
g_warning("Calling method '%s' on the indicator service and it's unknown", method);
}
g_free(dbusaddress);
g_free(dbusmenuobject);
g_dbus_method_invocation_return_value(invocation, retval);
return;
}
static void
application_service_appstore_dispose (GObject *object)
{
ApplicationServiceAppstorePrivate * priv = application_service_appstore_get_instance_private(APPLICATION_SERVICE_APPSTORE(object));
while (priv->applications != NULL) {
application_service_appstore_application_remove(APPLICATION_SERVICE_APPSTORE(object),
((Application *)priv->applications->data)->dbus_name,
((Application *)priv->applications->data)->dbus_object);
}
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;
}
if (priv->bus != NULL) {
g_object_unref(priv->bus);
priv->bus = NULL;
}
if (priv->bus_cancel != NULL) {
g_cancellable_cancel(priv->bus_cancel);
g_object_unref(priv->bus_cancel);
priv->bus_cancel = NULL;
}
G_OBJECT_CLASS (application_service_appstore_parent_class)->dispose (object);
return;
}
static void
application_service_appstore_finalize (GObject *object)
{
ApplicationServiceAppstorePrivate * priv = application_service_appstore_get_instance_private(APPLICATION_SERVICE_APPSTORE(object));
if (priv->ordering_overrides != NULL) {
g_hash_table_destroy(priv->ordering_overrides);
priv->ordering_overrides = NULL;
}
G_OBJECT_CLASS (application_service_appstore_parent_class)->finalize (object);
return;
}
/* Loads the file and adds the override entries to the table
of overrides */
static void
load_override_file (GHashTable * hash, const gchar * filename)
{
g_return_if_fail(hash != NULL);
g_return_if_fail(filename != NULL);
if (!g_file_test(filename, G_FILE_TEST_EXISTS)) {
g_debug("Override file '%s' doesn't exist", filename);
return;
}
g_debug("Loading overrides from: '%s'", filename);
GError * error = NULL;
GKeyFile * keyfile = g_key_file_new();
g_key_file_load_from_file(keyfile, filename, G_KEY_FILE_NONE, &error);
if (error != NULL) {
g_warning("Unable to load keyfile '%s' because: %s", filename, error->message);
g_error_free(error);
g_key_file_free(keyfile);
return;
}
gchar ** keys = g_key_file_get_keys(keyfile, OVERRIDE_GROUP_NAME, NULL, &error);
if (error != NULL) {
g_warning("Unable to get keys from keyfile '%s' because: %s", filename, error->message);
g_error_free(error);
g_key_file_free(keyfile);
return;
}
gchar * key;
gint i;
for (i = 0; (key = keys[i]) != NULL; i++) {
GError * valerror = NULL;
gint val = g_key_file_get_integer(keyfile, OVERRIDE_GROUP_NAME, key, &valerror);
if (valerror != NULL) {
g_warning("Unable to get key '%s' out of file '%s' because: %s", key, filename, valerror->message);
g_error_free(valerror);
continue;
}
g_debug("%s: override '%s' with value '%d'", filename, key, val);
g_hash_table_insert(hash, g_strdup(key), GINT_TO_POINTER(val));
}
g_strfreev(keys);
g_key_file_free(keyfile);
return;
}
/* Return from getting the properties from the item. We're looking at those
and making sure we have everything that we need. If we do, then we'll
move on up to sending this onto the indicator. */
static void
got_all_properties (GObject * source_object, GAsyncResult * res,
gpointer user_data)
{
Application * app = (Application *)user_data;
g_return_if_fail(app != NULL);
GError * error = NULL;
GVariant * menu = NULL, * id = NULL, * category = NULL,
* status = NULL, * icon_name = NULL, * aicon_name = NULL,
* icon_desc = NULL, * aicon_desc = NULL,
* icon_theme_path = NULL, * index = NULL, * label = NULL,
* guide = NULL, * title = NULL;
GVariant *pTooltip = NULL;
GVariant * properties = g_dbus_proxy_call_finish(G_DBUS_PROXY(source_object), res, &error);
if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
g_error_free (error);
return; // Must exit before accessing freed memory
}
if (app->props_cancel != NULL) {
g_object_unref(app->props_cancel);
app->props_cancel = NULL;
}
if (error != NULL) {
g_critical("Could not grab DBus properties for %s: %s", app->dbus_name, error->message);
g_error_free(error);
if (!app->validated)
application_free(app);
return;
}
ApplicationServiceAppstorePrivate * priv = application_service_appstore_get_instance_private(app->appstore);
/* Grab all properties from variant */
GVariantIter * iter = NULL;
const gchar * name = NULL;
GVariant * value = NULL;
g_variant_get(properties, "(a{sv})", &iter);
while (g_variant_iter_loop (iter, "{&sv}", &name, &value)) {
if (g_strcmp0(name, NOTIFICATION_ITEM_PROP_MENU) == 0) {
menu = g_variant_ref(value);
} else if (g_strcmp0(name, NOTIFICATION_ITEM_PROP_ID) == 0) {
id = g_variant_ref(value);
} else if (g_strcmp0(name, NOTIFICATION_ITEM_PROP_CATEGORY) == 0) {
category = g_variant_ref(value);
} else if (g_strcmp0(name, NOTIFICATION_ITEM_PROP_STATUS) == 0) {
status = g_variant_ref(value);
} else if (g_strcmp0(name, NOTIFICATION_ITEM_PROP_ICON_NAME) == 0) {
icon_name = g_variant_ref(value);
} else if (g_strcmp0(name, NOTIFICATION_ITEM_PROP_ICON_DESC) == 0) {
icon_desc = g_variant_ref(value);
} else if (g_strcmp0(name, NOTIFICATION_ITEM_PROP_AICON_NAME) == 0) {
aicon_name = g_variant_ref(value);
} else if (g_strcmp0(name, NOTIFICATION_ITEM_PROP_AICON_DESC) == 0) {
aicon_desc = g_variant_ref(value);
} else if (g_strcmp0(name, NOTIFICATION_ITEM_PROP_ICON_THEME_PATH) == 0) {
icon_theme_path = g_variant_ref(value);
} else if (g_strcmp0(name, NOTIFICATION_ITEM_PROP_ORDERING_INDEX) == 0) {
index = g_variant_ref(value);
} else if (g_strcmp0(name, NOTIFICATION_ITEM_PROP_LABEL) == 0) {
label = g_variant_ref(value);
} else if (g_strcmp0(name, NOTIFICATION_ITEM_PROP_LABEL_GUIDE) == 0) {
guide = g_variant_ref(value);
} else if (g_strcmp0(name, NOTIFICATION_ITEM_PROP_TITLE) == 0) {
title = g_variant_ref(value);
}
else if (g_strcmp0 (name, NOTIFICATION_ITEM_PROP_TOOLTIP) == 0)
{
pTooltip = g_variant_ref (value);
}
/* else ignore */
}
g_variant_iter_free (iter);
g_variant_unref(properties);
if (menu == NULL || id == NULL || category == NULL || status == NULL ||
icon_name == NULL) {
g_warning("Notification Item on object %s of %s doesn't have enough properties.", app->dbus_object, app->dbus_name);
if (!app->validated)
application_free(app);
}
else {
app->validated = TRUE;
/* It is possible we're coming through a second time and
getting the properties. So we need to ensure we don't
already have them stored */
g_free(app->id);
g_free(app->category);
g_free(app->icon);
g_free(app->menu);
app->id = g_variant_dup_string(id, NULL);
app->category = g_variant_dup_string(category, NULL);
app->status = string_to_status(g_variant_get_string(status, NULL));
app->icon = g_variant_dup_string(icon_name, NULL);
app->menu = g_variant_dup_string(menu, NULL);
/* Now the optional properties */
g_free(app->icon_desc);
if (icon_desc != NULL) {
app->icon_desc = g_variant_dup_string(icon_desc, NULL);
}
else {
app->icon_desc = g_strdup("");
}
g_free(app->aicon);
if (aicon_name != NULL) {
app->aicon = g_variant_dup_string(aicon_name, NULL);
} else {
app->aicon = g_strdup("");
}
g_free(app->aicon_desc);
if (aicon_desc != NULL) {
app->aicon_desc = g_variant_dup_string(aicon_desc, NULL);
}
else {
app->aicon_desc = g_strdup("");
}
g_free(app->icon_theme_path);
if (icon_theme_path != NULL) {
app->icon_theme_path = g_variant_dup_string(icon_theme_path, NULL);
} else {
app->icon_theme_path = g_strdup("");
}
gpointer ordering_index_over = g_hash_table_lookup(priv->ordering_overrides, app->id);
if (ordering_index_over == NULL) {
if (index == NULL || g_variant_get_uint32(index) == 0) {
app->ordering_index = generate_id(string_to_cat(app->category), app->id);
} else {
app->ordering_index = g_variant_get_uint32(index);
}
} else {
app->ordering_index = GPOINTER_TO_UINT(ordering_index_over);
}
g_debug("'%s' ordering index is '%X'", app->id, app->ordering_index);
priv->applications = g_list_sort_with_data(priv->applications, app_sort_func, NULL);
g_free(app->label);
if (label != NULL) {
app->label = g_variant_dup_string(label, NULL);
} else {
app->label = g_strdup("");
}
g_free(app->guide);
if (guide != NULL) {
app->guide = g_variant_dup_string(guide, NULL);
} else {
app->guide = g_strdup("");
}
g_free(app->title);
if (title != NULL) {
app->title = g_variant_dup_string(title, NULL);
} else {
app->title = g_strdup("");
}
g_free (app->sTooltipIcon);
g_free (app->sTooltipTitle);
g_free (app->sTooltipDescription);
if (pTooltip != NULL)
{
g_variant_get (pTooltip, "(sa(iiay)ss)", &app->sTooltipIcon, NULL, &app->sTooltipTitle, &app->sTooltipDescription);
}
else
{
app->sTooltipIcon = g_strdup ("");
app->sTooltipTitle = g_strdup ("");
app->sTooltipDescription = g_strdup ("");
}
apply_status(app);
if (app->queued_props) {
get_all_properties(app);
app->queued_props = FALSE;
}
}
if (menu) g_variant_unref (menu);
if (id) g_variant_unref (id);
if (category) g_variant_unref (category);
if (status) g_variant_unref (status);
if (icon_name) g_variant_unref (icon_name);
if (icon_desc) g_variant_unref (icon_desc);
if (aicon_name) g_variant_unref (aicon_name);
if (aicon_desc) g_variant_unref (aicon_desc);
if (icon_theme_path) g_variant_unref (icon_theme_path);
if (index) g_variant_unref (index);
if (label) g_variant_unref (label);
if (guide) g_variant_unref (guide);
if (title) g_variant_unref (title);
if (pTooltip)
{
g_variant_unref (pTooltip);
}
return;
}
static void
get_all_properties (Application * app)
{
if (app->props != NULL && app->props_cancel == NULL) {
app->props_cancel = g_cancellable_new();
g_dbus_proxy_call(app->props, "GetAll",
g_variant_new("(s)", NOTIFICATION_ITEM_DBUS_IFACE),
G_DBUS_CALL_FLAGS_NONE, -1, app->props_cancel,
got_all_properties, app);
}
else {
g_debug("Queuing a properties check");
app->queued_props = TRUE;
}
}
/* Simple translation function -- could be optimized */
static AppIndicatorStatus
string_to_status(const gchar * status_string)
{
GEnumClass * klass = G_ENUM_CLASS(g_type_class_ref(APP_INDICATOR_TYPE_INDICATOR_STATUS));
g_return_val_if_fail(klass != NULL, APP_INDICATOR_STATUS_PASSIVE);
AppIndicatorStatus retval = APP_INDICATOR_STATUS_PASSIVE;
GEnumValue * val = g_enum_get_value_by_nick(klass, status_string);
if (val == NULL) {
g_warning("Unrecognized status '%s' assuming passive.", status_string);
} else {
retval = (AppIndicatorStatus)val->value;
}
g_type_class_unref(klass);
return retval;
}
/* Simple translation function -- could be optimized */
static AppIndicatorCategory
string_to_cat(const gchar * cat_string)
{
GEnumClass * klass = G_ENUM_CLASS(g_type_class_ref(APP_INDICATOR_TYPE_INDICATOR_CATEGORY));
g_return_val_if_fail(klass != NULL, APP_INDICATOR_CATEGORY_OTHER);
AppIndicatorCategory retval = APP_INDICATOR_CATEGORY_OTHER;
GEnumValue * val = g_enum_get_value_by_nick(klass, cat_string);
if (val == NULL) {
g_warning("Unrecognized status '%s' assuming other.", cat_string);
} else {
retval = (AppIndicatorCategory)val->value;
}
g_type_class_unref(klass);
return retval;
}
/* A small helper function to get the position of an application
in the app list of the applications that are visible. */
static gint
get_position (Application * app) {
ApplicationServiceAppstorePrivate * priv = application_service_appstore_get_instance_private(app->appstore);
GList * lapp;
gint count;
/* Go through the list and try to find ours */
for (lapp = priv->applications, count = 0; lapp != NULL; lapp = g_list_next(lapp), count++) {
if (lapp->data == app) {
break;
}
/* If the selected app isn't visible let's not
count it's position */
Application * thisapp = (Application *)(lapp->data);
if (thisapp->visible_state == VISIBLE_STATE_HIDDEN) {
count--;
}
}
if (lapp == NULL) {
g_warning("Unable to find position for app '%s'", app->id);
return -1;
}
return count;
}
/* A simple global function for dealing with freeing the information
in an Application structure */
static void
application_free (Application * app)
{
if (app == NULL) return;
g_debug("Application free '%s'", app->id);
/* Handle the case where this could be called by unref'ing one of
the proxy objects. */
if (app->currently_free) return;
app->currently_free = TRUE;
ApplicationServiceAppstorePrivate * priv = application_service_appstore_get_instance_private(app->appstore);
/* Remove from the application list */
priv->applications = g_list_remove(priv->applications, app);
if (app->name_watcher != 0) {
g_dbus_connection_signal_unsubscribe(g_dbus_proxy_get_connection(app->dbus_proxy), app->name_watcher);
app->name_watcher = 0;
}
if (app->props) {
g_object_unref(app->props);
}
if (app->props_cancel != NULL) {
g_cancellable_cancel(app->props_cancel);
g_object_unref(app->props_cancel);
app->props_cancel = NULL;
}
if (app->dbus_proxy) {
g_object_unref(app->dbus_proxy);
}
if (app->dbus_proxy_cancel != NULL) {
g_cancellable_cancel(app->dbus_proxy_cancel);
g_object_unref(app->dbus_proxy_cancel);
app->dbus_proxy_cancel = NULL;
}
if (app->id != NULL) {
g_free(app->id);
}
if (app->category != NULL) {
g_free(app->category);
}
if (app->dbus_name != NULL) {
g_free(app->dbus_name);
}
if (app->dbus_object != NULL) {
g_free(app->dbus_object);
}
if (app->icon != NULL) {
g_free(app->icon);
}
if (app->icon_desc != NULL) {
g_free(app->icon_desc);
}
if (app->aicon != NULL) {
g_free(app->aicon);
}
if (app->aicon_desc != NULL) {
g_free(app->aicon_desc);
}
if (app->menu != NULL) {
g_free(app->menu);
}
if (app->icon_theme_path != NULL) {
g_free(app->icon_theme_path);
}
if (app->label != NULL) {
g_free(app->label);
}
if (app->guide != NULL) {
g_free(app->guide);
}
if (app->title != NULL) {
g_free(app->title);
}
g_free (app->sTooltipIcon);
g_free (app->sTooltipTitle);
g_free (app->sTooltipDescription);
g_free(app);
return;
}
/* Gets called when the proxy changes owners, which is usually when it
drops off of the bus. */
static void
application_died (Application * app)
{
/* Application died */
g_debug("Application proxy destroyed '%s'", app->id);
/* Remove from the panel */
app->status = APP_INDICATOR_STATUS_PASSIVE;
apply_status(app);
/* Destroy the data */
application_free(app);
return;
}
/* This function takes two Application structure
pointers and uses their ordering index to compare them. */
static gint
app_sort_func (gconstpointer a, gconstpointer b, gpointer userdata)
{
Application * appa = (Application *)a;
Application * appb = (Application *)b;
return (appb->ordering_index/2) - (appa->ordering_index/2);
}
static void
emit_signal (ApplicationServiceAppstore * appstore, const gchar * name,
GVariant * variant)
{
ApplicationServiceAppstorePrivate * priv = application_service_appstore_get_instance_private(appstore);
GError * error = NULL;
g_dbus_connection_emit_signal (priv->bus,
NULL,
INDICATOR_APPLICATION_DBUS_OBJ,
INDICATOR_APPLICATION_DBUS_IFACE,
name,
variant,
&error);
if (error != NULL) {
g_critical("Unable to send %s signal: %s", name, error->message);
g_error_free(error);
return;
}
return;
}
/* Change the status of the application. If we're going passive
it removes it from the panel. If we're coming online, then
it add it to the panel. Otherwise it changes the icon. */
static void
apply_status (Application * app)
{
ApplicationServiceAppstore * appstore = app->appstore;
/* g_debug("Applying status. Status: %d Visible: %d", app->status, app->visible_state); */
visible_state_t goal_state = VISIBLE_STATE_HIDDEN;
if (app->status != APP_INDICATOR_STATUS_PASSIVE) {
goal_state = VISIBLE_STATE_SHOWN;
}
/* Nothing needs to change, we're good */
if (app->visible_state == goal_state /* ) { */
&& goal_state == VISIBLE_STATE_HIDDEN) {
/* TODO: Uhg, this is a little wrong in that we're going to
send an icon every time the status changes and the indicator
is visible even though it might not be updating. But, at
this point we need a small patch that is harmless. In the
future we need to track which icon is shown and remove the
duplicate message. */
return;
}
if (app->visible_state != goal_state) {
g_debug("Changing app '%s' state from %s to %s", app->id, STATE2STRING(app->visible_state), STATE2STRING(goal_state));
}
/* This means we're going off line */
if (goal_state == VISIBLE_STATE_HIDDEN) {
gint position = get_position(app);
if (position == -1) return;
emit_signal (appstore, "ApplicationRemoved",
g_variant_new ("(i)", position));
} else {
/* Figure out which icon we should be using */
gchar * newicon = app->icon;
gchar * newdesc = app->icon_desc;
if (app->status == APP_INDICATOR_STATUS_ATTENTION && app->aicon != NULL && app->aicon[0] != '\0') {
newicon = app->aicon;
newdesc = app->aicon_desc;
}
if (newdesc == NULL) {
newdesc = "";
}
/* Determine whether we're already shown or not */
if (app->visible_state == VISIBLE_STATE_HIDDEN) {
/* Put on panel */
emit_signal (appstore, "ApplicationAdded",
g_variant_new ("(sisosssssssss)", newicon,
get_position(app),
app->dbus_name, app->menu,
app->icon_theme_path,
app->label, app->guide,
newdesc, app->id, app->title, app->sTooltipIcon != NULL ? app->sTooltipIcon : "", app->sTooltipTitle != NULL ? app->sTooltipTitle : "", app->sTooltipDescription != NULL ? app->sTooltipDescription : ""));
} else {
/* Icon update */
gint position = get_position(app);
if (position == -1) return;
emit_signal (appstore, "ApplicationIconChanged",
g_variant_new ("(iss)", position, newicon, newdesc));
emit_signal (appstore, "ApplicationLabelChanged",
g_variant_new ("(iss)", position,
app->label != NULL ? app->label : "",
app->guide != NULL ? app->guide : ""));
emit_signal (appstore, "ApplicationTitleChanged",
g_variant_new ("(is)", position,
app->title != NULL ? app->title : ""));
GVariant *pParams = g_variant_new ("(isss)", position, app->sTooltipIcon != NULL ? app->sTooltipIcon : "", app->sTooltipTitle != NULL ? app->sTooltipTitle : "", app->sTooltipDescription != NULL ? app->sTooltipDescription : "");
emit_signal (appstore, "ApplicationTooltipChanged", pParams);
}
}
app->visible_state = goal_state;
return;
}
/* Called when the Notification Item signals that it
has a new status. */
static void
new_status (Application * app, const gchar * status)
{
app->status = string_to_status(status);
apply_status(app);
return;
}
/* Called when the Notification Item signals that it
has a new icon theme path. */
static void
new_icon_theme_path (Application * app, const gchar * icon_theme_path)
{
if (g_strcmp0(icon_theme_path, app->icon_theme_path)) {
/* If the new icon theme path is actually a new icon theme path */
if (app->icon_theme_path != NULL) g_free(app->icon_theme_path);
app->icon_theme_path = g_strdup(icon_theme_path);
if (app->visible_state != VISIBLE_STATE_HIDDEN) {
gint position = get_position(app);
if (position == -1) return;
emit_signal (app->appstore,
"ApplicationIconThemePathChanged",
g_variant_new ("(is)", position,
app->icon_theme_path));
}
}
return;
}
/* Called when the Notification Item signals that it
has a new label. */
static void
new_label (Application * app, const gchar * label, const gchar * guide)
{
gboolean changed = FALSE;
if (g_strcmp0(app->label, label) != 0) {
changed = TRUE;
if (app->label != NULL) {
g_free(app->label);
app->label = NULL;
}
app->label = g_strdup(label);
}
if (g_strcmp0(app->guide, guide) != 0) {
changed = TRUE;
if (app->guide != NULL) {
g_free(app->guide);
app->guide = NULL;
}
app->guide = g_strdup(guide);
}
if (changed) {
gint position = get_position(app);
if (position == -1) return;
emit_signal (app->appstore, "ApplicationLabelChanged",
g_variant_new ("(iss)", position,
app->label != NULL ? app->label : "",
app->guide != NULL ? app->guide : ""));
}
return;
}
/* Adding a new NotificationItem object from DBus in to the
appstore. First, we need to get the information on it
though. */
void
application_service_appstore_application_add (ApplicationServiceAppstore * appstore, const gchar * dbus_name, const gchar * dbus_object)
{
g_debug("Adding new application: %s:%s", dbus_name, dbus_object);
/* Make sure we got a sensible request */
g_return_if_fail(IS_APPLICATION_SERVICE_APPSTORE(appstore));
g_return_if_fail(dbus_name != NULL && dbus_name[0] != '\0');
g_return_if_fail(dbus_object != NULL && dbus_object[0] != '\0');
Application * app = find_application(appstore, dbus_name, dbus_object);
if (app != NULL) {
g_debug("Application already exists, re-requesting properties.");
get_all_properties(app);
return;
}
/* Build the application entry. This will be carried
along until we're sure we've got everything. */
app = g_new0(Application, 1);
app->validated = FALSE;
app->dbus_name = g_strdup(dbus_name);
app->dbus_object = g_strdup(dbus_object);
app->appstore = appstore;
app->status = APP_INDICATOR_STATUS_PASSIVE;
app->icon = NULL;
app->aicon = NULL;
app->menu = NULL;
app->icon_theme_path = NULL;
app->label = NULL;
app->guide = NULL;
app->title = NULL;
app->currently_free = FALSE;
app->ordering_index = 0;
app->visible_state = VISIBLE_STATE_HIDDEN;
app->name_watcher = 0;
app->props_cancel = NULL;
app->props = NULL;
app->queued_props = FALSE;
app->sTooltipIcon = NULL;
app->sTooltipTitle = NULL;
app->sTooltipDescription = NULL;
/* Get the DBus proxy for the NotificationItem interface */
app->dbus_proxy_cancel = g_cancellable_new();
g_dbus_proxy_new_for_bus(G_BUS_TYPE_SESSION,
G_DBUS_PROXY_FLAGS_NONE,
NULL,
app->dbus_name,
app->dbus_object,
NOTIFICATION_ITEM_DBUS_IFACE,
app->dbus_proxy_cancel,
dbus_proxy_cb,
app);
ApplicationServiceAppstorePrivate * priv = application_service_appstore_get_instance_private(app->appstore);
priv->applications = g_list_insert_sorted_with_data (priv->applications, app, app_sort_func, NULL);
/* We're returning, nothing is yet added until the properties
come back and give us more info. */
return;
}
static void
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)
{
Application * app = (Application *)user_data;
gchar * new_name = NULL;
g_variant_get(parameters, "(sss)", NULL, NULL, &new_name);
if (new_name == NULL || new_name[0] == 0)
application_died(app);
g_free(new_name);
}
/* Callback from trying to create the proxy for the app. */
static void
dbus_proxy_cb (GObject * object, GAsyncResult * res, gpointer user_data)
{
GError * error = NULL;
Application * app = (Application *)user_data;
g_return_if_fail(app != NULL);
GDBusProxy * proxy = g_dbus_proxy_new_for_bus_finish(res, &error);
if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
g_error_free (error);
return; // Must exit before accessing freed memory
}
if (app->dbus_proxy_cancel != NULL) {
g_object_unref(app->dbus_proxy_cancel);
app->dbus_proxy_cancel = NULL;
}
if (error != NULL) {
g_critical("Could not grab DBus proxy for %s: %s", app->dbus_name, error->message);
g_error_free(error);
application_free(app);
return;
}
/* Okay, we're good to grab the proxy at this point, we're
sure that it's ours. */
app->dbus_proxy = proxy;
/* We've got it, let's watch it for destruction */
app->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,
name_changed,
app,
NULL);
g_signal_connect(proxy, "g-signal", G_CALLBACK(app_receive_signal), app);
app->props_cancel = g_cancellable_new();
g_dbus_proxy_new(g_dbus_proxy_get_connection(proxy),
G_DBUS_PROXY_FLAGS_NONE,
NULL,
app->dbus_name,
app->dbus_object,
"org.freedesktop.DBus.Properties",
app->props_cancel,
props_cb,
app);
return;
}
/* Callback from trying to create the proxy for the app. */
static void
props_cb (GObject * object, GAsyncResult * res, gpointer user_data)
{
GError * error = NULL;
Application * app = (Application *)user_data;
g_return_if_fail(app != NULL);
GDBusProxy * proxy = g_dbus_proxy_new_for_bus_finish(res, &error);
if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
g_error_free (error);
return; // Must exit before accessing freed memory
}
if (app->props_cancel != NULL) {
g_object_unref(app->props_cancel);
app->props_cancel = NULL;
}
if (error != NULL) {
g_critical("Could not grab Properties DBus proxy for %s: %s", app->dbus_name, error->message);
g_error_free(error);
application_free(app);
return;
}
/* Okay, we're good to grab the proxy at this point, we're
sure that it's ours. */
app->props = proxy;
get_all_properties(app);
return;
}
/* Receives all signals from the service, routed to the appropriate functions */
static void
app_receive_signal (GDBusProxy * proxy, gchar * sender_name, gchar * signal_name,
GVariant * parameters, gpointer user_data)
{
Application * app = (Application *)user_data;
if (!app->validated) return;
if (g_strcmp0(signal_name, NOTIFICATION_ITEM_SIG_NEW_ICON) == 0) {
/* icon name isn't provided by signal, so look it up */
get_all_properties(app);
}
else if (g_strcmp0(signal_name, NOTIFICATION_ITEM_SIG_NEW_AICON) == 0) {
/* aicon name isn't provided by signal, so look it up */
get_all_properties(app);
}
else if (g_strcmp0(signal_name, NOTIFICATION_ITEM_SIG_NEW_TITLE) == 0) {
/* title name isn't provided by signal, so look it up */
get_all_properties(app);
}
else if (g_strcmp0(signal_name, NOTIFICATION_ITEM_SIG_NEW_STATUS) == 0) {
gchar * status = NULL;
g_variant_get(parameters, "(s)", &status);
new_status(app, status);
g_free(status);
}
else if (g_strcmp0(signal_name, NOTIFICATION_ITEM_SIG_NEW_ICON_THEME_PATH) == 0) {
gchar * icon_theme_path = NULL;
g_variant_get(parameters, "(s)", &icon_theme_path);
new_icon_theme_path(app, icon_theme_path);
g_free(icon_theme_path);
}
else if (g_strcmp0(signal_name, NOTIFICATION_ITEM_SIG_NEW_LABEL) == 0) {
gchar * label = NULL, * guide = NULL;
g_variant_get(parameters, "(ss)", &label, &guide);
new_label(app, label, guide);
g_free(label);
g_free(guide);
}
else if (g_strcmp0 (signal_name, NOTIFICATION_ITEM_SIG_NEW_TOOLTIP) == 0)
{
// The tooltip data isn't provided by the signal, so look it up
get_all_properties (app);
}
}
/* Looks for an application in the list of applications */
static Application *
find_application (ApplicationServiceAppstore * appstore, const gchar * address, const gchar * object)
{
ApplicationServiceAppstorePrivate * priv = application_service_appstore_get_instance_private(appstore);
GList * listpntr;
for (listpntr = priv->applications; listpntr != NULL; listpntr = g_list_next(listpntr)) {
Application * app = (Application *)listpntr->data;
if (!g_strcmp0(app->dbus_name, address) && !g_strcmp0(app->dbus_object, object)) {
return app;
}
}
return NULL;
}
/* Looks for an application in the list of applications with the matching menu */
static Application *
find_application_by_menu (ApplicationServiceAppstore * appstore, const gchar * address, const gchar * menuobject)
{
g_return_val_if_fail(appstore, NULL);
g_return_val_if_fail(address, NULL);
g_return_val_if_fail(menuobject, NULL);
ApplicationServiceAppstorePrivate * priv = application_service_appstore_get_instance_private(appstore);
GList *l;
for (l = priv->applications; l != NULL; l = l->next) {
Application *a = l->data;
if (g_strcmp0(a->dbus_name, address) == 0 &&
g_strcmp0(a->menu, menuobject) == 0) {
return a;
}
}
return NULL;
}
/* Removes an application. Currently only works for the apps
that are shown. */
void
application_service_appstore_application_remove (ApplicationServiceAppstore * appstore, const gchar * dbus_name, const gchar * dbus_object)
{
g_return_if_fail(IS_APPLICATION_SERVICE_APPSTORE(appstore));
g_return_if_fail(dbus_name != NULL && dbus_name[0] != '\0');
g_return_if_fail(dbus_object != NULL && dbus_object[0] != '\0');
Application * app = find_application(appstore, dbus_name, dbus_object);
if (app != NULL) {
application_died(app);
} else {
g_warning("Unable to find application %s:%s", dbus_name, dbus_object);
}
return;
}
gchar**
application_service_appstore_application_get_list (ApplicationServiceAppstore * appstore)
{
ApplicationServiceAppstorePrivate * priv = application_service_appstore_get_instance_private(appstore);
gchar ** out;
gchar ** outpntr;
GList * listpntr;
out = g_new(gchar*, g_list_length(priv->applications) + 1);
for (listpntr = priv->applications, outpntr = out; listpntr != NULL; listpntr = g_list_next(listpntr), ++outpntr) {
Application * app = (Application *)listpntr->data;
*outpntr = g_strdup_printf("%s%s", app->dbus_name, app->dbus_object);
}
*outpntr = 0;
return out;
}
/* Creates a basic appstore object and attaches the
LRU file object to it. */
ApplicationServiceAppstore *
application_service_appstore_new (void)
{
ApplicationServiceAppstore * appstore = APPLICATION_SERVICE_APPSTORE(g_object_new(APPLICATION_SERVICE_APPSTORE_TYPE, NULL));
return appstore;
}
/* DBus Interface */
static GVariant *
get_applications (ApplicationServiceAppstore * appstore)
{
ApplicationServiceAppstorePrivate * priv = application_service_appstore_get_instance_private(appstore);
GVariant * out = NULL;
if (g_list_length(priv->applications) > 0) {
GVariantBuilder builder;
GList * listpntr;
gint position = 0;
g_variant_builder_init(&builder, G_VARIANT_TYPE ("a(sisosssssssss)"));
for (listpntr = priv->applications; listpntr != NULL; listpntr = g_list_next(listpntr)) {
Application * app = (Application *)listpntr->data;
if (app->visible_state == VISIBLE_STATE_HIDDEN) {
continue;
}
g_variant_builder_add (&builder, "(sisosssssssss)", app->icon,
position++, app->dbus_name, app->menu,
app->icon_theme_path, app->label,
app->guide,
(app->icon_desc != NULL) ? app->icon_desc : "",
app->id, app->title, app->sTooltipIcon != NULL ? app->sTooltipIcon : "", app->sTooltipTitle != NULL ? app->sTooltipTitle : "", app->sTooltipDescription != NULL ? app->sTooltipDescription : "");
}
out = g_variant_builder_end(&builder);
} else {
GError * error = NULL;
out = g_variant_parse(g_variant_type_new("a(sisosssssssss)"), "[]", NULL, NULL, &error);
if (error != NULL) {
g_warning("Unable to parse '[]' as a 'a(sisosssssssss)': %s", error->message);
out = NULL;
g_error_free(error);
}
}
if (out != NULL) {
return g_variant_new_tuple(&out, 1);
} else {
return NULL;
}
}
ayatana-indicator-application-26.6.0/src/application-service-appstore.h 0000664 0000000 0000000 00000006553 15213316506 023135 0 ustar /*
An object that stores the registration of all the application
indicators. It also communicates this to the indicator visualization.
Copyright 2009 Canonical Ltd.
Authors:
Ted Gould
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 .
*/
#ifndef __APPLICATION_SERVICE_APPSTORE_H__
#define __APPLICATION_SERVICE_APPSTORE_H__
#include
#include
G_BEGIN_DECLS
#define APPLICATION_SERVICE_APPSTORE_TYPE (application_service_appstore_get_type ())
#define APPLICATION_SERVICE_APPSTORE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), APPLICATION_SERVICE_APPSTORE_TYPE, ApplicationServiceAppstore))
#define APPLICATION_SERVICE_APPSTORE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), APPLICATION_SERVICE_APPSTORE_TYPE, ApplicationServiceAppstoreClass))
#define IS_APPLICATION_SERVICE_APPSTORE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), APPLICATION_SERVICE_APPSTORE_TYPE))
#define IS_APPLICATION_SERVICE_APPSTORE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), APPLICATION_SERVICE_APPSTORE_TYPE))
#define APPLICATION_SERVICE_APPSTORE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), APPLICATION_SERVICE_APPSTORE_TYPE, ApplicationServiceAppstoreClass))
typedef struct _ApplicationServiceAppstore ApplicationServiceAppstore;
typedef struct _ApplicationServiceAppstoreClass ApplicationServiceAppstoreClass;
struct _ApplicationServiceAppstoreClass {
GObjectClass parent_class;
void (*application_added) (ApplicationServiceAppstore * appstore, gchar *, gint, gchar *, gchar *, gpointer);
void (*application_removed) (ApplicationServiceAppstore * appstore, gint, gpointer);
void (*application_icon_changed)(ApplicationServiceAppstore * appstore, gint, const gchar *, gpointer);
void (*application_icon_theme_path_changed)(ApplicationServiceAppstore * appstore, gint, const gchar *, gpointer);
void (*application_label_changed)(ApplicationServiceAppstore * appstore, gint, const gchar *, const gchar *, gpointer);
};
struct _ApplicationServiceAppstore {
GObject parent;
};
ApplicationServiceAppstore * application_service_appstore_new (void);
GType application_service_appstore_get_type (void);
void application_service_appstore_application_add (ApplicationServiceAppstore * appstore,
const gchar * dbus_name,
const gchar * dbus_object);
void application_service_appstore_application_remove (ApplicationServiceAppstore * appstore,
const gchar * dbus_name,
const gchar * dbus_object);
gchar** application_service_appstore_application_get_list (ApplicationServiceAppstore * appstore);
G_END_DECLS
#endif
ayatana-indicator-application-26.6.0/src/application-service.c 0000664 0000000 0000000 00000004726 15213316506 021275 0 ustar /*
The core file for the service that starts up all the objects we need
and houses our main loop.
Copyright 2009 Canonical Ltd.
Authors:
Ted Gould
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 .
*/
#include
#include "application-service-appstore.h"
#include "application-service-watcher.h"
#include "dbus-shared.h"
/* The base main loop */
static GMainLoop * mainloop = NULL;
/* Where the application registry lives */
static ApplicationServiceAppstore * appstore = NULL;
/* Interface for applications */
static ApplicationServiceWatcher * watcher = NULL;
/* Make sure we can set up all our objects before we get the name */
static void
bus_acquired (GDBusConnection * con, const gchar * name, gpointer user_data)
{
g_debug("Bus Acquired, building objects");
/* Building our app store */
appstore = application_service_appstore_new();
/* Adding a watcher for the Apps coming up */
watcher = application_service_watcher_new(appstore);
}
/* Nice to know, but we're not doing anything special */
static void
name_acquired (GDBusConnection * con, const gchar * name, gpointer user_data)
{
g_debug("Name Acquired");
}
/* Shouldn't happen under normal usage */
static void
name_lost (GDBusConnection * con, const gchar * name, gpointer user_data)
{
g_warning("Name Lost");
g_main_loop_quit(mainloop);
}
/* Builds up the core objects and puts us spinning into
a main loop. */
int
main (int argc, char ** argv)
{
guint nameownership = g_bus_own_name(G_BUS_TYPE_SESSION,
INDICATOR_APPLICATION_DBUS_ADDR,
G_BUS_NAME_OWNER_FLAGS_NONE,
bus_acquired,
name_acquired,
name_lost,
NULL, NULL);
/* Building and executing our main loop */
mainloop = g_main_loop_new(NULL, FALSE);
g_main_loop_run(mainloop);
g_debug("Finishing Main Loop");
g_bus_unown_name(nameownership);
/* Unref'ing all the objects */
g_main_loop_unref(mainloop);
g_object_unref(G_OBJECT(watcher));
g_object_unref(G_OBJECT(appstore));
return 0;
}
ayatana-indicator-application-26.6.0/src/application-service-watcher.c 0000664 0000000 0000000 00000031160 15213316506 022720 0 ustar /*
An object implementing the NotificationWatcher interface and passes
the information into the app-store.
Copyright 2009 Canonical Ltd.
Authors:
Ted Gould
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 .
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include
#include
#include
#include
#include "application-service-watcher.h"
#include "dbus-shared.h"
/* Enum for the properties so that they can be quickly
found and looked up. */
enum {
PROP_0,
PROP_PROTOCOL_VERSION,
PROP_IS_STATUS_NOTIFIER_HOST_REGISTERED,
PROP_REGISTERED_STATUS_NOTIFIER_ITEMS
};
/* The strings so that they can be slowly looked up. */
#define PROP_PROTOCOL_VERSION_S "protocol-version"
#define PROP_IS_STATUS_NOTIFIER_HOST_REGISTERED_S "is-status-notifier-host-registered"
#define PROP_REGISTERED_STATUS_NOTIFIER_ITEMS_S "registered-status-notifier-items"
#define CURRENT_PROTOCOL_VERSION 0
static gboolean _ayatana_notification_watcher_server_register_status_notifier_item (ApplicationServiceWatcher * appwatcher, const gchar * service, DBusGMethodInvocation * method);
static gboolean _ayatana_notification_watcher_server_register_status_notifier_host (ApplicationServiceWatcher * appwatcher, const gchar * host);
static void get_name_cb (DBusGProxy * proxy, guint status, GError * error, gpointer data);
#include "ayatana-notification-watcher-server.h"
/* Private Stuff */
typedef struct {
ApplicationServiceAppstore * appstore;
DBusGProxy * dbus_proxy;
} ApplicationServiceWatcherPrivate;
/* Signals Stuff */
enum {
STATUS_NOTIFIER_ITEM_REGISTERED,
STATUS_NOTIFIER_ITEM_UNREGISTERED,
STATUS_NOTIFIER_HOST_REGISTERED,
LAST_SIGNAL
};
static guint signals[LAST_SIGNAL] = { 0 };
/* GObject stuff */
static void application_service_watcher_class_init (ApplicationServiceWatcherClass *klass);
static void application_service_watcher_init (ApplicationServiceWatcher *self);
static void application_service_watcher_dispose (GObject *object);
static void application_service_watcher_finalize (GObject *object);
static void application_service_watcher_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec);
static void application_service_watcher_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec);
G_DEFINE_TYPE_WITH_PRIVATE (ApplicationServiceWatcher, application_service_watcher, G_TYPE_OBJECT);
static void
application_service_watcher_class_init (ApplicationServiceWatcherClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->dispose = application_service_watcher_dispose;
object_class->finalize = application_service_watcher_finalize;
/* Property funcs */
object_class->set_property = application_service_watcher_set_property;
object_class->get_property = application_service_watcher_get_property;
/* Properties */
g_object_class_install_property (object_class,
PROP_PROTOCOL_VERSION,
g_param_spec_int(PROP_PROTOCOL_VERSION_S,
"Protocol Version",
"Which version of the StatusNotifierProtocol this watcher implements",
0, G_MAXINT,
CURRENT_PROTOCOL_VERSION,
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property (object_class,
PROP_IS_STATUS_NOTIFIER_HOST_REGISTERED,
g_param_spec_boolean(PROP_IS_STATUS_NOTIFIER_HOST_REGISTERED_S,
"Is StatusNotifierHost Registered",
"True if there is at least one StatusNotifierHost registered",
FALSE,
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property (object_class,
PROP_REGISTERED_STATUS_NOTIFIER_ITEMS,
g_param_spec_boxed(PROP_REGISTERED_STATUS_NOTIFIER_ITEMS_S,
"Registered StatusNotifierItems",
"The list of StatusNotifierItems registered to this watcher",
G_TYPE_STRV,
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
/* Signals */
signals[STATUS_NOTIFIER_ITEM_REGISTERED] = g_signal_new ("status-notifier-item-registered",
G_TYPE_FROM_CLASS(klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (ApplicationServiceWatcherClass, status_notifier_item_registered),
NULL, NULL,
g_cclosure_marshal_VOID__STRING,
G_TYPE_NONE, 1, G_TYPE_STRING, G_TYPE_NONE);
signals[STATUS_NOTIFIER_ITEM_UNREGISTERED] = g_signal_new ("status-notifier-item-unregistered",
G_TYPE_FROM_CLASS(klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (ApplicationServiceWatcherClass, status_notifier_item_unregistered),
NULL, NULL,
g_cclosure_marshal_VOID__STRING,
G_TYPE_NONE, 1, G_TYPE_STRING, G_TYPE_NONE);
signals[STATUS_NOTIFIER_HOST_REGISTERED] = g_signal_new ("status-notifier-host-registered",
G_TYPE_FROM_CLASS(klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (ApplicationServiceWatcherClass, status_notifier_host_registered),
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0, G_TYPE_NONE);
dbus_g_object_type_install_info(APPLICATION_SERVICE_WATCHER_TYPE,
&dbus_glib__ayatana_notification_watcher_server_object_info);
return;
}
static void
application_service_watcher_init (ApplicationServiceWatcher *self)
{
ApplicationServiceWatcherPrivate * priv = application_service_watcher_get_instance_private(self);
priv->appstore = NULL;
GError * error = NULL;
DBusGConnection * session_bus = dbus_g_bus_get(DBUS_BUS_SESSION, &error);
if (error != NULL) {
g_warning("Unable to get session bus: %s", error->message);
g_error_free(error);
exit(0);
return;
}
dbus_g_connection_register_g_object(session_bus,
NOTIFICATION_WATCHER_DBUS_OBJ,
G_OBJECT(self));
priv->dbus_proxy = dbus_g_proxy_new_for_name_owner(session_bus,
DBUS_SERVICE_DBUS,
DBUS_PATH_DBUS,
DBUS_INTERFACE_DBUS,
&error);
if (error != NULL) {
g_error("Ah, can't get proxy to dbus: %s", error->message);
g_error_free(error);
return;
}
org_freedesktop_DBus_request_name_async(priv->dbus_proxy,
NOTIFICATION_WATCHER_DBUS_ADDR,
DBUS_NAME_FLAG_DO_NOT_QUEUE,
get_name_cb,
self);
return;
}
static void
application_service_watcher_dispose (GObject *object)
{
ApplicationServiceWatcherPrivate * priv = application_service_watcher_get_instance_private(APPLICATION_SERVICE_WATCHER(object));
if (priv->appstore != NULL) {
g_object_unref(G_OBJECT(priv->appstore));
priv->appstore = NULL;
}
G_OBJECT_CLASS (application_service_watcher_parent_class)->dispose (object);
return;
}
static void
application_service_watcher_finalize (GObject *object)
{
G_OBJECT_CLASS (application_service_watcher_parent_class)->finalize (object);
return;
}
static void
application_service_watcher_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec)
{
/* There are no writable properties for now */
}
static void
application_service_watcher_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec)
{
ApplicationServiceWatcherPrivate * priv = application_service_watcher_get_instance_private(APPLICATION_SERVICE_WATCHER(object));
switch (prop_id) {
case PROP_PROTOCOL_VERSION:
g_value_set_int (value, CURRENT_PROTOCOL_VERSION);
break;
case PROP_IS_STATUS_NOTIFIER_HOST_REGISTERED:
g_value_set_boolean (value, TRUE);
break;
case PROP_REGISTERED_STATUS_NOTIFIER_ITEMS:
g_value_set_boxed (value, application_service_appstore_application_get_list(priv->appstore));
break;
}
}
ApplicationServiceWatcher *
application_service_watcher_new (ApplicationServiceAppstore * appstore)
{
GObject * obj = g_object_new(APPLICATION_SERVICE_WATCHER_TYPE, NULL);
ApplicationServiceWatcherPrivate * priv = application_service_watcher_get_instance_private(APPLICATION_SERVICE_WATCHER(obj));
priv->appstore = appstore;
g_object_ref(G_OBJECT(priv->appstore));
return APPLICATION_SERVICE_WATCHER(obj);
}
static gboolean
_ayatana_notification_watcher_server_register_status_notifier_item (ApplicationServiceWatcher * appwatcher, const gchar * service, DBusGMethodInvocation * method)
{
ApplicationServiceWatcherPrivate * priv = application_service_watcher_get_instance_private(appwatcher);
if (service[0] == '/') {
char * sender = dbus_g_method_get_sender(method);
application_service_appstore_application_add(priv->appstore,
sender,
service);
g_free(sender);
} else {
application_service_appstore_application_add(priv->appstore,
service,
NOTIFICATION_ITEM_DEFAULT_OBJ);
}
dbus_g_method_return(method, G_TYPE_NONE);
return TRUE;
}
static gboolean
_ayatana_notification_watcher_server_register_status_notifier_host (ApplicationServiceWatcher * appwatcher, const gchar * host)
{
return FALSE;
}
/* Function to handle the return of the get name. There isn't a whole
lot that can be done, but we're atleast going to tell people. */
static void
get_name_cb (DBusGProxy * proxy, guint status, GError * error, gpointer data)
{
if (error != NULL) {
g_warning("Unable to get watcher name '%s' because: %s", NOTIFICATION_WATCHER_DBUS_ADDR, error->message);
return;
}
if (status != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER &&
status != DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER) {
g_warning("Unable to get watcher name '%s'", NOTIFICATION_WATCHER_DBUS_ADDR);
return;
}
/* After we've got the name we can request upstart to trigger
the jobs of any application indicators that need to start
at desktop init time. */
// GError * spawn_error = NULL;
// gchar * argv[] = {
// "initctl",
// "--session",
// "--user",
// "emit",
// "--no-wait",
// "appindicators-start",
// NULL,
// };
//
// g_spawn_async(NULL, /* Working Directory */
// argv,
// NULL, /* environment */
// G_SPAWN_SEARCH_PATH,
// NULL, NULL, /* child setup function */
// NULL, /* Pid */
// &spawn_error);
//
// if (spawn_error != NULL) {
// /* NOTE: When we get to the point where we can start
// assuming upstart user sessions this can be escillated
// to a warning or higher */
// g_debug("Unable to signal appindicators-start to upstart: %s", spawn_error->message);
// g_error_free(spawn_error);
// }
return;
}
ayatana-indicator-application-26.6.0/src/application-service-watcher.h 0000664 0000000 0000000 00000004762 15213316506 022735 0 ustar /*
An object implementing the NotificationWatcher interface and passes
the information into the app-store.
Copyright 2009 Canonical Ltd.
Authors:
Ted Gould
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 .
*/
#ifndef __APPLICATION_SERVICE_WATCHER_H__
#define __APPLICATION_SERVICE_WATCHER_H__
#include
#include
#include "application-service-appstore.h"
G_BEGIN_DECLS
#define APPLICATION_SERVICE_WATCHER_TYPE (application_service_watcher_get_type ())
#define APPLICATION_SERVICE_WATCHER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), APPLICATION_SERVICE_WATCHER_TYPE, ApplicationServiceWatcher))
#define APPLICATION_SERVICE_WATCHER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), APPLICATION_SERVICE_WATCHER_TYPE, ApplicationServiceWatcherClass))
#define IS_APPLICATION_SERVICE_WATCHER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), APPLICATION_SERVICE_WATCHER_TYPE))
#define IS_APPLICATION_SERVICE_WATCHER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), APPLICATION_SERVICE_WATCHER_TYPE))
#define APPLICATION_SERVICE_WATCHER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), APPLICATION_SERVICE_WATCHER_TYPE, ApplicationServiceWatcherClass))
typedef struct _ApplicationServiceWatcher ApplicationServiceWatcher;
typedef struct _ApplicationServiceWatcherClass ApplicationServiceWatcherClass;
struct _ApplicationServiceWatcherClass {
GObjectClass parent_class;
/* Signals */
void (*status_notifier_item_registered) (ApplicationServiceWatcher * watcher, gchar * object, gpointer data);
void (*status_notifier_item_unregistered) (ApplicationServiceWatcher * watcher, gchar * object, gpointer data);
void (*status_notifier_host_registered) (ApplicationServiceWatcher * watcher, gpointer data);
};
struct _ApplicationServiceWatcher {
GObject parent;
};
GType application_service_watcher_get_type (void);
ApplicationServiceWatcher * application_service_watcher_new (ApplicationServiceAppstore * appstore);
G_END_DECLS
#endif
ayatana-indicator-application-26.6.0/src/ayatana-application-service-marshal.list 0000664 0000000 0000000 00000001652 15213316506 025062 0 ustar # Marshaller definitions to be generated.
#
# Copyright 2009 Canonical Ltd.
# Copyright 2025 Robert Tari
#
# Authors:
# Ted Gould
# Robert Tari
#
# 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 .
VOID: STRING, INT, STRING, STRING, STRING, STRING, STRING
VOID: INT, STRING, STRING
VOID: INT, STRING
VOID: STRING, STRING
VOID: BOOLEAN, STRING, OBJECT
ayatana-indicator-application-26.6.0/src/ayatana-application-service.xml 0000664 0000000 0000000 00000007625 15213316506 023270 0 ustar
ayatana-indicator-application-26.6.0/src/ayatana-notification-watcher.xml 0000664 0000000 0000000 00000001733 15213316506 023442 0 ustar
ayatana-indicator-application-26.6.0/src/CMakeLists.txt 0000664 0000000 0000000 00000011642 15213316506 017723 0 ustar # gen-ayatana-application-service.xml.h
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/gen-ayatana-application-service.xml.h" "extern const char * _ayatana_application_service;")
# gen-ayatana-application-service.xml.c
file(READ "${CMAKE_CURRENT_SOURCE_DIR}/ayatana-application-service.xml" GEN_AYATANA_APPLICATION_SERVICE_XML_C)
string(REPLACE "\"" "\\\"" GEN_AYATANA_APPLICATION_SERVICE_XML_C ${GEN_AYATANA_APPLICATION_SERVICE_XML_C})
string(REPLACE "\n" "\\n\"\n\"" GEN_AYATANA_APPLICATION_SERVICE_XML_C ${GEN_AYATANA_APPLICATION_SERVICE_XML_C})
string(REGEX REPLACE "\n\"$" "\n" GEN_AYATANA_APPLICATION_SERVICE_XML_C ${GEN_AYATANA_APPLICATION_SERVICE_XML_C})
string(PREPEND GEN_AYATANA_APPLICATION_SERVICE_XML_C "const char * _ayatana_application_service = \n\"")
string(APPEND GEN_AYATANA_APPLICATION_SERVICE_XML_C "\;")
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/gen-ayatana-application-service.xml.c" ${GEN_AYATANA_APPLICATION_SERVICE_XML_C})
# ayatana-application-service-marshal.h
find_program(GLIB_GENMARSHAL glib-genmarshal)
add_custom_command(
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/ayatana-application-service-marshal.h"
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMAND
${GLIB_GENMARSHAL}
--prefix=_ayatana_application_service_marshal
--header ayatana-application-service-marshal.list
--quiet
--output="${CMAKE_CURRENT_BINARY_DIR}/ayatana-application-service-marshal.h"
)
# ayatana-application-service-marshal.c
add_custom_command(
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/ayatana-application-service-marshal.c"
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/ayatana-application-service-marshal.h"
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMAND
${GLIB_GENMARSHAL}
--prefix=_ayatana_application_service_marshal
--body ayatana-application-service-marshal.list
--include-header=ayatana-application-service-marshal.h
--quiet
--output="${CMAKE_CURRENT_BINARY_DIR}/ayatana-application-service-marshal.c"
)
# ayatana-notification-watcher-server.h
find_program(DBUS_BINDING_TOOL dbus-binding-tool)
add_custom_command(
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/ayatana-notification-watcher-server.h"
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/ayatana-application-service-marshal.c"
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMAND
${DBUS_BINDING_TOOL}
--prefix=_ayatana_notification_watcher_server
--mode=glib-server
--output="${CMAKE_CURRENT_BINARY_DIR}/ayatana-notification-watcher-server.h"
"${CMAKE_CURRENT_SOURCE_DIR}/ayatana-notification-watcher.xml"
)
# ayatana-notification-watcher-client.h
add_custom_command(
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/ayatana-notification-watcher-client.h"
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/ayatana-notification-watcher-server.h"
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMAND
${DBUS_BINDING_TOOL}
--prefix=_ayatana_notification_watcher_client
--mode=glib-client
--output="${CMAKE_CURRENT_BINARY_DIR}/ayatana-notification-watcher-client.h"
"${CMAKE_CURRENT_SOURCE_DIR}/ayatana-notification-watcher.xml"
)
add_custom_target("src-generated" DEPENDS "ayatana-notification-watcher-client.h")
# libayatana-application.so
set(SOURCES
ayatana-application-service-marshal.c
indicator-application.c
)
add_library("ayatana-application" SHARED ${SOURCES})
target_compile_definitions("ayatana-application" PUBLIC G_LOG_DOMAIN="Ayatana-Indicator-Application")
target_include_directories("ayatana-application" PUBLIC ${PROJECT_DEPS_INCLUDE_DIRS})
target_include_directories("ayatana-application" PUBLIC ${CMAKE_CURRENT_BINARY_DIR})
target_link_libraries("ayatana-application" ${PROJECT_DEPS_LIBRARIES})
add_dependencies("ayatana-application" "src-generated")
pkg_get_variable(indicatordir "ayatana-indicator3-0.4" "indicatordir")
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libayatana-application.so" DESTINATION "${indicatordir}")
# ayatana-indicator-application-service
set(SOURCES
application-service.c
application-service-appstore.c
ayatana-application-service-marshal.c
application-service-watcher.c
gen-ayatana-application-service.xml.c
generate-id.c
)
add_executable("ayatana-indicator-application-service" ${SOURCES})
target_compile_definitions("ayatana-indicator-application-service" PUBLIC DATADIR="${CMAKE_INSTALL_FULL_DATADIR}/ayatana-indicator-application")
target_compile_definitions("ayatana-indicator-application-service" PUBLIC G_LOG_DOMAIN="ayatana-indicator-application-service")
target_include_directories("ayatana-indicator-application-service" PUBLIC ${PROJECT_DEPS_INCLUDE_DIRS})
target_include_directories("ayatana-indicator-application-service" PUBLIC ${CMAKE_CURRENT_BINARY_DIR})
target_link_libraries("ayatana-indicator-application-service" ${PROJECT_DEPS_LIBRARIES})
add_dependencies("ayatana-indicator-application-service" "ayatana-application")
install(TARGETS "ayatana-indicator-application-service" RUNTIME DESTINATION "${CMAKE_INSTALL_FULL_LIBEXECDIR}/ayatana-indicator-application")
ayatana-indicator-application-26.6.0/src/dbus-shared.h 0000664 0000000 0000000 00000002551 15213316506 017534 0 ustar /*
DBus defaults for everyone to share in the project.
Copyright 2009 Canonical Ltd.
Authors:
Ted Gould
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 .
*/
#define INDICATOR_APPLICATION_DBUS_ADDR "org.ayatana.indicator.application"
#define INDICATOR_APPLICATION_DBUS_OBJ "/org/ayatana/indicator/application/service"
#define INDICATOR_APPLICATION_DBUS_IFACE "org.ayatana.indicator.application.service"
#define INDICATOR_APPLICATION_SERVICE_VERSION 2
#define NOTIFICATION_WATCHER_DBUS_ADDR "org.kde.StatusNotifierWatcher"
#define NOTIFICATION_WATCHER_DBUS_OBJ "/StatusNotifierWatcher"
#define NOTIFICATION_WATCHER_DBUS_IFACE "org.kde.StatusNotifierWatcher"
#define NOTIFICATION_ITEM_DBUS_IFACE "org.kde.StatusNotifierItem"
#define NOTIFICATION_ITEM_DEFAULT_OBJ "/StatusNotifierItem"
ayatana-indicator-application-26.6.0/src/generate-id.c 0000664 0000000 0000000 00000003224 15213316506 017510 0 ustar /*
Quick litte lack to generate the ordering ID.
Copyright 2010 Canonical Ltd.
Authors:
Ted Gould
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 .
*/
#include "generate-id.h"
#define MULTIPLIER 32
guint32
generate_id (const AppIndicatorCategory catenum, const gchar * id)
{
guint32 category = 0;
guint32 first = 0;
guint32 second = 0;
guint32 third = 0;
switch (catenum) {
case APP_INDICATOR_CATEGORY_OTHER:
category = MULTIPLIER * 5;
break;
case APP_INDICATOR_CATEGORY_APPLICATION_STATUS:
category = MULTIPLIER * 4;
break;
case APP_INDICATOR_CATEGORY_COMMUNICATIONS:
category = MULTIPLIER * 3;
break;
case APP_INDICATOR_CATEGORY_SYSTEM_SERVICES:
category = MULTIPLIER * 2;
break;
case APP_INDICATOR_CATEGORY_HARDWARE:
category = MULTIPLIER * 1;
break;
default:
g_warning("Got an undefined category: %d", category);
category = 0;
break;
}
if (id != NULL) {
if (id[0] != '\0') {
first = id[0];
if (id[1] != '\0') {
second = id[1];
if (id[2] != '\0') {
third = id[2];
}
}
}
}
return (((((category * 256) + first) * 256) + second) * 256) + third;
}
ayatana-indicator-application-26.6.0/src/generate-id.h 0000664 0000000 0000000 00000001761 15213316506 017521 0 ustar /*
Quick litte lack to generate the ordering ID.
Copyright 2010 Canonical Ltd.
Copyright 2025 Robert Tari
Authors:
Ted Gould
Robert Tari
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 .
*/
#ifndef __GENERATE_ID_H__
#define __GENERATE_ID_H__
#include
#include "libayatana-appindicator-glib/ayatana-appindicator.h"
guint32 generate_id (const AppIndicatorCategory category, const gchar * id);
#endif /* __GENERATE_ID_H__ */
ayatana-indicator-application-26.6.0/src/indicator-application.c 0000664 0000000 0000000 00000124432 15213316506 021606 0 ustar /*
The indicator application visualization object. It takes the information
given by the service and turns it into real-world pixels that users can
actually use. Well, GTK does that, but this asks nicely.
Copyright 2009 Canonical Ltd.
Copyright 2024-2025 Robert Tari
Authors:
Ted Gould
Robert Tari
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 .
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
/* G Stuff */
#include
#include
#include
#include
/* DBus Stuff */
#include
/* Indicator Stuff */
#include
#include
#include
/* Local Stuff */
#include "dbus-shared.h"
#include "gen-ayatana-application-service.xml.h"
#include "ayatana-application-service-marshal.h"
#define PANEL_ICON_SUFFIX "panel"
#define INDICATOR_APPLICATION_TYPE (indicator_application_get_type ())
#define INDICATOR_APPLICATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), INDICATOR_APPLICATION_TYPE, IndicatorApplication))
#define INDICATOR_APPLICATION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), INDICATOR_APPLICATION_TYPE, IndicatorApplicationClass))
#define IS_INDICATOR_APPLICATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), INDICATOR_APPLICATION_TYPE))
#define IS_INDICATOR_APPLICATION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), INDICATOR_APPLICATION_TYPE))
#define INDICATOR_APPLICATION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), INDICATOR_APPLICATION_TYPE, IndicatorApplicationClass))
typedef struct _IndicatorApplication IndicatorApplication;
typedef struct _IndicatorApplicationClass IndicatorApplicationClass;
struct _IndicatorApplicationClass {
IndicatorObjectClass parent_class;
};
struct _IndicatorApplication {
IndicatorObject parent;
};
GType indicator_application_get_type (void);
INDICATOR_SET_VERSION
INDICATOR_SET_TYPE(INDICATOR_APPLICATION_TYPE)
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
typedef struct {
GCancellable * service_proxy_cancel;
GDBusProxy * service_proxy;
GList * applications;
GHashTable * theme_dirs;
guint disconnect_kill;
GCancellable * get_apps_cancel;
guint watch;
GDBusConnection *pConnection;
} IndicatorApplicationPrivate;
typedef struct _ApplicationEntry ApplicationEntry;
struct _ApplicationEntry {
IndicatorObjectEntry entry;
gchar * icon_theme_path;
gboolean old_service;
gchar * dbusobject;
gchar * dbusaddress;
gchar * guide;
gchar * longname;
gint nPosition;
GMenuModel *pModel;
GActionGroup *pActions;
gboolean bMenuShown;
gchar *sTooltipIcon;
gchar *sTooltipMarkup;
};
static void indicator_application_class_init (IndicatorApplicationClass *klass);
static void indicator_application_init (IndicatorApplication *self);
static void indicator_application_dispose (GObject *object);
static void indicator_application_finalize (GObject *object);
static GList * get_entries (IndicatorObject * io);
static guint get_location (IndicatorObject * io, IndicatorObjectEntry * entry);
static void entry_scrolled (IndicatorObject * io, IndicatorObjectEntry * entry, gint delta, IndicatorScrollDirection direction);
static void entry_secondary_activate (IndicatorObject * io, IndicatorObjectEntry * entry, guint time, gpointer data);
static void connected (GDBusConnection * con, const gchar * name, const gchar * owner, gpointer user_data);
static void disconnected (GDBusConnection * con, const gchar * name, gpointer user_data);
static void disconnected_helper (gpointer data, gpointer user_data);
static gboolean disconnected_kill (gpointer user_data);
static void disconnected_kill_helper (gpointer data, gpointer user_data);
static void application_added (IndicatorApplication * application, const gchar * iconname, gint position, const gchar * dbusaddress, const gchar * dbusobject, const gchar * icon_theme_path, const gchar * label, const gchar * guide, const gchar * accessible_desc, const gchar * hint, const gchar *sTooltipIcon, const gchar *sTooltipTitle, const gchar *sTooltipDescription);
static void application_removed (IndicatorApplication * application, gint position);
static void application_label_changed (IndicatorApplication * application, gint position, const gchar * label, const gchar * guide);
static void application_icon_changed (IndicatorApplication * application, gint position, const gchar * iconname, const gchar * icondesc);
static void application_icon_theme_path_changed (IndicatorApplication * application, gint position, const gchar * icon_theme_path);
static void get_applications (GObject * obj, GAsyncResult * res, gpointer user_data);
static void get_applications_helper (IndicatorApplication * self, GVariant * variant);
static void theme_dir_unref(IndicatorApplication * ia, const gchar * dir);
static void theme_dir_ref(IndicatorApplication * ia, const gchar * dir);
static void icon_theme_remove_dir_from_search_path (const char * dir);
static void service_proxy_cb (GObject * object, GAsyncResult * res, gpointer user_data);
static void receive_signal (GDBusProxy * proxy, gchar * sender_name, gchar * signal_name, GVariant * parameters, gpointer user_data);
G_DEFINE_TYPE_WITH_PRIVATE (IndicatorApplication, indicator_application, INDICATOR_OBJECT_TYPE);
static void
indicator_application_class_init (IndicatorApplicationClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->dispose = indicator_application_dispose;
object_class->finalize = indicator_application_finalize;
IndicatorObjectClass * io_class = INDICATOR_OBJECT_CLASS(klass);
io_class->get_entries = get_entries;
io_class->get_location = get_location;
io_class->secondary_activate = entry_secondary_activate;
io_class->entry_scrolled = entry_scrolled;
return;
}
static void
indicator_application_init (IndicatorApplication *self)
{
IndicatorApplicationPrivate * priv = indicator_application_get_instance_private(self);
/* These are built in the connection phase */
priv->service_proxy_cancel = NULL;
priv->service_proxy = NULL;
priv->theme_dirs = NULL;
priv->disconnect_kill = 0;
priv->watch = g_bus_watch_name(G_BUS_TYPE_SESSION,
INDICATOR_APPLICATION_DBUS_ADDR,
G_BUS_NAME_WATCHER_FLAGS_NONE,
connected,
disconnected,
self,
NULL);
priv->applications = NULL;
priv->pConnection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL);
priv->theme_dirs = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL);
priv->get_apps_cancel = NULL;
return;
}
static void
indicator_application_dispose (GObject *object)
{
IndicatorApplicationPrivate * priv = indicator_application_get_instance_private(INDICATOR_APPLICATION(object));
if (priv->disconnect_kill != 0) {
g_source_remove(priv->disconnect_kill);
}
if (priv->get_apps_cancel != NULL) {
g_cancellable_cancel(priv->get_apps_cancel);
g_object_unref(priv->get_apps_cancel);
priv->get_apps_cancel = NULL;
}
while (priv->applications != NULL) {
application_removed(INDICATOR_APPLICATION(object),
0);
}
if (priv->service_proxy != NULL) {
g_object_unref(G_OBJECT(priv->service_proxy));
priv->service_proxy = NULL;
}
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 (priv->theme_dirs != NULL) {
gpointer directory;
GHashTableIter iter;
g_hash_table_iter_init (&iter, priv->theme_dirs);
while (g_hash_table_iter_next (&iter, &directory, NULL)) {
icon_theme_remove_dir_from_search_path (directory);
}
g_hash_table_destroy(priv->theme_dirs);
priv->theme_dirs = NULL;
}
if (priv->watch != 0) {
g_bus_unwatch_name(priv->watch);
priv->watch = 0;
}
g_clear_object (&priv->pConnection);
G_OBJECT_CLASS (indicator_application_parent_class)->dispose (object);
return;
}
static void
indicator_application_finalize (GObject *object)
{
G_OBJECT_CLASS (indicator_application_parent_class)->finalize (object);
return;
}
/* Brings up the connection to a service that has just come onto the
bus, or is atleast new to us. */
static void
connected (GDBusConnection * con, const gchar * name, const gchar * owner, gpointer user_data)
{
IndicatorApplication * application = INDICATOR_APPLICATION(user_data);
g_return_if_fail(application != NULL);
IndicatorApplicationPrivate * priv = indicator_application_get_instance_private(application);
g_debug("Connected to Application Indicator Service.");
if (priv->service_proxy_cancel == NULL && priv->service_proxy == NULL) {
/* Build the service proxy */
priv->service_proxy_cancel = g_cancellable_new();
g_dbus_proxy_new_for_bus(G_BUS_TYPE_SESSION,
G_DBUS_PROXY_FLAGS_NONE,
NULL,
INDICATOR_APPLICATION_DBUS_ADDR,
INDICATOR_APPLICATION_DBUS_OBJ,
INDICATOR_APPLICATION_DBUS_IFACE,
priv->service_proxy_cancel,
service_proxy_cb,
application);
}
return;
}
/* Callback from trying to create the proxy for the service, this
could include starting the service. */
static void
service_proxy_cb (GObject * object, GAsyncResult * res, gpointer user_data)
{
GError * error = NULL;
IndicatorApplication * self = INDICATOR_APPLICATION(user_data);
g_return_if_fail(self != NULL);
IndicatorApplicationPrivate * priv = indicator_application_get_instance_private(self);
GDBusProxy * proxy = g_dbus_proxy_new_for_bus_finish(res, &error);
if (priv->service_proxy_cancel != NULL) {
g_object_unref(priv->service_proxy_cancel);
priv->service_proxy_cancel = NULL;
}
if (error != NULL) {
g_critical("Could not grab DBus proxy for %s: %s", INDICATOR_APPLICATION_DBUS_ADDR, error->message);
g_error_free(error);
return;
}
/* Okay, we're good to grab the proxy at this point, we're
sure that it's ours. */
priv->service_proxy = proxy;
g_signal_connect(proxy, "g-signal", G_CALLBACK(receive_signal), self);
/* We shouldn't be in a situation where we've already
called this function. It doesn't *hurt* anything, but
man we should look into it more. */
if (priv->get_apps_cancel != NULL) {
g_warning("Already getting applications? Odd.");
return;
}
priv->get_apps_cancel = g_cancellable_new();
/* Query it for existing applications */
g_debug("Request current apps");
g_dbus_proxy_call(priv->service_proxy, "GetApplications", NULL,
G_DBUS_CALL_FLAGS_NONE, -1, priv->get_apps_cancel,
get_applications, self);
return;
}
/* Marks every current application as belonging to the old
service so that we can delete it if it doesn't come back.
Also, sets up a timeout on comming back. */
static void
disconnected (GDBusConnection * con, const gchar * name, gpointer user_data)
{
IndicatorApplication * application = INDICATOR_APPLICATION(user_data);
g_return_if_fail(application != NULL);
IndicatorApplicationPrivate * priv = indicator_application_get_instance_private(application);
g_list_foreach(priv->applications, disconnected_helper, application);
/* I'll like this to be a little shorter, but it's a bit
inpractical to make it so. This means that the user will
probably notice a visible glitch. Though, if applications
are disappearing there isn't much we can do. */
priv->disconnect_kill = g_timeout_add(250, disconnected_kill, application);
return;
}
/* Marks an entry as being from the old service */
static void
disconnected_helper (gpointer data, gpointer user_data)
{
ApplicationEntry * entry = (ApplicationEntry *)data;
entry->old_service = TRUE;
return;
}
/* Makes sure the old applications that don't come back
get dropped. */
static gboolean
disconnected_kill (gpointer user_data)
{
g_return_val_if_fail(IS_INDICATOR_APPLICATION(user_data), FALSE);
IndicatorApplicationPrivate * priv = indicator_application_get_instance_private(INDICATOR_APPLICATION(user_data));
priv->disconnect_kill = 0;
g_list_foreach(priv->applications, disconnected_kill_helper, user_data);
return FALSE;
}
/* Looks for entries that are still associated with the
old service and removes them. */
static void
disconnected_kill_helper (gpointer data, gpointer user_data)
{
g_return_if_fail(IS_INDICATOR_APPLICATION(user_data));
IndicatorApplicationPrivate * priv = indicator_application_get_instance_private(INDICATOR_APPLICATION(user_data));
ApplicationEntry * entry = (ApplicationEntry *)data;
if (entry->old_service) {
application_removed(INDICATOR_APPLICATION(user_data), g_list_index(priv->applications, data));
}
return;
}
/* Goes through the list of applications that we're maintaining and
pulls out the IndicatorObjectEntry and returns that in a list
for the caller. */
static GList *
get_entries (IndicatorObject * io)
{
g_return_val_if_fail(IS_INDICATOR_APPLICATION(io), NULL);
IndicatorApplicationPrivate * priv = indicator_application_get_instance_private(INDICATOR_APPLICATION(io));
GList * retval = NULL;
GList * apppointer = NULL;
for (apppointer = priv->applications; apppointer != NULL; apppointer = g_list_next(apppointer)) {
IndicatorObjectEntry * entry = &(((ApplicationEntry *)apppointer->data)->entry);
retval = g_list_prepend(retval, entry);
}
if (retval != NULL) {
retval = g_list_reverse(retval);
}
return retval;
}
/* Finds the location of a specific entry */
static guint
get_location (IndicatorObject * io, IndicatorObjectEntry * entry)
{
g_return_val_if_fail(IS_INDICATOR_APPLICATION(io), 0);
IndicatorApplicationPrivate * priv = indicator_application_get_instance_private(INDICATOR_APPLICATION(io));
return g_list_index(priv->applications, entry);
}
/* Redirect the secondary activate to the Application Item */
static void
entry_secondary_activate (IndicatorObject * io, IndicatorObjectEntry * entry,
guint time, gpointer data)
{
g_return_if_fail(IS_INDICATOR_APPLICATION(io));
IndicatorApplicationPrivate * priv = indicator_application_get_instance_private(INDICATOR_APPLICATION(io));
g_return_if_fail(priv->service_proxy);
GList *l = g_list_find(priv->applications, entry);
if (l == NULL)
return;
ApplicationEntry *app = l->data;
if (app && app->dbusaddress && app->dbusobject && priv->service_proxy) {
g_dbus_proxy_call(priv->service_proxy, "ApplicationSecondaryActivateEvent",
g_variant_new("(ssu)", app->dbusaddress,
app->dbusobject,
time),
G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
}
}
/* Redirect the scroll event to the Application Item */
static void entry_scrolled (IndicatorObject * io, IndicatorObjectEntry * entry, gint delta, IndicatorScrollDirection direction)
{
g_return_if_fail(IS_INDICATOR_APPLICATION(io));
IndicatorApplicationPrivate * priv = indicator_application_get_instance_private(INDICATOR_APPLICATION(io));
g_return_if_fail(priv->service_proxy);
GList *l = g_list_find(priv->applications, entry);
if (l == NULL)
return;
ApplicationEntry *app = l->data;
if (app && app->dbusaddress && app->dbusobject && priv->service_proxy) {
g_dbus_proxy_call(priv->service_proxy, "ApplicationScrollEvent",
g_variant_new("(ssiu)", app->dbusaddress,
app->dbusobject,
delta, direction),
G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
}
}
/* Does a quick meausre of how big the string is in
pixels with a Pango layout */
static gint
measure_string (GtkStyleContext *pContext, PangoContext * context, const gchar * string)
{
PangoLayout * layout = pango_layout_new(context);
pango_layout_set_text(layout, string, -1);
PangoFontDescription *pDescription = NULL;
GtkStateFlags nFlags = gtk_style_context_get_state (pContext);
gtk_style_context_get (pContext, nFlags, GTK_STYLE_PROPERTY_FONT, &pDescription, NULL);
if (pDescription)
{
pango_layout_set_font_description(layout, pDescription);
pango_font_description_free (pDescription);
}
gint width;
pango_layout_get_pixel_size(layout, &width, NULL);
g_object_unref(layout);
return width;
}
/* Try to get a good guess at what a maximum width of the entire
string would be. */
static void
guess_label_size (ApplicationEntry * app)
{
/* This is during startup. */
if (app->entry.label == NULL) return;
GtkStyleContext *pContext = gtk_widget_get_style_context (GTK_WIDGET (app->entry.label));
PangoContext * context = gtk_widget_get_pango_context(GTK_WIDGET(app->entry.label));
gint length = measure_string(pContext, context, gtk_label_get_text(app->entry.label));
if (app->guide != NULL) {
gint guidelen = measure_string(pContext, context, app->guide);
if (guidelen > length) {
length = guidelen;
}
}
gtk_widget_set_size_request(GTK_WIDGET(app->entry.label), length, -1);
return;
}
static void onMenuPoppedUp (GtkWidget *pWidget, gpointer pFlippedRect, gpointer pFinalRect, gboolean bFlippedX, gboolean bFlippedY, gpointer pData)
{
ApplicationEntry *pEntry = (ApplicationEntry*) pData;
pEntry->bMenuShown = TRUE;
}
static void onMenuHide (GtkWidget *pWidget, gpointer pData)
{
ApplicationEntry *pEntry = (ApplicationEntry*) pData;
pEntry->bMenuShown = FALSE;
}
static gboolean onQueryTooltip (GtkWidget *pWidget, gint nX, gint nY, gboolean bKeyboardMode, GtkTooltip *pTooltip, gpointer pData)
{
ApplicationEntry *pEntry = (ApplicationEntry*) pData;
if (!pEntry->bMenuShown && pEntry->sTooltipMarkup)
{
gtk_tooltip_set_markup (pTooltip, pEntry->sTooltipMarkup);
if (pEntry->sTooltipIcon)
{
gtk_tooltip_set_icon_from_icon_name (pTooltip, pEntry->sTooltipIcon, GTK_ICON_SIZE_LARGE_TOOLBAR);
}
return TRUE;
}
return FALSE;
}
static gboolean onTooltipConnect (gpointer pData)
{
ApplicationEntry *pEntry = (ApplicationEntry*) pData;
if (pEntry->entry.label)
{
gtk_widget_set_has_tooltip (GTK_WIDGET (pEntry->entry.label), TRUE);
g_signal_connect (pEntry->entry.label, "query-tooltip", G_CALLBACK (onQueryTooltip), pEntry);
}
if (pEntry->entry.image)
{
gtk_widget_set_has_tooltip (GTK_WIDGET (pEntry->entry.image), TRUE);
g_signal_connect (pEntry->entry.image, "query-tooltip", G_CALLBACK (onQueryTooltip), pEntry);
}
return G_SOURCE_REMOVE;
}
static void applicationAddedFinish (ApplicationEntry *pEntry)
{
/* Keep copies of these for ourself, just in case. */
g_object_ref (pEntry->entry.image);
g_object_ref (pEntry->entry.menu);
gtk_widget_show (GTK_WIDGET (pEntry->entry.image));
gtk_widget_hide (GTK_WIDGET (pEntry->entry.menu));
IndicatorApplicationPrivate * pPrivate = indicator_application_get_instance_private (INDICATOR_APPLICATION (pEntry->entry.parent_object));
pPrivate->applications = g_list_insert (pPrivate->applications, pEntry, pEntry->nPosition);
g_signal_emit (G_OBJECT (pEntry->entry.parent_object), INDICATOR_OBJECT_SIGNAL_ENTRY_ADDED_ID, 0, &(pEntry->entry), TRUE);
g_signal_connect (pEntry->entry.menu, "popped-up", G_CALLBACK (onMenuPoppedUp), pEntry);
g_signal_connect (pEntry->entry.menu, "hide", G_CALLBACK (onMenuHide), pEntry);
// Make sure our widgets are constructed and displayed
g_timeout_add_seconds (2, onTooltipConnect, pEntry);
}
static void onMenuModelChanged (GMenuModel *pModel, gint nPosition, gint nRemoved, gint nAdded, gpointer pData)
{
ApplicationEntry *pEntry = (ApplicationEntry*) pData;
g_signal_handlers_disconnect_by_data (pEntry->pModel, pEntry);
pEntry->entry.menu = GTK_MENU (gtk_menu_new_from_model (G_MENU_MODEL (pModel)));
gtk_menu_shell_bind_model (GTK_MENU_SHELL (pEntry->entry.menu), pModel, NULL, TRUE);
IndicatorApplicationPrivate *pPrivate = indicator_application_get_instance_private (INDICATOR_APPLICATION (pEntry->entry.parent_object));
pEntry->pActions = G_ACTION_GROUP (g_dbus_action_group_get (pPrivate->pConnection, pEntry->dbusaddress, pEntry->dbusobject));
gtk_widget_insert_action_group (GTK_WIDGET (pEntry->entry.menu), "indicator", pEntry->pActions);
applicationAddedFinish (pEntry);
}
static void setTooltip (ApplicationEntry *pEntry, const gchar *sTooltipIcon, const gchar *sTooltipTitle, const gchar *sTooltipDescription)
{
g_free (pEntry->sTooltipIcon);
pEntry->sTooltipIcon = NULL;
g_free (pEntry->sTooltipMarkup);
pEntry->sTooltipMarkup = NULL;
if (sTooltipTitle && sTooltipTitle[0] != '\0' && sTooltipDescription && sTooltipDescription[0] != '\0')
{
pEntry->sTooltipMarkup = g_strdup_printf ("%s\n\n%s", sTooltipTitle, sTooltipDescription);
}
else if (sTooltipTitle && sTooltipTitle[0] != '\0')
{
pEntry->sTooltipMarkup = g_strdup (sTooltipTitle);
}
else if (sTooltipDescription && sTooltipDescription[0] != '\0')
{
pEntry->sTooltipMarkup = g_strdup (sTooltipDescription);
}
if (sTooltipIcon && sTooltipIcon[0] != '\0')
{
pEntry->sTooltipIcon = g_strdup (sTooltipIcon);
}
}
/* Here we respond to new applications by building up the
ApplicationEntry and signaling the indicator host that
we've got a new indicator. */
static void
application_added (IndicatorApplication * application, const gchar * iconname, gint position, const gchar * dbusaddress, const gchar * dbusobject, const gchar * icon_theme_path, const gchar * label, const gchar * guide, const gchar * accessible_desc, const gchar * hint, const gchar *sTooltipIcon, const gchar *sTooltipTitle, const gchar *sTooltipDescription)
{
g_return_if_fail(IS_INDICATOR_APPLICATION(application));
g_debug("Building new application entry: %s with icon: %s at position %i", dbusaddress, iconname, position);
ApplicationEntry * app = g_new0(ApplicationEntry, 1);
app->bMenuShown = FALSE;
app->entry.parent_object = INDICATOR_OBJECT(application);
app->nPosition = position;
app->old_service = FALSE;
app->icon_theme_path = NULL;
if (icon_theme_path != NULL && icon_theme_path[0] != '\0') {
app->icon_theme_path = g_strdup(icon_theme_path);
theme_dir_ref(application, icon_theme_path);
}
app->dbusaddress = g_strdup(dbusaddress);
app->dbusobject = g_strdup(dbusobject);
app->guide = NULL;
/* We make a long name using the suffix, and if that
icon is available we want to use it. Otherwise we'll
just use the name we were given. */
app->longname = NULL;
if (!g_str_has_suffix(iconname, PANEL_ICON_SUFFIX)) {
app->longname = g_strdup_printf("%s-%s", iconname, PANEL_ICON_SUFFIX);
} else {
app->longname = g_strdup(iconname);
}
app->entry.image = indicator_image_helper(app->longname);
if (label == NULL || label[0] == '\0') {
app->entry.label = NULL;
} else {
app->entry.label = GTK_LABEL(gtk_label_new(label));
g_object_ref(G_OBJECT(app->entry.label));
gtk_widget_show(GTK_WIDGET(app->entry.label));
if (app->guide != NULL) {
g_free(app->guide);
app->guide = NULL;
}
if (guide != NULL) {
app->guide = g_strdup(guide);
}
guess_label_size(app);
}
if (accessible_desc == NULL || accessible_desc[0] == '\0') {
app->entry.accessible_desc = NULL;
} else {
app->entry.accessible_desc = g_strdup(accessible_desc);
}
if (hint == NULL || hint[0] == '\0') {
app->entry.name_hint = NULL;
} else {
app->entry.name_hint = g_strdup(hint);
}
setTooltip (app, sTooltipIcon, sTooltipTitle, sTooltipDescription);
gboolean bGLibMenu = g_str_has_prefix (dbusobject, "/org/ayatana/appindicator/");
if (bGLibMenu)
{
IndicatorApplicationPrivate * pPrivate = indicator_application_get_instance_private (application);
app->pModel = G_MENU_MODEL (g_dbus_menu_model_get (pPrivate->pConnection, dbusaddress, dbusobject));
g_signal_connect (app->pModel, "items-changed", G_CALLBACK (onMenuModelChanged), app);
if (g_menu_model_get_n_items (app->pModel))
{
onMenuModelChanged (app->pModel, 0, 0, 1, app);
}
}
else
{
app->entry.menu = GTK_MENU (dbusmenu_gtkmenu_new ((gchar*) dbusaddress, (gchar*) dbusobject));
applicationAddedFinish (app);
}
}
/* This removes the application from the list and free's all
of the memory associated with it. */
static void
application_removed (IndicatorApplication * application, gint position)
{
g_return_if_fail(IS_INDICATOR_APPLICATION(application));
IndicatorApplicationPrivate * priv = indicator_application_get_instance_private(application);
ApplicationEntry * app = (ApplicationEntry *)g_list_nth_data(priv->applications, position);
if (app == NULL) {
g_warning("Unable to find application at position: %d", position);
return;
}
priv->applications = g_list_remove(priv->applications, app);
g_signal_emit(G_OBJECT(application), INDICATOR_OBJECT_SIGNAL_ENTRY_REMOVED_ID, 0, &(app->entry), TRUE);
if (app->icon_theme_path != NULL) {
theme_dir_unref(application, app->icon_theme_path);
g_free(app->icon_theme_path);
}
if (app->dbusaddress != NULL) {
g_free(app->dbusaddress);
}
if (app->dbusobject != NULL) {
g_free(app->dbusobject);
}
if (app->guide != NULL) {
g_free(app->guide);
}
if (app->longname != NULL) {
g_free(app->longname);
}
if (app->entry.image != NULL) {
g_object_unref(G_OBJECT(app->entry.image));
}
if (app->entry.label != NULL) {
g_object_unref(G_OBJECT(app->entry.label));
}
if (app->entry.menu != NULL) {
g_object_unref(G_OBJECT(app->entry.menu));
}
if (app->entry.accessible_desc != NULL) {
g_free((gchar *)app->entry.accessible_desc);
}
if (app->entry.name_hint != NULL) {
g_free((gchar *)app->entry.name_hint);
}
g_free (app->sTooltipIcon);
g_free (app->sTooltipMarkup);
g_clear_object (&app->pModel);
g_clear_object (&app->pActions);
g_free(app);
return;
}
/* The callback for the signal that the label for an application
has changed. */
static void
application_label_changed (IndicatorApplication * application, gint position, const gchar * label, const gchar * guide)
{
IndicatorApplicationPrivate * priv = indicator_application_get_instance_private(application);
ApplicationEntry * app = (ApplicationEntry *)g_list_nth_data(priv->applications, position);
gboolean signal_reload = FALSE;
if (app == NULL) {
g_warning("Unable to find application at position: %d", position);
return;
}
if (label == NULL || label[0] == '\0') {
/* No label, let's see if we need to delete the old one */
if (app->entry.label != NULL) {
g_object_unref(G_OBJECT(app->entry.label));
app->entry.label = NULL;
signal_reload = TRUE;
}
} else {
/* We've got a label, is this just an update or is
it a new thing. */
if (app->entry.label != NULL) {
gtk_label_set_text(app->entry.label, label);
} else {
app->entry.label = GTK_LABEL(gtk_label_new(label));
gtk_widget_set_has_tooltip (GTK_WIDGET (app->entry.label), TRUE);
g_signal_connect (app->entry.label, "query-tooltip", G_CALLBACK (onQueryTooltip), app);
g_object_ref(G_OBJECT(app->entry.label));
gtk_widget_show(GTK_WIDGET(app->entry.label));
signal_reload = TRUE;
}
}
/* Copy the guide if we have one */
if (app->guide != NULL) {
g_free(app->guide);
app->guide = NULL;
}
if (guide != NULL && guide[0] != '\0') {
app->guide = g_strdup(guide);
}
/* Protected against not having a label */
guess_label_size(app);
if (signal_reload) {
/* Telling the listener that this has been removed, and then
readded to make it reparse the entry. */
if (app->entry.label != NULL) {
gtk_widget_hide(GTK_WIDGET(app->entry.label));
}
if (app->entry.image != NULL) {
gtk_widget_hide(GTK_WIDGET(app->entry.image));
}
if (app->entry.menu != NULL) {
gtk_menu_detach(app->entry.menu);
}
g_signal_emit(G_OBJECT(application), INDICATOR_OBJECT_SIGNAL_ENTRY_REMOVED_ID, 0, &(app->entry), TRUE);
if (app->entry.label != NULL) {
gtk_widget_show(GTK_WIDGET(app->entry.label));
}
if (app->entry.image != NULL) {
indicator_image_helper_update(app->entry.image, app->longname);
gtk_widget_show(GTK_WIDGET(app->entry.image));
}
g_signal_emit(G_OBJECT(application), INDICATOR_OBJECT_SIGNAL_ENTRY_ADDED_ID, 0, &(app->entry), TRUE);
}
return;
}
/* The callback for the signal that the icon for an application
has changed. */
static void
application_icon_changed (IndicatorApplication * application, gint position, const gchar * iconname, const gchar * icondesc)
{
IndicatorApplicationPrivate * priv = indicator_application_get_instance_private(application);
ApplicationEntry * app = (ApplicationEntry *)g_list_nth_data(priv->applications, position);
if (app == NULL) {
g_warning("Unable to find application at position: %d", position);
return;
}
if (iconname == NULL) {
g_warning("We can't have a NULL icon name on %d", position);
return;
}
/* We make a long name using the suffix, and if that
icon is available we want to use it. Otherwise we'll
just use the name we were given. */
if (app->longname != NULL) {
g_free(app->longname);
app->longname = NULL;
}
if (!g_str_has_suffix(iconname, PANEL_ICON_SUFFIX)) {
app->longname = g_strdup_printf("%s-%s", iconname, PANEL_ICON_SUFFIX);
} else {
app->longname = g_strdup(iconname);
}
indicator_image_helper_update(app->entry.image, app->longname);
if (g_strcmp0(app->entry.accessible_desc, icondesc) != 0) {
if (app->entry.accessible_desc != NULL) {
g_free((gchar *)app->entry.accessible_desc);
app->entry.accessible_desc = NULL;
}
if (icondesc != NULL && icondesc[0] != '\0') {
app->entry.accessible_desc = g_strdup(icondesc);
}
g_signal_emit(G_OBJECT(application), INDICATOR_OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE_ID, 0, &(app->entry), TRUE);
}
return;
}
/* The callback for the signal that the icon theme path for an application
has changed. */
static void
application_icon_theme_path_changed (IndicatorApplication * application, gint position, const gchar * icon_theme_path)
{
IndicatorApplicationPrivate * priv = indicator_application_get_instance_private(application);
ApplicationEntry * app = (ApplicationEntry *)g_list_nth_data(priv->applications, position);
if (app == NULL) {
g_warning("Unable to find application at position: %d", position);
return;
}
if (g_strcmp0(icon_theme_path, app->icon_theme_path) != 0) {
if(app->icon_theme_path != NULL) {
theme_dir_unref(application, app->icon_theme_path);
g_free(app->icon_theme_path);
app->icon_theme_path = NULL;
}
if (icon_theme_path != NULL && icon_theme_path[0] != '\0') {
app->icon_theme_path = g_strdup(icon_theme_path);
theme_dir_ref(application, app->icon_theme_path);
}
indicator_image_helper_update(app->entry.image, app->longname);
}
return;
}
/* Receives all signals from the service, routed to the appropriate functions */
static void
receive_signal (GDBusProxy * proxy, gchar * sender_name, gchar * signal_name,
GVariant * parameters, gpointer user_data)
{
IndicatorApplication * self = INDICATOR_APPLICATION(user_data);
IndicatorApplicationPrivate * priv = indicator_application_get_instance_private(self);
/* If we're in the middle of a GetApplications call and we get
any of these our state is probably going to just be confused. Let's
cancel the call we had and try again to try and get a clear answer */
if (priv->get_apps_cancel != NULL) {
g_cancellable_cancel(priv->get_apps_cancel);
g_object_unref(priv->get_apps_cancel);
priv->get_apps_cancel = g_cancellable_new();
g_dbus_proxy_call(priv->service_proxy, "GetApplications", NULL,
G_DBUS_CALL_FLAGS_NONE, -1, priv->get_apps_cancel,
get_applications, self);
return;
}
if (g_strcmp0(signal_name, "ApplicationAdded") == 0) {
gchar * iconname = NULL;
gint position;
gchar * dbusaddress = NULL;
gchar * dbusobject = NULL;
gchar * icon_theme_path = NULL;
gchar * label = NULL;
gchar * guide = NULL;
gchar * accessible_desc = NULL;
gchar * hint = NULL;
gchar * title = NULL;
gchar *sTooltipIcon = NULL;
gchar *sTooltipTitle = NULL;
gchar *sTooltipDescription = NULL;
g_variant_get (parameters, "(sisosssssssss)", &iconname,
&position, &dbusaddress, &dbusobject,
&icon_theme_path, &label, &guide,
&accessible_desc, &hint, &title, &sTooltipIcon, &sTooltipTitle, &sTooltipDescription);
application_added(self, iconname, position, dbusaddress,
dbusobject, icon_theme_path, label, guide,
accessible_desc, hint, sTooltipIcon, sTooltipTitle, sTooltipDescription);
g_free(iconname);
g_free(dbusaddress);
g_free(dbusobject);
g_free(icon_theme_path);
g_free(label);
g_free(guide);
g_free(accessible_desc);
g_free(hint);
g_free(title);
g_free (sTooltipIcon);
g_free (sTooltipTitle);
g_free (sTooltipDescription);
}
else if (g_strcmp0(signal_name, "ApplicationRemoved") == 0) {
gint position;
g_variant_get (parameters, "(i)", &position);
application_removed(self, position);
}
else if (g_strcmp0(signal_name, "ApplicationIconChanged") == 0) {
gint position;
gchar * iconname = NULL;
gchar * icondesc = NULL;
g_variant_get (parameters, "(iss)", &position, &iconname, &icondesc);
application_icon_changed(self, position, iconname, icondesc);
g_free(iconname);
g_free(icondesc);
}
else if (g_strcmp0(signal_name, "ApplicationIconThemePathChanged") == 0) {
gint position;
gchar * icon_theme_path = NULL;
g_variant_get (parameters, "(is)", &position, &icon_theme_path);
application_icon_theme_path_changed(self, position, icon_theme_path);
g_free(icon_theme_path);
}
else if (g_strcmp0(signal_name, "ApplicationLabelChanged") == 0) {
gint position;
gchar * label = NULL;
gchar * guide = NULL;
g_variant_get (parameters, "(iss)", &position, &label, &guide);
application_label_changed(self, position, label, guide);
g_free(label);
g_free(guide);
}
else if (g_strcmp0 (signal_name, "ApplicationTooltipChanged") == 0)
{
gint nPosition = 0;
gchar *sIcon = NULL;
gchar *sTitle = NULL;
gchar *sDescription = NULL;
g_variant_get (parameters, "(isss)", &nPosition, &sIcon, &sTitle, &sDescription);
ApplicationEntry *pEntry = (ApplicationEntry*) g_list_nth_data (priv->applications, nPosition);
setTooltip (pEntry, sIcon, sTitle, sDescription);
g_free (sIcon);
g_free (sTitle);
g_free (sDescription);
}
return;
}
/* This responds to the list of applications that the service
has and calls application_added on each one of them. */
static void
get_applications (GObject * obj, GAsyncResult * res, gpointer user_data)
{
IndicatorApplication * self = INDICATOR_APPLICATION(user_data);
IndicatorApplicationPrivate * priv = indicator_application_get_instance_private(self);
GError * error = NULL;
GVariant * result;
GVariant * child;
GVariantIter * iter;
result = g_dbus_proxy_call_finish(priv->service_proxy, res, &error);
/* No one can cancel us anymore, we've completed! */
if (priv->get_apps_cancel != NULL) {
if (error == NULL || error->domain != G_IO_ERROR || error->code != G_IO_ERROR_CANCELLED) {
g_object_unref(priv->get_apps_cancel);
priv->get_apps_cancel = NULL;
}
}
/* If we got an error, print it and exit out */
if (error != NULL) {
g_warning("Unable to get application list: %s", error->message);
g_error_free(error);
return;
}
/* Remove all applications that we previously had
as we're going to repopulate the list. */
while (priv->applications != NULL) {
application_removed(self, 0);
}
/* Get our new applications that we got in the request */
g_variant_get(result, "(a(sisosssssssss))", &iter);
while ((child = g_variant_iter_next_value (iter))) {
get_applications_helper(self, child);
g_variant_unref(child);
}
g_variant_iter_free (iter);
g_variant_unref(result);
return;
}
/* A little helper that takes apart the DBus structure and calls
application_added on every entry in the list. */
static void
get_applications_helper (IndicatorApplication * self, GVariant * variant)
{
gchar * icon_name = NULL;
gint position;
gchar * dbus_address = NULL;
gchar * dbus_object = NULL;
gchar * icon_theme_path = NULL;
gchar * label = NULL;
gchar * guide = NULL;
gchar * accessible_desc = NULL;
gchar * hint = NULL;
gchar * title = NULL;
gchar *sTooltipIcon = NULL;
gchar *sTooltipTitle = NULL;
gchar *sTooltipDescription = NULL;
g_variant_get(variant, "(sisosssssssss)", &icon_name, &position,
&dbus_address, &dbus_object, &icon_theme_path, &label,
&guide, &accessible_desc, &hint, &title, &sTooltipIcon, &sTooltipTitle, &sTooltipDescription);
application_added(self, icon_name, position, dbus_address, dbus_object, icon_theme_path, label, guide, accessible_desc, hint, sTooltipIcon, sTooltipTitle, sTooltipDescription);
g_free(icon_name);
g_free(dbus_address);
g_free(dbus_object);
g_free(icon_theme_path);
g_free(label);
g_free(guide);
g_free(accessible_desc);
g_free(hint);
g_free(title);
g_free (sTooltipIcon);
g_free (sTooltipTitle);
g_free (sTooltipDescription);
return;
}
/* Unrefs a theme directory. This may involve removing it from
the search path. */
static void
theme_dir_unref(IndicatorApplication * ia, const gchar * dir)
{
IndicatorApplicationPrivate * priv = indicator_application_get_instance_private(ia);
if (!g_hash_table_contains (priv->theme_dirs, dir)) {
g_warning("Unref'd a directory '%s' that wasn't in the theme dir hash table.", dir);
} else {
int count = GPOINTER_TO_INT(g_hash_table_lookup(priv->theme_dirs, dir));
if (count > 1) {
count--;
g_hash_table_insert(priv->theme_dirs, g_strdup(dir), GINT_TO_POINTER(count));
} else {
icon_theme_remove_dir_from_search_path (dir);
g_hash_table_remove (priv->theme_dirs, dir);
}
}
}
static void
icon_theme_remove_dir_from_search_path (const char * dir)
{
GtkIconTheme * icon_theme = gtk_icon_theme_get_default();
gchar ** paths;
gint path_count;
gtk_icon_theme_get_search_path(icon_theme, &paths, &path_count);
gint i;
gboolean found = FALSE;
for (i = 0; i < path_count; i++) {
if (found) {
/* If we've already found the right entry */
paths[i - 1] = paths[i];
} else {
/* We're still looking, is this the one? */
if (!g_strcmp0(paths[i], dir)) {
found = TRUE;
/* We're freeing this here as it won't be captured by the
g_strfreev() below as it's out of the array. */
g_free(paths[i]);
}
}
}
/* If we found one we need to reset the path to
accomidate the changes */
if (found) {
paths[path_count - 1] = NULL; /* Clear the last one */
gtk_icon_theme_set_search_path(icon_theme, (const gchar **)paths, path_count - 1);
}
g_strfreev(paths);
return;
}
/* Refs a theme directory, and it may add it to the search
path */
static void
theme_dir_ref(IndicatorApplication * ia, const gchar * dir)
{
IndicatorApplicationPrivate * priv = indicator_application_get_instance_private(ia);
int count = 0;
if ((count = GPOINTER_TO_INT(g_hash_table_lookup(priv->theme_dirs, dir))) != 0) {
/* It exists so what we need to do is increase the ref
count of this dir. */
count++;
} else {
/* It doesn't exist, so we need to add it to the table
and to the search path. */
gtk_icon_theme_append_search_path(gtk_icon_theme_get_default(), dir);
g_debug("\tAppending search path: %s", dir);
count = 1;
}
g_hash_table_insert(priv->theme_dirs, g_strdup(dir), GINT_TO_POINTER(count));
return;
}
ayatana-indicator-application-26.6.0/.travis.yml 0000664 0000000 0000000 00000001706 15213316506 016505 0 ustar # vim: set ts=2 sts=2 sw=2 expandtab :
dist: focal
language: shell
os: linux
arch:
- amd64
# - ppc64le
services:
- docker
addons:
apt:
packages:
- python3-pip
- python3-setuptools
before_install:
# let's use the MATE project's docker build script...
- curl -Ls -o docker-build https://github.com/AyatanaIndicators/ayatana-dev-scripts/raw/main/travis/docker-build
- chmod +x docker-build
install:
- pip3 install wheel
- pip3 install PyGithub
- ./docker-build --name ${DISTRO} --config .build.yml --install
script:
- ./docker-build --name ${DISTRO} --verbose --config .build.yml --build scripts
env:
# temp disable of archlinux builds, see https://gitlab.archlinux.org/archlinux/archlinux-docker/-/issues/56
# - DISTRO="archlinux:latest"
- DISTRO="debian:testing"
- DISTRO="debian:stable"
# - DISTRO="ubuntu:rolling"
- DISTRO="ubuntu:focal"
jobs:
exclude:
- env: DISTRO="archlinux:latest"
arch: ppc64le