libayatana-appindicator-glib-2.0.1/AUTHORS0000664000000000000000000000144115023522653015150 0ustar Alberts Muktupāvels Alfred Wingate Allan LeSage Aurelien Gateau Aurélien Gâteau C10uD Charles Kerr Chris Coulson Chris J Arges Cody Russell Colin Watson Conor Curran Didier Roche Dmitry Shachnev Emmanuele Bassi Evgeni Golov György Balló Iain Lane Jan Arne Petersen Jason Smith Javier Jardón Jeremy Bicha John Vert Jo Shields Ken Vandine Ken VanDine Krzysztof Klimonda Lars Uebernickel Luca Weiss Łukasz 'sil2100' Zemczak Luke Yelavich Marco Trevisan (Treviño) Martin Pitt Mathieu Trudel-Lapierre Matthias Klose Michael Terry Michael Vogt Michal Hruby Mike Gabriel Neil Jagdish Patel Neil J Patel Robert Ancell Robert Bruce Park Robert Collins Robert Tari Sebastien Bacher Sense Egbert Hofstede Sense Hofstede Sergey Fedorov Ted Gould Till Maas Unknown William Pettersson Артём Попов libayatana-appindicator-glib-2.0.1/bindings/CMakeLists.txt0000664000000000000000000000003015023522653020426 0ustar add_subdirectory (vala) libayatana-appindicator-glib-2.0.1/bindings/vala/ayatana-appindicator-custom.vala0000664000000000000000000000161315023522653025067 0ustar /* * Copyright 2011 Michal Hruby * Copyright 2022-2024 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 . */ namespace AyatanaAppIndicatorGlib { [CCode (type_check_function = "APP_IS_INDICATOR", type_id = "app_indicator_get_type ()")] public class Indicator : GLib.Object { } } libayatana-appindicator-glib-2.0.1/bindings/vala/AyatanaAppIndicatorGlib-2.0.metadata0000664000000000000000000000005415023522653025270 0ustar AyatanaAppIndicatorGlib name="AppIndicator" libayatana-appindicator-glib-2.0.1/bindings/vala/ayatana-appindicator-glib.deps0000664000000000000000000000002415023522653024475 0ustar gio-2.0 gobject-2.0 libayatana-appindicator-glib-2.0.1/bindings/vala/CMakeLists.txt0000664000000000000000000000177515023522653021372 0ustar # ayatana-appindicator-glib.deps install (FILES "${CMAKE_CURRENT_SOURCE_DIR}/ayatana-appindicator-glib.deps" DESTINATION "${CMAKE_INSTALL_FULL_DATADIR}/vala/vapi") # ayatana-appindicator-glib.vapi find_package (Vala REQUIRED) add_custom_command ( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/ayatana-appindicator-glib.vapi" DEPENDS "src" "${CMAKE_BINARY_DIR}/src/AyatanaAppIndicatorGlib-2.0.typelib" WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMAND ${VAPI_GEN} --library=ayatana-appindicator-glib --pkg gio-2.0 --pkg gobject-2.0 --girdir="${CMAKE_SOURCE_DIR}/src" --metadatadir "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_BINARY_DIR}/src/AyatanaAppIndicatorGlib-2.0.gir" "${CMAKE_CURRENT_SOURCE_DIR}/ayatana-appindicator-custom.vala" ) install (FILES "${CMAKE_CURRENT_BINARY_DIR}/ayatana-appindicator-glib.vapi" DESTINATION "${CMAKE_INSTALL_FULL_DATADIR}/vala/vapi") add_custom_target ("bindings-vala" ALL DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/ayatana-appindicator-glib.vapi") libayatana-appindicator-glib-2.0.1/.build.yml0000664000000000000000000000563315023522653016007 0ustar ######################################################### # THE FOLLOWING LINES IS USED BY docker-build ########################################################## requires: archlinux: # Useful URL: https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=libayatana-appindicator - clang - gcc - git - make - startup-notification - which - cmake - cmake-extras - glib2 - glib2-devel - gobject-introspection - vala - gi-docgen - dbus-test-runner (AUR) - xorg-server-xvfb debian: # Useful URL: https://salsa.debian.org/debian-ayatana-team/libayatana-appindicator - clang - clang-tools - g++ - cppcheck - git - cmake - cmake-extras - cli-common-dev - gobject-introspection - gi-docgen - dbus-test-runner - xvfb - valac - libglib2.0-dev - libgirepository1.0-dev ubuntu: - clang - clang-tools - g++ - cppcheck - git - cmake - cmake-extras - cli-common-dev - gobject-introspection - gi-docgen - dbus-test-runner - xvfb - valac - libglib2.0-dev - libgirepository1.0-dev 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"' build_scripts: - if [ ${DISTRO_NAME} == "debian" ];then - cppcheck --enable=warning,style,performance,portability,information,missingInclude . - fi - - if [ ${DISTRO_NAME} == "debian" ] || [ ${DISTRO_NAME} == "ubuntu" ]; then - scan-build $CHECKERS cmake ../../ -DCMAKE_VERBOSE_MAKEFILE=ON -DENABLE_TESTS=ON - else - scan-build $CHECKERS cmake ../../ -DCMAKE_VERBOSE_MAKEFILE=ON - 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 - 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" ] || [ ${DISTRO_NAME} == "ubuntu" ]; then - ${XVFB_RUN} env CTEST_OUTPUT_ON_FAILURE=1 make test - fi libayatana-appindicator-glib-2.0.1/ChangeLog0000664000000000000000000057022215023522653015662 0ustar 2025-06-15 Mike Gabriel * Release 2.0.1 (HEAD -> main, tag: 2.0.1) * Merge branch 'tari01-pr/xml-to-c' (71a84ed) 2025-06-02 Robert Tari * Generate C code for D-Bus XML definitions (1aa8eb5) 2025-05-15 Mike Gabriel * Release 2.0.0 (8e38df6) (tag: 2.0.0) * d/changelog: mark as pre-release (3bdb615) * Merge branch 'tari01-pr/update-md-files' (7f17ebe) 2025-04-11 Robert Tari * Update markdown files (20e0d38) 2025-05-15 Mike Gabriel * Merge branch 'tari01-pr/fix-python-example' (a9c74af) 2025-04-04 Robert Tari * examples/simple-client-python.py: Fix namespace (c7e6004) 2025-03-07 Robert Tari * Merge branch 'sunweaver-pr/namespacing-adjustments-to-new-libname' (66f8279) 2025-03-07 Mike Gabriel * debian/: Adjust DEB packaging to rewrite of 'libayatana-appindicator' as 'libayatana-appindicator-glib'. (c9da098) * Adjust namespacing to the new name 'libayatana-appindicator-glib'. (65189c3) * Merge branch 'tari01-pr/complete-rewrite-using-gmenu' (e5083db) 2024-09-26 Robert Tari * Rewrite from the ground up using Gio menus and actions (cf25a38) 2024-07-03 Mike Gabriel * Merge branch 'parona-source-undefined-version-script-symbols' (e3c1dba) 2024-07-02 Alfred Wingate * Correct symbols in version script file (6e29dc3) Fixes: 4d97676bb5ba1a7612aed36d219cbaa978adc90e 2024-07-03 Mike Gabriel * Merge branch 'barracuda156-apple' (fb1a124) 2024-06-17 Sergey Fedorov * Fix build on macOS (f8da900) 2023-10-13 Mike Gabriel * release 0.5.93 (238c8b0) (tag: 0.5.93) 2023-09-10 Mike Gabriel * Merge branch 'tari01-pr/enable-docs' (a80f3b7) 2023-09-07 Robert Tari * CMakeLists.txt: Generate GTK documentation by default (277f584) 2023-08-10 Robert Tari * README.md: Fix title copy-paste mistake (05ee0c7) 2023-09-07 Robert Tari * Merge branch 'tyll-executable_so' (54fc06c) 2023-09-06 Till Maas * cmake: Install library as library (12dc6d2) 2023-08-10 Mike Gabriel * debian/libayatana-appindicator*.symbols: Update .symbols after having limited the number of exported symbols. (86f8bb3) * Merge branch 'tari01-pr/limit-symbols' (ef6ee22) 2023-08-09 Robert Tari * Limit exported symbols (4d97676) 2023-08-10 Mike Gabriel * Merge branch 'tari01-pr/build-instructions' (2a3ed01) 2023-08-09 Robert Tari * Add info and build instructions (e0c8e15) 2023-08-10 Mike Gabriel * Merge branch 'tari01-pr/drop-dbus-glib' (3b69c23) 2023-08-09 Robert Tari * .build.yml: Drop dbus-glib and dbus dependencies (d6cdc24) * debian/control: Drop libdbus-glib-1-dev and libdbus-1-dev (1ac50df) * Replace DBus-GLib with GDBus and drop libdus (f3cf535) * tests/test-libappindicator.c: Drop unread value (25001b0) 2023-08-07 Mike Gabriel * Merge branch 'WPettersson-document-status' (9201035) 2023-07-20 William Pettersson * Document the status property a bit more clearly. (864b830) 2023-06-07 Mike Gabriel * Merge branch 'tari01-pr/build-fixes' (2b32292) 2023-03-11 Robert Tari * .build.yml: Add doc requirements and build with GTKDOC (05913e6) * bindings/mono/CMakeLists.txt: Drop path from linked resource file (e67e62e) * src/app-indicator.c: Don't use GNU old-style field designator extension (d848644) 2023-03-10 Robert Tari * src/app-indicator.c: Fix documentation related errors (f7f4a8d) * Explicitly mark deprecated functions and use substitutes (aec1741) * src/AyatanaAppIndicator*-0.1.metadata: Drop unused metadata (483cd99) * bindings/mono/CMakeLists.txt: Drop unused properties (6f8cdd5) * bindings/mono/libayatana-appindicator*-api.metadata: Drop/fix properties, methods and signals (833d2c9) * Whitespace fix (9f92d34) 2023-02-02 Mike Gabriel * release 0.5.92 (d214fe3) (tag: 0.5.92) * Merge branch 'tari01-pr/fix-build-warnings' (4f9c4e9) 2022-07-15 Robert Tari * Fix all remaining build warnings (694ab4e) 2022-08-19 Robert Tari * src/app-indicator.c: Fix wrong function signatures (0231964) 2022-07-15 Robert Tari * Silence warnings generated by Vala (d305bda) 2022-07-14 Robert Tari * Fix remaining deprecation warnings (44a82a0) 2022-07-13 Robert Tari * src/app-indicator.c: Silence GtkStatusIcon deprecation warnings (cc27f13) * Whitespace fix (28d2178) 2022-04-08 Mike Gabriel * release 0.5.91 (f225dcc) (tag: 0.5.91) * Merge branch 'pr/discord-segfaulting' (59e472a) 2022-04-01 Mike Gabriel * src/appindicator.c: Clean up all g_signal_emit and g_signal_new calls so that they correspond with each other. (05dee64) * src/appindicator.c: Fix path NULL check in status_icon_change(). (540b7bf) 2022-04-01 Robert Tari * Merge branch 'sunweaver-pr/gpl-3-copying-file' (5b0a474) 2022-04-01 Mike Gabriel * COPYING.GPL.3: Add file. Some code files are licensed GPL-3. Thanks to Luca Weiss for spotting this. (6c01f2c) 2022-02-16 Mike Gabriel * Merge branch 'tari01-pr/cleanup-compile-flags' (420dcd2) 2022-02-11 Robert Tari * .build.yml: Drop extra compilation flags (0ea872f) * Clean up compilation flags (e6b34ef) 2022-02-09 Robert Tari * Merge branch 'sunweaver-pr/let-run-xvfv-sh-run-in-bin-sh' (3bec2d1) 2022-02-08 Mike Gabriel * tests/run-xvfb.sh: Allow sourcing run-xvfb.sh with /bin/sh. (772bab7) * Merge branch 'z3ntu-tests-bash' (ea135ed) 2022-02-06 Luca Weiss * Use /bin/sh for running tests (dc4d76b) 2022-02-08 Robert Tari * .travis.yml: Run CI builds on Travis CI's Ubuntu focal base system (b09086c) 2022-01-27 Robert Tari * Merge branch 'sunweaver-pr/pkg-config-file-for-gtk2-broken' (43cfc1e) 2021-12-21 Mike Gabriel * src/ayatana-appindicator3-0.1.pc.in: Update description field and mention GTK-3+. (1f74aa3) * src/ayatana-appindicator-0.1.pc.in: Adapt file for CMake builds. This slipped through when porting from autotools to CMake, it seems. (Thanks to Unit193 for reporting this via IRC). (7019d68) 2021-12-08 Mike Gabriel * Merge branch 'z3ntu-canonicalize_file_name' (e689457) 2021-12-07 Luca Weiss * Fix build with musl libc (89415c0) 2021-11-18 Mike Gabriel * release 0.5.90 (afb37c4) (tag: 0.5.90) 2021-10-24 Mike Gabriel * debian/rules: Unset DBUS_SESSION_BUS_ADDRESS before running tests. (2bf2076) * CMakeLists.txt: Fix how we evaluate the result for find_program for gtkdoc-scan. (ea91c02) * CMakeLists.txt: Fix gtkdoc-scan binary name. (d008320) 2021-10-24 Robert Tari * Merge branch 'sunweaver-pr/run-tests-in-build_scripts-target' (c3f146d) 2021-10-24 Mike Gabriel * .build.yml. Run unit tests directly after build in build_scripts: target. (a6c9ba8) 2021-10-24 Robert Tari * Merge branch 'sunweaver-pr/dbus-test-runner-keep-env' (c2f6dc5) * Merge branch 'sunweaver-pr/fix-mono-bindings-for-gtk3' (06df5ff) 2021-10-24 Mike Gabriel * tests/CMakeLists.txt: Assure that modified outside environment variables (see debian/rules) survive into the dbus-test-runner wrapped environment. (471a7ac) * .build.yml: Fix building and running unit tests (mixed up of && and ||). (52bade6) * .build.yml: Drop local builds of ayatana-ido and libayatana-indicator. They confuse cppcheck. (d34e805) * .build.yml: Fix rebuild with gcc on multi-core build nodes. (3a6def5) * .build.yml and debian/control: Sync list and order of build-dependencies (Debian and Ubuntu). (074fb94) * bindings/mono/CMakeLists.txt: Fix missing target bindings/mono/AyatanaAppIndicator/ApplicationIndicator.cs. (c8b0ce5) 2021-10-24 Robert Tari * Merge branch 'sunweaver-pr/gi-is-mandatory' (adaf4e3) * .build.yml: Fix typo (12f77f0) 2021-10-23 Mike Gabriel * CMakeLists.txt: White-space fix (remove superfluous empty line). (289797b) * CMakeLists.txt: Check for presence of gtk-doc executable if -DENABLE_GTKDOC=ON. (aaac9d8) * {,bindings/}CMakeLists.txt: Add switch for enabling/disabling bindings (enabled by default). (9673233) 2021-10-24 Robert Tari * .build.yml: Fix typo (f720888) * Merge branch 'sunweaver-pr/check-for-gtk-doc' (ba37cb9) 2021-10-23 Mike Gabriel * {,bindings/}CMakeLists.txt: Add switch for enabling/disabling bindings (enabled by default). (d80057c) 2021-10-24 Robert Tari * Merge branch 'sunweaver-pr/make-bindings-optional' (62c77b5) 2021-10-23 Mike Gabriel * src/CMakeLists.txt: GObjectIntrospection is not optional, so mark it as REQUIRED (only). (c3e24c2) * CMakeLists.txt: White-space fix (remove superfluous empty line). (3bbad2a) * CMakeLists.txt: Check for presence of gtk-doc executable if -DENABLE_GTKDOC=ON. (5ffca10) * {,bindings/}CMakeLists.txt: Add switch for enabling/disabling bindings (enabled by default). (7e5b7d8) 2021-10-23 Robert Tari * Merge branch 'sunweaver-pr/bring-back-gtk2-build-support' (7e4b671) * Merge branch 'sunweaver-pr/add-enable-gtkdoc-cmake-option' (69f8357) 2021-10-23 Mike Gabriel * .build.yml: Drop autogen.sh support; add GTK+-2.0 build and test support; also run unit tests on Ubuntu. (91bddd9) * debian/*: Re-enable / uncomment GTK+ 2.0 support. (152bf4e) * Re-introduce (CMake based) build support against GTK+ 2.0. (c723768) * CMakeLists: Introduce -DENABLE_GTKDOC. (1245eb7) 2021-10-22 Mike Gabriel * debian/rules: Run GTK3 unit tests first (see if they also fail on Jenkins). (61bb127) * debian/rules: Also explicitly set XDG_CACHE_HOME for unit tests. (4de805f) * debian/rules: Also set XDG_DATA_HOME for unit tests. (800f06c) 2021-10-20 Robert Tari * .travis.yml: Temporarily disable ppc64le builds (7bb8af0) * .travis.yml: Temporarily disable ppc64le builds (38190d0) 2021-08-10 Mike Gabriel * Merge branch 'tari01-pr/add-enable-werror-option' (e7d58e5) 2021-08-09 Robert Tari * Add ENABLE_WERROR option (8d3a18b) 2021-06-11 Robert Tari * Merge branch 'sunweaver-pr/debian-fix-gtk-3-only-builds' (c173a0e) 2021-06-11 Mike Gabriel * debian/*: Fix DEB builds (GTK-3+ only for now) after CMake switch-over. (5826955) 2021-06-11 Robert Tari * Merge branch 'sunweaver-pr/mono-namespacing-fix' (909558a) 2021-06-11 Mike Gabriel * Mono bindings: Change namespace from ayatana-appindicator-sharp3 to ayatana-appindicator3-sharp (and similar). (d359a4b) 2021-06-10 Mike Gabriel * debian/changelog: Bump package version to 0.5.90. (301b56f) * Merge branch 'tari01-pr/move-to-cmake' (80245fc) 2021-06-09 Robert Tari * bindings/vala/ayatana-appindicator3-0.1.deps: Add all dependencies (fd8225e) 2021-06-03 Robert Tari * .build.yml: Add libdbus-1-dev dependency for Debian/Ubuntu (edc83f3) 2021-06-02 Robert Tari * .build.yml: Add gtk-sharp3-gapi dependency for Debian/Ubuntu (363301e) 2021-06-01 Robert Tari * .build.yml: Add libgtk3.0-cil-dev dependency (56c2732) 2021-02-27 Robert Tari * Drop Automake files (ec32948) * Drop legacy GTK files (93f8f78) * Add CMakeLists.txt files + cmake/ helpers (367188d) * bindings/mono/examples: Port ayatana-indicator-example.in to CMake (2d8c300) * bindings/mono: Drop custom extension and use partial class in ApplicationIndicatorCustom.cs (33422a5) * bindings/vala: Add ayatana-appindicator3-0.1.deps (3ed807d) * bindings/mono: Rename and port ayatana-appindicator-sharp3-0.1.pc.in to CMake (e16b735) * src: Port ayatana-appindicator3-0.1.pc.in to CMake (7b0ede1) * bindings/mono: Use preconfigured ayatana-appindicator-sharp.dll.config (a52688b) * docs/reference: Port version.xml.in to CMake (1d8eec2) * docs/reference: Port libayatana-appindicator-docs.sgml.in to CMake (3ebb89d) * bindings/mono: Port policy.0.1.ayatana-appindicator-sharp.config.in to CMake (0df68d8) * bindings/mono: Port policy.0.0.ayatana-appindicator-sharp.config.in to CMake (290c62f) * bindings/mono: Update AssemblyInfo.cs (00f0e2c) * bindings/mono: Port app-indicator.sources.xml.in to CMake (4e06a0e) * src: use preconfigured AyatanaAppIndicator3-0.1.metadata (5004d72) 2021-05-25 Robert Tari * Merge branch 'sunweaver-pr/travis-ci' (3148485) 2021-05-25 Mike Gabriel * configure.ac: Default to GTK+-3.0 build (will come with CMake switch, anyway). (3400cf9) * {src,tests}/Makefile.am: Drop -Werror flag for now. Needs to be re-added later. (32f5f11) * Travis CI: Add initial scripts for running CI builds on Travis CI. (13f7ad0) 2021-05-03 Mike Gabriel * debian/rules: Make really really sure that unit tests are not run in parallel (although this looks ugly). (826f848) 2021-05-01 Mike Gabriel * Merge branch 'pr/fix-unit-tests' (1defcc3) 2021-04-30 Mike Gabriel * debian/rules: Switch to official Debian's dotest-% target. This stops ignoring unit tests during DEB package buids (and also fixes them). (6173997) * tests/Makefile.am: Add --keep-env option to dbus-test-runner calls. Allows propagating e.g. a build HOME into the DBus test environment. (04a517e) 2020-07-23 Mike Gabriel * release 0.5.5 (c43a76e) (tag: 0.5.5) * debian/rules: Explicitly set XDG_CACHE_HOME during unit tests, too. Hope this amends the dconf errors spotted lately. (c11784b) * debian/rules: Fix dh_auto_test call in dotest-%: target. (91ec65e) * debian/control: Drop R³ field again, it causes FTBFS on Ubuntu bionic in their version of dh_makeclilibs. (71dfd0a) * debian/rules: Drop more Python2 build stuff, esp. references to Py2-version specific builds. (05ebffc) * debian/changelog: Fix typo in previous changelog stanza's date. (1c48b44) 2020-07-22 Mike Gabriel * configure.ac: Drop Python section that configured the build for Python2 bindings. (50e147a) 2020-07-20 Mike Gabriel * configure.ac: No more reference to Python2 ayatana_appindicator bindings. (6af5e32) 2020-07-19 Mike Gabriel * debian/rules: Drop reference to python2 build of remove bin:pkg python-ayatana-appindicator. (7373261) 2020-07-18 Mike Gabriel * debian/control: Port over changes from official Debian packaging. (43dc072) * bindings/pyton: Drop Python2/Gtk-2 bindings. (8c4c6db) * debian/*: Drop Python2 binding support. (eb5ffbb) 2019-11-11 Mike Gabriel * release 0.5.4 (5ca235f) (tag: 0.5.4) 2019-08-29 Mike Gabriel * Avoid deprecated g_type_class_add_private. (e7acaf9) 2018-03-22 Mike Gabriel * debian/control: Add Ds for libgtk*-dev to libaytana-appindicator*-dev. (f9d315a) 2018-03-20 Mike Gabriel * debian/control: Drop from Recommends: ayatana-indicator-application. The -application Indicator should be pulled in from the desktop env's side that wants to utilize it (e.g. via the indicator-render applet). (7b7bd6b) * release 0.5.3 (4892a12) (tag: 0.5.3) * src/app-indicator.c: Type cast assignments from g_object_ref(). (b14ba33) 2017-10-26 Mike Gabriel * {configure.ac,Makefile.am}: Drop distcheck features. (d4b1697) 2017-10-24 Mike Gabriel * release 0.5.2 (a081ea2) (tag: 0.5.2) * debian/source/format: Explicitly set to source format 1.0. (82f779a) * debian/upstream/signing-key.asc: Add upstream signing key. (34f4291) * debian/control: Use Github repo in Vcs-*: URL fields. (5f9176e) * debian/control: Bump Standards-Version: to 4.1.1. No changes needed. (f8fccd9) * debian/control: Fix Homepage: URL. (7a4fb33) * debian/*.install: Adapt .typelib installation paths (to multi-arch). (eff5282) * debian/control: Various adaptation to SYNOPSIS and LONG_DESCRIPTION fields. (eb9d5a1) * debian/rules: Only dh_install cil packages on architectures that support Mono. (6a978fc) * debian/rules: Enable all hardening flags. (906c9a4) * debian/copyright: Adopt from official Debian package (slightly modified). (3a09566) * debian/rules: White space fix. (af533aa) * API documentation: Suppress some warnings being thrown. (c3c9e79) * python2 bindings: Finally avoid implicit declaration for (_ayatana)_appindicator_add_constants() function symbol. (d89dee1) 2017-10-06 Mike Gabriel * debian/control: Add to B-D: dh-python. (024cc53) 2017-10-05 Mike Gabriel * src/app-indicator.c: Avoid usage of PATH_MAX macro. Fixes FTBFS on Debian GNU/Hurd. (bc7f683) 2017-09-29 Mike Gabriel * Revert "debian/{control,compat}: Bump DH version level to 10 (and bump B-D to >= 10)." (c17c300) * post-release project name fix in debian/changelog (4388914) * debian/control: Add missing , at EOL under B-D. (0303c95) 2017-09-28 Mike Gabriel * debian/{control,rules}: Update supported host architectures. (9164fa6) * debian/{control,compat}: Bump DH version level to 10 (and bump B-D to >= 10). (9c19888) * bindings/mono/Makefile.am: Don't run tests on all targets, only on check target. Fixes FTBFS when built parallely. (65e8d53) 2017-09-26 Mike Gabriel * debian/changelog: Post-release fix in date string of 0.5.0 release stanza. (303ab50) * bindings/python: Yet another 'ayatana' namespace fix for the Python2 bindings. (ee1719a) 2017-09-23 Mike Gabriel * release 0.5.1 (c3dc683) (tag: 0.5.1) * Python2 bindings: Fix import ayatana_appindicator failure by correctly adding the ayatana namespace. (8a97153) * docs/reference/Makefile.am: Drop option --nogtkinit from SCANGOBJ_OPTIONS. Has been long deprecated in scangobj and been removed in gtk-doc (>= 1.26). (75d83e0) 2017-05-22 Mike Gabriel * release 0.5.0 (73a2c16) (tag: 0.5.0) * autogen.sh: Fix PKG_NAME. Use ayatana- in PKG_NAME. (bd7789c) 2017-05-15 Marco Trevisan (Treviño) * app-indicator: don't append the snap prefix if the icon is saved in a well known readable path (0f55cbb) * AppIndicator: don't emit label cahanges when guide is still empty (20e557b) * AppIndicator: fix icon and theme paths when running in $SNAP environment (5b851ff) 2017-05-15 Alberts Muktupāvels * Handle watcher service appearing and disappearing. (17376e1) 2017-05-15 Dmitry Shachnev * Make test-simple-app really working. (14520bd) 2017-05-15 Mike Gabriel * build system: Switch to mate-common. (b0a3d75) * src/dbus-shared.h: Fix copy+paste flaw for INDICATOR_APPLICATION_DBUS_OBJ. (4dd25fc) 2015-11-11 Mike Gabriel * debian/rules: Use instead of `pwd`. (3dbc56b) * Re-rename README.md to README. Otherwise automake will complain. (8f3e225) * README.md: Don't sound Ubuntu-hostile (which we aren't). (d7266c0) * Rename README -> README.md, fill with content. (b63351e) * tests/run-xvfb.sh: Give tests even more time (10s). (742c033) * tests/run-xvfb.sh: Give tests more time (4s instead of 2s) to complete. This may help with observed / arbitrary test failures when built on jenkins.arctica-project.org. (c6d4799) * debian/control: Fix versioned build-dependency for libayatana-indicator{,3}-dev. (6b3a341) * Revert "debian/rules: Make sure the kill command is found in ..." (d9c905e) * debian/rules: Make sure the kill command is found in /home/mike/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/opt/thinlinc/bin. (1abf3ea) * debian/rules: Use backticks instead of $() (which is not a GNU make way of invoking commands). (1a915b2) * debian/rules: Provide temporary home for test suite runs. (865dd82) * debian/rules: Expect tests/test-suite.log files in build/gtk subdirs. (7ded69d) * debian/rules: Don't abort build on failing tests (so that we see the tests-suite.log file). (d95085e) * debian/rules: View test's log file for better debugging of problems when built in clean chroots. (0d6f90a) * debian/control: Add B-D: procps. The test suite complains about the ps command to be missing in minimal build environments. (5f0eee4) * Drop .bzrignore file. (c7c92ab) 2015-11-10 Mike Gabriel * debian/control: Fix build-dependency issue for nightly builds. (5952912) 2015-11-09 Mike Gabriel * Fork from Ubuntu's libappindicator project. (def21c2) 2014-11-10 CI bot * Releasing 12.10.1+15.04.20141110-0ubuntu1 (bf7bc28) 2014-11-10 Lars Uebernickel * scroll-event: change parameter to the right type (9cb1df0) 2014-11-10 Matthias Klose * Rebuild to drop files installed into /usr/share/pyshared. (643fad3) 2014-11-10 Lars Uebernickel * gcov.m4: add lcov 1.11 (cd218c8) * scroll-event: change parameter to the right type (ae927bc) 2013-12-19 Ted Gould * Fix build failures on trusty. Fixes: https://bugs.launchpad.net/bugs/1262655. (25762ad) * Adding gcov 1.10 (52c50b3) 2013-12-19 Matthias Klose * Build with -Wno-error=deprecated-declarations.; Don't build the mono bindings on ppc64el, not available.; Disable building the example, vala build error. (a703b19) 2013-10-17 Robert Bruce Park * Merge distro back to trunk. (65bc7f8) * Merge distro back to trunk. (3cb943d) 2013-10-14 Matthias Klose * Don't build the mono bindings on AArch64, not available. Fixes: https://bugs.launchpad.net/bugs/1239474. (7fa21cc) * Don't build the mono bindings on AArch64, not available. (LP: #1239474) (63078a8) 2013-09-20 Automatic PS uploader * Releasing 12.10.1+13.10.20130920-0ubuntu1 (revision 266 from lp:libappindicator). (53d9d3d) * Releasing 12.10.1+13.10.20130920-0ubuntu1, based on r266 (6561e54) 2013-09-16 Jeremy Bicha * - Build using default vala - Build-depend on at-spi2-core to avoid test failure - Build-depend on libxml2-utils - Don't explicitly build-depend on gir packages, gnome-doc-utils, or quilt - Have -dev packages depend on their gir- packages. (e467f23) 2013-08-13 Jeremy Bicha * Don't explicitly build-depend on gir packages, quilt, or gnome-doc-utils Build using default vala Build-depend on libxml2-utils Build-depend on at-spi2-core to avoid test failure Have -dev packages depend on their gir- packages (88416a6) 2013-06-19 Automatic PS uploader * Releasing 12.10.1daily13.06.19-0ubuntu1 to ubuntu. (2f5c0e2) * Releasing 12.10.1daily13.06.19-0ubuntu1, based on r264 (d24626e) 2013-06-10 Marco Trevisan (Treviño) * NotificationWatcher interface has not anymore the XAyatanaRegisterNotificationApprover method. (6e92176) 2013-06-10 Ted Gould * Making gtk-doc check run in the current source directory. (e17244e) 2013-06-07 Ted Gould * Seems no one else has this on, no reason to be the odd ball. (256ce01) * Don't need the same directory twice (5ab6b49) * An odd typo worth fixing (b8fe5d1) * Going back to the environment style (27a81fb) * Dropping some left over debugging info (955ce2e) * Making sure the check is done in the source directory (0678dac) 2013-05-03 Automatic PS uploader * Releasing 12.10.1daily13.05.02-0ubuntu1 to ubuntu. (1ca305b) 2013-05-02 Automatic PS uploader * Releasing 12.10.1daily13.05.02-0ubuntu1, based on r261 (da7e4bb) 2013-05-02 Mathieu Trudel-Lapierre * Merge changelog changes from /13.04 branch for saucy. (2a10f27) * Merge changelog changes from /13.04 branch for saucy. (8c82773) 2013-04-19 Łukasz 'sil2100' Zemczak * indicator_desktop_shortcuts_nick_exec() is deprecated, use indicator_desktop_shortcuts_nick_exec_with_context() with a NULL context instead - fixes the FTBFS. (a510902) * indicator_desktop_shortcuts_nick_exec is deprecated, use indicator_desktop_shortcuts_nick_exec_with_context instead - fixes the FTBFS (affeefe) 2013-04-17 Mathieu Trudel-Lapierre * Remove the clean target. (0202579) 2013-04-16 Iain Lane * Install appindicator-sharp's pcfile into /usr/share/pkgconfig as this is an arch:all package and library. Update the assemblydir variable in this pcfile to refer to the correct location for the library instead of an incorrect multiarch directory. (02d580a) * Install appindicator-sharp's pcfile into /usr/share/pkgconfig as this is an arch:all package and library. Update the assemblydir variable in this pcfile to refer to the correct location for the library instead of an incorrect multiarch directory. (32257b0) 2013-04-09 Mathieu Trudel-Lapierre * debian/rules: drop the clean target, it's superfluous. (e40014d) 2013-04-03 Mathieu Trudel-Lapierre * Reverse the order of dh_clean and dh_autoreconf_clean, fixes issues where autoreconf files get dropped and thus autoreconf fails to properly clean. (736066f) 2013-03-13 Automatic PS uploader * Releasing 12.10.1daily13.03.13-0ubuntu1 to ubuntu. (5d2aa7d) * Releasing 12.10.1daily13.03.13-0ubuntu1, based on r255 (8bdd55e) 2013-03-11 Sebastien Bacher * stop build-depending on libindicate, it's deprecated and not used there. (5c18eb1) * stop build-depending on libindicate, it's deprecated and not used there (34d5196) 2013-02-15 Automatic PS uploader * Releasing 12.10.1daily13.02.15-0ubuntu1 to ubuntu. (d3d5390) * Releasing 12.10.1daily13.02.15-0ubuntu1, based on r253 (ef867f3) 2013-02-14 John Vert * in app_indicator_init(), finish initializing self's fields before calling g_bus_get(). Fixes: https://bugs.launchpad.net/bugs/1122596. (59c3e10) * in app_indicator_init(), finish initializing self's fields before calling g_bus_get(). (6e84cff) 2013-02-14 Iain Lane * Install typelib files into non Multi-Arch paths. Fixes: https://bugs.launchpad.net/bugs/1124941. (93b038e) * Install typelib files in standard (non MA) paths (0a83385) 2013-02-13 Automatic PS uploader * Releasing 12.10.1daily13.02.13-0ubuntu1 to ubuntu. (ede8d21) * Releasing 12.10.1daily13.02.13-0ubuntu1, based on r250 (454c84f) 2013-02-05 Mathieu Trudel-Lapierre * Bootstrap message. Fixes: https://bugs.launchpad.net/bugs/1065310. (89da4a1) 2013-02-04 Mathieu Trudel-Lapierre * Automatic snapshot from revision 245 (bootstrap): - Fix Vala classes not being able to inherit from Indicator (LP: #1065310) (5d60b84) * We don't need to kill at-spi2-registry, that was only meant for testing. (e0e8251) * We don't need to kill at-spi2-registry, that was only meant for testing. (b266f26) 2013-01-30 Charles Kerr * This is a continuation of ~mathieu-tl/libappindicator/fix-test-merge/ which adds fixes for bug #1102589, bug #1102595, bug #1109128, and bug #1103087, which should get it finally passing CI. Fixes: https://bugs.launchpad.net/bugs/1102589, https://bugs.launchpad.net/bugs/1102595, https://bugs.launchpad.net/bugs/1103087, https://bugs.launchpad.net/bugs/1109128. (bd333ad) 2013-01-29 Charles Kerr * fix potential overflow reported by Coverity (3e9b3f1) * fix copy-paste error when updating the attention accessible text (0793d59) * flush the dbus connection before exiting test-libappindicator-status-server (345b7af) * raise gtk+ minimum to 2.35.4 because we no longer use g_type_init() (82b3dc0) 2013-01-23 Mathieu Trudel-Lapierre * Increase dbus-test-runner timeout to 5 minutes to give tests enough time to start up and run on buildds, especially on slow architectures. (fc8b73e) * resolve conflicts on acinclude.m4 (1c9c770) 2013-01-21 Chris J Arges * This fixes python multi-arch include issues. (ee33a9a) 2013-01-17 Chris J Arges * acinclude.m4: Fix python multi-arch include issues. (962ea76) 2013-01-16 Mathieu Trudel-Lapierre * Remove deprecated calls to g_type_init() (6a86412) * Adjust timeouts and log handlers to not fail tests unnecessarily. (8958959) 2013-01-14 Michael Terry * increase another test timeout to make amd64 build (c5aca65) 2013-01-10 Michael Terry * some packaging fixes to make tests more resistant to timing issues and warnings from sub-libraries (616555a) 2013-01-08 Mathieu Trudel-Lapierre * More traces (b598e7c) 2012-12-18 Marco Trevisan (Treviño) * NotificationWatcher: remove XAyatanaRegisterNotificationApprover method (62ef4f4) 2012-12-11 Mathieu Trudel-Lapierre * Properly retrieve the path to python headers. (59a0f71) 2012-12-10 Mathieu Trudel-Lapierre * Remove entry about disabling tests for documentation: they're fixed. (8aad250) * Fix gtkdoc tests and building of the documentation given a separate build directory. (c8d15b0) 2012-12-07 Mathieu Trudel-Lapierre * Re-enable docs (0605654) 2012-12-06 Mathieu Trudel-Lapierre * Add reference to the bug we're waiting for a fix for; re: gtk-doc completeness, missing links and undocumented symbols (db9a00b) * Temporarily disable gtk-doc completeness tests until they can be fixed. (35683fe) 2012-12-05 Ted Gould * Adding a custom clean rule to the inline packaging. (3050e34) 2012-12-05 Mathieu Trudel-Lapierre * Inline packaging (9651f1d) 2012-12-04 Ted Gould * Trying to be more direct (d2f16cb) * Going with just dh_clean (3dceb09) * Making it so that clean doesn't have cli in it (63938c0) 2012-11-30 Mathieu Trudel-Lapierre * Properly disable tests for gtk2 and gtk3, not the gtk2 build. (a640bfe) * Temporarily disable GTK2 tests. (085a347) 2012-11-30 Charles Kerr * update our use of gtk-doc from 1.9 to 1.18. (effd665) 2012-11-27 Mathieu Trudel-Lapierre * More shuffling around of Build-Depends. (4f9fa5b) 2012-11-26 Mathieu Trudel-Lapierre * Add xvfb to Build-Depends. (568791d) * Override dh_auto_test to run tests per-flavor. (bab27b9) * Add a Pre-Depends on multiarch-support for libappindicator(3-)7. (97eb2fd) * Override dh_autoreconf to run autogen.sh and not call configure. (6a07efc) * Add and export DPKG_GENSYMBOLS_CHECK_LEVEL. (9dff094) * Update Vcs-Bzr, Vcs-Browser and add a notice to uploaders. (ee40944) * Drop old Conflicts, Replaces, Provides for old unsupported upgrade paths. (6ccd332) * debian/*.install: - Update paths for multiarch and for use with dh9 (remove debian/tmp...) (4664f1e) * debian/rules: - Convert from cdbs to debhelper 9. (1c8427d) * Drop Build-Depends on cdbs. (a091723) * debian/compat: bump to compat level 9. (d92dc38) * Bump Build-Depends on debhelper to (>= 9). (ca3d312) * Reorganize Build-Depends for clarity. (4e7dde6) * debian/control: - Update style: use trailing commas at the end of dependency lists. (501f677) * Tell bzr-builddeb to build the package in split mode. (f6833f0) * Import debian/ from lp:~ubuntu-desktop/libappindicator/ubuntu (51bae23) 2012-10-11 Lars Uebernickel * Merge lp:~robert-ancell/libappindicator/lp-1065310 (0807da7) 2012-10-11 Robert Ancell * Fix Vala classes not being able to inherit from Indicator (26b796b) 2012-07-11 Sebastien Bacher * releasing version 12.10.0-0ubuntu1 (09ddb17) * New upstream release. (63a49ad) * Import upstream version 12.10.0 (dfefc88) 2012-07-11 Charles Kerr * bump version to 12.10.0 (f2744fa) 2012-06-18 Charles Kerr * merge lp:~evgeni/libappindicator/optional-mono to make Mono binding generation optional. This way we don't FTB on architectures that don't support Mono. (ad488df) * merge bzr merge lp:~evgeni/libappindicator/multiarch-same-devheaders so that we don't include build-time filenames in comments of the enum header files. (2723b6c) 2012-06-10 Evgeni Golov * don't include build-time filenames in comments of the enum header files (96fc7f9) * make building mono extension optional, so we can build on archs that do not have mono (086dae1) 2012-05-23 Robert Ancell * releasing version 0.4.92-0ubuntu2 (f480157) (tag: 0.4.92-0ubuntu2) 2012-05-22 unknown * use autoreconf.mk instead of calling dh_autoreconf by hand (8d0330b) 2012-04-23 Charles Kerr * merge lp:~ted/libappindicator/app_name to try the application name as a fallback if the client doesn't explicitly set the title. (0bf6ada) 2012-04-16 Ted Gould * If we don't have a title set, use the application name to output the title (b894548) 2012-04-12 Charles Kerr * merge lp:~allanlesage/libappindicator/TDD to add gcov targets to our autotools build for code-coverage reporting. For more information, see this blog post: http://qualityhour.wordpress.com/2012/01/29/test-coverage-tutorial-for-cc-autotools-projects/ . (859a831) 2012-03-27 Allan LeSage * Added coverage tooling. (6f29399) 2012-03-21 Ken VanDine * releasing version 0.4.92-0ubuntu1 (27eb63c) * New upstream release. * Fix a Coverity PW.BRANCH_PAST_INITIALIZATION error (LP: #957471) * Fix FTB bug from ambiguity between Glib.Menu and Gtk.Menu in the Vala code; debian/control: Updating to valac-0.16 (f3df2e1) 2012-03-21 Charles Kerr * releasing version 0.4.92-0ubuntu1 (ea6700d) (tag: 0.4.92-0ubuntu1) * bump debian/control's valac dependency from 0.14 to 0.16 (61c3e01) * New upstream release. * Fix a Coverity PW.BRANCH_PAST_INITIALIZATION error (LP: #957471) * Fix FTB bug from ambiguity between Glib.Menu and Gtk.Menu in the Vala code (3aa2827) * Import upstream version 0.4.92 (812ded8) * Sync from Ubuntu Desktop (03fa072) * 0.4.92 (d4b572c) (tag: 0.4.92) * merge lp:~charlesk/libappindicator/fix-vala-examples to resolve ambiguity in the vala examples between glib.Menu and Gtk.Menu (a0f8c26) * The vala examples were written before GMenu, so add explict namespace use here to avoid valac errors caused by namespace ambiguity between glib and gtk (ie, use 'new Gtk.Menu' instead of 'new Menu') (13c8aef) 2012-03-19 Charles Kerr * merge lp:~charlesk/libappindicator/lp-957471 to fix a PW.BRANCH_PAST_INITIALIZATION error reported by Coverity in bug #957471 (84d8aae) 2012-03-16 Charles Kerr * remove oddly-scoped variable to fix a CID 10737 - PW.BRANCH_PAST_INITIALIZATION warning reported by Coverity in Bug #957471 (36f65c7) 2012-03-09 Sebastien Bacher * releasing version 0.4.91-0ubuntu3 (73331d6) (tag: 0.4.91-0ubuntu3) * debian/rules: build without make check until the builder environment issues are sorted (ac1487a) * releasing version 0.4.91-0ubuntu2 (25c5aef) (tag: 0.4.91-0ubuntu2) * debian/control: build-depends on dbus-test-runner (593ee90) * releasing version 0.4.91-0ubuntu1 (1ae63e0) (tag: 0.4.91-0ubuntu1) * debian/rules: - run make check during the build (55b03b4) * New upstream release. * Set name and title in fallback status item (LP: #885080) * Fix build in non-source dir cases (LP: #931764) * Use file names for icons in fallback mode (LP: #875770) * Add since declarations to documentation * Fix test suite to work with libindicator 0.4.93 * Fix the mono binding properties (223b045) 2012-03-09 Ted Gould * releasing version 0.4.91-0ubuntu1~ppa1 (b17679f) * New upstream release. * Set name and title in fallback status item (LP: #885080) * Fix build in non-source dir cases (LP: #931764) * Use file names for icons in fallback mode (LP: #875770) * Add since declarations to documentation * Fix test suite to work with libindicator 0.4.93 * Fix the mono binding properties (6a88fca) * Import upstream version 0.4.91 (b681b75) * Merge U. Desktop (e602f2a) * 0.4.91 (f95bf78) (tag: 0.4.91) * Update to new actions format in libindicator (244c436) * Include an index for 0.5 (ef62b53) 2012-03-07 Charles Kerr * Merge lp:~ted/libappindicator/lp885080 to add a title and name on the status icon in fallback mode for bug #885080 (328e55e) 2012-03-06 Ted Gould * Making the Mono and Python bindings build directory independent (b587402) 2012-03-06 Charles Kerr * generate app-indicator.sources.xml (for mono bindings) and appindicator.override (for python bindings) at configure time so that they can take into account top_builddir vs top_srcdir differences. (5ab2da4) 2012-03-06 Ted Gould * Look for files and don't use those as icon names in the fallback (8655832) * Removing unneeded NULL check (be2eef5) * Improve docs on title functions (bd4dbb3) 2012-03-02 Ted Gould * Attaching bug (f39aac0) * Rework the icon setting function so that it can handle images that are file paths by checking to see if the files exist (e2ec05d) * Protecting from NULL titles, which apparently status_icon can't take :-/ (fafea8a) * Handle the title changing at runtime (002c16b) * Attaching bug (556d749) * Sets the title of the status icon to the title of the appindicator and the name to the ID (63331bc) 2012-02-29 Sebastien Bacher * Set "Since: 0.5" in the inline documentation for the new set_title and get_title functions (72ddc78) 2012-02-07 Sebastien Bacher * releasing version 0.4.90-0ubuntu2 (fe1d218) (tag: 0.4.90-0ubuntu2) * debian/control: - don't make libappindicator3-dev depends on libappindicator-dev; debian/libappindicator3-dev.install: - install the gtk3 include directory (36ed779) 2012-02-06 Ken VanDine * releasing version 0.4.90-0ubuntu1 (d351a75) (tag: 0.4.90-0ubuntu1) * set to UNRELEASED (86b6eae) * New upstream release. * Fix include with Dbusmenu 0.5.90 * Fix GTK3 include paths in pkgconfig file (LP: #869373) * Add title property (LP: #923971) * Don't specify pyglib-2.0-python2.6 in LDFLAGS * fix fallback icon of the GtkStatusIcon (LP: #820080); debian/control: Dbusmneu Dep to 0.5.90; deibna/*symbols: Updated to add [set|get]_title functions (2c4628f) 2012-02-03 Ted Gould * releasing version 0.4.90-0ubuntu1~ppa1 (0ef39fd) * deibna/*symbols: Updated to add [set|get]_title functions (f149e80) * debian/control: Dbusmneu Dep to 0.5.90 (5ad59aa) * New upstream release. * Fix include with Dbusmenu 0.5.90 * Fix GTK3 include paths in pkgconfig file (LP: #869373) * Add title property (LP: #923971) * Don't specify pyglib-2.0-python2.6 in LDFLAGS * fix fallback icon of the GtkStatusIcon (LP: #820080) (57f1cab) * Import upstream version 0.4.90 (7256c18) * Sync with U. Desktop (6516e72) * Fixing some of the properties in the mono bindings (4ccb5d7) (tag: 0.4.90) * 0.4.90 (53fbf0d) * Updating to Dbusmenu 0.5.90 (879f9e9) 2012-01-31 Ted Gould * Changing dbusmenu-gtk required version (67380ab) 2012-01-30 Ted Gould * Add the ability to set and export the title of the app indicator (ea6c887) * Attaching bug (f6e9dcf) * Fix type in comment (f0e9928) 2012-01-28 Ted Gould * Adding the get/set function to the docs (8b21de2) * Handling getting the title property (982de61) * Making get_title work (97d2b40) * Only signal to dbus if we're connected (dcbd590) * Adding a test to track setting of the title (2d03f1d) * Setting the titles in the examples (84ba240) * Make the set function call the property set function (f12cf32) * Support the title property over dbus and emitting the dbus signal when it changes (3aa66a7) * Adding the 'Title' property and 'NewTitle' signal to the DBus interface description (e5b9bc3) * Adding the title property (3c1556c) * Adding a title entry to the private structure (fb65099) * Adding get/set title functions (a89fe2c) 2012-01-27 Ted Gould * Update to trunk (dea1a71) * Making tests optional (d006f9d) * Fixing pkgconfig file for GTK3 (d813c8a) * Removing unneeded python dep (9ea0166) 2012-01-26 Ken VanDine * Don't specify pyglib-2.0-python2.6 in LDFLAGS, it isn't needed and only works with python2.6 (ae5cbc9) 2012-01-25 Ken VanDine * releasing version 0.4.1-0ubuntu4 (996677f) (tag: 0.4.1-0ubuntu4) 2012-01-24 Ken VanDine * - Don't specify pyglib-2.0-python2.6 in LDFLAGS - dhr_autoreconf; debian/libappindicator1.symbols, debian/libappindicator3-1.symbols - added symbol. s/pyglib-2.0-python2.6/pyglib-2.0-python2.7/ for python bindings. (9055ae0) * rebuild for libindicator7; bindings/python/Makefile.am - Don't specify pyglib-2.0-python2.6 in LDFLAGS, it isn't needed and only works with python2.6; debian/rules - include autoreconf.mk; debian/control - added build dep on dh-autoreconf (0e4459f) * no change rebuild for libindicator7 (5452357) * Don't specify pyglib-2.0-python2.6 in LDFLAGS, it isn't needed and only works with python2.6 (95620c4) 2011-11-23 György Balló * Make building mono tests optional. Check for mono-nunit if nunit is not available (ce8b882) 2011-11-22 György Balló * Use the standard location for mono bindings (1798a73) * Do not link pyglib explicitly (c101b27) * Fix header files location for GTK3 (4777acb) * Make building tests optional (077275b) 2011-09-30 Michael Vogt * releasing version 0.4.1-0ubuntu2 (b1064de) (tag: 0.4.1-0ubuntu2) * src/app-indicator.c: - fix fallback icon of the GtkStatusIcon (LP: #820080), cherry pick of r221 from lp:libappindicator (e669e2d) 2011-09-30 Ted Gould * Work with fallbacks and theme paths (bc49dd8) 2011-09-30 Michael Vogt * src/app-indicator.c: hide first in passive mode and add comment about it (d1788f9) * src/app-indicator.c: do not add the same icon_theme_path again, gtk3 apparently does not check this (ff65f9f) * simplify (5819385) * src/app-indicator.c: honor icon_theme_path in the fallback (4aca6f6) * unbreak attention_icon (f476076) * src/app-indicator.c: when using the fallback icon, first check if there is a "-panel" version of the icon available and if not fallback to the indicator one (6ecd10f) 2011-09-28 Ken VanDine * releasing version 0.4.1-0ubuntu1 (ba84fd6) (tag: 0.4.1-0ubuntu1) * New upstream release (0.4.0). * Fix VAPI file for Vala bindings (LP: #789588); New upstream release (0.4.1). * Fix build. (641031f) 2011-09-28 Ted Gould * releasing version 0.4.1-0ubuntu1~ppa1 (c93b59d) * New upstream release (0.4.0).; New upstream release (0.4.1). * Fix build. (b620c7c) * Import upstream version 0.4.1 (334e44d) * 0.4.1 (a011977) (tag: 0.4.1) * Fix deps (1c49e53) * Fix dep as well (9a0a2e0) * Fix prefix on custom vala (a8cb786) * Switching out the prefix for a fixed name (3c21ff4) * New upstream release. * Fix VAPI file for Vala bindings (LP: #789588) (c6f5993) * Import upstream version 0.4.0 (e57397e) * Merge U. Desktop (b5c8bb4) * 0.4.0 (e527e64) (tag: 0.4.0) * Bring along custom and grab from srcdir (9826036) 2011-09-23 Ted Gould * Fixing Vala bindings (aa96c75) 2011-09-23 Michal Hruby * Fix type_check_function for vala bindings (c0b476c) 2011-08-11 Sebastien Bacher * releasing version 0.3.91-0ubuntu1 (2d4793a) (tag: 0.3.91-0ubuntu1) * debian/rules: - update the translations template after build, dh_translations doesn't work for builds out of the source directory (8c1f764) * New upstream release. * Secondary activate support * Better GIR file annotations (29515fe) 2011-08-11 Ted Gould * releasing version 0.3.91-0ubuntu1~ppa1 (7a5688c) * New upstream release. * Secondary activate support * Better GIR file annotations (6a05f53) * Import upstream version 0.3.91 (8c352cd) * Sync to U. Desktop (1a48342) * 0.3.91 (1bfe91a) (tag: 0.3.91) 2011-07-22 Ted Gould * Fix comments to work with g-ir-scanner (ba1f3a6) * Adding in support for the secondary activate (middle click) (5c4ee09) * Adding the secondary target functions to the documentation (f551fdb) * Watching for the 'XAyatanaSecondaryActivate' method as well (d59df9b) * Always clear the sec_activate_target (195a64f) 2011-07-20 Marco Trevisan (Treviño) * Fixed comments to correctly work with g-ir-scanner (940f4ac) * examples: use the set_secondary_activate_target API (beb4f16) * vala: updated example to use the new API (a3812f9) * mono bindings: updated API and example (6a52781) * app-indicator: Move from "secondary-activate" signal to secondary_activate target (8f71358) 2011-07-19 Marco Trevisan (Treviño) * Call the right signal on middle-click over the tray icon! (d54d1e7) 2011-07-18 Marco Trevisan (Treviño) * app-indicator: added middle click support for wrapper tray (a758223) * examples: add secondary-activate signal usage to Vala and C (383469d) * Vala bindings example: added secondary_activate (d24b2f2) * mono bindings: added SecondaryActivate support. (4574948) * Add signal "secondary-activate" and emit it when needed (0e4c805) 2011-07-09 Marco Trevisan (Treviño) * Merge with Upstream (4146455) 2011-07-08 Sebastien Bacher * releasing version 0.3.90-0ubuntu1 (90aa5af) (tag: 0.3.90-0ubuntu1) 2011-07-07 Ted Gould * releasing version 0.3.90-0ubuntu1~ppa1 (7b75269) * New upstream release. * Fix a memory leak (LP: #) * Port to libindicator 0.4 (e3d7177) * Import upstream version 0.3.90 (fc03ef7) * 0.3.90 (bf95161) (tag: 0.3.90) * Removing -Werror for the Vala compiler (15fccc9) * Free allocated name (7cff4ed) * Migrate to libindicator 0.4 (f20865c) 2011-07-05 Ted Gould * Sync to U. Desktop (6e9e154) 2011-07-05 Michael Terry * No change rebuild to depend on libdbusmenu-gtk4 (instead of -gtk3) LP: #803667 (8693295) (tag: 0.3.0-0ubuntu3) 2011-06-21 Colin Watson * releasing version 0.3.0-0ubuntu2 (c6d8437) (tag: 0.3.0-0ubuntu2) * Remove unused libmono-dev build-dependency (for Mono 2.10 transition). (cde0e9c) * Call dh_python2 from binary-fixup rather than binary-predeb, so that generated maintainer script snippets actually end up in the package. (967fd70) 2011-06-16 Ted Gould * Free name if we get it (ea77e8e) * Doc fix (4ffbe0b) * Autotools fixes (e5c3a1d) 2011-06-16 Javier Jardón * Trivial documentation fix (654b97f) 2011-06-15 Javier Jardón * configure.ac: Generate xz tarballs with pax format by default (b3466bd) * Update autotools configuration (7c0bf2d) 2011-03-23 Ken VanDine * releasing version 0.3.0-0ubuntu1 (b0772a8) (tag: 0.3.0-0ubuntu1) 2011-03-23 Ted Gould * releasing version 0.3.0-0ubuntu1~ppa1 (d536601) * New upstream release. * Don't use GIcon with GtkStatusIcon (LP: #708118) (2ad6b90) * Import upstream version 0.3.0 (010b25c) * Sync with U. Desktop (5b6331c) * 0.3.0 (0ed4513) (tag: 0.3.0) * Use icon-name instead of GIcon in the fallback GtkStatusIcon (8974a7f) * Set gtk_status_icon using icon_name instead of gicon (54b25e3) 2011-03-16 Ken VanDine * releasing version 0.2.99-0ubuntu1 (30a29c6) (tag: 0.2.99-0ubuntu1) 2011-03-16 Ted Gould * releasing version 0.2.99-0ubuntu1~ppa1 (0988693) * New upstream release. ∘ Fix long standing memory leak (LP: #569273) (8b323ea) * Import upstream version 0.2.99 (bf797a9) * Merge with U. Desktop (e1790a2) * 0.2.99 (f321aae) (tag: 0.2.99) 2011-03-14 Ted Gould * Doing a ref_sink() like we should have been doing! (dae2422) 2011-03-14 Michael Terry * sink ref to passed-in menu in set_menu() to avoid leaks (f2f415d) 2011-03-10 Ken VanDine * releasing version 0.2.98-0ubuntu1 (c50e0ff) (tag: 0.2.98-0ubuntu1) 2011-03-10 Ted Gould * releasing version 0.2.98-0ubuntu1~ppa1 (38951a7) * Merging with U. Desktop (4d82c5e) * New upstream release. ∘ Don't watch signals we don't need to. (LP: #728503) (d8f3bb3) * Import upstream version 0.2.98 (1f0b4c1) * 0.2.98 (0f9fc0f) (tag: 0.2.98) * Adding a TargetEnvironment to the desktop file (29f8630) 2011-03-09 Ted Gould * Don't watch signals we shouldn't need to. (d43f34b) 2011-03-08 Ted Gould * Attaching bug number (d679d3c) * Dropping the client_menu_changed function as dbusmenu should do this for us. (c156b45) 2011-03-03 Ken VanDine * releasing version 0.2.97-0ubuntu1 (007331a) (tag: 0.2.97-0ubuntu1) 2011-03-03 Ted Gould * releasing version 0.2.97-0ubuntu1~ppa1 (be0a541) * debian/patches: Removed, all upstream (3eb5a9d) * New upstream release. * Set includedir to the location of the headers provided by libappindicator-dev (LP: #721562) * Fix crash when importing appindicator from Python (LP: #724917). * Fix crash when switching themes by disconnecting a signal from the theme on dispose. LP: #708188 (15784db) * Import upstream version 0.2.97 (56d9374) * Merge from U. Desktop (70d5440) * 0.2.97 (4490e2e) (tag: 0.2.97) 2011-03-02 Ted Gould * Adding additional functions into Python bindings (4a277c7) * Fixing the pkgconfig file (b56c1fb) * Drop theme signal handler when shutting down. (d6e2549) 2011-02-28 Ken VanDine * releasing version 0.2.96-0ubuntu4 (fe59d57) (tag: 0.2.96-0ubuntu4) * Set the includedir for appindicator3-0.1 to ${includedir}/libappindicator-0.1 (6c5c047) 2011-02-28 Michael Terry * debian/patches/update-defs.patch: - Fix crash when importing appindicator from Python (LP: #724917). (8fd3730) (tag: 0.2.96-0ubuntu3) 2011-02-28 Артём Попов * Really add update-defs.patch (160c776) * debian/patches/update-defs.patch: - Fix crash when importing appindicator from Python (LP: #724917). (fdb740f) 2011-02-28 Michael Terry * debian/control, debian/rules: - Add quil. debian/patches/disconnect-from-theme.patch: - Fix crash when switching themes by disconnecting a signal from the theme on dispose. LP: #708188 (49874d3) (tag: 0.2.96-0ubuntu2) 2011-02-26 Артём Попов * Updated appindicator.defs (fixes LP: #724917) (8669272) 2011-02-25 Michael Terry * disconnect from icon theme on dispose (c591e81) 2011-02-24 Ken VanDine * releasing version 0.2.96-0ubuntu1 (5f97e91) (tag: 0.2.96-0ubuntu1) 2011-02-24 Ted Gould * releasing version 0.2.96-0ubuntu1~ppa1 (22fbdf6) * New upstream release. * Add support for accessible descriptions * Move deregistration of object later to send final signals (59d8e5d) * Import upstream version 0.2.96 (7a1564e) * Merging U. Desktop (dd6a451) * 0.2.96 (d634d56) (tag: 0.2.96) * Add the ability to set accessible descriptions for the icon and attention icon. (ce7b22d) 2011-02-23 Ted Gould * Cleaning up even more! (d21b676) * Switching to proper properties (eb2ba45) * Matching prototypes to C file (ccad277) * Fixing the sections list (13b9f33) * Dropping the accessible description tests. I don't have time to rewrite them now. They should be redone though. (f4470e6) * Switching to the new style of setting the a11y label (f4920ad) * Reconfigure properties to match. (e3ccf5f) * Fixing up the get functions (e5b4e41) * Fixing up the set functions so we get some descriptions. (7e03ead) * Switch around API so it makes sense for what we want to do. (4716fe0) * Dropping the new accessible description signal (021dd71) * Drop signaling the accessible description changed on it's own. (6335283) * Change the name of the accessible description and add the attention one. (5de3ea9) * Changing the signal to match what was discussed with the KDE folks (d63e2d0) 2011-02-23 unknown * Release libappindicator (3c0119b) 2011-02-22 unknown * debian/control: - Use new build-depends for libgtk-3-dev (8ee2307) 2011-02-17 Ken VanDine * releasing version 0.2.95-0ubuntu2 (eef1472) (tag: 0.2.95-0ubuntu2) 2011-02-16 Ted Gould * Remove registration of the object until after all possible signals are sent (abccdd7) 2011-02-14 Luke Yelavich * Merge from trunk (5824bcd) 2011-02-11 Michael Terry * don't unregister on dbus until after we hide appindicator (86d57d3) 2011-02-11 Ken VanDine * releasing version 0.2.95-0ubuntu1 (a83d65c) (tag: 0.2.95-0ubuntu1) * New upstream release (0.2.95); debian/rules - build and install the vapi for gtk3 (26b9521) 2011-02-10 Ted Gould * debian/rules: Not building libappindicator3-dev until we've got the GTK3 build all put together. (7695312) * debian/libappindicator-dev.install, debian/libappindicator3-dev.install: switching the file name of the vapi files. (d13c1f1) * New upstream release (0.2.95) ∘ Fixing build for GTK2/3 dual build (3d4fdfb) * Import upstream version 0.2.95 (596f48a) * 0.2.95 (1c384cd) (tag: 0.2.95) * Fix the build so we can distcheck with GTK 2 and 3 (4044f92) * Blocking the menu proxy from our test (4d24048) * Changing the build so that it uses the right version of the vala files and removes the predefined header location (889b2da) * Changing the install path of the headers for libappindicator GTK3 version so it's parrallel installable (61a686f) * Adjusting the name of the different namespace with GTK 3 (725a13e) * Ensure that we're building with the right library (2c30d69) * Cleanup what we create (b184209) * gtk-doc wants a deprecated section now (f5de6c3) * Removing the multiple modules as we shouldn't need them (3b78014) * Fixing scroll documentation (0c53b39) * Making sure to pick up both metadata files in dist. (99189aa) * New upstream release (0.2.93); New upstream release (0.2.94) ∘ Include vala example files as well (ac68d85) * Import upstream version 0.2.94 (2c23d4b) * 0.2.94 (e5b56ec) (tag: 0.2.94) * Make sure to pull the vala source file along with us. (cd7daed) * Syncing with upstream much better (acdd6c5) * Removing all the non packaging stuff (648cd92) * Getting closer to the tarball (4dfca04) * New upstream release. ∘ Fix Vala bindings ∘ Add support for scroll events (a9814d5) * Import upstream version 0.2.93 (18d8992) * Merge from U.Desktop (6def775) 2011-02-11 Luke Yelavich * Merge from trunk (b63c137) 2011-02-10 Ted Gould * 0.2.93 (23a4650) (tag: 0.2.93) * Ignoring new Vala stuff (409fc00) * Being more specific about the types of the signal (43c1ba2) * Fixing Vala bindings (2f8daac) * Ensuring we don't run the app as part of the test, just build it so this will work in automation. (e69e292) 2011-02-08 Ken VanDine * releasing version 0.2.92-0ubuntu2 (a9d343c) (tag: 0.2.92-0ubuntu2) * debian/control, debian/rules - Include new binaries for gtk3 builds; debian/libappindicator1.symbols, debian/libappindicator3-1.symbols - Added symbol files for libappindicator1 and libappdindicator3-1 (37a5403) * debian/libappindicator1.symbols, debian/libappindicator3-1.symbols (be01a9e) * Manually run dh_makeshlibs for libappindicator1 and libappindicator3-1 (b93c2b2) * fixup the clean target (ca3edb2) * more gtk3 build fixes (625332e) * gtk3 packaging fixes, still wip (d0ad1b8) * debian/control, debian/rules - Include new binaries for gtk3 builds - Added symbol files for libappindicator1 and libappdindicator3-1 (c790761) 2011-02-08 Luke Yelavich * accessible_name -> accessible_desc (fffab2e) 2011-02-05 Marco Trevisan (Treviño) * example makefile code cleanup (b4f20fe) * examples, vala: check for valac (d268d2b) 2011-02-04 Marco Trevisan (Treviño) * examples, added scroll-event demo. (d22edfa) * Merge against new trunk (675cec0) * Vala simple client, compile workaround improved. (1b85f7f) * simple-client-vala: indentation fixes (b9efa8f) * Examples, added simple-client-vala (89b31ab) 2011-02-04 Luke Yelavich * Merge from trunk (31519e7) * Add accessible_name support (b13fa49) 2011-02-04 Marco Trevisan (Treviño) * Always check if vapigen is available when building VAPI (32a1bf9) * Vala bindings: add metadata as build dependencies, support for gtk3 (6cc0ff8) * Include gir metadata file in built_sources (c58fd3f) 2011-02-03 Ted Gould * Merge from U.Desktop (df6a39d) * Merging in the upstream packaging branch (5851112) * Changing the build to be the check instead of running it as we might not be interactive. (692281a) 2011-02-03 Marco Trevisan (Treviño) * vala bindings makefile: just use deps file for dependencies (3f2a4ba) 2011-02-03 Ted Gould * Support the Scroll method for scroll whell support. (0faacd1) 2011-02-03 Marco Trevisan (Treviño) * Vala example, changed copyright year (2fea206) * Vala example: indentation fixes (99ffe88) * Vala example: adding copyright message. (bcbd870) * Adding vala bindings and example (7f49d7c) * Merge against new trunk (b5660e8) 2011-01-29 Marco Trevisan (Treviño) * Using the SNI method "Scroll" instead of XAyatanaScrollAction (0d97a5e) 2011-01-27 Ken VanDine * releasing version 0.2.92-0ubuntu1 (b7ad7ae) (tag: 0.2.92-0ubuntu1) * Import upstream version 0.2.92 (93d52e4) 2011-01-27 Ted Gould * releasing version 0.2.92-0ubuntu1~ppa1 (0ab2c93) * New upstream release. (9ba798d) * Import upstream version 0.2.92 (41981b1) * 0.2.92 (19c543f) (tag: 0.2.92) * Requiring a version of dbusmenu with a parser (3e812be) * releasing version 0.2.91.1-0ubuntu2~ppa1 (11add3f) * Upstream Merge * Fixes to build system to build with GTK3 * Use the dbusmenu parser (27ae7e2) * Sync to trunk (ceb50bd) * Switching to use the dbusmenu parser (a3548cc) 2011-01-27 Marco Trevisan (Treviño) * app-indicator: don't use two AppIndicator slots, reset one. (a71428d) * app-indicator: remove old debug code. (e18d298) * Updated mono bindings (eb8d8a3) * app-indicator: listen for XAyatanaScrollAction and emit "scroll-event" signal (52b2a29) 2011-01-25 Ted Gould * Fixups for GTK3 Build (30d75ca) * releasing version 0.2.91.1-0ubuntu2~ted1 (d0a0e2a) * Upstream Merge * Use the dbusmenu parser (625c881) * Updates from Ubuntu Desktop (83b9ba8) 2011-01-25 Ken VanDine * GTK3 fixes (c5195ae) * Fixed includedir, we don't ship separate headers for the gtk3 build (b7e634a) * Don't build python bindings for gtk3 (29ab06e) 2011-01-25 Ted Gould * Removing the parser that was here. (a8bbf19) * Rework the setup_dbusmenu function to use the dbusmenu parser. (331794c) 2011-01-13 Ken VanDine * releasing version 0.2.91.1-0ubuntu1 (62f943d) (tag: 0.2.91.1-0ubuntu1) * Import upstream version 0.2.91.1 (be00d00) * com.canonical rename (8cf0c2e) (tag: 0.2.91.1) 2011-01-13 Sebastien Bacher * releasing version 0.2.91-0ubuntu1 (db379ab) (tag: 0.2.91-0ubuntu1) 2011-01-13 Ken VanDine * Canonical.com conversion (cf693f9) 2011-01-13 Sebastien Bacher * Import upstream version 0.2.91 (79f9e4c) 2011-01-13 Ken VanDine * Merged (57fd55e) * merged; avoid nulls when crafting variants; use notdir in case make gives us full paths (0b26440) * Fix the pkgconfig name for dbusmenu-glib-0.4 (c2762f3) 2011-01-13 Michael Terry * aw shucks, do the required properties too, defensively (0e9f42a) * avoid nulls when crafting variants (05980b6) * use notdir in case make gives us full paths (b38d1d8) 2011-01-12 Ken VanDine * Fixed pkgconfig files to require dbusmenu-glib-0.4 (7c301f7) * Rebuild for libindicator2 (0092f8a) * Fix the pkgconfig name for dbusmenu-glib-0.4 (087e631) 2011-01-06 Ken VanDine * Merged changes from ~ubuntu-desktop package; Intial release. debian/rules - Changes to build targets to get it building multipass for python 2.6 and 2.7 (9d5b3b0) 2010-12-16 Ken VanDine * releasing version 0.2.90-0ubuntu4 (54c9e64) (tag: 0.2.90-0ubuntu4) 2010-12-10 Ken VanDine * releasing version 0.2.90+r175-0ubuntu1 (2437d4b) (tag: 0.2.90+r175-0ubuntu1) * debian/rules - Changes to build targets to get it building multipass for python 2.6 and 2.7 (29871df) 2010-12-09 Ken VanDine * releasing version 0.2.90-0ubuntu3 (6e9fee7) (tag: 0.2.90-0ubuntu3) 2010-12-08 Ted Gould * More lovin' from Ken. Moving the package order in the control file. (fdec9f2) 2010-12-08 Ken VanDine * move python-appindicator to the end (d4236cd) 2010-12-08 Ted Gould * Fix from Ken for the targets (5a1319d) 2010-12-08 Ken VanDine * fixed some targets for multipass builds (3fc08a0) 2010-12-08 Ted Gould * Intial release. (2706502) * Import upstream version 0.2.91 (67140a7) * Converting over to libappindicator with a dummy commit for merge upstream (86419fb) * 0.2.91 (6698a1a) (tag: 0.2.91) * Adding the dbus test as an expected failure as it's pretty fragile right now. Needs to be refactored when we switch to GDBus (a4e9c0e) * debian/control: Removing the indicator-application bin package. (2a0070a) * Autogen (f1ca6d3) * Upstream Merge * Removing service, lib only * Switching from dbus-glib to GDBus (36d0bc8) * Switching the library over to using GDBus (0d8a2c6) * Wrong directory for the GTK 3 header. Fixed. (5b8d8f9) * Merge from Ubuntu Desktop for dual builds (3acbfb5) 2010-12-08 Ken VanDine * debian/control - build depend on dbusmenu >= 0.3.90 (b917f6f) 2010-12-08 Ted Gould * Syncing back with trunk (0fee0e4) * Adding a test in the simple client for full icon path as people are using it now (6d73d54) * Merging the property stuff. (142f013) * Removing the service from the build (6e6356f) 2010-12-08 Ken VanDine * releasing version 0.2.90-0ubuntu2 (a227646) (tag: 0.2.90-0ubuntu2) 2010-12-08 Ted Gould * Ignoring the generated XML include files. (b35ed0d) * Changing the tarball we're ignoring (8c8512a) * Adding in some '_' so that the symbols don't get exported in the library. (41edd6b) * Switching around so that this test passes even if it's not perfect. (a977f31) * Drop the need and use of dbus-glib (2144d77) * Making sure we have more ref's on our callbacks. (7fae05b) * Adding a ref for creating the bus proxy. (52375e6) * Making sure to ref the object when doing the async callback. (b9d6690) * Adding a build for dbus-glib for tests so that we can pass them unmodified. (4a94c8c) * Dropping the 'MENU' property as we don't need it. (9530e69) * Cleaning up configure.ac (02fba60) 2010-12-08 Ken VanDine * releasing version 0.2.90-0ubuntu1 (1860f39) (tag: 0.2.90-0ubuntu1) * 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 * Switching to the new dbusmenu API (c7539b5) * 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-06 Ted Gould * Changing what we're checking with the watcher, now that it's persistant more of the time we need to not block if it exists. (05d072b) * Emitting the signals on DBus (4b46daa) * Returning real values for the dbus properties (985854c) * Killing the X signals as well (0d80d13) * Dropping all the 'x' properties in the object (a666e4b) * Putting some dummy code in the bus get property function. (1652577) * Switching the names of the generated files to stop automake from thinking it needs to build the XML files. (07aeca3) * Adding in the get_prop function so that things start linking (a92f870) * Switch from using the DBus proxy to using the owner change signal on the watcher proxy. (884367e) * Readjusting how the proxy is setup, called back, and the registration occurs. (6e078ce) * Blacklisting some new files (47a57eb) * Changing the connection to be a GDBus connection and making aquiring it async (6a4266b) * Switching the dbus object registration to us GDBus (c1f18c7) * Dropping the registration of the type of the object in the dbus-glib way (589bebb) * Building up the base inforation for the dbus interfaces as static globals (9287e20) * Entirely unsure why this makes things better, but well, it does. (f590403) * Changing to not use the dbus binding tool but to instead turn the XML files into pseudo-C (2209cb8) * No indicator directory without the service (d797092) * Dropping dbus-glib and checking for a GIO version (4d2b723) * Merging the remove service branch (0fc55bf) 2010-12-03 Ted Gould * Sync with remove service branch (240d1c9) * Sync with remove service (bbd727e) * Merging from trunk with the desktop convience function. (0f4c1ea) * Merging from trunk with the desktop convience function. (8bfcfe5) * Adding a convience function for building the items from a desktop file (fbf708e) * Merging in removing the service (5265f39) * Merging in removing of the service (2855f7d) * Merging in support for GTK3/2 dual build (5ffa185) * Updating to trunk with GTK3 support. (671666f) * Merging in changes to setup a dual build with GTK 3 (6145439) * Updating to trunk so that we get the GI fixes (b90242a) * Fixes to the GObject Introspection and Vala files (63f4725) 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 * Oops, someone has to bring dbus-shared.h into the tarball now (d2a48b2) * Migrating to the LIBRARY flags (03dbdec) * Dropping a lib that should have never been there! (185a2a9) * Changing more of the bulid directives over to be library based (dd21c70) * Removing the approver test and switching the build flags (f664f48) * Adding back in the support for generating marshallers (7123c74) * Dropping the service and indicator files (e1a62d3) * Removing the INDICATOR based compiler fun (1dc185e) * Adding a section for library dependents (34adf7b) * Removing data directory (e9a363f) * Changing the name to libappindicator in the base build files (2367242) * Promoting the LGPLv3 (f8e822f) 2010-11-11 Ted Gould * Documentation fixes for distcheck (c2e08e0) * Fleshing out a function to see if an invalid name results in no entries (aad1926) * Changing the ID to ensure we get different paths (ca62d8c) * Test fix for property test (fe00673) * Clearing the events before unrefing (178f821) * Filling out the activate function. (9bde70f) * Setup the menu as a dbusmenu if we build it (2d87c7a) * Switching to use the private variable for the shorties (5c687d9) * Adding shorties as a private variable (1d3ca65) * Switching to be dbusmenu based instead of GTK menu based (d089c38) * Adding a property for getting the dbusmenu server (5a29ece) * Set the property type correctly. (8b57d12) * Test setting the menu and verify it comes out (53d10c2) * Set and Get for the dbusmenu server property (00758f3) * Create a property for the dbusmenu server (1ec2b70) * Start to flesh out the nicks side of building the menu items (9f0ec1f) * Adding a dependency for the library on libindicator (8eb4f8e) 2010-11-09 Ted Gould * Add a menu item to use the local icon (40c2ed8) * Adding in an icon and passing it's path to the build (02e634b) 2010-11-08 Ted Gould * Merging in the lib-deps-fixes branch so that I can use those changes. (dd78c21) * Adding a test to check the number of items in the desktop file (52c7066) * Adding the srcdir to the build command line (2e1b353) * Adding a desktop file for testing (145fd40) * Adding in a couple of desktop tests (8d9b6e9) * Adding the profile in there (d2427bb) * Adding an API function to build the menu from a desktop file (de1ea7a) 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) (tag: 0.2.9-0ubuntu1) * 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) (tag: 0.2.8-0ubuntu1) 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) (tag: 0.2.7-0ubuntu1) 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) (tag: 0.2.6-0ubuntu1) 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) (tag: 0.2.5-0ubuntu1) 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) (tag: 0.2.4-0ubuntu1) 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) (tag: 0.2.3-0ubuntu2) 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) (tag: 0.2.3-0ubuntu1) 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) (tag: 0.2.2-0ubuntu1) 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) (tag: 0.2.1-0ubuntu1) 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) (tag: 0.2.0-0ubuntu2) 2010-06-07 Sebastien Bacher * releasing version 0.2.0-0ubuntu1 (0fb6915) (tag: 0.2.0-0ubuntu1) 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) (tag: 0.0.19-0ubuntu5) 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) (tag: 0.0.19-0ubuntu4) 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) (tag: 0.0.19-0ubuntu3) 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) (tag: 0.0.19-0ubuntu2) 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) (tag: 0.0.19-0ubuntu1) 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) libayatana-appindicator-glib-2.0.1/CMakeLists.txt0000664000000000000000000000323315023522653016641 0ustar cmake_minimum_required (VERSION 3.13) project (libayatana-appindicator-glib VERSION 2.0.1 LANGUAGES 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_WERROR "Treat all build warnings as errors" OFF) option (ENABLE_COVERAGE "Enable coverage reports (enables all tests and checks)" 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 () # Prerequisites include (GNUInstallDirs) find_package (PkgConfig REQUIRED) pkg_check_modules (DEPS REQUIRED gio-2.0 gobject-2.0) # Build add_subdirectory (src) add_subdirectory (bindings) add_subdirectory (doc) if (ENABLE_TESTS) include (CTest) enable_testing () add_subdirectory (tests) add_subdirectory (examples) if (ENABLE_COVERAGE) find_package (CoverageReport) ENABLE_COVERAGE_REPORT (TARGETS "ayatana-appindicator" TESTS "test-libappindicator" "test-libappindicator-dbus-client" "test-libappindicator-dbus-server" "test-libappindicator-status-client" "test-libappindicator-status-server" FILTER /usr/include ${CMAKE_BINARY_DIR}/*) endif () endif () # Info message (STATUS "Install prefix: ${CMAKE_INSTALL_PREFIX}") message (STATUS "Build with -Werror: ${ENABLE_WERROR}") message (STATUS "Unit tests: ${ENABLE_TESTS}") libayatana-appindicator-glib-2.0.1/COPYING0000775000000000000000000010451315023522653015142 0ustar GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . libayatana-appindicator-glib-2.0.1/doc/AyatanaAppIndicatorGlib-2.0.toml.in0000664000000000000000000000150515023522653023117 0ustar # SPDX-FileCopyrightText: 2024 Robert Tari # SPDX-License-Identifier: CC0-1.0 [library] description = "An object to put application information into the panel" authors = "Ayatana Indicators Development Team" license = "GPL-3.0-or-later" browse_url = "https://github.com/AyatanaIndicators/libayatana-appindicator-glib" repository_url = "https://github.com/AyatanaIndicators/libayatana-appindicator-glib.git" website_url = "https://ayatana-indicators.org" dependencies = ["GObject-2.0", "Gio-2.0"] version = "@PROJECT_VERSION@" [dependencies."GObject-2.0"] name = "GObject" description = "Base type system and object class" docs_url = "https://developer.gnome.org/gobject/stable" [dependencies."Gio-2.0"] name = "Gio" description = "High level library functionality" docs_url = "https://developer.gnome.org/gio/stable" libayatana-appindicator-glib-2.0.1/doc/CMakeLists.txt0000664000000000000000000000141615023522653017407 0ustar # libayatana-appindicator-docs.sgml configure_file ("${CMAKE_CURRENT_SOURCE_DIR}/AyatanaAppIndicatorGlib-2.0.toml.in" "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicatorGlib-2.0.toml" @ONLY) find_program (GI-DOCGEN gi-docgen) add_custom_command ( OUTPUT "gi-docgen" DEPENDS "src" WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMAND ${GI-DOCGEN} generate --quiet --config="AyatanaAppIndicatorGlib-2.0.toml" "${CMAKE_BINARY_DIR}/src/AyatanaAppIndicatorGlib-2.0.gir" ) set_source_files_properties ("gi-docgen" PROPERTIES SYMBOLIC True) install (DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicatorGlib-2.0" DESTINATION "${CMAKE_INSTALL_FULL_DATADIR}/doc/libayatana-appindicator-glib-dev") add_custom_target ("doc" ALL DEPENDS "gi-docgen") libayatana-appindicator-glib-2.0.1/examples/CMakeLists.txt0000664000000000000000000000316715023522653020465 0ustar # simple-client add_executable ("simple-client" "${CMAKE_CURRENT_SOURCE_DIR}/simple-client.c") target_compile_definitions ("simple-client" PUBLIC LOCAL_ICON="${CMAKE_CURRENT_SOURCE_DIR}/simple-client-test-icon.png") target_include_directories ("simple-client" PUBLIC ${DEPS_INCLUDE_DIRS}) target_include_directories ("simple-client" PUBLIC "${CMAKE_SOURCE_DIR}/src") target_link_libraries ("simple-client" ${DEPS_LIBRARIES} ayatana-appindicator-glib) add_dependencies ("simple-client" "ayatana-appindicator-glib") # simple-client-vala.c add_custom_command ( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/simple-client-vala.c" DEPENDS "bindings-vala" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ${VALA_COMPILER} --pkg ayatana-appindicator-glib --pkg gio-2.0 --vapidir=${CMAKE_BINARY_DIR}/bindings/vala -C simple-client-vala.vala --directory=${CMAKE_CURRENT_BINARY_DIR} VERBATIM COMMAND sed -i "s|#include\\s*<\\s*libayatana-appindicator-glib/ayatana-appindicator.h\\s*>||g" "${CMAKE_CURRENT_BINARY_DIR}/simple-client-vala.c" ) # simple-client-vala set_source_files_properties ("${CMAKE_CURRENT_BINARY_DIR}/simple-client-vala.c" PROPERTIES COMPILE_FLAGS " -include ${CMAKE_SOURCE_DIR}/src/ayatana-appindicator.h -Wno-unknown-warning-option -Wno-discarded-qualifiers") add_executable ("simple-client-vala" "${CMAKE_CURRENT_BINARY_DIR}/simple-client-vala.c") target_include_directories ("simple-client-vala" PUBLIC ${DEPS_INCLUDE_DIRS}) target_link_libraries ("simple-client-vala" ${DEPS_LIBRARIES} ayatana-appindicator-glib) add_dependencies ("simple-client-vala" "ayatana-appindicator-glib") libayatana-appindicator-glib-2.0.1/examples/simple-client.c0000664000000000000000000003006615023522653020634 0ustar /* * A small piece of sample code demonstrating a very simple application * with an indicator. * * Copyright 2009 Ted Gould * Copyright 2022-2024 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 . */ #include GMainLoop * m_pMainloop = NULL; guint m_nPercentage = 0; static gboolean m_bActive = TRUE; static gboolean m_bHasLabel = TRUE; typedef struct { AppIndicator *pIndicator; gpointer pData; } IndicatorData; static void addSubmenu (GMenu *pMenu, gboolean bEnabled); static void onLabelToggle (GSimpleAction *pAction, GVariant *pValue, gpointer pData) { m_bHasLabel = !m_bHasLabel; IndicatorData *pIndicatorData = (IndicatorData*) pData; gint nPosition = GPOINTER_TO_INT (pIndicatorData->pData); gchar *sLabel = NULL; if (m_bHasLabel) { sLabel = "Hide label"; } else { sLabel = "Show label"; } GMenu *pMenu = app_indicator_get_menu (pIndicatorData->pIndicator); g_menu_remove (pMenu, nPosition); GMenuItem *pItem = g_menu_item_new (sLabel, "indicator.showlabel"); g_menu_insert_item (pMenu, nPosition, pItem); g_object_unref (pItem); } static void onAttentionActivate (GSimpleAction *pAction, GVariant *pValue, gpointer pData) { IndicatorData *pIndicatorData = (IndicatorData*) pData; GMenu *pMenu = app_indicator_get_menu (pIndicatorData->pIndicator); gint nPosition = GPOINTER_TO_INT (pIndicatorData->pData); g_menu_remove (pMenu, nPosition); GMenuItem *pItem = NULL; if (m_bActive) { app_indicator_set_status (pIndicatorData->pIndicator, APP_INDICATOR_STATUS_ATTENTION); pItem = g_menu_item_new ("I'm okay now", "indicator.attention"); m_bActive = FALSE; } else { app_indicator_set_status (pIndicatorData->pIndicator, APP_INDICATOR_STATUS_ACTIVE); pItem = g_menu_item_new ("Get Attention", "indicator.attention"); m_bActive = TRUE; } g_menu_insert_item (pMenu, nPosition, pItem); g_object_unref (pItem); } static void onLocalIcon (GSimpleAction *pAction, GVariant *pValue, gpointer pData) { AppIndicator *pIndicator = APP_INDICATOR (pData); GSimpleActionGroup *pActions = app_indicator_get_actions (pIndicator); GAction *pCheckAction = g_action_map_lookup_action (G_ACTION_MAP (pActions), "check"); GVariant *pState = g_action_get_state (pCheckAction); gboolean bActive = g_variant_get_boolean (pState); if (bActive) { app_indicator_set_icon (pIndicator, LOCAL_ICON, "Local Icon"); } else { app_indicator_set_icon (pIndicator, "indicator-messages", "System Icon"); } } static void onItemActivate (GSimpleAction *pAction, GVariant *pValue, gpointer pData) { g_print ("%s clicked!\n", (const gchar*) pData); } static void onCheckActivate (GSimpleAction *pAction, GVariant *pValue, gpointer pData) { GVariant *pState = g_action_get_state (G_ACTION (pAction)); gboolean bActive = g_variant_get_boolean (pState); GVariant *pNewState = g_variant_new_boolean (!bActive); g_action_change_state (G_ACTION (pAction), pNewState); onItemActivate (NULL, NULL, pData); } static void onSensitivityActivate (GSimpleAction *pAction, GVariant *pValue, gpointer pData) { IndicatorData *pIndicatorData = (IndicatorData*) pData; GSimpleActionGroup *pActions = app_indicator_get_actions (pIndicatorData->pIndicator); GAction *pSensitivityAction = g_action_map_lookup_action (G_ACTION_MAP (pActions), pIndicatorData->pData); gboolean bEnabled = g_action_get_enabled (pSensitivityAction); g_object_set (G_OBJECT (pSensitivityAction), "enabled", !bEnabled, NULL); gboolean bSub = g_str_equal (pIndicatorData->pData, "sub"); if (bSub) { GMenu *pMenu = app_indicator_get_menu (pIndicatorData->pIndicator); g_menu_remove (pMenu, 2); addSubmenu (pMenu, !bEnabled); } } static void onImageActivate (GSimpleAction *pAction, GVariant *pValue, gpointer pData) { IndicatorData *pIndicatorData = (IndicatorData*) pData; GMenu *pMenu = app_indicator_get_menu (pIndicatorData->pIndicator); gint nPosition = GPOINTER_TO_INT (pIndicatorData->pData); g_menu_remove (pMenu, nPosition); GMenuItem *pItem = g_menu_item_new ("New", "indicator.setimage"); GIcon *pIcon = g_themed_icon_new_with_default_fallbacks ("document-open"); g_menu_item_set_icon (pItem, pIcon); g_object_unref (pIcon); g_menu_insert_item (pMenu, nPosition, pItem); g_object_unref (pItem); } static void onScroll (AppIndicator *pIndicator, gint nDelta, guint nDirection, gpointer pData) { g_print ("Got scroll event! delta: %d, direction: %d\n", nDelta, nDirection); } static gboolean onPercentChange (gpointer pData) { m_nPercentage = (m_nPercentage + 1) % 100; if (m_bHasLabel) { gchar *sPercentage = g_strdup_printf ("%d%%", m_nPercentage + 1); app_indicator_set_label (APP_INDICATOR (pData), sPercentage, "100%"); g_free (sPercentage); } else { app_indicator_set_label (APP_INDICATOR(pData), NULL, NULL); } return TRUE; } static void addSubmenu (GMenu *pMenu, gboolean bEnabled) { GMenuItem *pMenuItem = g_menu_item_new ("3", "indicator.sub"); if (bEnabled) { GMenu *pSubmenu = g_menu_new (); GMenuItem *pItem = g_menu_item_new ("Sub 1", "indicator.sub1"); g_menu_append_item (pSubmenu, pItem); g_object_unref (pItem); pItem = g_menu_item_new ("Sub 2", "indicator.sub2"); g_menu_append_item (pSubmenu, pItem); g_object_unref (pItem); pItem = g_menu_item_new ("Sub 3", "indicator.sub3"); g_menu_append_item (pSubmenu, pItem); g_object_unref (pItem); g_menu_item_set_submenu (pMenuItem, G_MENU_MODEL (pSubmenu)); g_object_unref (pSubmenu); } g_menu_insert_item (pMenu, 2, pMenuItem); g_object_unref (pMenuItem); } int main (int argc, char ** argv) { AppIndicator *pIndicator = app_indicator_new ("example-simple-client", "indicator-messages", APP_INDICATOR_CATEGORY_APPLICATION_STATUS); g_assert (APP_IS_INDICATOR (pIndicator)); g_assert (G_IS_OBJECT (pIndicator)); app_indicator_set_status (pIndicator, APP_INDICATOR_STATUS_ACTIVE); app_indicator_set_attention_icon (pIndicator, "indicator-messages-new", "System Messages Icon Highlighted"); app_indicator_set_label (pIndicator, "1%", "100%"); app_indicator_set_title (pIndicator, "Test Indicator (C)"); app_indicator_set_tooltip (pIndicator, "indicator-messages-new", "tooltip-title", "tooltip-description"); g_signal_connect (pIndicator, "scroll-event", G_CALLBACK (onScroll), NULL); g_timeout_add_seconds (1, onPercentChange, pIndicator); GMenu *pMenu = g_menu_new (); GSimpleActionGroup *pActions = g_simple_action_group_new (); GVariant *pCheck = g_variant_new_boolean (FALSE); GSimpleAction *pSimpleAction = g_simple_action_new_stateful ("check", NULL, pCheck); g_action_map_add_action (G_ACTION_MAP (pActions), G_ACTION (pSimpleAction)); g_signal_connect (pSimpleAction, "activate", G_CALLBACK (onCheckActivate), "1"); g_object_unref (pSimpleAction); GMenuItem *pItem = g_menu_item_new ("1", "indicator.check"); g_menu_append_item (pMenu, pItem); g_object_unref (pItem); GVariant *pRadio = g_variant_new_string ("2"); pSimpleAction = g_simple_action_new_stateful ("radio", G_VARIANT_TYPE_STRING, pRadio); g_action_map_add_action (G_ACTION_MAP (pActions), G_ACTION (pSimpleAction)); g_signal_connect (pSimpleAction, "activate", G_CALLBACK (onItemActivate), "2"); g_object_unref (pSimpleAction); pItem = g_menu_item_new ("2", "indicator.radio::2"); g_menu_append_item (pMenu, pItem); g_object_unref (pItem); pSimpleAction = g_simple_action_new ("sub", NULL); g_action_map_add_action (G_ACTION_MAP (pActions), G_ACTION (pSimpleAction)); g_object_unref (pSimpleAction); pSimpleAction = g_simple_action_new ("sub1", NULL); g_action_map_add_action (G_ACTION_MAP (pActions), G_ACTION (pSimpleAction)); g_signal_connect (pSimpleAction, "activate", G_CALLBACK (onItemActivate), "Sub 1"); g_object_unref (pSimpleAction); pSimpleAction = g_simple_action_new ("sub2", NULL); g_action_map_add_action (G_ACTION_MAP (pActions), G_ACTION (pSimpleAction)); IndicatorData cSub2Data = {pIndicator, "sub1"}; g_signal_connect (pSimpleAction, "activate", G_CALLBACK (onSensitivityActivate), &cSub2Data); g_object_unref (pSimpleAction); pSimpleAction = g_simple_action_new ("sub3", NULL); g_action_map_add_action (G_ACTION_MAP (pActions), G_ACTION (pSimpleAction)); g_signal_connect (pSimpleAction, "activate", G_CALLBACK (onItemActivate), "Sub 3"); g_object_unref (pSimpleAction); addSubmenu (pMenu, TRUE); pSimpleAction = g_simple_action_new ("sensitivity", NULL); g_action_map_add_action (G_ACTION_MAP (pActions), G_ACTION (pSimpleAction)); IndicatorData cSensitivityData = {pIndicator, "sub"}; g_signal_connect (pSimpleAction, "activate", G_CALLBACK (onSensitivityActivate), &cSensitivityData); g_object_unref (pSimpleAction); pItem = g_menu_item_new ("Toggle 3", "indicator.sensitivity"); g_menu_append_item (pMenu, pItem); g_object_unref (pItem); pSimpleAction = g_simple_action_new ("setimage", NULL); g_action_map_add_action (G_ACTION_MAP (pActions), G_ACTION (pSimpleAction)); IndicatorData cSetImageData = {pIndicator, GINT_TO_POINTER (4)}; g_signal_connect (pSimpleAction, "activate", G_CALLBACK (onImageActivate), &cSetImageData); g_object_unref (pSimpleAction); pItem = g_menu_item_new ("New", "indicator.setimage"); GIcon *pIcon = g_themed_icon_new_with_default_fallbacks ("document-new"); g_menu_item_set_icon (pItem, pIcon); g_object_unref (pIcon); g_menu_append_item (pMenu, pItem); g_object_unref (pItem); pSimpleAction = g_simple_action_new ("attention", NULL); g_action_map_add_action (G_ACTION_MAP (pActions), G_ACTION (pSimpleAction)); IndicatorData cAttentionData = {pIndicator, GINT_TO_POINTER (5)}; g_signal_connect (pSimpleAction, "activate", G_CALLBACK (onAttentionActivate), &cAttentionData); g_object_unref (pSimpleAction); pItem = g_menu_item_new ("Get Attention", "indicator.attention"); g_menu_append_item (pMenu, pItem); g_object_unref (pItem); app_indicator_set_secondary_activate_target (pIndicator, "attention"); pSimpleAction = g_simple_action_new ("showlabel", NULL); g_action_map_add_action (G_ACTION_MAP (pActions), G_ACTION (pSimpleAction)); IndicatorData cShowLabelData = {pIndicator, GINT_TO_POINTER (6)}; g_signal_connect (pSimpleAction, "activate", G_CALLBACK (onLabelToggle), &cShowLabelData); g_object_unref (pSimpleAction); pItem = g_menu_item_new ("Show label", "indicator.showlabel"); g_menu_append_item (pMenu, pItem); g_object_unref (pItem); pSimpleAction = g_simple_action_new ("setlocalicon", NULL); g_action_map_add_action (G_ACTION_MAP (pActions), G_ACTION (pSimpleAction)); g_signal_connect (pSimpleAction, "activate", G_CALLBACK (onLocalIcon), pIndicator); g_object_unref (pSimpleAction); pItem = g_menu_item_new ("Set Local Icon", "indicator.setlocalicon"); g_menu_append_item (pMenu, pItem); g_object_unref (pItem); app_indicator_set_menu (pIndicator, pMenu); g_object_unref (pMenu); app_indicator_set_actions (pIndicator, pActions); g_object_unref (pActions); onLabelToggle (NULL, NULL, &cShowLabelData); m_pMainloop = g_main_loop_new (NULL, FALSE); g_main_loop_run (m_pMainloop); return 0; } libayatana-appindicator-glib-2.0.1/examples/simple-client-python.py0000775000000000000000000002146015023522653022362 0ustar #!/usr/bin/env python3 # -*- coding: utf-8 -*- # # Copyright 2024-2025 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 . import gi gi.require_version('AyatanaAppIndicatorGlib', '2.0') from gi.repository import AyatanaAppIndicatorGlib from gi.repository import GLib, Gio import os import sys class SimpleClient: pIndicator = None nPercentage = 0 bActive = True bHasLabel = True pMainloop = None def __init__ (self): self.pIndicator = AyatanaAppIndicatorGlib.Indicator.new ("example-simple-client", "indicator-messages", AyatanaAppIndicatorGlib.IndicatorCategory.APPLICATION_STATUS) self.pIndicator.set_status (AyatanaAppIndicatorGlib.IndicatorStatus.ACTIVE) self.pIndicator.set_attention_icon ("indicator-messages-new", "System Messages Icon Highlighted") self.pIndicator.set_label ("1%", "100%"); self.pIndicator.set_title ("Test Indicator (Python)") self.pIndicator.set_tooltip ("indicator-messages-new", "tooltip-title", "tooltip-description") self.pIndicator.connect ("scroll-event", self.onScroll) GLib.timeout_add_seconds (1, self.onPercentChange, None) pMenu = Gio.Menu.new () pActions = Gio.SimpleActionGroup.new () pCheck = GLib.Variant.new_boolean (False) pSimpleAction = Gio.SimpleAction.new_stateful ("check", None, pCheck) pActions.add_action (pSimpleAction) pSimpleAction.connect ("activate", self.onCheckActivate, "1") pItem = Gio.MenuItem.new ("1", "indicator.check") pMenu.append_item (pItem) pRadio = GLib.Variant.new_string ("2") pType = GLib.VariantType.new ("s") pSimpleAction = Gio.SimpleAction.new_stateful ("radio", pType, pRadio) pActions.add_action (pSimpleAction) pSimpleAction.connect ("activate", self.onItemActivate, "2") pItem = Gio.MenuItem.new ("2", "indicator.radio::2") pMenu.append_item (pItem) pSimpleAction = Gio.SimpleAction.new ("sub", None) pActions.add_action (pSimpleAction) pSimpleAction = Gio.SimpleAction.new ("sub1", None) pActions.add_action (pSimpleAction) pSimpleAction.connect ("activate", self.onItemActivate, "Sub 1") pSimpleAction = Gio.SimpleAction.new ("sub2", None) pActions.add_action (pSimpleAction) pSimpleAction.connect ("activate", self.onSensitivityActivate, "sub1") pSimpleAction = Gio.SimpleAction.new ("sub3", None) pActions.add_action (pSimpleAction) pSimpleAction.connect ("activate", self.onItemActivate, "Sub 3") self.addSubmenu (pMenu, True) pSimpleAction = Gio.SimpleAction.new ("sensitivity", None) pActions.add_action (pSimpleAction) pSimpleAction.connect ("activate", self.onSensitivityActivate, "sub") pItem = Gio.MenuItem.new ("Toggle 3", "indicator.sensitivity") pMenu.append_item (pItem) pSimpleAction = Gio.SimpleAction.new ("setimage", None) pActions.add_action (pSimpleAction) pSimpleAction.connect ("activate", self.onImageActivate, 4) pItem = Gio.MenuItem.new ("New", "indicator.setimage") pIcon = Gio.ThemedIcon.new_with_default_fallbacks ("document-new") pItem.set_icon (pIcon) pMenu.append_item (pItem) pSimpleAction = Gio.SimpleAction.new ("attention", None) pActions.add_action (pSimpleAction) pSimpleAction.connect ("activate", self.onAttentionActivate, 5) pItem = Gio.MenuItem.new ("Get Attention", "indicator.attention") pMenu.append_item (pItem) self.pIndicator.set_secondary_activate_target ("attention") pSimpleAction = Gio.SimpleAction.new ("showlabel", None) pActions.add_action (pSimpleAction) pSimpleAction.connect ("activate", self.onLabelToggle, 6) pItem = Gio.MenuItem.new ("Show label", "indicator.showlabel") pMenu.append_item (pItem) pSimpleAction = Gio.SimpleAction.new ("setlocalicon", None) pActions.add_action (pSimpleAction) pSimpleAction.connect ("activate", self.onLocalIcon, None) pItem = Gio.MenuItem.new ("Set Local Icon", "indicator.setlocalicon") pMenu.append_item (pItem) self.pIndicator.set_menu (pMenu) self.pIndicator.set_actions (pActions) self.onLabelToggle (None, None, 6) self.pMainloop = GLib.MainLoop.new (None, False) try: self.pMainloop.run () except KeyboardInterrupt: sys.exit (0) def onLabelToggle (self, pAction, pValue, nPosition): self.bHasLabel = not self.bHasLabel sLabel = None if self.bHasLabel: sLabel = "Hide label" else: sLabel = "Show label" pMenu = self.pIndicator.get_menu () pMenu.remove (nPosition) pItem = Gio.MenuItem.new (sLabel, "indicator.showlabel") pMenu.insert_item (nPosition, pItem) def onAttentionActivate (self, pAction, pValue, nPosition): pMenu = self.pIndicator.get_menu () pMenu.remove (nPosition) pItem = None if self.bActive: self.pIndicator.set_status (AyatanaAppIndicatorGlib.IndicatorStatus.ATTENTION) pItem = Gio.MenuItem.new ("I'm okay now", "indicator.attention") self.bActive = False else: self.pIndicator.set_status (AyatanaAppIndicatorGlib.IndicatorStatus.ACTIVE) pItem = Gio.MenuItem.new ("Get Attention", "indicator.attention") self.bActive = True pMenu.insert_item (nPosition, pItem) def onLocalIcon (self, pAction, pValue, pData): pActions = self.pIndicator.get_actions () pCheckAction = pActions.lookup_action ("check") pState = pCheckAction.get_state () bActive = pState.get_boolean () if bActive: sRealPath = os.path.realpath (__file__) sDirname = os.path.dirname (sRealPath) sIconPath = os.path.join (sDirname, "simple-client-test-icon.png") self.pIndicator.set_icon (sIconPath, "Local Icon") else: self.pIndicator.set_icon ("indicator-messages", "System Icon") def onItemActivate (self, pAction, pValue, sName): print (f"{sName} clicked!") def onCheckActivate (self, pAction, pValue, sName): pState = pAction.get_state () bActive = pState.get_boolean () pNewState = GLib.Variant.new_boolean (not bActive) pAction.change_state (pNewState) self.onItemActivate (None, None, sName) def onSensitivityActivate (self, pAction, pValue, sAction): pActions = self.pIndicator.get_actions () pSensitivityAction = pActions.lookup_action (sAction) bEnabled = pSensitivityAction.get_enabled () pSensitivityAction.props.enabled = not bEnabled if sAction == "sub": pMenu = self.pIndicator.get_menu () pMenu.remove (2) self.addSubmenu (pMenu, not bEnabled) def onImageActivate (self, pAction, pValue, nPosition): pMenu = self.pIndicator.get_menu () pMenu.remove (nPosition) pItem = Gio.MenuItem.new ("New", "indicator.setimage") pIcon = Gio.ThemedIcon.new_with_default_fallbacks ("document-open") pItem.set_icon (pIcon) pMenu.insert_item (nPosition, pItem) def onScroll (self, pIndicator, nDelta, nDirection): print (f"Got scroll event! delta: {nDelta}, direction: {nDirection}") def onPercentChange (self, pData): self.nPercentage = (self.nPercentage + 1) % 100 if self.bHasLabel: self.pIndicator.set_label (f"{self.nPercentage}%", "100%") else: self.pIndicator.set_label ("", "") return True def addSubmenu (self, pMenu, bEnabled): pMenuItem = Gio.MenuItem.new ("3", "indicator.sub") if bEnabled: pSubmenu = Gio.Menu.new () pItem = Gio.MenuItem.new ("Sub 1", "indicator.sub1") pSubmenu.append_item (pItem) pItem = Gio.MenuItem.new ("Sub 2", "indicator.sub2") pSubmenu.append_item (pItem) pItem = Gio.MenuItem.new ("Sub 3", "indicator.sub3") pSubmenu.append_item (pItem) pMenuItem.set_submenu (pSubmenu) pMenu.insert_item (2, pMenuItem) if __name__ == "__main__": SimpleClient () libayatana-appindicator-glib-2.0.1/examples/simple-client-test-icon.png0000664000000000000000000000635615023522653023106 0ustar PNG  IHDR$$nbsRGB pHYs  tIME ,IOztEXtCommentCreated with GIMPW [IDATHuWY\Y>ݪn^ܫێ1 8b|_'.w/>*bH(c7~s !DA! omx3zB0Q䦦'3)"-JBHIW!AEÊѢD5ѳ )RJ `5 +ZܩrBQrpO=u}rsc7X0üVGi C"L#tbaga}˲  ϗB-W>p JoCPWBa hx&z, zA~v~꩟S!h4:q*2>QY(X "c'>oQș\Plg1| gN[ZZ4탭ǵ MOOXQT*p`jQ7=t:Bb !~ ݮJz>;7c&t-B0E;w6\QH$1.JZ1R|A.3Msaa!L:)뺍Fc0LLLPJ޽j25w/pܨ}669=MbhfLNwjQef6@;p]vE)MӃݻL4MuvVqױ'ڇˑI-x.D)}W*۷oW j-RM w:rk] *c]qNC.tA;pz!´Zr|pp0L"H%5u-dX\YYRf~# U[:BnY f #T4MӔ҃K.;(3 HqLZ% bP(?́zxC΄᱙ CwMMM (sk5h*d4f C<|<7 瞻p7okj`D`A TCqUe0b ru\ce6&PIL5B1ڽF>ąx<>H11_r} H E .UH)DBG?iMv8f]o>lfzfjr]7J-,,՟}Kz!\  q5Jŋ(j]-0–ɮ݌΋1,a.~^ӉFT*Hǎ] `R C J-FCCι#l۶(ҡ3ƄryeYBT*H$!eD"u1TaZ0$AwBd(cRNghօBa{{󼹹e4GFF\t:/_j(Pt̙p!U1<6vS3:BP(< Q(J&!rvbSN<MGUQq6{l( uaΩl6+LVU,٬iV*n+h4t:ɔJl6dDZpQH"ݤIU1Q"aW&T7M&j5s766ݮt:B)RA)W^aiO>˯آ.L؍@C_=!*3r\6-ˎ$c.D"D"a6TuB뺜shB @p BsI5844::cH,*vXEuCk6Mܹs ͈2٣W1EdztgXBث_;{0Rd2 !?߾/..D"vuuU(N.uTÜMAdIENDB`libayatana-appindicator-glib-2.0.1/examples/simple-client-vala.vala0000664000000000000000000002306215023522653022254 0ustar /* * Copyright 2011 Marco Trevisan * Copyright 2022-2024 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 . */ private int main (string[] args) { SimpleClient pClient = new SimpleClient (args); pClient.run (); return 0; } class SimpleClient { AppIndicator.Indicator pIndicator = null; int nPercentage = 0; bool bActive = true; bool bHasLabel = true; GLib.MainLoop pMainloop = null; public SimpleClient (string[] args) { this.pIndicator = new AppIndicator.Indicator ("example-simple-client", "indicator-messages", AppIndicator.IndicatorCategory.APPLICATION_STATUS); this.pIndicator.set_status (AppIndicator.IndicatorStatus.ACTIVE); this.pIndicator.set_attention_icon ("indicator-messages-new", "System Messages Icon Highlighted"); this.pIndicator.set_label ("1%", "100%"); this.pIndicator.set_title ("Test Indicator (Vala)"); this.pIndicator.set_tooltip ("indicator-messages-new", "tooltip-title", "tooltip-description"); } private void onLabelToggle (int nPosition) { this.bHasLabel = !this.bHasLabel; string sLabel = null; if (this.bHasLabel) { sLabel = "Hide label"; } else { sLabel = "Show label"; } GLib.Menu pMenu = this.pIndicator.get_menu (); pMenu.remove (nPosition); GLib.MenuItem pItem = new GLib.MenuItem (sLabel, "indicator.showlabel"); pMenu.insert_item (nPosition, pItem); } private void onAttentionActivate (int nPosition) { GLib.Menu pMenu = this.pIndicator.get_menu (); pMenu.remove (nPosition); GLib.MenuItem pItem = null; if (this.bActive) { this.pIndicator.set_status (AppIndicator.IndicatorStatus.ATTENTION); pItem = new GLib.MenuItem ("I'm okay now", "indicator.attention"); this.bActive = false; } else { this.pIndicator.set_status (AppIndicator.IndicatorStatus.ACTIVE); pItem = new GLib.MenuItem ("Get Attention", "indicator.attention"); this.bActive = true; } pMenu.insert_item (nPosition, pItem); } private void onLocalIcon (GLib.SimpleAction pAction, GLib.Variant? pValue) { GLib.SimpleActionGroup pActions = this.pIndicator.get_actions (); GLib.Action pCheckAction = pActions.lookup_action ("check"); GLib.Variant pState = pCheckAction.get_state (); bool bActive = pState.get_boolean (); if (bActive) { this.pIndicator.set_icon ("simple-client-test-icon.png", "Local Icon"); } else { this.pIndicator.set_icon ("indicator-messages", "System Icon"); } } private void onItemActivate (string sName) { GLib.print ("%s clicked!\n", sName); } private void onCheckActivate (string sAction, string sName) { GLib.SimpleActionGroup pActions = this.pIndicator.get_actions (); GLib.Action pAction = pActions.lookup_action ("check"); GLib.Variant pState = pAction.get_state (); bool bActive = pState.get_boolean (); GLib.Variant pNewState = new GLib.Variant.boolean (!bActive); pAction.change_state (pNewState); this.onItemActivate (sName); } private void onSensitivityActivate (string sAction) { GLib.SimpleActionGroup pActions = this.pIndicator.get_actions (); GLib.Action pSensitivityAction = pActions.lookup_action (sAction); bool bEnabled = pSensitivityAction.get_enabled (); pSensitivityAction.set ("enabled", !bEnabled); if (sAction == "sub") { GLib.Menu pMenu = this.pIndicator.get_menu (); pMenu.remove (2); this.addSubmenu (pMenu, !bEnabled); } } private void onImageActivate (int nPosition) { GLib.Menu pMenu = this.pIndicator.get_menu (); pMenu.remove (nPosition); GLib.MenuItem pItem = new GLib.MenuItem ("New", "indicator.setimage"); GLib.Icon pIcon = new GLib.ThemedIcon.with_default_fallbacks ("document-open"); pItem.set_icon (pIcon); pMenu.insert_item (nPosition, pItem); } private void onScroll (AppIndicator.Indicator pIndicator, int nDelta, uint nDirection) { GLib.print ("Got scroll event! delta: %d, direction: %u\n", nDelta, nDirection); } private bool onPercentChange () { this.nPercentage = (this.nPercentage + 1) % 100; if (this.bHasLabel) { this.pIndicator.set_label (@"$(this.nPercentage+1)%", "100%"); } else { this.pIndicator.set_label ("", ""); } return true; } private void addSubmenu (GLib.Menu pMenu, bool bEnabled) { GLib.MenuItem pMenuItem = new GLib.MenuItem ("3", "indicator.sub"); if (bEnabled) { GLib.Menu pSubmenu = new GLib.Menu (); GLib.MenuItem pItem = new GLib.MenuItem ("Sub 1", "indicator.sub1"); pSubmenu.append_item (pItem); pItem = new GLib.MenuItem ("Sub 2", "indicator.sub2"); pSubmenu.append_item (pItem); pItem = new GLib.MenuItem ("Sub 3", "indicator.sub3"); pSubmenu.append_item (pItem); pMenuItem.set_submenu (pSubmenu); } pMenu.insert_item (2, pMenuItem); } public void run() { this.pIndicator.scroll_event.connect (this.onScroll); GLib.Timeout.add_seconds (1, this.onPercentChange); GLib.Menu pMenu = new GLib.Menu (); GLib.SimpleActionGroup pActions = new GLib.SimpleActionGroup (); GLib.Variant pCheck = new GLib.Variant.boolean (false); GLib.SimpleAction pSimpleAction = new GLib.SimpleAction.stateful ("check", null, pCheck); pActions.add_action (pSimpleAction); pSimpleAction.activate.connect ((pValue) => this.onCheckActivate ("check", "1")); GLib.MenuItem pItem = new GLib.MenuItem ("1", "indicator.check"); pMenu.append_item (pItem); GLib.Variant pRadio = new GLib.Variant.string ("2"); pSimpleAction = new GLib.SimpleAction.stateful ("radio", GLib.VariantType.STRING, pRadio); pActions.add_action (pSimpleAction); pSimpleAction.activate.connect ((pValue) => this.onItemActivate ("2")); pItem = new GLib.MenuItem ("2", "indicator.radio::2"); pMenu.append_item (pItem); pSimpleAction = new GLib.SimpleAction ("sub", null); pActions.add_action (pSimpleAction); pSimpleAction = new GLib.SimpleAction ("sub1", null); pActions.add_action (pSimpleAction); pSimpleAction.activate.connect ((pValue) => this.onItemActivate ("Sub 1")); pSimpleAction = new GLib.SimpleAction ("sub2", null); pActions.add_action (pSimpleAction); pSimpleAction.activate.connect ((pValue) => this.onSensitivityActivate ("sub1")); pSimpleAction = new GLib.SimpleAction ("sub3", null); pActions.add_action (pSimpleAction); pSimpleAction.activate.connect ((pValue) => this.onItemActivate ("Sub 3")); this.addSubmenu (pMenu, true); pSimpleAction = new GLib.SimpleAction ("sensitivity", null); pActions.add_action (pSimpleAction); pSimpleAction.activate.connect ((pValue) => this.onSensitivityActivate ("sub")); pItem = new GLib.MenuItem ("Toggle 3", "indicator.sensitivity"); pMenu.append_item (pItem); pSimpleAction = new GLib.SimpleAction ("setimage", null); pActions.add_action (pSimpleAction); pSimpleAction.activate.connect ((pValue) => this.onImageActivate (4)); pItem = new GLib.MenuItem ("New", "indicator.setimage"); GLib.Icon pIcon = new GLib.ThemedIcon.with_default_fallbacks ("document-new"); pItem.set_icon (pIcon); pMenu.append_item (pItem); pSimpleAction = new GLib.SimpleAction ("attention", null); pActions.add_action (pSimpleAction); pSimpleAction.activate.connect ((pValue) => this.onAttentionActivate (5)); pItem = new GLib.MenuItem ("Get Attention", "indicator.attention"); pMenu.append_item (pItem); this.pIndicator.set_secondary_activate_target ("attention"); pSimpleAction = new GLib.SimpleAction ("showlabel", null); pActions.add_action (pSimpleAction); pSimpleAction.activate.connect ((pValue) => this.onLabelToggle (6)); pItem = new GLib.MenuItem ("Show label", "indicator.showlabel"); pMenu.append_item (pItem); pSimpleAction = new GLib.SimpleAction ("setlocalicon", null); pActions.add_action (pSimpleAction); pSimpleAction.activate.connect (this.onLocalIcon); pItem = new GLib.MenuItem ("Set Local Icon", "indicator.setlocalicon"); pMenu.append_item (pItem); this.pIndicator.set_menu (pMenu); this.pIndicator.set_actions (pActions); this.onLabelToggle (6); this.pMainloop = new GLib.MainLoop (null, false); this.pMainloop.run (); } } libayatana-appindicator-glib-2.0.1/INSTALL.md0000664000000000000000000000150615023522653015532 0ustar # Build and installation instructions ## Build dependencies - cmake - cmake-extras - glib2 - glib2-devel - gobject-introspection - vala - gi-docgen - dbus-test-runner - **For testing** - xorg-server-xvfb - **For testing** - gcovr - **For coverage** - lcov - **For coverage** **The install prefix defaults to `/usr`, change it with `-DCMAKE_INSTALL_PREFIX=/some/path`** ## For end-users and packagers ``` cd libayatana-appindicator-glib mkdir build cd build cmake .. make sudo make install ``` ## For testers - tests only ``` cd libayatana-appindicator-glib mkdir build cd build cmake .. -DENABLE_WERROR=ON -DENABLE_TESTS=ON make make test ``` ## For testers - both tests and code coverage ``` cd libayatana-appindicator-glib mkdir build cd build cmake .. -DENABLE_WERROR=ON -DENABLE_COVERAGE=ON make make coverage ``` libayatana-appindicator-glib-2.0.1/NEWS0000664000000000000000000000047115023522653014601 0ustar Overview of changes in libayatana-appindicator-glib 2.0.1 - Generate C code for D-Bus XML definitions. Overview of changes in libayatana-appindicator-glib 2.0.0 - Initial release of libayatana-appindicator-glib, a full rewrite from the ground up of libayatana-appindicator using Gio menus and actions. libayatana-appindicator-glib-2.0.1/README.md0000664000000000000000000000433315023522653015362 0ustar # Ayatana Application Indicator (Shared Library) [![Build Status](https://api.travis-ci.com/AyatanaIndicators/libayatana-appindicator.svg)](https://travis-ci.com/github/AyatanaIndicators/libayatana-appindicator) ## 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 ## The Ayatana Application Indicator (Shared Library) A library to allow applications to export a menu into an Application Indicators aware menu bar. Although based on SNI, this new GLib-only reimplementation uses Gio menus and actions (exported to org.gtk.Menus and org.gtk.Actions) instead of the old dbusmenu (formerly exported to com.canonical.dbusmenu). This code project was originally started by Canonical Ltd. and has been adapted by various authors with the purpose of making this Application Indicators available on Ubuntu and non-Ubuntu systems alike. ## Licence 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. libayatana-appindicator-glib-2.0.1/src/application-service-marshal.list0000664000000000000000000000140215023522653023147 0ustar # Marshaller definitions to be generated. # Copyright 2009 Ted Gould # Copyright 2024 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, STRING VOID: INT, UINT libayatana-appindicator-glib-2.0.1/src/ayatana-appindicator.c0000664000000000000000000022543415023522653021136 0ustar /* * Copyright 2009 Cody Russell * Copyright 2009-2010 Ted Gould * Copyright 2022-2024 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 . */ #define _GNU_SOURCE #include "ayatana-appindicator.h" #include "ayatana-appindicator-enum-types.h" #include "application-service-marshal.h" #include "dbus-shared.h" #include "notification-watcher.xml.h" #include "notification-item.xml.h" enum { NEW_ICON, NEW_ATTENTION_ICON, NEW_STATUS, NEW_LABEL, NEW_TOOLTIP, CONNECTION_CHANGED, NEW_ICON_THEME_PATH, SCROLL_EVENT, LAST_SIGNAL }; enum { PROP_0, PROP_ID, PROP_CATEGORY, PROP_STATUS, PROP_ICON_NAME, PROP_ICON_DESC, PROP_ATTENTION_ICON_NAME, PROP_ATTENTION_ICON_DESC, PROP_ICON_THEME_PATH, PROP_CONNECTED, PROP_LABEL, PROP_LABEL_GUIDE, PROP_ORDERING_INDEX, PROP_TITLE, PROP_MENU, PROP_ACTIONS, PROP_TOOLTIP_ICON, PROP_TOOLTIP_TITLE, PROP_TOOLTIP_DESCRIPTION }; static guint signals[LAST_SIGNAL] = {0}; static GDBusNodeInfo *m_pItemNodeInfo = NULL; static GDBusInterfaceInfo *m_pItemInterfaceInfo = NULL; static GDBusNodeInfo *m_pWatcherNodeInfo = NULL; static GDBusInterfaceInfo *m_pWatcherInterfaceInfo = NULL; typedef struct _AppIndicatorPrivate { gchar *sId; gchar *sCleanId; AppIndicatorCategory nCategory; AppIndicatorStatus nStatus; gchar *sIconName; gchar *sAbsoluteIconName; gchar *sAttentionIconName; gchar *sAbsoluteAttentionIconName; gchar *sIconThemePath; gchar *sAbsoluteIconThemePath; gchar *sSecActivateTarget; guint32 nOrderingIndex; gchar *sTitle; gchar *sLabel; gchar *sLabelGuide; gchar *sAccessibleDesc; gchar *sAttAccessibleDesc; guint nLabelChangeIdle; GMenu *pMenu; GSimpleActionGroup *pActions; guint nActionsId; guint nMenuId; GDBusConnection *pConnection; guint nDbusRegistration; gchar *sPath; GDBusProxy *pWatcherProxy; guint nWatcherId; gchar *sTooltipIcon; gchar *sTooltipTitle; gchar *sTooltipDescription; } AppIndicatorPrivate; G_DEFINE_TYPE_WITH_PRIVATE (AppIndicator, app_indicator, G_TYPE_OBJECT); static guint32 generateId (const AppIndicatorCategory nCat, const gchar *sId) { guchar nCategory = 0; guchar nFirst = 0; guchar nSecond = 0; guchar nThird = 0; guchar nMultiplier = 32; switch (nCat) { case APP_INDICATOR_CATEGORY_OTHER: { nCategory = nMultiplier * 5; break; } case APP_INDICATOR_CATEGORY_APPLICATION_STATUS: { nCategory = nMultiplier * 4; break; } case APP_INDICATOR_CATEGORY_COMMUNICATIONS: { nCategory = nMultiplier * 3; break; } case APP_INDICATOR_CATEGORY_SYSTEM_SERVICES: { nCategory = nMultiplier * 2; break; } case APP_INDICATOR_CATEGORY_HARDWARE: { nCategory = nMultiplier * 1; break; } default: { g_warning ("Got an undefined category: %d", nCategory); nCategory = 0; break; } } if (sId != NULL) { if (sId[0] != '\0') { nFirst = sId[0]; if (sId[1] != '\0') { nSecond = sId[1]; if (sId[2] != '\0') { nThird = sId[2]; } } } } return (((((nCategory << 8) + nFirst) << 8) + nSecond) << 8) + nThird; } static void onBusMethodCall (GDBusConnection *pConnection, const gchar *sSender, const gchar *sPath, const gchar *sInterface, const gchar *sMethod, GVariant *pParams, GDBusMethodInvocation *pInvocation, gpointer pData) { g_return_if_fail (APP_IS_INDICATOR (pData)); AppIndicator *self = APP_INDICATOR (pData); AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); gint nCompare = g_strcmp0 (sMethod, "Scroll"); if (nCompare == 0) { guint nDirection = 0; gint nDelta = 0; const gchar *sOrientation = NULL; g_variant_get (pParams, "(i&s)", &nDelta, &sOrientation); nCompare = g_strcmp0 (sOrientation, "horizontal"); if (nCompare == 0) { nDirection = (nDelta >= 0) ? 3 : 2; } else { nCompare = g_strcmp0 (sOrientation, "vertical"); if (nCompare == 0) { nDirection = (nDelta >= 0) ? 1 : 0; } } if (nCompare != 0) { g_dbus_method_invocation_return_value (pInvocation, NULL); return; } nDelta = ABS (nDelta); g_signal_emit (self, signals[SCROLL_EVENT], 0, nDelta, nDirection); } else { nCompare = g_strcmp0 (sMethod, "SecondaryActivate"); if (nCompare != 0) { nCompare = g_strcmp0 (sMethod, "XAyatanaSecondaryActivate"); } if (nCompare == 0) { if (pPrivate->pActions) { GAction *pAction = g_action_map_lookup_action (G_ACTION_MAP (pPrivate->pActions), pPrivate->sSecActivateTarget); if (pAction) { gboolean bEnabled = g_action_get_enabled (pAction); if (bEnabled) { g_action_activate (pAction, NULL); } } } } } if (nCompare != 0) { g_warning ("Calling method '%s' on the app indicator and it's unknown", sMethod); } g_dbus_method_invocation_return_value (pInvocation, NULL); } // DBus is asking for a property so we should figure out what it wants and try and deliver static GVariant* onBusGetProperty (GDBusConnection *pConnection, const gchar *sSender, const gchar *sPath, const gchar *sInterface, const gchar *sProperty, GError **pError, gpointer pData) { g_return_val_if_fail (APP_IS_INDICATOR (pData), NULL); AppIndicator *self = APP_INDICATOR (pData); AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); gint nCompare = g_strcmp0 (sProperty, "Id"); if (nCompare == 0) { return g_variant_new_string (pPrivate->sId ? pPrivate->sId : ""); } nCompare = g_strcmp0 (sProperty, "Category"); if (nCompare == 0) { GEnumValue *pEnum = g_enum_get_value ((GEnumClass*) g_type_class_ref (APP_INDICATOR_TYPE_INDICATOR_CATEGORY), pPrivate->nCategory); GVariant *pValue = g_variant_new_string (pEnum->value_nick ? pEnum->value_nick : ""); return pValue; } nCompare = g_strcmp0 (sProperty, "Status"); if (nCompare == 0) { GEnumValue *pEnum = g_enum_get_value ((GEnumClass*) g_type_class_ref (APP_INDICATOR_TYPE_INDICATOR_STATUS), pPrivate->nStatus); GVariant *pValue = g_variant_new_string (pEnum->value_nick ? pEnum->value_nick : ""); return pValue; } nCompare = g_strcmp0 (sProperty, "IconName"); if (nCompare == 0) { if (pPrivate->sAbsoluteIconName) { GVariant *pValue = g_variant_new_string (pPrivate->sAbsoluteIconName); return pValue; } GVariant *pValue = g_variant_new_string (pPrivate->sIconName ? pPrivate->sIconName : ""); return pValue; } nCompare = g_strcmp0 (sProperty, "AttentionIconName"); if (nCompare == 0) { if (pPrivate->sAbsoluteAttentionIconName) { GVariant *pValue = g_variant_new_string (pPrivate->sAbsoluteAttentionIconName); return pValue; } GVariant *pValue = g_variant_new_string (pPrivate->sAttentionIconName ? pPrivate->sAttentionIconName : ""); return pValue; } nCompare = g_strcmp0 (sProperty, "Title"); if (nCompare == 0) { const gchar *sOutput = NULL; if (pPrivate->sTitle == NULL) { const gchar *sName = g_get_application_name (); if (sName != NULL) { sOutput = sName; } else { sOutput = ""; } } else { sOutput = pPrivate->sTitle; } GVariant *pValue = g_variant_new_string (sOutput); return pValue; } nCompare = g_strcmp0 (sProperty, "IconThemePath"); if (nCompare == 0) { if (pPrivate->sAbsoluteIconThemePath) { GVariant *pValue = g_variant_new_string (pPrivate->sAbsoluteIconThemePath); return pValue; } GVariant *pValue = g_variant_new_string (pPrivate->sIconThemePath ? pPrivate->sIconThemePath : ""); return pValue; } nCompare = g_strcmp0 (sProperty, "Menu"); if (nCompare == 0) { GVariant *pValue = g_variant_new ("o", pPrivate->sPath); return pValue; } nCompare = g_strcmp0 (sProperty, "XAyatanaLabel"); if (nCompare == 0) { GVariant *pValue = g_variant_new_string (pPrivate->sLabel ? pPrivate->sLabel : ""); return pValue; } nCompare = g_strcmp0 (sProperty, "XAyatanaLabelGuide"); if (nCompare == 0) { GVariant *pValue = g_variant_new_string (pPrivate->sLabelGuide ? pPrivate->sLabelGuide : ""); return pValue; } nCompare = g_strcmp0 (sProperty, "XAyatanaOrderingIndex"); if (nCompare == 0) { GVariant *pValue = g_variant_new_uint32 (pPrivate->nOrderingIndex); return pValue; } nCompare = g_strcmp0 (sProperty, "IconAccessibleDesc"); if (nCompare == 0) { GVariant *pValue = g_variant_new_string (pPrivate->sAccessibleDesc ? pPrivate->sAccessibleDesc : ""); return pValue; } nCompare = g_strcmp0 (sProperty, "AttentionAccessibleDesc"); if (nCompare == 0) { GVariant *pValue = g_variant_new_string (pPrivate->sAttAccessibleDesc ? pPrivate->sAttAccessibleDesc : ""); return pValue; } nCompare = g_strcmp0 (sProperty, "ToolTip"); if (nCompare == 0) { GVariantBuilder cBuilder; g_variant_builder_init (&cBuilder, G_VARIANT_TYPE ("(sa(iiay)ss)")); g_variant_builder_add (&cBuilder, "s", pPrivate->sTooltipIcon ? pPrivate->sTooltipIcon : ""); GVariantBuilder cArrayBuilder; g_variant_builder_init (&cArrayBuilder, G_VARIANT_TYPE ("a(iiay)")); GVariant *pArray = g_variant_builder_end (&cArrayBuilder); g_variant_builder_add_value (&cBuilder, pArray); g_variant_builder_add (&cBuilder, "s", pPrivate->sTooltipTitle ? pPrivate->sTooltipTitle : ""); g_variant_builder_add (&cBuilder, "s", pPrivate->sTooltipDescription ? pPrivate->sTooltipDescription : ""); GVariant *pValue = g_variant_builder_end (&cBuilder); return pValue; } *pError = g_error_new (0, 0, "Unknown property: %s", sProperty); return NULL; } // Response from the DBus command to register a service with a NotificationWatcher static void onRegisterService (GObject *pObject, GAsyncResult *pResult, gpointer pData) { GError *pError = NULL; GVariant *pReturns = g_dbus_proxy_call_finish (G_DBUS_PROXY(pObject), pResult, &pError); // We don't care about any return values if (pReturns != NULL) { g_variant_unref (pReturns); } if (pError != NULL) { // They didn't respond, ewww. Not sure what they could be doing g_warning ("Unable to connect to the Notification Watcher: %s", pError->message); g_object_unref (G_OBJECT (pData)); return; } g_return_if_fail (APP_IS_INDICATOR (pData)); AppIndicator *self = APP_INDICATOR (pData); // Emit the AppIndicator::connection-changed signal g_signal_emit (self, signals[CONNECTION_CHANGED], 0, TRUE); g_object_unref (G_OBJECT (pData)); return; } // This function is used to see if we have enough information to connect to things. If we do, and we're not connected, it connects for us. static void getConnectable (AppIndicator *self) { AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); if (!pPrivate->pConnection) { return; } // If we already have a proxy, let's see if it has someone implementing it. If not, we can't do much more than to do nothing. if (pPrivate->pWatcherProxy) { gchar *sName = g_dbus_proxy_get_name_owner (pPrivate->pWatcherProxy); if (!sName) { return; } g_free (sName); } if (!pPrivate->pMenu || !pPrivate->pActions || !pPrivate->sIconName || !pPrivate->sId) { return; } if (!pPrivate->sPath) { pPrivate->sPath = g_strdup_printf ("/org/ayatana/appindicator/%s", pPrivate->sCleanId); } if (!pPrivate->nDbusRegistration) { GError *pError = NULL; const GDBusInterfaceVTable cTable = {.method_call = onBusMethodCall, .get_property = onBusGetProperty, .set_property = NULL}; pPrivate->nDbusRegistration = g_dbus_connection_register_object (pPrivate->pConnection, pPrivate->sPath, m_pItemInterfaceInfo, &cTable, self, NULL, &pError); if (pError) { g_warning ("Unable to register object on path '%s': %s", pPrivate->sPath, pError->message); g_error_free (pError); return; } } // Export the actions if (!pPrivate->nActionsId) { GError *pError = NULL; pPrivate->nActionsId = g_dbus_connection_export_action_group (pPrivate->pConnection, pPrivate->sPath, G_ACTION_GROUP (pPrivate->pActions), &pError); if (!pPrivate->nActionsId) { g_warning ("Cannot export %s action group: %s", pPrivate->sPath, pError->message); g_clear_error (&pError); } } // Export the menus if (!pPrivate->nMenuId) { GError *pError = NULL; pPrivate->nMenuId = g_dbus_connection_export_menu_model (pPrivate->pConnection, pPrivate->sPath, G_MENU_MODEL (pPrivate->pMenu), &pError); if (!pPrivate->nMenuId) { g_warning ("Cannot export %s menu: %s", pPrivate->sPath, pError->message); g_clear_error (&pError); } } // NOTE: It's really important the order here. We make sure to *publish* the object on the bus and *then* get the proxy. The reason is that we want to ensure all the filters are setup before talking to the watcher and that's where the order is important. if (!pPrivate->pWatcherProxy) { return; } GVariant *pPath = g_variant_new ("(s)", pPrivate->sPath); AppIndicator *pSelf = g_object_ref (self); g_dbus_proxy_call (pPrivate->pWatcherProxy, "RegisterStatusNotifierItem", pPath, G_DBUS_CALL_FLAGS_NONE, -1, NULL, (GAsyncReadyCallback) onRegisterService, pSelf); } static void onWatcherReady (GObject *pObject, GAsyncResult *pResult, gpointer pData) { AppIndicator *self = APP_INDICATOR(pData); AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); GError *pError = NULL; pPrivate->pWatcherProxy = g_dbus_proxy_new_finish (pResult, &pError); if (pError) { g_object_unref (self); g_error_free (pError); return; } getConnectable (self); g_object_unref (self); } static void onNameAppeared (GDBusConnection *pConnection, const gchar *sName, const gchar *sOwner, gpointer pData) { AppIndicator *self = APP_INDICATOR(pData); AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); g_dbus_proxy_new (pPrivate->pConnection, G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES | G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS, m_pWatcherInterfaceInfo, NOTIFICATION_WATCHER_DBUS_ADDR, NOTIFICATION_WATCHER_DBUS_OBJ, NOTIFICATION_WATCHER_DBUS_IFACE, NULL, (GAsyncReadyCallback) onWatcherReady, (AppIndicator*) g_object_ref (self)); } static void onNameVanished (GDBusConnection *pConnection, const gchar *sName, gpointer pData) { AppIndicator *self = APP_INDICATOR (pData); AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); g_clear_object (&pPrivate->pWatcherProxy); g_signal_emit (self, signals[CONNECTION_CHANGED], 0, FALSE); } // Free all objects, make sure that all the dbus signals are sent out before we shut this down static void app_indicator_dispose (GObject *pObject) { AppIndicator *self = APP_INDICATOR (pObject); AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); if (pPrivate->nMenuId) { g_dbus_connection_unexport_menu_model (pPrivate->pConnection, pPrivate->nMenuId); pPrivate->nMenuId = 0; } if (pPrivate->nActionsId) { g_dbus_connection_unexport_action_group (pPrivate->pConnection, pPrivate->nActionsId); pPrivate->nActionsId = 0; } if (pPrivate->nStatus != APP_INDICATOR_STATUS_PASSIVE) { app_indicator_set_status (self, APP_INDICATOR_STATUS_PASSIVE); } if (pPrivate->nLabelChangeIdle != 0) { g_source_remove (pPrivate->nLabelChangeIdle); pPrivate->nLabelChangeIdle = 0; } g_clear_object (&pPrivate->pMenu); g_clear_object (&pPrivate->pActions); if (pPrivate->nWatcherId != 0) { g_bus_unwatch_name (pPrivate->nWatcherId); pPrivate->nWatcherId = 0; } if (pPrivate->pWatcherProxy != NULL) { g_object_unref (G_OBJECT (pPrivate->pWatcherProxy)); pPrivate->pWatcherProxy = NULL; g_signal_emit (self, signals[CONNECTION_CHANGED], 0, FALSE); } if (pPrivate->nDbusRegistration != 0) { g_dbus_connection_unregister_object (pPrivate->pConnection, pPrivate->nDbusRegistration); pPrivate->nDbusRegistration = 0; } g_clear_object (&pPrivate->pConnection); if (pPrivate->sSecActivateTarget != NULL) { g_free (pPrivate->sSecActivateTarget); pPrivate->sSecActivateTarget = NULL; } G_OBJECT_CLASS (app_indicator_parent_class)->dispose (pObject); } // Free all of the memory that we could be using in the object static void app_indicator_finalize (GObject *pObject) { AppIndicator *self = APP_INDICATOR (pObject); AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); if (pPrivate->nStatus != APP_INDICATOR_STATUS_PASSIVE) { g_warning ("Finalizing Application Status with the status set to: %d", pPrivate->nStatus); } if (pPrivate->sId != NULL) { g_free (pPrivate->sId); pPrivate->sId = NULL; } if (pPrivate->sCleanId != NULL) { g_free (pPrivate->sCleanId); pPrivate->sCleanId = NULL; } if (pPrivate->sIconName != NULL) { g_free (pPrivate->sIconName); pPrivate->sIconName = NULL; } if (pPrivate->sAbsoluteIconName != NULL) { g_free (pPrivate->sAbsoluteIconName); pPrivate->sAbsoluteIconName = NULL; } if (pPrivate->sAttentionIconName != NULL) { g_free (pPrivate->sAttentionIconName); pPrivate->sAttentionIconName = NULL; } if (pPrivate->sAbsoluteAttentionIconName != NULL) { g_free (pPrivate->sAbsoluteAttentionIconName); pPrivate->sAbsoluteAttentionIconName = NULL; } if (pPrivate->sIconThemePath != NULL) { g_free (pPrivate->sIconThemePath); pPrivate->sIconThemePath = NULL; } if (pPrivate->sAbsoluteIconThemePath != NULL) { g_free (pPrivate->sAbsoluteIconThemePath); pPrivate->sAbsoluteIconThemePath = NULL; } if (pPrivate->sTitle != NULL) { g_free (pPrivate->sTitle); pPrivate->sTitle = NULL; } if (pPrivate->sLabel != NULL) { g_free (pPrivate->sLabel); pPrivate->sLabel = NULL; } if (pPrivate->sLabelGuide != NULL) { g_free (pPrivate->sLabelGuide); pPrivate->sLabelGuide = NULL; } if (pPrivate->sAccessibleDesc != NULL) { g_free (pPrivate->sAccessibleDesc); pPrivate->sAccessibleDesc = NULL; } if (pPrivate->sAttAccessibleDesc != NULL) { g_free (pPrivate->sAttAccessibleDesc); pPrivate->sAttAccessibleDesc = NULL; } if (pPrivate->sPath != NULL) { g_free (pPrivate->sPath); pPrivate->sPath = NULL; } if (pPrivate->sTooltipIcon != NULL) { g_free (pPrivate->sTooltipIcon); pPrivate->sTooltipIcon = NULL; } if (pPrivate->sTooltipTitle != NULL) { g_free (pPrivate->sTooltipTitle); pPrivate->sTooltipTitle = NULL; } if (pPrivate->sTooltipDescription != NULL) { g_free (pPrivate->sTooltipDescription); pPrivate->sTooltipDescription = NULL; } G_OBJECT_CLASS (app_indicator_parent_class)->finalize (pObject); } // Sends the label changed signal and resets the source ID static gboolean onLabelChangeIdle (gpointer pData) { AppIndicator *self = APP_INDICATOR (pData); AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); gchar *sLabel = pPrivate->sLabel != NULL ? pPrivate->sLabel : ""; gchar *sGuide = pPrivate->sLabelGuide != NULL ? pPrivate->sLabelGuide : ""; g_signal_emit (G_OBJECT (self), signals[NEW_LABEL], 0, sLabel, sGuide); if (pPrivate->nDbusRegistration != 0 && pPrivate->pConnection != NULL) { GError *pError = NULL; GVariant *pValue = g_variant_new ("(ss)", sLabel, sGuide); g_dbus_connection_emit_signal (pPrivate->pConnection, NULL, pPrivate->sPath, NOTIFICATION_ITEM_DBUS_IFACE, "XAyatanaNewLabel", pValue, &pError); if (pError != NULL) { g_warning ("Unable to send signal for XAyatanaNewLabel: %s", pError->message); g_error_free (pError); } } pPrivate->nLabelChangeIdle = 0; return FALSE; } // Sets up an idle function to send the label changed signal so that we don't send it too many times static void signalLabelChange (AppIndicator *self) { AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); // don't set it twice if (pPrivate->nLabelChangeIdle != 0) { return; } pPrivate->nLabelChangeIdle = g_idle_add (onLabelChangeIdle, self); } static void app_indicator_set_property (GObject *pObject, guint nPropId, const GValue *pValue, GParamSpec *pSpec) { AppIndicator *self = APP_INDICATOR (pObject); AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); GEnumValue *pEnum = NULL; switch (nPropId) { case PROP_ID: { if (pPrivate->sId != NULL) { g_warning ("Resetting ID value when I already had a value of: %s", pPrivate->sId); break; } const gchar *sValue = g_value_get_string (pValue); pPrivate->sId = g_strdup (sValue); pPrivate->sCleanId = g_strdup (pPrivate->sId); gchar *sCleaner = NULL; for (sCleaner = pPrivate->sCleanId; *sCleaner != '\0'; sCleaner++) { gboolean bAlNum = g_ascii_isalnum (*sCleaner); if (!bAlNum) { *sCleaner = '_'; } } getConnectable (self); break; } case PROP_CATEGORY: { const gchar *sValue = g_value_get_string (pValue); pEnum = g_enum_get_value_by_nick ((GEnumClass *) g_type_class_ref (APP_INDICATOR_TYPE_INDICATOR_CATEGORY), sValue); if (pPrivate->nCategory != pEnum->value) { pPrivate->nCategory = pEnum->value; } break; } case PROP_STATUS: { const gchar *sValue = g_value_get_string (pValue); pEnum = g_enum_get_value_by_nick ((GEnumClass *) g_type_class_ref (APP_INDICATOR_TYPE_INDICATOR_STATUS), sValue); app_indicator_set_status (APP_INDICATOR (pObject), pEnum->value); break; } case PROP_ICON_NAME: { const gchar *sValue = g_value_get_string (pValue); app_indicator_set_icon (APP_INDICATOR (pObject), sValue, pPrivate->sAccessibleDesc); getConnectable (self); break; } case PROP_ICON_DESC: { const gchar *sValue = g_value_get_string (pValue); app_indicator_set_icon (APP_INDICATOR (pObject), pPrivate->sIconName, sValue); getConnectable (self); break; } case PROP_ATTENTION_ICON_NAME: { const gchar *sValue = g_value_get_string (pValue); app_indicator_set_attention_icon (APP_INDICATOR (pObject), sValue, pPrivate->sAttAccessibleDesc); break; } case PROP_ATTENTION_ICON_DESC: { const gchar *sValue = g_value_get_string (pValue); app_indicator_set_attention_icon (APP_INDICATOR (pObject), pPrivate->sAttentionIconName, sValue); break; } case PROP_ICON_THEME_PATH: { const gchar *sValue = g_value_get_string (pValue); app_indicator_set_icon_theme_path (APP_INDICATOR (pObject), sValue); getConnectable (self); break; } case PROP_LABEL: { gchar *sOldLabel = pPrivate->sLabel; pPrivate->sLabel = g_value_dup_string (pValue); if (pPrivate->sLabel != NULL && pPrivate->sLabel[0] == '\0') { g_free (pPrivate->sLabel); pPrivate->sLabel = NULL; } gint nCompare = g_strcmp0 (sOldLabel, pPrivate->sLabel); if (nCompare != 0) { signalLabelChange (APP_INDICATOR (pObject)); } if (sOldLabel != NULL) { g_free (sOldLabel); } break; } case PROP_TITLE: { gchar *sOldTitle = pPrivate->sTitle; pPrivate->sTitle = g_value_dup_string (pValue); if (pPrivate->sTitle != NULL && pPrivate->sTitle[0] == '\0') { g_free (pPrivate->sTitle); pPrivate->sTitle = NULL; } gint nCompare = g_strcmp0 (sOldTitle, pPrivate->sTitle); if (nCompare != 0 && pPrivate->pConnection != NULL) { GError *pError = NULL; g_dbus_connection_emit_signal(pPrivate->pConnection, NULL, pPrivate->sPath, NOTIFICATION_ITEM_DBUS_IFACE, "NewTitle", NULL, &pError); if (pError != NULL) { g_warning ("Unable to send signal for NewTitle: %s", pError->message); g_error_free (pError); } } if (sOldTitle != NULL) { g_free (sOldTitle); } break; } case PROP_LABEL_GUIDE: { gchar *sOldGuide = pPrivate->sLabelGuide; pPrivate->sLabelGuide = g_value_dup_string (pValue); if (pPrivate->sLabelGuide != NULL && pPrivate->sLabelGuide[0] == '\0') { g_free (pPrivate->sLabelGuide); pPrivate->sLabelGuide = NULL; } gint nCompare = g_strcmp0 (sOldGuide, pPrivate->sLabelGuide); if (nCompare != 0) { signalLabelChange (APP_INDICATOR (pObject)); } if (pPrivate->sLabelGuide != NULL && pPrivate->sLabelGuide[0] == '\0') { g_free (pPrivate->sLabelGuide); pPrivate->sLabelGuide = NULL; } if (sOldGuide != NULL) { g_free (sOldGuide); } break; } case PROP_ORDERING_INDEX: { pPrivate->nOrderingIndex = g_value_get_uint (pValue); break; } case PROP_MENU: { g_clear_object (&pPrivate->pMenu); pPrivate->pMenu = G_MENU (g_value_dup_object (pValue)); break; } case PROP_ACTIONS: { g_clear_object (&pPrivate->pActions); pPrivate->pActions = G_SIMPLE_ACTION_GROUP (g_value_dup_object (pValue)); break; } case PROP_TOOLTIP_ICON: { const gchar *sValue = g_value_get_string (pValue); app_indicator_set_tooltip (APP_INDICATOR (pObject), sValue, pPrivate->sTooltipTitle, pPrivate->sTooltipDescription); break; } case PROP_TOOLTIP_TITLE: { const gchar *sValue = g_value_get_string (pValue); app_indicator_set_tooltip (APP_INDICATOR (pObject), pPrivate->sTooltipIcon, sValue, pPrivate->sTooltipDescription); break; } case PROP_TOOLTIP_DESCRIPTION: { const gchar *sValue = g_value_get_string (pValue); app_indicator_set_tooltip (APP_INDICATOR (pObject), pPrivate->sTooltipIcon, pPrivate->sTooltipTitle, sValue); break; } default: { G_OBJECT_WARN_INVALID_PROPERTY_ID (pObject, nPropId, pSpec); break; } } } static void app_indicator_get_property (GObject *pObject, guint nPropId, GValue *pValue, GParamSpec *pSpec) { AppIndicator *self = APP_INDICATOR (pObject); AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); GEnumValue *pEnum = NULL; switch (nPropId) { case PROP_ID: { g_value_set_string (pValue, pPrivate->sId); break; } case PROP_CATEGORY: { pEnum = g_enum_get_value ((GEnumClass *) g_type_class_ref (APP_INDICATOR_TYPE_INDICATOR_CATEGORY), pPrivate->nCategory); g_value_set_string (pValue, pEnum->value_nick); break; } case PROP_STATUS: { pEnum = g_enum_get_value ((GEnumClass *) g_type_class_ref (APP_INDICATOR_TYPE_INDICATOR_STATUS), pPrivate->nStatus); g_value_set_string (pValue, pEnum->value_nick); break; } case PROP_ICON_NAME: { g_value_set_string (pValue, pPrivate->sIconName); break; } case PROP_ICON_DESC: { g_value_set_string (pValue, pPrivate->sAccessibleDesc); break; } case PROP_ATTENTION_ICON_NAME: { g_value_set_string (pValue, pPrivate->sAttentionIconName); break; } case PROP_ATTENTION_ICON_DESC: { g_value_set_string (pValue, pPrivate->sAttAccessibleDesc); break; } case PROP_ICON_THEME_PATH: { g_value_set_string (pValue, pPrivate->sIconThemePath); break; } case PROP_CONNECTED: { gboolean bConnected = FALSE; if (pPrivate->pWatcherProxy != NULL) { gchar *sName = g_dbus_proxy_get_name_owner (pPrivate->pWatcherProxy); if (sName != NULL) { bConnected = TRUE; g_free (sName); } } g_value_set_boolean (pValue, bConnected); break; } case PROP_LABEL: { g_value_set_string (pValue, pPrivate->sLabel); break; } case PROP_LABEL_GUIDE: { g_value_set_string (pValue, pPrivate->sLabelGuide); break; } case PROP_ORDERING_INDEX: { g_value_set_uint(pValue, pPrivate->nOrderingIndex); break; } case PROP_TITLE: { g_value_set_string(pValue, pPrivate->sTitle); break; } case PROP_MENU: { g_value_set_object (pValue, pPrivate->pMenu); break; } case PROP_ACTIONS: { g_value_set_object (pValue, pPrivate->pActions); break; } case PROP_TOOLTIP_ICON: { g_value_set_string (pValue, pPrivate->sTooltipIcon); break; } case PROP_TOOLTIP_TITLE: { g_value_set_string (pValue, pPrivate->sTooltipTitle); break; } case PROP_TOOLTIP_DESCRIPTION: { g_value_set_string (pValue, pPrivate->sTooltipDescription); break; } default: { G_OBJECT_WARN_INVALID_PROPERTY_ID (pObject, nPropId, pSpec); break; } } } static void app_indicator_class_init (AppIndicatorClass *klass) { GObjectClass *pClass = G_OBJECT_CLASS (klass); pClass->dispose = app_indicator_dispose; pClass->finalize = app_indicator_finalize; pClass->set_property = app_indicator_set_property; pClass->get_property = app_indicator_get_property; /** * AppIndicator:id: * * The ID for this indicator, which should be unique, but used consistently * by this program and its indicator. */ GParamSpec *pSpecId = g_param_spec_string ("id", "The ID for this indicator", "An ID that should be unique, but used consistently by this program and its indicator.", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property (pClass, PROP_ID, pSpecId); /** * AppIndicator:category: * * The type of indicator that this represents. Please don't use 'Other'. * Defaults to 'ApplicationStatus'. */ GParamSpec *pSpecCategory = g_param_spec_string ("category", "Indicator Category", "The type of indicator that this represents. Please don't use 'other'. Defaults to 'ApplicationStatus'.", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property (pClass, PROP_CATEGORY, pSpecCategory); /** * AppIndicator:status: * * Whether the indicator is shown or requests attention. Can be one of * 'Passive' (the indicator should not be shown), 'Active' (the indicator * should be shown in its default state), and 'Attention' (the indicator * should now show it's attention icon). Defaults to 'Passive'. */ GParamSpec *pSpecStatus = g_param_spec_string ("status", "Indicator Status", "Whether the indicator is shown or requests attention. Can be one of 'Passive' (the indicator should not be shown), 'Active' (the indicator should be shown in its default state), and 'Attention' (the indicator should now show it's attention icon). Defaults to 'Passive'.", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (pClass, PROP_STATUS, pSpecStatus); /** * AppIndicator:icon-name: * * The name of the regular icon that is shown for the indicator. */ GParamSpec *pSpecIconName = g_param_spec_string ("icon-name", "An icon for the indicator", "The default icon that is shown for the indicator.", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (pClass, PROP_ICON_NAME, pSpecIconName); /** * AppIndicator:icon-desc: * * The description of the regular icon that is shown for the indicator. */ GParamSpec *pSpecIconDesc = g_param_spec_string ("icon-desc", "A description of the icon for the indicator", "A description of the default icon that is shown for the indicator.", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (pClass, PROP_ICON_DESC, pSpecIconDesc); /** * AppIndicator:attention-icon-name: * * If the indicator sets its status to %APP_INDICATOR_STATUS_ATTENTION * then this icon is shown. */ GParamSpec *pSpecAttentionIconName = g_param_spec_string ("attention-icon-name", "An icon to show when the indicator request attention.", "If the indicator sets it's status to 'attention' then this icon is shown.", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (pClass, PROP_ATTENTION_ICON_NAME, pSpecAttentionIconName); /** * AppIndicator:attention-icon-desc: * * If the indicator sets its status to %APP_INDICATOR_STATUS_ATTENTION * then this is the textual description of the icon shown. */ GParamSpec *pSpecAttentionIconDesc = g_param_spec_string ("attention-icon-desc", "A description of the icon to show when the indicator request attention.", "When the indicator is an attention mode this should describe the icon shown", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (pClass, PROP_ATTENTION_ICON_DESC, pSpecAttentionIconDesc); /** * AppIndicator:icon-theme-path: * * An additional place to look for icon names that may be installed by the * application. */ GParamSpec *pSpecIconThemePath = g_param_spec_string ("icon-theme-path", "An additional path for custom icons.", "An additional place to look for icon names that may be installed by the application.", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT); g_object_class_install_property (pClass, PROP_ICON_THEME_PATH, pSpecIconThemePath); /** * AppIndicator:connected: * * Whether we're conneced to a watcher. %TRUE if we have a * reasonable expectation of being displayed through this object. */ GParamSpec *pSpecConnected = g_param_spec_boolean ("connected", "Whether we're conneced to a watcher", "Pretty simple, true if we have a reasonable expectation of being displayed through this object. You should hide your TrayIcon if so.", FALSE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (pClass, PROP_CONNECTED, pSpecConnected); /** * AppIndicator:label: * * A label that can be shown next to the string in the application * indicator. The label will not be shown unless there is an icon * as well. The label is useful for numerical and other frequently * updated information. In general, it shouldn't be shown unless a * user requests it as it can take up a significant amount of space * on the user's panel. This may not be shown in all visualizations. */ GParamSpec *pSpecLabel = g_param_spec_string ("label", "A label next to the icon", "A label to provide dynamic information.", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (pClass, PROP_LABEL, pSpecLabel); /** * AppIndicator:label-guide: * * An optional string to provide guidance to the panel on how big * the #AppIndicator:label string could get. If this is set * correctly then the panel should never 'jiggle' as the string * adjusts throughout the range of options. For instance, if you * were providing a percentage like "54% thrust" in * #AppIndicator:label you'd want to set this string to * "100% thrust" to ensure space when Scotty can get you enough * power. */ GParamSpec *pSpecLabelGuide = g_param_spec_string ("label-guide", "A string to size the space available for the label.", "To ensure that the label does not cause the panel to 'jiggle' this string should provide information on how much space it could take.", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (pClass, PROP_LABEL_GUIDE, pSpecLabelGuide); /** * AppIndicator:ordering-index: * * The ordering index is an odd parameter, and if you think you * don't need it you're probably right. In general, the application * indicator service will try to place the indicators in a * recreatable place taking into account which category they're in * to try and group them. But, there are some cases when you'd want * to ensure indicators are next to each other. To do that you can * override the generated ordering index and replace it with a new * one. Again, you probably don't want to do this, but in case you * do, this is the way. */ GParamSpec *pSpecOrderingIndex = g_param_spec_uint ("ordering-index", "The location that this app indicator should be in the list.", "A way to override the default ordering of the applications by providing a very specific idea of where this entry should be placed.", 0, G_MAXUINT32, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (pClass, PROP_ORDERING_INDEX, pSpecOrderingIndex); /** * AppIndicator:title: * * Provides a way to refer to this application indicator in a human * readable form. */ GParamSpec *pSpecTitle = g_param_spec_string ("title", "Title of the application indicator", "A human readable way to refer to this application indicator in the UI.", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (pClass, PROP_TITLE, pSpecTitle); /** * AppIndicator:menu: * * The menu that should be shown when the Application Indicator * is clicked on in the panel. */ GParamSpec *pSpecMenu = g_param_spec_string ("menu", "The menu of the application indicator", "The menu that should be shown when the Application Indicator is clicked on in the panel.", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (pClass, PROP_MENU, pSpecMenu); /** * AppIndicator:actions: * * The action group that is associated with the menu items. */ GParamSpec *pSpecActions = g_param_spec_string ("actions", "The action group of the application indicator", "The action group that is associated with the menu items.", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (pClass, PROP_ACTIONS, pSpecActions); /** * AppIndicator:tooltip-icon-name: * * The name of the tooltip's themed icon. */ GParamSpec *pSpecTooltipIconName = g_param_spec_string ("tooltip-icon-name", "Tooltip icon", "The name of the tooltip's themed icon.", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (pClass, PROP_TOOLTIP_ICON, pSpecTooltipIconName); /** * AppIndicator:tooltip-title: * * The title of the indicator's tooltip. */ GParamSpec *pSpecTooltipTitle = g_param_spec_string ("tooltip-title", "The tooltip's title", "The title of the indicator's tooltip.", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (pClass, PROP_TOOLTIP_TITLE, pSpecTooltipTitle); /** * AppIndicator:tooltip-description: * * The text of the indicator's tooltip. */ GParamSpec *pSpecTooltipDescription = g_param_spec_string ("tooltip-description", "The tooltip's text", "The text of the indicator's tooltip.", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (pClass, PROP_TOOLTIP_DESCRIPTION, pSpecTooltipDescription); /** * AppIndicator::new-icon: * @arg0: The #AppIndicator object * * Emitted when #AppIndicator:icon-name has changed. */ signals[NEW_ICON] = g_signal_new ("new-icon", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AppIndicatorClass, new_icon), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); /** * AppIndicator::new-attention-icon: * @arg0: The #AppIndicator object * * Emitted when #AppIndicator:attention-icon-name has changed. */ signals[NEW_ATTENTION_ICON] = g_signal_new ("new-attention-icon", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AppIndicatorClass, new_attention_icon), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); /** * AppIndicator::new-status: * @arg0: The #AppIndicator object * @arg1: The string value of the #AppIndicatorStatus enum * * Emitted when #AppIndicator:status has changed. */ signals[NEW_STATUS] = g_signal_new ("new-status", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AppIndicatorClass, new_status), NULL, NULL, g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, 1, G_TYPE_STRING); /** * AppIndicator::new-label: * @arg0: The #AppIndicator object * @arg1: The string for the label * @arg2: The string for the guide * * Emitted when either #AppIndicator:label or * #AppIndicator:label-guide have changed. */ signals[NEW_LABEL] = g_signal_new ("new-label", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AppIndicatorClass, new_label), NULL, NULL, _application_service_marshal_VOID__STRING_STRING, G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_STRING); /** * AppIndicator::new-tooltip: * @arg0: The #AppIndicator object * * Emitted when #AppIndicator:tooltip-icon-name, * #AppIndicator:tooltip-title or #AppIndicator:tooltip-description have * changed. */ signals[NEW_TOOLTIP] = g_signal_new ("new-tooltip", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AppIndicatorClass, new_tooltip), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); /** * AppIndicator::connection-changed: * @arg0: The #AppIndicator object * @arg1: Whether we're connected or not * * Emitted when we connect to a watcher, or when it drops away. */ signals[CONNECTION_CHANGED] = g_signal_new ("connection-changed", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AppIndicatorClass, connection_changed), NULL, NULL, g_cclosure_marshal_VOID__BOOLEAN, G_TYPE_NONE, 1, G_TYPE_BOOLEAN); /** * AppIndicator::new-icon-theme-path: * @arg0: The #AppIndicator object * @arg1: The icon theme path * * Emittod when there is a new icon set for the object. */ signals[NEW_ICON_THEME_PATH] = g_signal_new ("new-icon-theme-path", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AppIndicatorClass, new_icon_theme_path), NULL, NULL, g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, 1, G_TYPE_STRING); /** * AppIndicator::scroll-event: * @arg0: The #AppIndicator object * @arg1: How many steps the scroll wheel has taken * @arg2: Which direction the wheel went in * * Signaled when the #AppIndicator receives a scroll event. */ signals[SCROLL_EVENT] = g_signal_new ("scroll-event", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AppIndicatorClass, scroll_event), NULL, NULL, _application_service_marshal_VOID__INT_UINT, G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_UINT); if (!m_pItemNodeInfo) { GError *pError = NULL; m_pItemNodeInfo = g_dbus_node_info_new_for_xml (_notification_item, &pError); if (pError) { g_error ("Unable to parse Notification Item DBus interface: %s", pError->message); g_error_free (pError); } } if (!m_pItemInterfaceInfo && m_pItemNodeInfo) { m_pItemInterfaceInfo = g_dbus_node_info_lookup_interface (m_pItemNodeInfo, NOTIFICATION_ITEM_DBUS_IFACE); if (!m_pItemInterfaceInfo) { g_error ("Unable to find interface '" NOTIFICATION_ITEM_DBUS_IFACE "'"); } } if (!m_pWatcherNodeInfo) { GError *pError = NULL; m_pWatcherNodeInfo = g_dbus_node_info_new_for_xml (_notification_watcher, &pError); if (pError) { g_error ("Unable to parse Notification Item DBus interface: %s", pError->message); g_error_free (pError); } } if (!m_pWatcherInterfaceInfo && m_pWatcherNodeInfo) { m_pWatcherInterfaceInfo = g_dbus_node_info_lookup_interface (m_pWatcherNodeInfo, NOTIFICATION_WATCHER_DBUS_IFACE); if (!m_pWatcherInterfaceInfo) { g_error ("Unable to find interface '" NOTIFICATION_WATCHER_DBUS_IFACE "'"); } } } static const gchar* getSnapPrefix () { const gchar *sSnap = g_getenv ("SNAP"); return (sSnap && *sSnap != '\0') ? sSnap : NULL; } static gchar* appendSnapPrefix (const gchar *path) { const gchar *sSnap = getSnapPrefix (); if (sSnap && path) { g_autofree gchar *sCanonPath = realpath (path, NULL); gboolean bPrefix = g_str_has_prefix (sCanonPath, "/tmp/"); if (bPrefix) { g_warning ("Using '/tmp' paths in SNAP environment will lead to unreadable resources"); return NULL; } gboolean bSnapPrefix = g_str_has_prefix (sCanonPath, sSnap); const gchar *sHome = g_get_home_dir (); gboolean bHomePrefix = g_str_has_prefix (sCanonPath, sHome); const gchar *sCache = g_get_user_cache_dir (); gboolean bCachePrefix = g_str_has_prefix (sCanonPath, sCache); const gchar *sConfig = g_get_user_config_dir (); gboolean bConfigPrefix = g_str_has_prefix (sCanonPath, sConfig); const gchar *sData = g_get_user_data_dir (); gboolean bDataPrefix = g_str_has_prefix (sCanonPath, sData); const gchar *sRuntime = g_get_user_runtime_dir (); gboolean bRuntimePrefix = g_str_has_prefix (sCanonPath, sRuntime); if (bSnapPrefix || bHomePrefix || bCachePrefix || bConfigPrefix || bDataPrefix || bRuntimePrefix) { return g_strdup (sCanonPath); } for (gint nDir = 0; nDir < G_USER_N_DIRECTORIES; ++nDir) { const gchar *sDir = g_get_user_special_dir (nDir); gboolean bPrefix = g_str_has_prefix (sCanonPath, sDir); if (bPrefix) { return g_strdup (sCanonPath); } } gchar *sPath = g_build_path (G_DIR_SEPARATOR_S, sSnap, sCanonPath, NULL); return sPath; } return NULL; } static gchar* getRealThemePath (AppIndicator *self) { AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); const gchar *sThemePath = pPrivate->sIconThemePath; gchar *sSnappedPath = appendSnapPrefix (sThemePath); if (sSnappedPath) { return sSnappedPath; } else { const gchar *sPrefix = getSnapPrefix (); if (sPrefix) { const gchar *sDir = g_get_user_data_dir (); gchar *sPath = g_build_path (G_DIR_SEPARATOR_S, sDir, "icons", NULL); return sPath; } } return NULL; } static void onBusAcquired (GObject *pObject, GAsyncResult *pResult, gpointer pData) { GError *pError = NULL; GDBusConnection *pConnection = g_bus_get_finish (pResult, &pError); if (pError) { g_warning ("Unable to get the session bus: %s", pError->message); g_error_free (pError); g_object_unref (G_OBJECT (pData)); return; } AppIndicator *self = APP_INDICATOR (pData); AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); pPrivate->pConnection = pConnection; // If the connection was blocking the exporting of the object this function will export everything getConnectable (self); g_object_unref (G_OBJECT (self)); } static void app_indicator_init (AppIndicator *self) { AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); pPrivate->sId = NULL; pPrivate->sCleanId = NULL; pPrivate->nCategory = APP_INDICATOR_CATEGORY_OTHER; pPrivate->nStatus = APP_INDICATOR_STATUS_PASSIVE; pPrivate->sIconName = NULL; pPrivate->sAttentionIconName = NULL; pPrivate->sIconThemePath = NULL; pPrivate->sAbsoluteIconThemePath = getRealThemePath (self); pPrivate->nOrderingIndex = 0; pPrivate->sTitle = NULL; pPrivate->sLabel = NULL; pPrivate->sLabelGuide = NULL; pPrivate->nLabelChangeIdle = 0; pPrivate->pConnection = NULL; pPrivate->nDbusRegistration = 0; pPrivate->sPath = NULL; pPrivate->pMenu = NULL; pPrivate->pActions = NULL; pPrivate->nActionsId = 0; pPrivate->nMenuId = 0; pPrivate->sSecActivateTarget = NULL; pPrivate->pWatcherProxy = NULL; pPrivate->nWatcherId = g_bus_watch_name (G_BUS_TYPE_SESSION, NOTIFICATION_WATCHER_DBUS_ADDR, G_BUS_NAME_WATCHER_FLAGS_NONE, (GBusNameAppearedCallback) onNameAppeared, (GBusNameVanishedCallback) onNameVanished, self, NULL); pPrivate->sTooltipIcon = NULL; pPrivate->sTooltipTitle = NULL; pPrivate->sTooltipDescription = NULL; // Start getting the session bus g_object_ref (self); g_bus_get (G_BUS_TYPE_SESSION, NULL, onBusAcquired, self); } static const gchar* categoryFromEnum (AppIndicatorCategory category) { GEnumValue *pValue = g_enum_get_value ((GEnumClass*) g_type_class_ref (APP_INDICATOR_TYPE_INDICATOR_CATEGORY), category); return pValue->value_nick; } /** * app_indicator_new: * @id: The unique id of the indicator to create * @icon_name: The icon name for this indicator * @category: The category of the indicator * * Creates a new #AppIndicator setting the properties: * #AppIndicator:id with @id, #AppIndicator:category with @category * and #AppIndicator:icon-name with @icon_name. * * Return value: A pointer to a new #AppIndicator object */ AppIndicator *app_indicator_new (const gchar *id, const gchar *icon_name, AppIndicatorCategory category) { const gchar *sCategory = categoryFromEnum (category); AppIndicator *pIndicator = g_object_new (APP_INDICATOR_TYPE, "id", id, "category", sCategory, "icon-name", icon_name, NULL); return pIndicator; } /** * app_indicator_new_with_path: * @id: The unique id of the indicator to create * @icon_name: The icon name for this indicator * @category: The category of the indicator. * @icon_theme_path: A custom path for finding icons * Creates a new #AppIndicator setting the properties: * #AppIndicator:id with @id, #AppIndicator:category with @category, * #AppIndicator:icon-name with @icon_name and #AppIndicator:icon-theme-path * with @icon_theme_path. * * Return value: A pointer to a new #AppIndicator object */ AppIndicator *app_indicator_new_with_path (const gchar *id, const gchar *icon_name, AppIndicatorCategory category, const gchar *icon_theme_path) { const gchar *sCategory = categoryFromEnum (category); AppIndicator *pIndicator = g_object_new (APP_INDICATOR_TYPE, "id", id, "category", sCategory, "icon-name", icon_name, "icon-theme-path", icon_theme_path, NULL); return pIndicator; } /** * app_indicator_set_status: * @self: The #AppIndicator object to use * @status: The status to set for this indicator * * Wrapper function for property #AppIndicator:status */ void app_indicator_set_status (AppIndicator *self, AppIndicatorStatus status) { g_return_if_fail (APP_IS_INDICATOR (self)); AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); if (pPrivate->nStatus != status) { GEnumValue *pValue = g_enum_get_value ((GEnumClass*) g_type_class_ref (APP_INDICATOR_TYPE_INDICATOR_STATUS), status); pPrivate->nStatus = status; g_signal_emit (self, signals[NEW_STATUS], 0, pValue->value_nick); if (pPrivate->nDbusRegistration != 0 && pPrivate->pConnection) { GError *pError = NULL; GVariant *pStatus = g_variant_new ("(s)", pValue->value_nick); g_dbus_connection_emit_signal (pPrivate->pConnection, NULL, pPrivate->sPath, NOTIFICATION_ITEM_DBUS_IFACE, "NewStatus", pStatus, &pError); if (pError) { g_warning ("Unable to send signal for NewStatus: %s", pError->message); g_error_free (pError); } } } } /** * app_indicator_set_attention_icon: * @self: The #AppIndicator object to use * @icon_name: The name of the attention icon to set for this indicator * @icon_desc: (nullable): A textual description of the icon * * Wrapper function for property #AppIndicator:attention-icon-name */ void app_indicator_set_attention_icon (AppIndicator *self, const gchar *icon_name, const gchar *icon_desc) { g_return_if_fail (APP_IS_INDICATOR (self)); g_return_if_fail (icon_name != NULL); AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); gboolean bChanged = FALSE; gint nResult = g_strcmp0 (pPrivate->sAttentionIconName, icon_name); if (nResult != 0) { g_free (pPrivate->sAttentionIconName); pPrivate->sAttentionIconName = g_strdup (icon_name); g_free (pPrivate->sAbsoluteAttentionIconName); pPrivate->sAbsoluteAttentionIconName = NULL; if (icon_name && icon_name[0] == '/') { pPrivate->sAbsoluteAttentionIconName = appendSnapPrefix (icon_name); } bChanged = TRUE; } nResult = g_strcmp0 (pPrivate->sAttAccessibleDesc, icon_desc); if (nResult != 0) { g_free (pPrivate->sAttAccessibleDesc); pPrivate->sAttAccessibleDesc = g_strdup (icon_desc); bChanged = TRUE; } if (bChanged) { g_signal_emit (self, signals[NEW_ATTENTION_ICON], 0); if (pPrivate->nDbusRegistration != 0 && pPrivate->pConnection) { GError *pError = NULL; g_dbus_connection_emit_signal(pPrivate->pConnection, NULL, pPrivate->sPath, NOTIFICATION_ITEM_DBUS_IFACE, "NewAttentionIcon", NULL, &pError); if (pError) { g_warning ("Unable to send signal for NewAttentionIcon: %s", pError->message); g_error_free (pError); } } } } /** * app_indicator_set_icon: * @self: The #AppIndicator object to use * @icon_name: The icon name to set * @icon_desc: (nullable): A description of the icon for accessibility * * Sets the default icon to use when the status is active but not set to * attention. In most cases, this should be the application icon for the * program. * * Wrapper function for property #AppIndicator:icon-name and * #AppIndicator:icon-desc */ void app_indicator_set_icon (AppIndicator *self, const gchar *icon_name, const gchar *icon_desc) { g_return_if_fail (APP_IS_INDICATOR (self)); g_return_if_fail (icon_name != NULL); AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); gboolean bChanged = FALSE; gint nResult = g_strcmp0 (pPrivate->sIconName, icon_name); if (nResult != 0) { if (pPrivate->sIconName) { g_free (pPrivate->sIconName); } pPrivate->sIconName = g_strdup (icon_name); g_free (pPrivate->sAbsoluteIconName); pPrivate->sAbsoluteIconName = NULL; if (icon_name && icon_name[0] == '/') { pPrivate->sAbsoluteIconName = appendSnapPrefix (icon_name); } bChanged = TRUE; } nResult = g_strcmp0 (pPrivate->sAccessibleDesc, icon_desc); if (nResult != 0) { if (pPrivate->sAccessibleDesc) { g_free (pPrivate->sAccessibleDesc); } pPrivate->sAccessibleDesc = g_strdup (icon_desc); bChanged = TRUE; } if (bChanged) { g_signal_emit (self, signals[NEW_ICON], 0); if (pPrivate->nDbusRegistration != 0 && pPrivate->pConnection != NULL) { GError *pError = NULL; g_dbus_connection_emit_signal (pPrivate->pConnection, NULL, pPrivate->sPath, NOTIFICATION_ITEM_DBUS_IFACE, "NewIcon", NULL, &pError); if (pError != NULL) { g_warning ("Unable to send signal for NewIcon: %s", pError->message); g_error_free (pError); } } } } /** * app_indicator_set_label: * @self: The #AppIndicator object to use * @label: The label to show next to the icon * @guide: A guide to size the label correctly * * This is a wrapper function for the #AppIndicator:label and * #AppIndicator:label-guide properties. This function can take #NULL * as either @label or @guide and will clear the entries. */ void app_indicator_set_label (AppIndicator *self, const gchar *label, const gchar *guide) { g_return_if_fail (APP_IS_INDICATOR (self)); g_object_set(G_OBJECT(self), "label", label == NULL ? "" : label, "label-guide", guide == NULL ? "" : guide, NULL); } /** * app_indicator_set_icon_theme_path: * @self: The #AppIndicator object to use * @icon_theme_path: The icon theme path to set * * Sets the path to use when searching for icons. */ void app_indicator_set_icon_theme_path (AppIndicator *self, const gchar *icon_theme_path) { g_return_if_fail (APP_IS_INDICATOR (self)); AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); gint nResult = g_strcmp0 (pPrivate->sIconThemePath, icon_theme_path); if (nResult != 0) { if (pPrivate->sIconThemePath) { g_free (pPrivate->sIconThemePath); } pPrivate->sIconThemePath = g_strdup (icon_theme_path); g_free (pPrivate->sAbsoluteIconThemePath); pPrivate->sAbsoluteIconThemePath = getRealThemePath (self); g_signal_emit (self, signals[NEW_ICON_THEME_PATH], 0, pPrivate->sIconThemePath); if (pPrivate->nDbusRegistration != 0 && pPrivate->pConnection) { const gchar *sThemePath = pPrivate->sAbsoluteIconThemePath ? pPrivate->sAbsoluteIconThemePath : pPrivate->sIconThemePath; GError *pError = NULL; GVariant *pThemePath = g_variant_new ("(s)", sThemePath ? sThemePath : ""); g_dbus_connection_emit_signal (pPrivate->pConnection, NULL, pPrivate->sPath, NOTIFICATION_ITEM_DBUS_IFACE, "NewIconThemePath", pThemePath, &pError); if (pError) { g_warning ("Unable to send signal for NewIconThemePath: %s", pError->message); g_error_free (pError); } } } } /** * app_indicator_set_menu: * @self: The #AppIndicator * @menu: (allow-none): A `GMenu` to set * * Sets the menu that should be shown when the Application Indicator * is activated in the panel. An application indicator will not be * rendered unless it has a menu. * * ::: important * All menu item actions must be prefixed with the ``indicator.`` * namespace: * * GSimpleaction *pAction = g_simple_action_new ("newimage", NULL); * * ... * * GMenuItem *pItem = g_menu_item_new ("New Image", "indicator.newimage"); * * ... * * Wrapper function for property #AppIndicator:menu. */ void app_indicator_set_menu (AppIndicator *self, GMenu *pMenu) { g_return_if_fail (APP_IS_INDICATOR (self)); g_return_if_fail (G_IS_MENU (pMenu)); AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); g_clear_object (&pPrivate->pMenu); pPrivate->pMenu = pMenu; g_object_ref (pPrivate->pMenu); getConnectable (self); } /** * app_indicator_set_actions: * @self: The #AppIndicator * @actions: A `GSimpleActionGroup` to set * * Sets the action group that will be associated with the menu items. An * application indicator will not be rendered unless it has actions. * * Wrapper function for property #AppIndicator:actions. */ void app_indicator_set_actions (AppIndicator *self, GSimpleActionGroup *actions) { g_return_if_fail (APP_IS_INDICATOR (self)); g_return_if_fail (G_IS_SIMPLE_ACTION_GROUP (actions)); AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); g_clear_object (&pPrivate->pActions); pPrivate->pActions = actions; g_object_ref (pPrivate->pActions); getConnectable (self); } /** * app_indicator_set_ordering_index: * @self: The #AppIndicator * @ordering_index: A value for the ordering of this app indicator * * Sets the ordering index for the app indicator which affects its * placement on the panel. For almost all app indicators this is not the * function you're looking for. * * Wrapper function for property #AppIndicator:ordering-index. */ void app_indicator_set_ordering_index (AppIndicator *self, guint32 ordering_index) { g_return_if_fail (APP_IS_INDICATOR (self)); AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); pPrivate->nOrderingIndex = ordering_index; } /** * app_indicator_set_secondary_activate_target: * @self: The #AppIndicator * @action: (allow-none): The action to be activated on secondary activation * * Set the @action to be activated when a secondary activation event * (i.e. a middle-click) is emitted over the #AppIndicator icon/label. * * For the @action to get activated when a secondary activation occurs * in the #AppIndicator, it must be defined as a stateless #GAction with * no parameter, it needs to be enabled and associated with an item of * the #AppIndicator:menu. * * Setting @action to %NULL disables this feature. */ void app_indicator_set_secondary_activate_target (AppIndicator *self, const gchar *action) { g_return_if_fail (APP_IS_INDICATOR (self)); AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); if (pPrivate->sSecActivateTarget) { g_free (pPrivate->sSecActivateTarget); pPrivate->sSecActivateTarget = NULL; } if (action == NULL) { return; } pPrivate->sSecActivateTarget = g_strdup (action); } /** * app_indicator_set_title: * @self: The #AppIndicator * @title: (allow-none): Title of the app indicator * * Sets the title of the application indicator, or how it should be * referred to in a human readable form. This string should be UTF-8 and * localized, as it is expected that users will set it. * * Setting @title to %NULL removes the title. */ void app_indicator_set_title (AppIndicator *self, const gchar *title) { g_return_if_fail (APP_IS_INDICATOR (self)); g_object_set (G_OBJECT(self), "title", title == NULL ? "": title, NULL); } /** * app_indicator_set_tooltip: * @self: The #AppIndicator * @icon_name: (allow-none): The name of the tooltip's themed icon * @title: The tooltip's title * @description: (allow-none): The tooltip's detailed description * * If @icon_name is %NULL, the tooltip will not have an icon. * If @title is %NULL, the indicator will not have a tooltip. * If @description is %NULL, the tooltip will not have a description. * * Sets the #AppIndicator:tooltip-icon-name, #AppIndicator:tooltip-title and * #AppIndicator:tooltip-description properties. */ void app_indicator_set_tooltip (AppIndicator *self, const gchar *icon_name, const gchar *title, const gchar *description) { g_return_if_fail (APP_IS_INDICATOR (self)); AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); const gchar *sIconName = NULL; const gchar *sTitle = NULL; if (description) { sIconName = icon_name; sTitle = title; } gboolean bChanged = FALSE; gint nResult = g_strcmp0 (pPrivate->sTooltipDescription, description); if (nResult != 0) { if (pPrivate->sTooltipDescription) { g_free (pPrivate->sTooltipDescription); pPrivate->sTooltipDescription = NULL; } if (description) { pPrivate->sTooltipDescription = g_strdup (description); } bChanged = TRUE; } nResult = g_strcmp0 (pPrivate->sTooltipIcon, sIconName); if (nResult != 0) { if (pPrivate->sTooltipIcon) { g_free (pPrivate->sTooltipIcon); pPrivate->sTooltipIcon = NULL; } if (sIconName) { pPrivate->sTooltipIcon = g_strdup (sIconName); } bChanged = TRUE; } nResult = g_strcmp0 (pPrivate->sTooltipTitle, sTitle); if (nResult != 0) { if (pPrivate->sTooltipTitle) { g_free (pPrivate->sTooltipTitle); pPrivate->sTooltipTitle = NULL; } if (sTitle) { pPrivate->sTooltipTitle = g_strdup (sTitle); } bChanged = TRUE; } if (bChanged) { g_signal_emit (self, signals[NEW_TOOLTIP], 0); if (pPrivate->nDbusRegistration != 0 && pPrivate->pConnection != NULL) { GError *pError = NULL; g_dbus_connection_emit_signal (pPrivate->pConnection, NULL, pPrivate->sPath, NOTIFICATION_ITEM_DBUS_IFACE, "NewToolTip", NULL, &pError); if (pError != NULL) { g_warning ("Unable to send signal for NewToolTip: %s", pError->message); g_error_free (pError); } } } } /** * app_indicator_get_id: * @self: The #AppIndicator object to use * * Wrapper function for property #AppIndicator:id. * * Return value: The current ID */ const gchar* app_indicator_get_id (AppIndicator *self) { g_return_val_if_fail (APP_IS_INDICATOR (self), NULL); AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); return pPrivate->sId; } /** * app_indicator_get_category: * @self: The #AppIndicator object to use * * Wrapper function for property #AppIndicator:category. * * Return value: The current category */ AppIndicatorCategory app_indicator_get_category (AppIndicator *self) { g_return_val_if_fail (APP_IS_INDICATOR (self), APP_INDICATOR_CATEGORY_APPLICATION_STATUS); AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); return pPrivate->nCategory; } /** * app_indicator_get_status: * @self: The #AppIndicator object to use * * Wrapper function for property #AppIndicator:status. * * Return value: The current status */ AppIndicatorStatus app_indicator_get_status (AppIndicator *self) { g_return_val_if_fail (APP_IS_INDICATOR (self), APP_INDICATOR_STATUS_PASSIVE); AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); return pPrivate->nStatus; } /** * app_indicator_get_icon: * @self: The #AppIndicator object to use * * Wrapper function for property #AppIndicator:icon-name. * * Return value: The current icon name */ const gchar* app_indicator_get_icon (AppIndicator *self) { g_return_val_if_fail (APP_IS_INDICATOR (self), NULL); AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); return pPrivate->sIconName; } /** * app_indicator_get_icon_desc: * @self: The #AppIndicator object to use * * Wrapper function for property #AppIndicator:icon-desc. * * Return value: The current icon description */ const gchar* app_indicator_get_icon_desc (AppIndicator *self) { g_return_val_if_fail (APP_IS_INDICATOR (self), NULL); AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); return pPrivate->sAccessibleDesc; } /** * app_indicator_get_icon_theme_path: * @self: The #AppIndicator object to use * * Wrapper function for property #AppIndicator:icon-theme-path. * * Return value: The current icon theme path */ const gchar* app_indicator_get_icon_theme_path (AppIndicator *self) { g_return_val_if_fail (APP_IS_INDICATOR (self), NULL); AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); return pPrivate->sIconThemePath; } /** * app_indicator_get_attention_icon: * @self: The #AppIndicator object to use * * Wrapper function for property #AppIndicator:attention-icon-name. * * Return value: The current attention icon name */ const gchar* app_indicator_get_attention_icon (AppIndicator *self) { g_return_val_if_fail (APP_IS_INDICATOR (self), NULL); AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); return pPrivate->sAttentionIconName; } /** * app_indicator_get_attention_icon_desc: * @self: The #AppIndicator object to use * * Wrapper function for property #AppIndicator:attention-icon-desc. * * Return value: The current attention icon description */ const gchar* app_indicator_get_attention_icon_desc (AppIndicator *self) { g_return_val_if_fail (APP_IS_INDICATOR (self), NULL); AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); return pPrivate->sAttAccessibleDesc; } /** * app_indicator_get_title: * @self: The #AppIndicator object to use * * Gets the title of the application indicator. See the function * app_indicator_set_title () for information on the title. * * Return value: The current title * */ const gchar* app_indicator_get_title (AppIndicator *self) { g_return_val_if_fail (APP_IS_INDICATOR (self), NULL); AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); return pPrivate->sTitle; } /** * app_indicator_get_menu: * @self: The #AppIndicator object to use * * Gets the menu being used for this application indicator. * * Wrapper function for property #AppIndicator:menu. * * Returns: (transfer none): The `GMenu` object or %NULL if it hasn't * been set */ GMenu* app_indicator_get_menu (AppIndicator *self) { g_return_val_if_fail (APP_IS_INDICATOR (self), NULL); AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); return pPrivate->pMenu; } /** * app_indicator_get_actions: * @self: The #AppIndicator object to use * * Gets the action group associated with the menu items. * * Wrapper function for property #AppIndicator:actions. * * Returns: (transfer none): The `GSimpleActionGroup` object or %NULL if * it hasn't been set */ GSimpleActionGroup* app_indicator_get_actions (AppIndicator *self) { g_return_val_if_fail (APP_IS_INDICATOR (self), NULL); AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); return pPrivate->pActions; } /** * app_indicator_get_label: * @self: The #AppIndicator object to use * * Wrapper function for property #AppIndicator:label. * * Return value: The current label */ const gchar* app_indicator_get_label (AppIndicator *self) { g_return_val_if_fail (APP_IS_INDICATOR (self), NULL); AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); return pPrivate->sLabel; } /** * app_indicator_get_label_guide: * @self: The #AppIndicator object to use * * Wrapper function for property #AppIndicator:label-guide. * * Return value: The current label guide */ const gchar* app_indicator_get_label_guide (AppIndicator *self) { g_return_val_if_fail (APP_IS_INDICATOR (self), NULL); AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); return pPrivate->sLabelGuide; } /** * app_indicator_get_ordering_index: * @self: The #AppIndicator object to use * * Wrapper function for property #AppIndicator:ordering-index. * * Return value: The current ordering index */ guint32 app_indicator_get_ordering_index (AppIndicator *self) { g_return_val_if_fail (APP_IS_INDICATOR (self), 0); AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); if (pPrivate->nOrderingIndex == 0) { return generateId (pPrivate->nCategory, pPrivate->sId); } else { return pPrivate->nOrderingIndex; } } /** * app_indicator_get_secondary_activate_target: * @self: The #AppIndicator object to use * * Gets the action being activated on secondary-activate event. * * Returns: (transfer none): The action name or %NULL if none has been set. */ const gchar* app_indicator_get_secondary_activate_target (AppIndicator *self) { g_return_val_if_fail (APP_IS_INDICATOR (self), NULL); AppIndicatorPrivate *pPrivate = app_indicator_get_instance_private (self); return pPrivate->sSecActivateTarget; } libayatana-appindicator-glib-2.0.1/src/ayatana-appindicator-enum-types.c.in0000664000000000000000000000322115023522653023633 0ustar /*** BEGIN file-header ***/ /* An object to represent the application as an application indicator * in the system panel. * * Copyright 2009 Ted Gould * Copyright 2024 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 . */ #include "ayatana-appindicator-enum-types.h" /*** END file-header ***/ /*** BEGIN file-production ***/ #include "@basename@" /*** 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 ***/ libayatana-appindicator-glib-2.0.1/src/ayatana-appindicator-enum-types.h.in0000664000000000000000000000252615023522653023647 0ustar /*** BEGIN file-header ***/ /* An object to represent the application as an application indicator * in the system panel. * * Copyright 2009 Ted Gould * Copyright 2024 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 __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: "@basename@" */ /*** 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 ***/ libayatana-appindicator-glib-2.0.1/src/ayatana-appindicator-glib.pc.in0000664000000000000000000000065115023522653022626 0ustar prefix=@CMAKE_INSTALL_PREFIX@ exec_prefix=${prefix} libdir=@CMAKE_INSTALL_FULL_LIBDIR@ bindir=@CMAKE_INSTALL_FULL_BINDIR@ includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@ Cflags: -I${includedir}/libayatana-appindicator-glib Requires: gio-2.0 gobject-2.0 Libs: -L${libdir} -layatana-appindicator-glib Name: ayatana-appindicator-glib Description: Ayatana Application Indicators (Glib-2.0 implementation) Version: @PROJECT_VERSION@ libayatana-appindicator-glib-2.0.1/src/ayatana-appindicator.h0000664000000000000000000001504415023522653021135 0ustar /* * Copyright 2009 Ted Gould * Copyright 2009 Cody Russell * Copyright 2024 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 __APP_INDICATOR_H__ #define __APP_INDICATOR_H__ #include G_BEGIN_DECLS #define APP_INDICATOR_TYPE (app_indicator_get_type ()) #define APP_INDICATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), APP_INDICATOR_TYPE, AppIndicator)) #define APP_INDICATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), APP_INDICATOR_TYPE, AppIndicatorClass)) #define APP_IS_INDICATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), APP_INDICATOR_TYPE)) #define APP_IS_INDICATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), APP_INDICATOR_TYPE)) #define APP_INDICATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), APP_INDICATOR_TYPE, AppIndicatorClass)) /** * AppIndicatorCategory: * @APP_INDICATOR_CATEGORY_APPLICATION_STATUS: The indicator is used to display the status of the application. * @APP_INDICATOR_CATEGORY_COMMUNICATIONS: The application is used for communication with other people. * @APP_INDICATOR_CATEGORY_SYSTEM_SERVICES: A system indicator relating to something in the user's system. * @APP_INDICATOR_CATEGORY_HARDWARE: An indicator relating to the user's hardware. * @APP_INDICATOR_CATEGORY_OTHER: Something not defined in this enum, please don't use unless you really need it. * * The category provides grouping for the indicators so that * users can find indicators that are similar together. */ typedef enum { /*< prefix=APP_INDICATOR_CATEGORY >*/ APP_INDICATOR_CATEGORY_APPLICATION_STATUS, /*< nick=ApplicationStatus >*/ APP_INDICATOR_CATEGORY_COMMUNICATIONS, /*< nick=Communications >*/ APP_INDICATOR_CATEGORY_SYSTEM_SERVICES, /*< nick=SystemServices >*/ APP_INDICATOR_CATEGORY_HARDWARE, /*< nick=Hardware >*/ APP_INDICATOR_CATEGORY_OTHER /*< nick=Other >*/ } AppIndicatorCategory; /** * AppIndicatorStatus: * @APP_INDICATOR_STATUS_PASSIVE: The indicator should not be shown to the user. * @APP_INDICATOR_STATUS_ACTIVE: The indicator should be shown in it's default state. * @APP_INDICATOR_STATUS_ATTENTION: The indicator should show it's attention icon. * * These are the states that the indicator can be on in * the user's panel. The indicator by default starts * in the state @APP_INDICATOR_STATUS_PASSIVE and can be * shown by setting it to @APP_INDICATOR_STATUS_ACTIVE. */ typedef enum { /*< prefix=APP_INDICATOR_STATUS >*/ APP_INDICATOR_STATUS_PASSIVE, /*< nick=Passive >*/ APP_INDICATOR_STATUS_ACTIVE, /*< nick=Active >*/ APP_INDICATOR_STATUS_ATTENTION /*< nick=NeedsAttention >*/ } AppIndicatorStatus; /** * AppIndicator: * * An application indicator represents the values that are needed to * show a unique status in the panel for an application. In general, * applications should try to fit in the other indicators that are * available on the panel before creating a new indicator. * */ typedef struct _AppIndicator { GObject parent; } AppIndicator; typedef struct _AppIndicatorClass { GObjectClass parent_class; void (*new_icon) (AppIndicator *indicator, gpointer user_data); void (*new_attention_icon) (AppIndicator *indicator, gpointer user_data); void (*new_status) (AppIndicator *indicator, const gchar *status, gpointer user_data); void (*new_icon_theme_path) (AppIndicator *indicator, const gchar *icon_theme_path, gpointer user_data); void (*new_label) (AppIndicator *indicator, const gchar *label, const gchar *guide, gpointer user_data); void (*new_tooltip) (AppIndicator *indicator, gpointer user_data); void (*connection_changed) (AppIndicator *indicator, gboolean connected, gpointer user_data); void (*scroll_event) (AppIndicator *indicator, gint delta, guint direction, gpointer user_data); } AppIndicatorClass; GType app_indicator_get_type (); AppIndicator* app_indicator_new (const gchar *id, const gchar *icon_name, AppIndicatorCategory category); AppIndicator* app_indicator_new_with_path (const gchar *id, const gchar *icon_name, AppIndicatorCategory category, const gchar *icon_theme_path); void app_indicator_set_status (AppIndicator *self, AppIndicatorStatus status); void app_indicator_set_attention_icon (AppIndicator *self, const gchar *icon_name, const gchar *icon_desc); void app_indicator_set_menu (AppIndicator *self, GMenu *menu); void app_indicator_set_actions (AppIndicator *self, GSimpleActionGroup *actions); void app_indicator_set_icon (AppIndicator *self, const gchar *icon_name, const gchar *icon_desc); void app_indicator_set_label (AppIndicator *self, const gchar *label, const gchar *guide); void app_indicator_set_icon_theme_path (AppIndicator *self, const gchar *icon_theme_path); void app_indicator_set_ordering_index (AppIndicator *self, guint32 ordering_index); void app_indicator_set_secondary_activate_target (AppIndicator *self, const gchar *action); void app_indicator_set_title (AppIndicator *self, const gchar *title); void app_indicator_set_tooltip (AppIndicator *self, const gchar *icon_name, const gchar *title, const gchar *description); const gchar* app_indicator_get_id (AppIndicator *self); AppIndicatorCategory app_indicator_get_category (AppIndicator *self); AppIndicatorStatus app_indicator_get_status (AppIndicator *self); const gchar* app_indicator_get_icon (AppIndicator *self); const gchar* app_indicator_get_icon_desc (AppIndicator *self); const gchar* app_indicator_get_icon_theme_path (AppIndicator *self); const gchar* app_indicator_get_attention_icon (AppIndicator *self); const gchar* app_indicator_get_attention_icon_desc (AppIndicator *self); const gchar* app_indicator_get_title (AppIndicator *self); GMenu* app_indicator_get_menu (AppIndicator *self); GSimpleActionGroup* app_indicator_get_actions (AppIndicator *self); const gchar* app_indicator_get_label (AppIndicator *self); const gchar* app_indicator_get_label_guide (AppIndicator *self); guint32 app_indicator_get_ordering_index (AppIndicator *self); const gchar* app_indicator_get_secondary_activate_target (AppIndicator *self); G_END_DECLS #endif libayatana-appindicator-glib-2.0.1/src/ayatana-appindicator.symbols0000664000000000000000000000007615023522653022375 0ustar { global: app_indicator_*; local: _application_*; }; libayatana-appindicator-glib-2.0.1/src/CMakeLists.txt0000664000000000000000000001505115023522653017431 0ustar set ( SOURCES ayatana-appindicator.c ayatana-appindicator-enum-types.c application-service-marshal.c notification-item.xml.c notification-watcher.xml.c ) install (FILES "${CMAKE_CURRENT_SOURCE_DIR}/ayatana-appindicator.h" DESTINATION "${CMAKE_INSTALL_FULL_INCLUDEDIR}/libayatana-appindicator-glib") # ayatana-appindicator-glib.pc configure_file ("${CMAKE_CURRENT_SOURCE_DIR}/ayatana-appindicator-glib.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/ayatana-appindicator-glib.pc" @ONLY) install (FILES "${CMAKE_CURRENT_BINARY_DIR}/ayatana-appindicator-glib.pc" DESTINATION "${CMAKE_INSTALL_FULL_LIBDIR}/pkgconfig") # notification-item.xml.h file (WRITE "${CMAKE_CURRENT_BINARY_DIR}/notification-item.xml.h" "extern const char * _notification_item;") # notification-item.xml.c file (READ "${CMAKE_CURRENT_SOURCE_DIR}/notification-item.xml" NOTIFICATION_ITEM_XML) string (REPLACE "\"" "\\\"" NOTIFICATION_ITEM_XML ${NOTIFICATION_ITEM_XML}) string (REPLACE "\n" "\\n\"\n\"" NOTIFICATION_ITEM_XML ${NOTIFICATION_ITEM_XML}) string (REGEX REPLACE "\n\"$" "\n" NOTIFICATION_ITEM_XML ${NOTIFICATION_ITEM_XML}) string (PREPEND NOTIFICATION_ITEM_XML "const char * _notification_item = \n\"") string (APPEND NOTIFICATION_ITEM_XML "\;") file (WRITE "${CMAKE_CURRENT_BINARY_DIR}/notification-item.xml.c" ${NOTIFICATION_ITEM_XML}) # notification-watcher.xml.h file (WRITE "${CMAKE_CURRENT_BINARY_DIR}/notification-watcher.xml.h" "extern const char * _notification_watcher;") # notification-watcher.xml.c file (READ "${CMAKE_CURRENT_SOURCE_DIR}/notification-watcher.xml" NOTIFICATION_WATCHER_XML) string (REPLACE "\"" "\\\"" NOTIFICATION_WATCHER_XML ${NOTIFICATION_WATCHER_XML}) string (REPLACE "\n" "\\n\"\n\"" NOTIFICATION_WATCHER_XML ${NOTIFICATION_WATCHER_XML}) string (REGEX REPLACE "\n\"$" "\n" NOTIFICATION_WATCHER_XML ${NOTIFICATION_WATCHER_XML}) string (PREPEND NOTIFICATION_WATCHER_XML "const char * _notification_watcher = \n\"") string (APPEND NOTIFICATION_WATCHER_XML "\;") file (WRITE "${CMAKE_CURRENT_BINARY_DIR}/notification-watcher.xml.c" ${NOTIFICATION_WATCHER_XML}) # ayatana-appindicator-enum-types.h find_program(GLIB_MKENUMS glib-mkenums) add_custom_command ( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/ayatana-appindicator-enum-types.h" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ${GLIB_MKENUMS} --template ayatana-appindicator-enum-types.h.in ayatana-appindicator.h --output="${CMAKE_CURRENT_BINARY_DIR}/ayatana-appindicator-enum-types.h" ) install (FILES "${CMAKE_CURRENT_BINARY_DIR}/ayatana-appindicator-enum-types.h" DESTINATION "${CMAKE_INSTALL_FULL_INCLUDEDIR}/libayatana-appindicator-glib") # ayatana-appindicator-enum-types.c add_custom_command ( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/ayatana-appindicator-enum-types.c" DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/ayatana-appindicator-enum-types.h" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ${GLIB_MKENUMS} --template ayatana-appindicator-enum-types.c.in ayatana-appindicator.h --output="${CMAKE_CURRENT_BINARY_DIR}/ayatana-appindicator-enum-types.c" ) find_program (GLIB_GENMARSHAL glib-genmarshal) # application-service-marshal.h add_custom_command ( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/application-service-marshal.h" DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/ayatana-appindicator-enum-types.c" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ${GLIB_GENMARSHAL} --prefix=_application_service_marshal --header application-service-marshal.list --quiet --output="${CMAKE_CURRENT_BINARY_DIR}/application-service-marshal.h" ) # application-service-marshal.c add_custom_command ( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/application-service-marshal.c" DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/application-service-marshal.h" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ${GLIB_GENMARSHAL} --prefix=_application_service_marshal --body application-service-marshal.list --include-header=application-service-marshal.h --quiet --output="${CMAKE_CURRENT_BINARY_DIR}/application-service-marshal.c" ) # libayatana-appindicator-glib.so add_library ("ayatana-appindicator-glib" SHARED ${SOURCES}) set_target_properties ("ayatana-appindicator-glib" PROPERTIES VERSION 2.0.0 SOVERSION 2) target_compile_definitions ("ayatana-appindicator-glib" PUBLIC G_LOG_DOMAIN="libayatana-appindicator-glib") target_include_directories ("ayatana-appindicator-glib" PUBLIC ${DEPS_INCLUDE_DIRS}) target_include_directories ("ayatana-appindicator-glib" PUBLIC ${CMAKE_CURRENT_BINARY_DIR}) target_include_directories ("ayatana-appindicator-glib" PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) target_link_libraries ("ayatana-appindicator-glib" ${DEPS_LIBRARIES}) target_link_options ("ayatana-appindicator-glib" PRIVATE "LINKER:--version-script=${CMAKE_CURRENT_SOURCE_DIR}/ayatana-appindicator.symbols") install (TARGETS "ayatana-appindicator-glib" LIBRARY DESTINATION "${CMAKE_INSTALL_FULL_LIBDIR}") # AyatanaAppIndicatorGlib-2.0.gir find_package (GObjectIntrospection REQUIRED) add_custom_command ( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicatorGlib-2.0.gir" DEPENDS "ayatana-appindicator-glib" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ${INTROSPECTION_SCANNER} ayatana-appindicator.c ayatana-appindicator.h --add-include-path=${CMAKE_CURRENT_BINARY_DIR} --c-include=libayatana-appindicator-glib/ayatana-appindicator.h --symbol-prefix=app --identifier-prefix=App --namespace=AyatanaAppIndicatorGlib --nsversion=2.0 --quiet --warn-all --include=Gio-2.0 --include=GObject-2.0 --library-path=${CMAKE_CURRENT_BINARY_DIR} --library="ayatana-appindicator-glib" --output "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicatorGlib-2.0.gir" ) install (FILES "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicatorGlib-2.0.gir" DESTINATION "${CMAKE_INSTALL_FULL_DATADIR}/gir-1.0") # AyatanaAppIndicatorGlib-2.0.typelib add_custom_command ( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicatorGlib-2.0.typelib" DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicatorGlib-2.0.gir" WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMAND ${INTROSPECTION_COMPILER} --includedir=${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicatorGlib-2.0.gir -o "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicatorGlib-2.0.typelib" ) install (FILES "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicatorGlib-2.0.typelib" DESTINATION "${CMAKE_INSTALL_FULL_LIBDIR}/girepository-1.0") add_custom_target ("src" ALL DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicatorGlib-2.0.typelib") libayatana-appindicator-glib-2.0.1/src/dbus-shared.h0000664000000000000000000000322615023522653017244 0ustar /* DBus defaults for everyone to share in the project. * * Copyright 2009 Ted Gould * Copyright 2024 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 . */ #define DBUS_SERVICE_DBUS "org.freedesktop.DBus" #define DBUS_PATH_DBUS "/org/freedesktop/DBus" #define DBUS_INTERFACE_DBUS "org.freedesktop.DBus" #define DBUS_INTERFACE_PROPERTIES "org.freedesktop.DBus.Properties" #define DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER 1 #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 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" #define NOTIFICATION_APPROVER_DBUS_IFACE "org.ayatana.StatusNotifierApprover" libayatana-appindicator-glib-2.0.1/src/notification-item.xml0000664000000000000000000000413415023522653021035 0ustar libayatana-appindicator-glib-2.0.1/src/notification-watcher.xml0000664000000000000000000000203715023522653021534 0ustar libayatana-appindicator-glib-2.0.1/tests/CMakeLists.txt0000664000000000000000000001670715023522653020015 0ustar # test-libappindicator add_executable ("test-libappindicator" "${CMAKE_CURRENT_SOURCE_DIR}/test-libappindicator.c") target_compile_definitions ("test-libappindicator" PUBLIC SRCDIR="${CMAKE_CURRENT_SOURCE_DIR}") target_include_directories ("test-libappindicator" PUBLIC ${DEPS_INCLUDE_DIRS}) target_include_directories ("test-libappindicator" PUBLIC "${CMAKE_SOURCE_DIR}/src") target_link_libraries ("test-libappindicator" ${DEPS_LIBRARIES} ayatana-appindicator-glib) target_link_directories ("test-libappindicator" PUBLIC "${CMAKE_BINARY_DIR}/src") add_dependencies ("test-libappindicator" "ayatana-appindicator-glib") # test-libappindicator-dbus-client add_executable ("test-libappindicator-dbus-client" "${CMAKE_CURRENT_SOURCE_DIR}/test-libappindicator-dbus-client.c") target_include_directories ("test-libappindicator-dbus-client" PUBLIC ${DEPS_INCLUDE_DIRS}) target_include_directories ("test-libappindicator-dbus-client" PUBLIC "${CMAKE_SOURCE_DIR}/src") target_link_libraries ("test-libappindicator-dbus-client" ${DEPS_LIBRARIES} ayatana-appindicator-glib) target_link_directories ("test-libappindicator-dbus-client" PUBLIC "${CMAKE_BINARY_DIR}/src") add_dependencies ("test-libappindicator-dbus-client" "ayatana-appindicator-glib") # test-libappindicator-dbus-server add_executable ("test-libappindicator-dbus-server" "${CMAKE_CURRENT_SOURCE_DIR}/test-libappindicator-dbus-server.c") target_include_directories ("test-libappindicator-dbus-server" PUBLIC ${DEPS_INCLUDE_DIRS}) target_include_directories ("test-libappindicator-dbus-server" PUBLIC "${CMAKE_SOURCE_DIR}/src") target_link_libraries ("test-libappindicator-dbus-server" ${DEPS_LIBRARIES} ayatana-appindicator-glib) target_link_directories ("test-libappindicator-dbus-server" PUBLIC "${CMAKE_BINARY_DIR}/src") add_dependencies ("test-libappindicator-dbus-server" "ayatana-appindicator-glib") # test-libappindicator-status-client add_executable ("test-libappindicator-status-client" "${CMAKE_CURRENT_SOURCE_DIR}/test-libappindicator-status-client.c") target_include_directories ("test-libappindicator-status-client" PUBLIC ${DEPS_INCLUDE_DIRS}) target_link_libraries ("test-libappindicator-status-client" ${DEPS_LIBRARIES} ayatana-appindicator-glib) target_link_directories ("test-libappindicator-status-client" PUBLIC "${CMAKE_BINARY_DIR}/src") add_dependencies ("test-libappindicator-status-client" "ayatana-appindicator-glib") # test-libappindicator-status-server add_executable ("test-libappindicator-status-server" "${CMAKE_CURRENT_SOURCE_DIR}/test-libappindicator-status-server.c") target_include_directories ("test-libappindicator-status-server" PUBLIC ${DEPS_INCLUDE_DIRS}) target_include_directories ("test-libappindicator-status-server" PUBLIC "${CMAKE_SOURCE_DIR}/src") target_link_libraries ("test-libappindicator-status-server" ${DEPS_LIBRARIES} ayatana-appindicator-glib) target_link_directories ("test-libappindicator-status-server" PUBLIC "${CMAKE_BINARY_DIR}/src") add_dependencies ("test-libappindicator-status-server" "ayatana-appindicator-glib") # test-simple-app add_executable ("test-simple-app" "${CMAKE_CURRENT_SOURCE_DIR}/test-simple-app.c") target_include_directories ("test-simple-app" PUBLIC ${DEPS_INCLUDE_DIRS}) target_include_directories ("test-simple-app" PUBLIC "${CMAKE_SOURCE_DIR}/src") target_link_libraries ("test-simple-app" ${DEPS_LIBRARIES} ayatana-appindicator-glib) target_link_directories ("test-simple-app" PUBLIC "${CMAKE_BINARY_DIR}/src") add_dependencies ("test-simple-app" "ayatana-appindicator-glib") find_program (DBUS_TEST_RUNNER dbus-test-runner) # test-libappindicator-dbus add_custom_command ( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-dbus" DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-dbus-client" DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-dbus-server" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} VERBATIM COMMAND echo "#!/bin/sh" > "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-dbus" COMMAND echo "export DISPLAY=" >> "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-dbus" COMMAND echo ". ${CMAKE_CURRENT_SOURCE_DIR}/run-xvfb.sh" >> "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-dbus" COMMAND echo "${DBUS_TEST_RUNNER} --keep-env -m 300 --dbus-config /usr/share/dbus-test-runner/session.conf --task ${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-dbus-client --task-name Client --ignore-return --task ${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-dbus-server --task-name Server" >> "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-dbus" COMMAND chmod +x "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-dbus" ) add_test ("test-libappindicator-dbus" "test-libappindicator-dbus") # test-libappindicator-status add_custom_command ( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-status" DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-status-client" DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-status-server" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} VERBATIM COMMAND echo "#!/bin/sh" > "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-status" COMMAND echo "export DISPLAY=" >> "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-status" COMMAND echo ". ${CMAKE_CURRENT_SOURCE_DIR}/run-xvfb.sh" >> "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-status" COMMAND echo "${DBUS_TEST_RUNNER} --keep-env -m 300 --dbus-config /usr/share/dbus-test-runner/session.conf --task ${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-status-client --task-name Client --ignore-return --task ${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-status-server --task-name Server" >> "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-status" COMMAND chmod +x "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-status" ) add_test ("test-libappindicator-status" "test-libappindicator-status") # libappindicator-tests-gtester add_custom_command ( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/libappindicator-tests-gtester" DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} VERBATIM COMMAND echo "#!/bin/sh" > "${CMAKE_CURRENT_BINARY_DIR}/libappindicator-tests-gtester" COMMAND echo "gtester -k --verbose -o=${CMAKE_CURRENT_BINARY_DIR}/libappindicator-check-results.xml ${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator" >> "${CMAKE_CURRENT_BINARY_DIR}/libappindicator-tests-gtester" COMMAND chmod +x "${CMAKE_CURRENT_BINARY_DIR}/libappindicator-tests-gtester" ) # libappindicator-tests add_custom_command ( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/libappindicator-tests" DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/libappindicator-tests-gtester" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} VERBATIM COMMAND echo "#!/bin/sh" > "${CMAKE_CURRENT_BINARY_DIR}/libappindicator-tests" COMMAND echo "export DISPLAY=" >> "${CMAKE_CURRENT_BINARY_DIR}/libappindicator-tests" COMMAND echo ". ${CMAKE_CURRENT_SOURCE_DIR}/run-xvfb.sh" >> "${CMAKE_CURRENT_BINARY_DIR}/libappindicator-tests" COMMAND echo "${DBUS_TEST_RUNNER} --keep-env -m 300 --dbus-config /usr/share/dbus-test-runner/session.conf --task ${CMAKE_CURRENT_BINARY_DIR}/libappindicator-tests-gtester" >> "${CMAKE_CURRENT_BINARY_DIR}/libappindicator-tests" COMMAND chmod +x "${CMAKE_CURRENT_BINARY_DIR}/libappindicator-tests" ) add_test ("libappindicator-tests" "libappindicator-tests") add_custom_target ("tests" ALL DEPENDS "test-libappindicator-dbus" "test-libappindicator-status" "libappindicator-tests") libayatana-appindicator-glib-2.0.1/tests/run-xvfb.sh0000664000000000000000000000156515023522653017354 0ustar if [ "$DISPLAY" = "" ]; then Xvfb -ac -noreset -screen 0 800x600x16 -help 2>/dev/null 1>&2 XID=`for id in 101 102 103 104 105 106 107 197 199 211 223 227 293 307 308 309 310 311 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 4703 4721 4723 4729 4733 4751 9973 9974 9975 9976 9977 9978 9979 9980 9981 9982 9983 9984 9985 9986 9987 9988 9989 9990 9991 9992 9993 9994 9995 9996 9997 9998 9999 ; do test -e /tmp/.X$id-lock || { echo $id; exit 0; }; done; exit 1` { Xvfb -ac -noreset -screen 0 800x600x16 :$XID -screen 0 800x600x16 -nolisten tcp -auth /dev/null >/dev/null 2>&1 & trap "kill -15 $! " 0 HUP INT QUIT TRAP USR1 PIPE TERM ; } || { echo "Gtk+Tests:ERROR: Failed to start Xvfb environment for X11 target tests."; exit 1; } DISPLAY=:$XID export DISPLAY sleep 10 fi libayatana-appindicator-glib-2.0.1/tests/test-defines.h0000664000000000000000000000201015023522653017776 0ustar /* * Testing defines to be shared between various tests. * * Copyright 2009 Ted Gould * Copyright 2024 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 . */ #define TEST_ID "my-id" #define TEST_ICON_NAME "my-icon-name" #define TEST_ATTENTION_ICON_NAME "my-attention-icon-name" #define TEST_STATE APP_INDICATOR_STATUS_ACTIVE #define TEST_STATE_S "Active" #define TEST_CATEGORY APP_INDICATOR_CATEGORY_APPLICATION_STATUS libayatana-appindicator-glib-2.0.1/tests/test-libappindicator.c0000664000000000000000000002543115023522653021534 0ustar /* * Tests for the libappindicator library. * * Copyright 2009 Ted Gould * Copyright 2023-2024 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 . */ #include void onStatus (AppIndicator *pIndicator, gchar *sStatus, gboolean *bActivated) { *bActivated = TRUE; } void onSignal (AppIndicator *pIndicator, gboolean *bActivated) { *bActivated = TRUE; } void propSignals () { AppIndicator *pIndicator = app_indicator_new ("test-app-indicator", "indicator-messages", APP_INDICATOR_CATEGORY_APPLICATION_STATUS); g_assert (pIndicator != NULL); gboolean bSignaled = FALSE; gulong nHandler = 0; nHandler = g_signal_connect (G_OBJECT (pIndicator), "new-icon", G_CALLBACK (onSignal), &bSignaled); g_assert (nHandler != 0); nHandler = g_signal_connect (G_OBJECT (pIndicator), "new-attention-icon", G_CALLBACK (onSignal), &bSignaled); g_assert (nHandler != 0); nHandler = g_signal_connect (G_OBJECT (pIndicator), "new-status", G_CALLBACK (onStatus), &bSignaled); g_assert (nHandler != 0); bSignaled = FALSE; app_indicator_set_icon (pIndicator, "bob", NULL); g_assert (bSignaled); bSignaled = FALSE; app_indicator_set_icon (pIndicator, "bob", NULL); g_assert (!bSignaled); bSignaled = FALSE; app_indicator_set_icon (pIndicator, "al", NULL); g_assert (bSignaled); bSignaled = FALSE; app_indicator_set_attention_icon (pIndicator, "bob", NULL); g_assert (bSignaled); bSignaled = FALSE; app_indicator_set_attention_icon (pIndicator, "bob", NULL); g_assert (!bSignaled); bSignaled = FALSE; app_indicator_set_attention_icon (pIndicator, "al", NULL); g_assert (bSignaled); bSignaled = FALSE; app_indicator_set_status (pIndicator, APP_INDICATOR_STATUS_PASSIVE); g_assert (!bSignaled); bSignaled = FALSE; app_indicator_set_status (pIndicator, APP_INDICATOR_STATUS_ACTIVE); g_assert (bSignaled); bSignaled = FALSE; app_indicator_set_status (pIndicator, APP_INDICATOR_STATUS_ACTIVE); g_assert(!bSignaled); bSignaled = FALSE; app_indicator_set_status (pIndicator, APP_INDICATOR_STATUS_ATTENTION); g_assert (bSignaled); } void initSetProps () { AppIndicator *pIndicator = app_indicator_new ("my-id", "my-name", APP_INDICATOR_CATEGORY_APPLICATION_STATUS); g_assert (pIndicator != NULL); app_indicator_set_status (pIndicator, APP_INDICATOR_STATUS_ACTIVE); app_indicator_set_attention_icon (pIndicator, "my-attention-name", NULL); app_indicator_set_title (pIndicator, "My Title"); const gchar *sId = app_indicator_get_id (pIndicator); gint nCompare = g_strcmp0 ("my-id", sId); g_assert (!nCompare); const gchar *sIcon = app_indicator_get_icon (pIndicator); nCompare = g_strcmp0 ("my-name", sIcon); g_assert (!nCompare); const gchar *sAttentionIcon = app_indicator_get_attention_icon (pIndicator); nCompare = g_strcmp0 ("my-attention-name", sAttentionIcon); g_assert (!nCompare); const gchar *sTitle = app_indicator_get_title (pIndicator); nCompare = g_strcmp0 ("My Title", sTitle); g_assert (!nCompare); AppIndicatorStatus nStatus = app_indicator_get_status (pIndicator); g_assert (nStatus == APP_INDICATOR_STATUS_ACTIVE); AppIndicatorCategory nCategory = app_indicator_get_category (pIndicator); g_assert (nCategory == APP_INDICATOR_CATEGORY_APPLICATION_STATUS); g_object_unref (G_OBJECT (pIndicator)); } void initProps () { AppIndicator *pIndicator = app_indicator_new ("my-id", "my-name", APP_INDICATOR_CATEGORY_APPLICATION_STATUS); app_indicator_set_status (pIndicator, APP_INDICATOR_STATUS_ACTIVE); app_indicator_set_attention_icon (pIndicator, "my-attention-name", NULL); g_assert (pIndicator != NULL); const gchar *sId = app_indicator_get_id (pIndicator); gint nCompare = g_strcmp0 ("my-id", sId); g_assert (!nCompare); const gchar *sIcon = app_indicator_get_icon (pIndicator); nCompare = g_strcmp0 ("my-name", sIcon); g_assert (!nCompare); const gchar *sAttentionIcon = app_indicator_get_attention_icon (pIndicator); nCompare = g_strcmp0 ("my-attention-name", sAttentionIcon); g_assert (!nCompare); AppIndicatorStatus nStatus = app_indicator_get_status (pIndicator); g_assert (nStatus == APP_INDICATOR_STATUS_ACTIVE); AppIndicatorCategory nCategory = app_indicator_get_category (pIndicator); g_assert (nCategory == APP_INDICATOR_CATEGORY_APPLICATION_STATUS); g_object_unref (G_OBJECT (pIndicator)); } void init () { AppIndicator *pIndicator = app_indicator_new ("my-id", "my-name", APP_INDICATOR_CATEGORY_APPLICATION_STATUS); g_assert (pIndicator != NULL); g_object_unref (G_OBJECT (pIndicator)); } void setLabel () { AppIndicator *pIndicator = app_indicator_new ("my-id", "my-name", APP_INDICATOR_CATEGORY_APPLICATION_STATUS); g_assert (pIndicator != NULL); const gchar *sLabel = app_indicator_get_label (pIndicator); g_assert (sLabel == NULL); const gchar *sLabelGuide = app_indicator_get_label_guide (pIndicator); g_assert (sLabelGuide == NULL); // First check all the clearing modes, this is important as we're going to use them later, we need them to work. app_indicator_set_label (pIndicator, NULL, NULL); sLabel = app_indicator_get_label (pIndicator); g_assert (sLabel == NULL); sLabelGuide = app_indicator_get_label_guide (pIndicator); g_assert (sLabelGuide == NULL); app_indicator_set_label (pIndicator, "", NULL); sLabel = app_indicator_get_label (pIndicator); g_assert (sLabel == NULL); sLabelGuide = app_indicator_get_label_guide (pIndicator); g_assert (sLabelGuide == NULL); app_indicator_set_label (pIndicator, NULL, ""); sLabel = app_indicator_get_label (pIndicator); g_assert (sLabel == NULL); sLabelGuide = app_indicator_get_label_guide (pIndicator); g_assert (sLabelGuide == NULL); app_indicator_set_label (pIndicator, "", ""); sLabel = app_indicator_get_label (pIndicator); g_assert (sLabel == NULL); sLabelGuide = app_indicator_get_label_guide (pIndicator); g_assert(sLabelGuide == NULL); app_indicator_set_label (pIndicator, "label", ""); sLabel = app_indicator_get_label (pIndicator); gint nCompare = g_strcmp0 (sLabel, "label"); g_assert (nCompare == 0); sLabelGuide = app_indicator_get_label_guide (pIndicator); g_assert (sLabelGuide == NULL); app_indicator_set_label (pIndicator, NULL, NULL); sLabel = app_indicator_get_label (pIndicator); g_assert (sLabel == NULL); sLabelGuide = app_indicator_get_label_guide (pIndicator); g_assert(sLabelGuide == NULL); app_indicator_set_label (pIndicator, "label", "guide"); sLabel = app_indicator_get_label (pIndicator); nCompare = g_strcmp0 (sLabel, "label"); g_assert (nCompare == 0); sLabelGuide = app_indicator_get_label_guide (pIndicator); nCompare = g_strcmp0 (sLabelGuide, "guide"); g_assert (nCompare == 0); app_indicator_set_label (pIndicator, "label2", "guide"); sLabel = app_indicator_get_label (pIndicator); nCompare = g_strcmp0 (sLabel, "label2"); g_assert (nCompare == 0); sLabelGuide = app_indicator_get_label_guide (pIndicator); nCompare = g_strcmp0 (sLabelGuide, "guide"); g_assert (nCompare == 0); app_indicator_set_label (pIndicator, "trick-label", "trick-guide"); sLabel = app_indicator_get_label (pIndicator); nCompare = g_strcmp0 (sLabel, "trick-label"); g_assert (nCompare == 0); sLabelGuide = app_indicator_get_label_guide (pIndicator); nCompare = g_strcmp0 (sLabelGuide, "trick-guide"); g_assert (nCompare == 0); g_object_unref (G_OBJECT (pIndicator)); } void onLabelSignals (AppIndicator *pIndicator, gchar *sLabel, gchar *sGuide, gpointer pData) { gint *nCount = (gint*) pData; (*nCount)++; } void labelSignalsCheck () { while (g_main_context_pending (NULL)) { g_main_context_iteration (NULL, TRUE); } } void labelSignals () { gint nLabelSignals = 0; AppIndicator *pIndicator = app_indicator_new ("my-id", "my-name", APP_INDICATOR_CATEGORY_APPLICATION_STATUS); g_assert (pIndicator != NULL); const gchar *sLabel = app_indicator_get_label (pIndicator); g_assert (sLabel == NULL); const gchar *sLabelGuide = app_indicator_get_label_guide (pIndicator); g_assert (sLabelGuide == NULL); g_signal_connect (G_OBJECT (pIndicator), "new-label", G_CALLBACK (onLabelSignals), &nLabelSignals); // Shouldn't be a signal as it should be stuck in idle app_indicator_set_label (pIndicator, "label", "guide"); g_assert (nLabelSignals == 0); // Should show up after idle processing labelSignalsCheck (); g_assert (nLabelSignals == 1); // Shouldn't signal with no change nLabelSignals = 0; app_indicator_set_label (pIndicator, "label", "guide"); labelSignalsCheck (); g_assert (nLabelSignals == 0); // Change one, we should get one signal app_indicator_set_label (pIndicator, "label2", "guide"); labelSignalsCheck (); g_assert (nLabelSignals == 1); // Change several times, one signal nLabelSignals = 0; app_indicator_set_label (pIndicator, "label1", "guide0"); app_indicator_set_label (pIndicator, "label1", "guide1"); app_indicator_set_label (pIndicator, "label2", "guide2"); app_indicator_set_label (pIndicator, "label3", "guide3"); labelSignalsCheck (); g_assert (nLabelSignals == 1); // Clear should signal too nLabelSignals = 0; app_indicator_set_label (pIndicator, NULL, NULL); labelSignalsCheck (); g_assert (nLabelSignals == 1); } gint main (gint argc, gchar * argv[]) { g_test_init (&argc, &argv, NULL); g_test_add_func ("/indicator-application/libappindicator/init", init); g_test_add_func ("/indicator-application/libappindicator/init_props", initProps); g_test_add_func ("/indicator-application/libappindicator/init_set_props", initSetProps); g_test_add_func ("/indicator-application/libappindicator/prop_signals", propSignals); g_test_add_func ("/indicator-application/libappindicator/set_label", setLabel); g_test_add_func ("/indicator-application/libappindicator/label_signals", labelSignals); return g_test_run (); } libayatana-appindicator-glib-2.0.1/tests/test-libappindicator-dbus-client.c0000664000000000000000000002601215023522653023737 0ustar /* * Tests for the libappindicator library that are over DBus. This is * the client side of those tests. * * Copyright 2009 Ted Gould * Copyright 2023-2024 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 . */ #include #include "test-defines.h" #include "../src/dbus-shared.h" static GMainLoop *m_pMainLoop = NULL; static gboolean m_bPassed = TRUE; static int m_nPropCount = 0; static void checkPropCount (void) { if (m_nPropCount >= 6) { g_main_loop_quit (m_pMainLoop); } return; } static void onPropId (GObject *pObject, GAsyncResult *pResult, void *pData) { m_nPropCount++; GError *pError = NULL; GVariant *pParams = g_dbus_proxy_call_finish (G_DBUS_PROXY (pObject), pResult, &pError); if (pParams) { gchar *sInterface = NULL; gchar *sId = NULL; g_variant_get (pParams, "(ss)", &sInterface, &sId); gint nComp = g_strcmp0 (TEST_ID, sId); if (nComp) { g_debug ("Property ID Returned: FAILED"); m_bPassed = FALSE; } else { g_debug ("Property ID Returned: PASSED"); } g_variant_unref (pParams); } if (pError) { g_warning ("Getting ID failed: %s", pError->message); g_error_free (pError); m_bPassed = FALSE; checkPropCount (); return; } checkPropCount (); return; } static void onPropCategory (GObject *pObject, GAsyncResult *pResult, void *pData) { m_nPropCount++; GError *pError = NULL; GVariant *pParams = g_dbus_proxy_call_finish (G_DBUS_PROXY (pObject), pResult, &pError); if (pParams) { gchar *sInterface = NULL; gchar *sCategory = NULL; g_variant_get (pParams, "(ss)", &sInterface, &sCategory); gint nComp = g_strcmp0 ("ApplicationStatus", sCategory); if (nComp) { g_debug ("Property category Returned: FAILED"); m_bPassed = FALSE; } else { g_debug ("Property category Returned: PASSED"); } g_variant_unref (pParams); } if (pError) { g_warning ("Getting category failed: %s", pError->message); g_error_free (pError); m_bPassed = FALSE; checkPropCount (); return; } checkPropCount (); return; } static void onPropStatus (GObject *pObject, GAsyncResult *pResult, void *pData) { m_nPropCount++; GError *pError = NULL; GVariant *pParams = g_dbus_proxy_call_finish (G_DBUS_PROXY (pObject), pResult, &pError); if (pParams) { gchar *sInterface = NULL; gchar *sStatus = NULL; g_variant_get (pParams, "(ss)", &sInterface, &sStatus); gint nComp = g_strcmp0 (TEST_STATE_S, sStatus); if (nComp) { g_debug ("Property status Returned: FAILED"); m_bPassed = FALSE; } else { g_debug ("Property status Returned: PASSED"); } g_variant_unref (pParams); } if (pError) { g_warning ("Getting status failed: %s", pError->message); g_error_free (pError); m_bPassed = FALSE; checkPropCount (); return; } checkPropCount (); return; } static void onPropIconName (GObject *pObject, GAsyncResult *pResult, void *pData) { m_nPropCount++; GError *pError = NULL; GVariant *pParams = g_dbus_proxy_call_finish (G_DBUS_PROXY (pObject), pResult, &pError); if (pParams) { gchar *sInterface = NULL; gchar *sIcon = NULL; g_variant_get (pParams, "(ss)", &sInterface, &sIcon); gint nComp = g_strcmp0 (TEST_ICON_NAME, sIcon); if (nComp) { g_debug ("Property icon name Returned: FAILED"); m_bPassed = FALSE; } else { g_debug ("Property icon name Returned: PASSED"); } g_variant_unref (pParams); } if (pError) { g_warning ("Getting icon name failed: %s", pError->message); g_error_free (pError); m_bPassed = FALSE; checkPropCount (); return; } checkPropCount (); return; } static void onPropAttentionIconName (GObject *pObject, GAsyncResult *pResult, void *pData) { m_nPropCount++; GError *pError = NULL; GVariant *pParams = g_dbus_proxy_call_finish (G_DBUS_PROXY (pObject), pResult, &pError); if (pParams) { gchar *sInterface = NULL; gchar *sAttentionIcon = NULL; g_variant_get (pParams, "(ss)", &sInterface, &sAttentionIcon); gint nComp = g_strcmp0 (TEST_ATTENTION_ICON_NAME, sAttentionIcon); if (nComp) { g_debug ("Property attention icon name Returned: FAILED"); m_bPassed = FALSE; } else { g_debug ("Property attention icon name Returned: PASSED"); } g_variant_unref (pParams); } if (pError) { g_warning ("Getting attention icon name failed: %s", pError->message); g_error_free (pError); m_bPassed = FALSE; checkPropCount (); return; } checkPropCount (); return; } static void onPropTooltip (GObject *pObject, GAsyncResult *pResult, void *pData) { m_nPropCount++; GError *pError = NULL; GVariant *pParams = g_dbus_proxy_call_finish (G_DBUS_PROXY (pObject), pResult, &pError); if (pParams) { gchar *sInterface = NULL; gchar *sIcon = NULL; gchar *sTitle = NULL; gchar *sDescription = NULL; g_variant_get (pParams, "(ssa(iiay)ss)", &sInterface, &sIcon, NULL, &sTitle, &sDescription); gint nComp = g_strcmp0 (TEST_ICON_NAME, sIcon); if (nComp) { g_debug ("Property tooltip icon name Returned: FAILED"); m_bPassed = FALSE; } else { g_debug ("Property tooltip icon name Returned: PASSED"); } nComp = g_strcmp0 ("tooltip-title", sTitle); if (nComp) { g_debug ("Property tooltip title Returned: FAILED"); m_bPassed = FALSE; } else { g_debug ("Property tooltip title Returned: PASSED"); } nComp = g_strcmp0 ("tooltip-description", sDescription); if (nComp) { g_debug ("Property tooltip description Returned: FAILED"); m_bPassed = FALSE; } else { g_debug ("Property tooltip description Returned: PASSED"); } g_variant_unref (pParams); } if (pError) { g_warning ("Getting tooltip failed: %s", pError->message); g_error_free (pError); m_bPassed = FALSE; checkPropCount (); return; } checkPropCount (); return; } gboolean onKill (gpointer pData) { g_main_loop_quit (m_pMainLoop); g_warning ("Forced to Kill"); m_bPassed = FALSE; return FALSE; } static GDBusMessage* onDbusFilter (GDBusConnection *pConnection, GDBusMessage *pMessage, gboolean bIncoming, void *pData) { GDBusMessageType cType = g_dbus_message_get_message_type (pMessage); const gchar *sInterface = g_dbus_message_get_interface (pMessage); const gchar *sMember = g_dbus_message_get_member (pMessage); int nInterfaceComp = g_strcmp0 (sInterface, NOTIFICATION_WATCHER_DBUS_ADDR); int nMemberComp = g_strcmp0 (sMember, "RegisterStatusNotifierItem"); if (cType == G_DBUS_MESSAGE_TYPE_METHOD_CALL && nInterfaceComp == 0 && nMemberComp == 0) { GDBusMessage *pReply = g_dbus_message_new_method_reply (pMessage); g_dbus_connection_send_message (pConnection, pReply, G_DBUS_SEND_MESSAGE_FLAGS_NONE, NULL, NULL); g_object_unref (pReply); g_object_unref (pMessage); pMessage = NULL; } return pMessage; } gint main (gint argc, gchar * argv[]) { GError *pError = NULL; GDBusProxy *pProxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION, G_DBUS_PROXY_FLAGS_NONE, NULL, DBUS_SERVICE_DBUS, DBUS_PATH_DBUS, DBUS_INTERFACE_DBUS, NULL, &pError); if (pError != NULL) { g_error ("Unable to get session bus: %s", pError->message); g_error_free (pError); return 1; } GDBusConnection *pConnection = g_dbus_proxy_get_connection (pProxy); guint nName = g_bus_own_name_on_connection (pConnection, NOTIFICATION_WATCHER_DBUS_ADDR, G_BUS_NAME_OWNER_FLAGS_NONE, NULL, NULL, NULL, NULL); if (!nName) { g_error ("Unable to call to request name"); return 1; } if (nName != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) { g_error ("Unable to get name"); return 1; } g_dbus_connection_add_filter (pConnection, onDbusFilter, NULL, NULL); g_usleep (500000); GDBusProxy *pProps = g_dbus_proxy_new_sync (pConnection, G_DBUS_PROXY_FLAGS_NONE, NULL, ":1.2", "/org/ayatana/appindicator/my_id", DBUS_INTERFACE_PROPERTIES, NULL, &pError); if (pError != NULL) { g_error ("Unable to get property proxy: %s", pError->message); g_error_free (pError); return 1; } g_dbus_proxy_call (pProps, "Get", g_variant_new ("(ss)", NOTIFICATION_ITEM_DBUS_IFACE, "Id"), G_DBUS_CALL_FLAGS_NONE, -1, NULL, (GAsyncReadyCallback) onPropId, NULL); g_dbus_proxy_call (pProps, "Get", g_variant_new ("(ss)", NOTIFICATION_ITEM_DBUS_IFACE, "Category"), G_DBUS_CALL_FLAGS_NONE, -1, NULL, (GAsyncReadyCallback) onPropCategory, NULL); g_dbus_proxy_call (pProps, "Get", g_variant_new ("(ss)", NOTIFICATION_ITEM_DBUS_IFACE, "Status"), G_DBUS_CALL_FLAGS_NONE, -1, NULL, (GAsyncReadyCallback) onPropStatus, NULL); g_dbus_proxy_call (pProps, "Get", g_variant_new ("(ss)", NOTIFICATION_ITEM_DBUS_IFACE, "IconName"), G_DBUS_CALL_FLAGS_NONE, -1, NULL, (GAsyncReadyCallback) onPropIconName, NULL); g_dbus_proxy_call (pProps, "Get", g_variant_new ("(ss)", NOTIFICATION_ITEM_DBUS_IFACE, "AttentionIconName"), G_DBUS_CALL_FLAGS_NONE, -1, NULL, (GAsyncReadyCallback) onPropAttentionIconName, NULL); g_dbus_proxy_call (pProps, "Get", g_variant_new ("(ss)", NOTIFICATION_ITEM_DBUS_IFACE, "ToolTip"), G_DBUS_CALL_FLAGS_NONE, -1, NULL, (GAsyncReadyCallback) onPropTooltip, NULL); g_timeout_add_seconds (2, onKill, NULL); m_pMainLoop = g_main_loop_new (NULL, FALSE); g_main_loop_run (m_pMainLoop); if (m_bPassed) { g_debug ("Quiting"); return 0; } else { g_debug ("Quiting as we're a failure"); return 1; } return 0; } libayatana-appindicator-glib-2.0.1/tests/test-libappindicator-dbus-server.c0000664000000000000000000000421415023522653023767 0ustar /* * Tests for the libappindicator library that are over DBus. This is * the server side of those tests. * * Copyright 2009 Ted Gould * Copyright 2023-2024 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 . */ #include #include "test-defines.h" static GMainLoop *m_pMainLoop = NULL; gboolean onKill (gpointer pData) { g_main_loop_quit (m_pMainLoop); return FALSE; } gint main (gint argc, gchar * argv[]) { AppIndicator *pIndicator = app_indicator_new (TEST_ID, TEST_ICON_NAME, TEST_CATEGORY); app_indicator_set_status (pIndicator, TEST_STATE); app_indicator_set_attention_icon (pIndicator, TEST_ATTENTION_ICON_NAME, NULL); app_indicator_set_tooltip (pIndicator, TEST_ICON_NAME, "tooltip-title", "tooltip-description"); GSimpleActionGroup *pActions = g_simple_action_group_new (); GSimpleAction *pSimpleAction = g_simple_action_new ("test", NULL); g_action_map_add_action (G_ACTION_MAP (pActions), G_ACTION (pSimpleAction)); g_object_unref (pSimpleAction); GMenu *pMenu = g_menu_new (); GMenuItem *pItem = g_menu_item_new ("Test", "indicator.test"); g_menu_append_item (pMenu, pItem); g_object_unref (pItem); app_indicator_set_menu (pIndicator, pMenu); g_object_unref (pMenu); app_indicator_set_actions (pIndicator, pActions); g_object_unref (pActions); g_timeout_add_seconds (2, onKill, NULL); m_pMainLoop = g_main_loop_new (NULL, FALSE); g_main_loop_run (m_pMainLoop); g_object_unref (G_OBJECT (pIndicator)); g_debug ("Quiting"); return 0; } libayatana-appindicator-glib-2.0.1/tests/test-libappindicator-status-client.c0000664000000000000000000001062315023522653024326 0ustar /* * Tests for the libappindicator library that are over DBus. This is * the client side of those tests. * * Copyright 2009 Ted Gould * Copyright 2023-2024 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 . */ #include #include "../src/dbus-shared.h" static GMainLoop *m_pMainLoop = NULL; static gboolean m_bPassed = TRUE; static gboolean m_bWatchdogHit = TRUE; static gboolean m_bActive = FALSE; static guint m_nToggleCount = 0; static GDBusMessage* dbusFilter (GDBusConnection *pConnection, GDBusMessage *pMessage, gboolean bIncoming, void *pUserData) { GDBusMessageType cType = g_dbus_message_get_message_type (pMessage); const gchar *sInterface = g_dbus_message_get_interface (pMessage); const gchar *sMember = g_dbus_message_get_member (pMessage); int nInterfaceComp = g_strcmp0 (sInterface, NOTIFICATION_WATCHER_DBUS_ADDR); int nMemberComp = g_strcmp0 (sMember, "RegisterStatusNotifierItem"); if (cType == G_DBUS_MESSAGE_TYPE_METHOD_CALL && nInterfaceComp == 0 && nMemberComp == 0) { GDBusMessage *pReply = g_dbus_message_new_method_reply (pMessage); g_dbus_connection_send_message (pConnection, pReply, G_DBUS_SEND_MESSAGE_FLAGS_NONE, NULL, NULL); g_object_unref (pReply); g_object_unref (pMessage); pMessage = NULL; } return pMessage; } void onNewStatus (GDBusConnection* pConnection, const gchar *sSender, const gchar *sPath, const gchar *sInterface, const gchar *sSignal, GVariant *pParameters, gpointer pUserData) { const gchar *sParam = NULL; g_variant_get (pParameters, "(s)", &sParam); if (!sParam) { g_warning ("Couldn't get parameter"); return; } m_bWatchdogHit = TRUE; int nComp = g_strcmp0 (sParam, "Active"); if (!nComp) { if (m_bActive) { g_warning ("Got active when already active"); m_bPassed = FALSE; return; } m_bActive = TRUE; } else { m_bActive = FALSE; } m_nToggleCount++; if (m_nToggleCount == 100) { g_main_loop_quit (m_pMainLoop); } } gboolean onKill (gpointer pData) { if (m_bWatchdogHit == FALSE) { g_main_loop_quit (m_pMainLoop); g_warning ("Forced to Kill"); g_warning ("Toggle count: %d", m_nToggleCount); m_bPassed = FALSE; return FALSE; } m_bWatchdogHit = FALSE; return TRUE; } gint main (gint argc, gchar * argv[]) { GError *pError = NULL; GDBusProxy *pProxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION, G_DBUS_PROXY_FLAGS_NONE, NULL, DBUS_SERVICE_DBUS, DBUS_PATH_DBUS, DBUS_INTERFACE_DBUS, NULL, &pError); if (pError != NULL) { g_error ("Unable to get session bus: %s", pError->message); g_error_free (pError); return 1; } GDBusConnection *pConnection = g_dbus_proxy_get_connection (pProxy); guint nName = g_bus_own_name_on_connection (pConnection, NOTIFICATION_WATCHER_DBUS_ADDR, G_BUS_NAME_OWNER_FLAGS_NONE, NULL, NULL, NULL, NULL); if (!nName) { g_error ("Unable to call to request name"); return 1; } if (nName != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) { g_error ("Unable to get name"); return 1; } g_dbus_connection_add_filter (pConnection, dbusFilter, NULL, NULL); g_dbus_connection_signal_subscribe (pConnection, NULL, NOTIFICATION_ITEM_DBUS_IFACE, "NewStatus", NULL, NULL, G_DBUS_SIGNAL_FLAGS_NONE, onNewStatus, NULL, NULL); m_bWatchdogHit = TRUE; g_timeout_add_seconds (20, onKill, NULL); m_pMainLoop = g_main_loop_new (NULL, FALSE); g_main_loop_run (m_pMainLoop); if (m_bPassed) { g_debug ("Quiting"); return 0; } else { g_debug ("Quiting as we're a failure"); return 1; } return 0; } libayatana-appindicator-glib-2.0.1/tests/test-libappindicator-status-server.c0000664000000000000000000000544215023522653024361 0ustar /* * Tests for the libappindicator library that are over DBus. This is * the server side of those tests. * * Copyright 2009 Ted Gould * Copyright 2023-2024 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 . */ #include static GMainLoop *m_pMainLoop = NULL; static gboolean m_bActive = FALSE; static guint m_nToggleCount = 0; static GDBusConnection *m_pConnection = NULL; static gboolean onTimeUp (gpointer pData) { g_dbus_connection_flush_sync (m_pConnection, NULL, NULL); g_clear_object (&m_pConnection); g_main_loop_quit (m_pMainLoop); return G_SOURCE_REMOVE; } gboolean toggle (gpointer pData) { const AppIndicatorStatus nStatus = m_bActive ? APP_INDICATOR_STATUS_ATTENTION : APP_INDICATOR_STATUS_ACTIVE; app_indicator_set_status (APP_INDICATOR (pData), nStatus); ++m_nToggleCount; m_bActive = !m_bActive; if (m_nToggleCount == 100) { g_timeout_add (100, onTimeUp, NULL); return G_SOURCE_REMOVE; } return G_SOURCE_CONTINUE; } gint main (gint argc, gchar * argv[]) { g_usleep(100000); m_pConnection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL); g_debug ("DBus Name: %s", g_dbus_connection_get_unique_name (m_pConnection)); AppIndicator *pIndicator = app_indicator_new ("my-id", "my-icon-name", APP_INDICATOR_CATEGORY_APPLICATION_STATUS); app_indicator_set_attention_icon (pIndicator, "my-attention-icon", NULL); GSimpleActionGroup *pActions = g_simple_action_group_new (); GSimpleAction *pSimpleAction = g_simple_action_new ("test", NULL); g_action_map_add_action (G_ACTION_MAP (pActions), G_ACTION (pSimpleAction)); g_object_unref (pSimpleAction); GMenu *pMenu = g_menu_new (); GMenuItem *pItem = g_menu_item_new ("Test", "indicator.test"); g_menu_append_item (pMenu, pItem); g_object_unref (pItem); app_indicator_set_menu (pIndicator, pMenu); g_object_unref (pMenu); app_indicator_set_actions (pIndicator, pActions); g_object_unref (pActions); g_timeout_add (50, toggle, pIndicator); m_pMainLoop = g_main_loop_new (NULL, FALSE); g_main_loop_run (m_pMainLoop); g_object_unref (G_OBJECT (pIndicator)); g_debug("Quiting"); return 0; } libayatana-appindicator-glib-2.0.1/tests/test-simple-app.c0000664000000000000000000000350115023522653020431 0ustar /* * Test that creates a small test app which links with libappindicator. * * Copyright 2009 Ted Gould * Copyright 2022-2024 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 . */ #include static GMainLoop *pMainLoop = NULL; int main (int argc, char ** argv) { GSimpleActionGroup *pActions = g_simple_action_group_new (); GSimpleAction *pSimpleAction = g_simple_action_new ("test", NULL); g_action_map_add_action (G_ACTION_MAP (pActions), G_ACTION (pSimpleAction)); g_object_unref (pSimpleAction); GMenu *pMenu = g_menu_new (); GMenuItem *pItem = g_menu_item_new ("Test", "indicator.test"); g_menu_append_item (pMenu, pItem); g_object_unref (pItem); AppIndicator *pIndicator = app_indicator_new ("test-application", "system-shutdown", APP_INDICATOR_CATEGORY_APPLICATION_STATUS); app_indicator_set_status (pIndicator, APP_INDICATOR_STATUS_ACTIVE); app_indicator_set_menu (pIndicator, pMenu); g_object_unref (pMenu); app_indicator_set_actions (pIndicator, pActions); g_object_unref (pActions); pMainLoop = g_main_loop_new (NULL, FALSE); g_main_loop_run (pMainLoop); g_object_unref (G_OBJECT (pIndicator)); g_debug("Quiting"); return 0; } libayatana-appindicator-glib-2.0.1/.travis.yml0000664000000000000000000000170615023522653016215 0ustar # 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