pax_global_header00006660000000000000000000000064135674103320014516gustar00rootroot0000000000000052 comment=2a00714be9b85f503a6d04bd9edc2a128c02762c indicator-sensors-1.1/000077500000000000000000000000001356741033200150255ustar00rootroot00000000000000indicator-sensors-1.1/.cquery000066400000000000000000000017151356741033200163420ustar00rootroot00000000000000%clang -I/usr/include/libappindicator3-0.1 -I/usr/include/libdbusmenu-glib-0.4 -I/usr/include/gtk-3.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -I/usr/include/gtk-3.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/mirclient -I/usr/include/mircommon -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/harfbuzz -I/usr/include/pango-1.0 -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libpng12 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/libpeas-1.0 -I/usr/include/gobject-introspection-1.0 -I/usr/include/udisks2 -I./ -I./indicator-sensors -I./plugins/aticonfig -I./plugins/dbus -I./plugins/dynamic -I./plugins/fake -I./plugins/libsensors -I./plugins/max -I./plugins/nvidia -I./plugins/udisks -I./plugins/udisks2 -DHAVE_CONFIG_H indicator-sensors-1.1/.dir-locals.el000066400000000000000000000000671356741033200174610ustar00rootroot00000000000000((nil . ((flycheck-cstyle-config . "~/.cstyle.gtk")))) indicator-sensors-1.1/.gitignore000066400000000000000000000015161356741033200170200ustar00rootroot00000000000000*~ *.swp *# indicator-sensors*.tar.* *.lo *.la *.so *.snap .deps* .libs* ABOUT-NLS COPYING INSTALL Makefile Makefile.in aclocal.m4 autom4te.cache* config.* configure data/indicator-sensors.desktop depcomp gnome-doc-utils.make indicator-sensors/*.o indicator-sensors/config.h* indicator-sensors/indicator-sensors indicator-sensors/marshallers.[ch] indicator-sensors/stamp-h1 install-sh libtool ltmain.sh missing mkinstalldirs data/indicator-sensors.gschema.valid data/indicator-sensors.gschema.xml data/indicator-sensors.gschema.xml.in data/indicator-sensors.appdata.xml m4/* plugins/dbus/is-active-sensor-generated* plugins/dbus/is-org-gnome-shell-search-provider-generated* po/.intltool-merge-cache po/*.gmo po/*.sed po/*.sin po/*.header po/ChangeLog po/Makefile.in.in po/Makevars* po/POTFILES po/Rules-quot po/stamp-it GPATH GRTAGS GSYMS GTAGS indicator-sensors-1.1/ABOUT-NLS000066400000000000000000002671331356741033200162700ustar00rootroot000000000000001 Notes on the Free Translation Project *************************************** Free software is going international! The Free Translation Project is a way to get maintainers of free software, translators, and users all together, so that free software will gradually become able to speak many languages. A few packages already provide translations for their messages. If you found this `ABOUT-NLS' file inside a distribution, you may assume that the distributed package does use GNU `gettext' internally, itself available at your nearest GNU archive site. But you do _not_ need to install GNU `gettext' prior to configuring, installing or using this package with messages translated. Installers will find here some useful hints. These notes also explain how users should proceed for getting the programs to use the available translations. They tell how people wanting to contribute and work on translations can contact the appropriate team. 1.1 INSTALL Matters =================== Some packages are "localizable" when properly installed; the programs they contain can be made to speak your own native language. Most such packages use GNU `gettext'. Other packages have their own ways to internationalization, predating GNU `gettext'. By default, this package will be installed to allow translation of messages. It will automatically detect whether the system already provides the GNU `gettext' functions. Installers may use special options at configuration time for changing the default behaviour. The command: ./configure --disable-nls will _totally_ disable translation of messages. When you already have GNU `gettext' installed on your system and run configure without an option for your new package, `configure' will probably detect the previously built and installed `libintl' library and will decide to use it. If not, you may have to to use the `--with-libintl-prefix' option to tell `configure' where to look for it. Internationalized packages usually have many `po/LL.po' files, where LL gives an ISO 639 two-letter code identifying the language. Unless translations have been forbidden at `configure' time by using the `--disable-nls' switch, all available translations are installed together with the package. However, the environment variable `LINGUAS' may be set, prior to configuration, to limit the installed set. `LINGUAS' should then contain a space separated list of two-letter codes, stating which languages are allowed. 1.2 Using This Package ====================== As a user, if your language has been installed for this package, you only have to set the `LANG' environment variable to the appropriate `LL_CC' combination. If you happen to have the `LC_ALL' or some other `LC_xxx' environment variables set, you should unset them before setting `LANG', otherwise the setting of `LANG' will not have the desired effect. Here `LL' is an ISO 639 two-letter language code, and `CC' is an ISO 3166 two-letter country code. For example, let's suppose that you speak German and live in Germany. At the shell prompt, merely execute `setenv LANG de_DE' (in `csh'), `export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash'). This can be done from your `.login' or `.profile' file, once and for all. You might think that the country code specification is redundant. But in fact, some languages have dialects in different countries. For example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The country code serves to distinguish the dialects. The locale naming convention of `LL_CC', with `LL' denoting the language and `CC' denoting the country, is the one use on systems based on GNU libc. On other systems, some variations of this scheme are used, such as `LL' or `LL_CC.ENCODING'. You can get the list of locales supported by your system for your language by running the command `locale -a | grep '^LL''. Not all programs have translations for all languages. By default, an English message is shown in place of a nonexistent translation. If you understand other languages, you can set up a priority list of languages. This is done through a different environment variable, called `LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG' for the purpose of message handling, but you still need to have `LANG' set to the primary language; this is required by other parts of the system libraries. For example, some Swedish users who would rather read translations in German than English for when Swedish is not available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'. Special advice for Norwegian users: The language code for Norwegian bokma*l changed from `no' to `nb' recently (in 2003). During the transition period, while some message catalogs for this language are installed under `nb' and some older ones under `no', it's recommended for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and older translations are used. In the `LANGUAGE' environment variable, but not in the `LANG' environment variable, `LL_CC' combinations can be abbreviated as `LL' to denote the language's main dialect. For example, `de' is equivalent to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT' (Portuguese as spoken in Portugal) in this context. 1.3 Translating Teams ===================== For the Free Translation Project to be a success, we need interested people who like their own language and write it well, and who are also able to synergize with other translators speaking the same language. Each translation team has its own mailing list. The up-to-date list of teams can be found at the Free Translation Project's homepage, `http://translationproject.org/', in the "Teams" area. If you'd like to volunteer to _work_ at translating messages, you should become a member of the translating team for your own language. The subscribing address is _not_ the same as the list itself, it has `-request' appended. For example, speakers of Swedish can send a message to `sv-request@li.org', having this message body: subscribe Keep in mind that team members are expected to participate _actively_ in translations, or at solving translational difficulties, rather than merely lurking around. If your team does not exist yet and you want to start one, or if you are unsure about what to do or how to get started, please write to `coordinator@translationproject.org' to reach the coordinator for all translator teams. The English team is special. It works at improving and uniformizing the terminology in use. Proven linguistic skills are praised more than programming skills, here. 1.4 Available Packages ====================== Languages are not equally supported in all packages. The following matrix shows the current state of internationalization, as of June 2010. The matrix shows, in regard of each package, for which languages PO files have been submitted to translation coordination, with a translation percentage of at least 50%. Ready PO files af am an ar as ast az be be@latin bg bn_IN bs ca +--------------------------------------------------+ a2ps | [] [] | aegis | | ant-phone | | anubis | | aspell | [] [] | bash | | bfd | | bibshelf | [] | binutils | | bison | | bison-runtime | [] | bluez-pin | [] [] | bombono-dvd | | buzztard | | cflow | | clisp | | coreutils | [] [] | cpio | | cppi | | cpplib | [] | cryptsetup | | dfarc | | dialog | [] [] | dico | | diffutils | [] | dink | | doodle | | e2fsprogs | [] | enscript | [] | exif | | fetchmail | [] | findutils | [] | flex | [] | freedink | | gas | | gawk | [] [] | gcal | [] | gcc | | gettext-examples | [] [] [] [] | gettext-runtime | [] [] | gettext-tools | [] [] | gip | [] | gjay | | gliv | [] | glunarclock | [] [] | gnubiff | | gnucash | [] | gnuedu | | gnulib | | gnunet | | gnunet-gtk | | gnutls | | gold | | gpe-aerial | | gpe-beam | | gpe-bluetooth | | gpe-calendar | | gpe-clock | [] | gpe-conf | | gpe-contacts | | gpe-edit | | gpe-filemanager | | gpe-go | | gpe-login | | gpe-ownerinfo | [] | gpe-package | | gpe-sketchbook | | gpe-su | [] | gpe-taskmanager | [] | gpe-timesheet | [] | gpe-today | [] | gpe-todo | | gphoto2 | | gprof | [] | gpsdrive | | gramadoir | | grep | | grub | [] [] | gsasl | | gss | | gst-plugins-bad | [] | gst-plugins-base | [] | gst-plugins-good | [] | gst-plugins-ugly | [] | gstreamer | [] [] [] | gtick | | gtkam | [] | gtkorphan | [] | gtkspell | [] [] [] | gutenprint | | hello | [] | help2man | | hylafax | | idutils | | indent | [] [] | iso_15924 | | iso_3166 | [] [] [] [] [] [] [] | iso_3166_2 | | iso_4217 | | iso_639 | [] [] [] [] | iso_639_3 | | jwhois | | kbd | | keytouch | [] | keytouch-editor | | keytouch-keyboa... | [] | klavaro | [] | latrine | | ld | [] | leafpad | [] [] | libc | [] [] | libexif | () | libextractor | | libgnutls | | libgpewidget | | libgpg-error | | libgphoto2 | | libgphoto2_port | | libgsasl | | libiconv | [] | libidn | | lifelines | | liferea | [] [] | lilypond | | linkdr | [] | lordsawar | | lprng | | lynx | [] | m4 | | mailfromd | | mailutils | | make | | man-db | | man-db-manpages | | minicom | | mkisofs | | myserver | | nano | [] [] | opcodes | | parted | | pies | | popt | | psmisc | | pspp | [] | pwdutils | | radius | [] | recode | [] [] | rosegarden | | rpm | | rush | | sarg | | screem | | scrollkeeper | [] [] [] | sed | [] [] | sharutils | [] [] | shishi | | skencil | | solfege | | solfege-manual | | soundtracker | | sp | | sysstat | | tar | [] | texinfo | | tin | | unicode-han-tra... | | unicode-transla... | | util-linux-ng | [] | vice | | vmm | | vorbis-tools | | wastesedge | | wdiff | | wget | [] [] | wyslij-po | | xchat | [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] | +--------------------------------------------------+ af am an ar as ast az be be@latin bg bn_IN bs ca 6 0 1 2 3 19 1 10 3 28 3 1 38 crh cs da de el en en_GB en_ZA eo es et eu fa +-------------------------------------------------+ a2ps | [] [] [] [] [] [] [] | aegis | [] [] [] | ant-phone | [] () | anubis | [] [] | aspell | [] [] [] [] [] | bash | [] [] [] | bfd | [] | bibshelf | [] [] [] | binutils | [] | bison | [] [] | bison-runtime | [] [] [] [] | bluez-pin | [] [] [] [] [] [] | bombono-dvd | [] | buzztard | [] [] [] | cflow | [] [] | clisp | [] [] [] [] | coreutils | [] [] [] [] | cpio | | cppi | | cpplib | [] [] [] | cryptsetup | [] | dfarc | [] [] [] | dialog | [] [] [] [] [] | dico | | diffutils | [] [] [] [] [] [] | dink | [] [] [] | doodle | [] | e2fsprogs | [] [] [] | enscript | [] [] [] | exif | () [] [] | fetchmail | [] [] () [] [] [] | findutils | [] [] [] | flex | [] [] | freedink | [] [] [] | gas | [] | gawk | [] [] [] | gcal | [] | gcc | [] [] | gettext-examples | [] [] [] [] | gettext-runtime | [] [] [] [] | gettext-tools | [] [] [] | gip | [] [] [] [] | gjay | [] | gliv | [] [] [] | glunarclock | [] [] | gnubiff | () | gnucash | [] () () () () | gnuedu | [] [] | gnulib | [] [] | gnunet | | gnunet-gtk | [] | gnutls | [] [] | gold | [] | gpe-aerial | [] [] [] [] | gpe-beam | [] [] [] [] | gpe-bluetooth | [] [] | gpe-calendar | [] | gpe-clock | [] [] [] [] | gpe-conf | [] [] [] | gpe-contacts | [] [] [] | gpe-edit | [] [] | gpe-filemanager | [] [] [] | gpe-go | [] [] [] [] | gpe-login | [] [] | gpe-ownerinfo | [] [] [] [] | gpe-package | [] [] [] | gpe-sketchbook | [] [] [] [] | gpe-su | [] [] [] [] | gpe-taskmanager | [] [] [] [] | gpe-timesheet | [] [] [] [] | gpe-today | [] [] [] [] | gpe-todo | [] [] [] | gphoto2 | [] [] () [] [] [] | gprof | [] [] [] | gpsdrive | [] [] [] | gramadoir | [] [] [] | grep | [] | grub | [] [] | gsasl | [] | gss | | gst-plugins-bad | [] [] [] [] [] | gst-plugins-base | [] [] [] [] [] | gst-plugins-good | [] [] [] [] [] [] | gst-plugins-ugly | [] [] [] [] [] [] | gstreamer | [] [] [] [] [] | gtick | [] () [] | gtkam | [] [] () [] [] | gtkorphan | [] [] [] [] | gtkspell | [] [] [] [] [] [] [] | gutenprint | [] [] [] | hello | [] [] [] [] | help2man | [] | hylafax | [] [] | idutils | [] [] | indent | [] [] [] [] [] [] [] | iso_15924 | [] () [] [] | iso_3166 | [] [] [] [] () [] [] [] () | iso_3166_2 | () | iso_4217 | [] [] [] () [] [] | iso_639 | [] [] [] [] () [] [] | iso_639_3 | [] | jwhois | [] | kbd | [] [] [] [] [] | keytouch | [] [] | keytouch-editor | [] [] | keytouch-keyboa... | [] | klavaro | [] [] [] [] | latrine | [] () | ld | [] [] | leafpad | [] [] [] [] [] [] | libc | [] [] [] [] | libexif | [] [] () | libextractor | | libgnutls | [] | libgpewidget | [] [] | libgpg-error | [] [] | libgphoto2 | [] () | libgphoto2_port | [] () [] | libgsasl | | libiconv | [] [] [] [] [] | libidn | [] [] [] | lifelines | [] () | liferea | [] [] [] [] [] | lilypond | [] [] [] | linkdr | [] [] [] | lordsawar | [] | lprng | | lynx | [] [] [] [] | m4 | [] [] [] [] | mailfromd | | mailutils | [] | make | [] [] [] | man-db | | man-db-manpages | | minicom | [] [] [] [] | mkisofs | | myserver | | nano | [] [] [] | opcodes | [] [] | parted | [] [] | pies | | popt | [] [] [] [] [] | psmisc | [] [] [] | pspp | [] | pwdutils | [] | radius | [] | recode | [] [] [] [] [] [] | rosegarden | () () () | rpm | [] [] [] | rush | | sarg | | screem | | scrollkeeper | [] [] [] [] [] | sed | [] [] [] [] [] [] | sharutils | [] [] [] [] | shishi | | skencil | [] () [] | solfege | [] [] [] | solfege-manual | [] [] | soundtracker | [] [] [] | sp | [] | sysstat | [] [] [] | tar | [] [] [] [] | texinfo | [] [] [] | tin | [] [] | unicode-han-tra... | | unicode-transla... | | util-linux-ng | [] [] [] [] | vice | () () | vmm | [] | vorbis-tools | [] [] | wastesedge | [] | wdiff | [] [] | wget | [] [] [] | wyslij-po | | xchat | [] [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] [] [] [] | +-------------------------------------------------+ crh cs da de el en en_GB en_ZA eo es et eu fa 5 64 105 117 18 1 8 0 28 89 18 19 0 fi fr ga gl gu he hi hr hu hy id is it ja ka kn +----------------------------------------------------+ a2ps | [] [] [] [] | aegis | [] [] | ant-phone | [] [] | anubis | [] [] [] [] | aspell | [] [] [] [] | bash | [] [] [] [] | bfd | [] [] [] | bibshelf | [] [] [] [] [] | binutils | [] [] [] | bison | [] [] [] [] | bison-runtime | [] [] [] [] [] [] | bluez-pin | [] [] [] [] [] [] [] [] | bombono-dvd | [] | buzztard | [] | cflow | [] [] [] | clisp | [] | coreutils | [] [] [] [] [] | cpio | [] [] [] [] | cppi | [] [] | cpplib | [] [] [] | cryptsetup | [] [] [] | dfarc | [] [] [] | dialog | [] [] [] [] [] [] [] | dico | | diffutils | [] [] [] [] [] [] [] [] [] | dink | [] | doodle | [] [] | e2fsprogs | [] [] | enscript | [] [] [] [] | exif | [] [] [] [] [] [] | fetchmail | [] [] [] [] | findutils | [] [] [] [] [] [] | flex | [] [] [] | freedink | [] [] [] | gas | [] [] | gawk | [] [] [] [] () [] | gcal | [] | gcc | [] | gettext-examples | [] [] [] [] [] [] [] | gettext-runtime | [] [] [] [] [] [] | gettext-tools | [] [] [] [] | gip | [] [] [] [] [] [] | gjay | [] | gliv | [] () | glunarclock | [] [] [] [] | gnubiff | () [] () | gnucash | () () () () () [] | gnuedu | [] [] | gnulib | [] [] [] [] [] [] | gnunet | | gnunet-gtk | [] | gnutls | [] [] | gold | [] [] | gpe-aerial | [] [] [] | gpe-beam | [] [] [] [] | gpe-bluetooth | [] [] [] [] | gpe-calendar | [] [] | gpe-clock | [] [] [] [] [] | gpe-conf | [] [] [] [] | gpe-contacts | [] [] [] [] | gpe-edit | [] [] [] | gpe-filemanager | [] [] [] [] | gpe-go | [] [] [] [] [] | gpe-login | [] [] [] | gpe-ownerinfo | [] [] [] [] [] | gpe-package | [] [] [] | gpe-sketchbook | [] [] [] [] | gpe-su | [] [] [] [] [] [] | gpe-taskmanager | [] [] [] [] [] | gpe-timesheet | [] [] [] [] [] | gpe-today | [] [] [] [] [] [] [] | gpe-todo | [] [] [] | gphoto2 | [] [] [] [] [] [] | gprof | [] [] [] [] | gpsdrive | [] [] [] | gramadoir | [] [] [] | grep | [] [] | grub | [] [] [] [] | gsasl | [] [] [] [] [] | gss | [] [] [] [] [] | gst-plugins-bad | [] [] [] [] [] [] | gst-plugins-base | [] [] [] [] [] [] | gst-plugins-good | [] [] [] [] [] [] | gst-plugins-ugly | [] [] [] [] [] [] | gstreamer | [] [] [] [] [] | gtick | [] [] [] [] [] | gtkam | [] [] [] [] [] | gtkorphan | [] [] [] | gtkspell | [] [] [] [] [] [] [] [] [] | gutenprint | [] [] [] [] | hello | [] [] [] | help2man | [] [] | hylafax | [] | idutils | [] [] [] [] [] [] | indent | [] [] [] [] [] [] [] [] | iso_15924 | [] () [] [] | iso_3166 | [] () [] [] [] [] [] [] [] [] [] [] | iso_3166_2 | () [] [] [] | iso_4217 | [] () [] [] [] [] | iso_639 | [] () [] [] [] [] [] [] [] | iso_639_3 | () [] [] | jwhois | [] [] [] [] [] | kbd | [] [] | keytouch | [] [] [] [] [] [] | keytouch-editor | [] [] [] [] [] | keytouch-keyboa... | [] [] [] [] [] | klavaro | [] [] | latrine | [] [] [] | ld | [] [] [] [] | leafpad | [] [] [] [] [] [] [] () | libc | [] [] [] [] [] | libexif | [] | libextractor | | libgnutls | [] [] | libgpewidget | [] [] [] [] | libgpg-error | [] [] | libgphoto2 | [] [] [] | libgphoto2_port | [] [] [] | libgsasl | [] [] [] [] [] | libiconv | [] [] [] [] [] [] | libidn | [] [] [] [] | lifelines | () | liferea | [] [] [] [] | lilypond | [] [] | linkdr | [] [] [] [] [] | lordsawar | | lprng | [] | lynx | [] [] [] [] [] | m4 | [] [] [] [] [] [] | mailfromd | | mailutils | [] [] | make | [] [] [] [] [] [] [] [] [] | man-db | [] [] | man-db-manpages | [] | minicom | [] [] [] [] [] | mkisofs | [] [] [] [] | myserver | | nano | [] [] [] [] [] [] | opcodes | [] [] [] [] | parted | [] [] [] [] | pies | | popt | [] [] [] [] [] [] [] [] [] | psmisc | [] [] [] | pspp | | pwdutils | [] [] | radius | [] [] | recode | [] [] [] [] [] [] [] [] | rosegarden | () () () () () | rpm | [] [] | rush | | sarg | [] | screem | [] [] | scrollkeeper | [] [] [] [] | sed | [] [] [] [] [] [] [] [] | sharutils | [] [] [] [] [] [] [] | shishi | [] | skencil | [] | solfege | [] [] [] [] | solfege-manual | [] [] | soundtracker | [] [] | sp | [] () | sysstat | [] [] [] [] [] | tar | [] [] [] [] [] [] [] | texinfo | [] [] [] [] | tin | [] | unicode-han-tra... | | unicode-transla... | [] [] | util-linux-ng | [] [] [] [] [] [] | vice | () () () | vmm | [] | vorbis-tools | [] | wastesedge | () () | wdiff | [] | wget | [] [] [] [] [] [] [] [] | wyslij-po | [] [] [] | xchat | [] [] [] [] [] [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] [] [] | +----------------------------------------------------+ fi fr ga gl gu he hi hr hu hy id is it ja ka kn 105 121 53 20 4 8 3 5 53 2 120 5 84 67 0 4 ko ku ky lg lt lv mk ml mn mr ms mt nb nds ne +-----------------------------------------------+ a2ps | [] | aegis | | ant-phone | | anubis | [] [] | aspell | [] | bash | | bfd | | bibshelf | [] [] | binutils | | bison | [] | bison-runtime | [] [] [] [] [] | bluez-pin | [] [] [] [] [] | bombono-dvd | | buzztard | | cflow | | clisp | | coreutils | [] | cpio | | cppi | | cpplib | | cryptsetup | | dfarc | [] | dialog | [] [] [] [] [] | dico | | diffutils | [] [] | dink | | doodle | | e2fsprogs | | enscript | | exif | [] | fetchmail | | findutils | | flex | | freedink | [] | gas | | gawk | | gcal | | gcc | | gettext-examples | [] [] [] [] | gettext-runtime | [] | gettext-tools | [] | gip | [] [] | gjay | | gliv | | glunarclock | [] | gnubiff | | gnucash | () () () () | gnuedu | | gnulib | | gnunet | | gnunet-gtk | | gnutls | [] | gold | | gpe-aerial | [] | gpe-beam | [] | gpe-bluetooth | [] [] | gpe-calendar | [] | gpe-clock | [] [] [] [] [] | gpe-conf | [] [] | gpe-contacts | [] [] | gpe-edit | [] | gpe-filemanager | [] [] | gpe-go | [] [] [] | gpe-login | [] | gpe-ownerinfo | [] [] | gpe-package | [] [] | gpe-sketchbook | [] [] | gpe-su | [] [] [] [] [] [] | gpe-taskmanager | [] [] [] [] [] [] | gpe-timesheet | [] [] | gpe-today | [] [] [] [] | gpe-todo | [] [] | gphoto2 | | gprof | [] | gpsdrive | | gramadoir | | grep | | grub | | gsasl | | gss | | gst-plugins-bad | [] [] [] [] | gst-plugins-base | [] [] | gst-plugins-good | [] [] | gst-plugins-ugly | [] [] [] [] [] | gstreamer | | gtick | | gtkam | [] | gtkorphan | [] [] | gtkspell | [] [] [] [] [] [] [] | gutenprint | | hello | [] [] [] | help2man | | hylafax | | idutils | | indent | | iso_15924 | [] [] | iso_3166 | [] [] () [] [] [] [] [] | iso_3166_2 | | iso_4217 | [] [] | iso_639 | [] [] | iso_639_3 | [] | jwhois | [] | kbd | | keytouch | [] | keytouch-editor | [] | keytouch-keyboa... | [] | klavaro | [] | latrine | [] | ld | | leafpad | [] [] [] | libc | [] | libexif | | libextractor | | libgnutls | [] | libgpewidget | [] [] | libgpg-error | | libgphoto2 | | libgphoto2_port | | libgsasl | | libiconv | | libidn | | lifelines | | liferea | | lilypond | | linkdr | | lordsawar | | lprng | | lynx | | m4 | | mailfromd | | mailutils | | make | [] | man-db | | man-db-manpages | | minicom | [] | mkisofs | | myserver | | nano | [] [] | opcodes | | parted | | pies | | popt | [] [] [] | psmisc | | pspp | | pwdutils | | radius | | recode | | rosegarden | | rpm | | rush | | sarg | | screem | | scrollkeeper | [] [] | sed | | sharutils | | shishi | | skencil | | solfege | [] | solfege-manual | | soundtracker | | sp | | sysstat | [] | tar | [] | texinfo | [] | tin | | unicode-han-tra... | | unicode-transla... | | util-linux-ng | | vice | | vmm | | vorbis-tools | | wastesedge | | wdiff | | wget | [] | wyslij-po | | xchat | [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] | +-----------------------------------------------+ ko ku ky lg lt lv mk ml mn mr ms mt nb nds ne 20 5 10 1 13 48 4 2 2 4 24 10 20 3 1 nl nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr +---------------------------------------------------+ a2ps | [] [] [] [] [] [] [] [] | aegis | [] [] [] | ant-phone | [] [] | anubis | [] [] [] | aspell | [] [] [] [] [] | bash | [] [] | bfd | [] | bibshelf | [] [] | binutils | [] [] | bison | [] [] [] | bison-runtime | [] [] [] [] [] [] [] | bluez-pin | [] [] [] [] [] [] [] [] | bombono-dvd | [] () | buzztard | [] [] | cflow | [] | clisp | [] [] | coreutils | [] [] [] [] [] [] | cpio | [] [] [] | cppi | [] | cpplib | [] | cryptsetup | [] | dfarc | [] | dialog | [] [] [] [] | dico | [] | diffutils | [] [] [] [] [] [] | dink | () | doodle | [] [] | e2fsprogs | [] [] | enscript | [] [] [] [] [] | exif | [] [] [] () [] | fetchmail | [] [] [] [] | findutils | [] [] [] [] [] | flex | [] [] [] [] [] | freedink | [] [] | gas | | gawk | [] [] [] [] | gcal | | gcc | [] | gettext-examples | [] [] [] [] [] [] [] [] | gettext-runtime | [] [] [] [] [] [] [] [] [] | gettext-tools | [] [] [] [] [] [] | gip | [] [] [] [] [] | gjay | | gliv | [] [] [] [] [] [] | glunarclock | [] [] [] [] [] | gnubiff | [] () | gnucash | [] () () () | gnuedu | [] | gnulib | [] [] [] [] | gnunet | | gnunet-gtk | | gnutls | [] [] | gold | | gpe-aerial | [] [] [] [] [] [] [] | gpe-beam | [] [] [] [] [] [] [] | gpe-bluetooth | [] [] | gpe-calendar | [] [] [] [] | gpe-clock | [] [] [] [] [] [] [] [] | gpe-conf | [] [] [] [] [] [] [] | gpe-contacts | [] [] [] [] [] | gpe-edit | [] [] [] | gpe-filemanager | [] [] [] | gpe-go | [] [] [] [] [] [] [] [] | gpe-login | [] [] | gpe-ownerinfo | [] [] [] [] [] [] [] [] | gpe-package | [] [] | gpe-sketchbook | [] [] [] [] [] [] [] | gpe-su | [] [] [] [] [] [] [] [] | gpe-taskmanager | [] [] [] [] [] [] [] [] | gpe-timesheet | [] [] [] [] [] [] [] [] | gpe-today | [] [] [] [] [] [] [] [] | gpe-todo | [] [] [] [] [] | gphoto2 | [] [] [] [] [] [] [] [] | gprof | [] [] [] | gpsdrive | [] [] | gramadoir | [] [] | grep | [] [] [] [] | grub | [] [] [] | gsasl | [] [] [] [] | gss | [] [] [] | gst-plugins-bad | [] [] [] [] [] [] | gst-plugins-base | [] [] [] [] [] | gst-plugins-good | [] [] [] [] [] | gst-plugins-ugly | [] [] [] [] [] [] | gstreamer | [] [] [] [] [] | gtick | [] [] [] | gtkam | [] [] [] [] [] [] | gtkorphan | [] | gtkspell | [] [] [] [] [] [] [] [] [] [] | gutenprint | [] [] | hello | [] [] [] [] | help2man | [] [] | hylafax | [] | idutils | [] [] [] [] [] | indent | [] [] [] [] [] [] [] | iso_15924 | [] [] [] [] | iso_3166 | [] [] [] [] [] () [] [] [] [] [] [] [] [] | iso_3166_2 | [] [] [] | iso_4217 | [] [] [] [] [] [] [] [] | iso_639 | [] [] [] [] [] [] [] [] [] | iso_639_3 | [] [] | jwhois | [] [] [] [] | kbd | [] [] [] | keytouch | [] [] [] | keytouch-editor | [] [] [] | keytouch-keyboa... | [] [] [] | klavaro | [] [] | latrine | [] [] | ld | | leafpad | [] [] [] [] [] [] [] [] [] | libc | [] [] [] [] | libexif | [] [] () [] | libextractor | | libgnutls | [] [] | libgpewidget | [] [] [] | libgpg-error | [] [] | libgphoto2 | [] [] | libgphoto2_port | [] [] [] [] [] | libgsasl | [] [] [] [] [] | libiconv | [] [] [] [] [] | libidn | [] [] | lifelines | [] [] | liferea | [] [] [] [] [] () () [] | lilypond | [] | linkdr | [] [] [] | lordsawar | | lprng | [] | lynx | [] [] [] | m4 | [] [] [] [] [] | mailfromd | [] | mailutils | [] | make | [] [] [] [] | man-db | [] [] [] | man-db-manpages | [] [] [] | minicom | [] [] [] [] | mkisofs | [] [] [] | myserver | | nano | [] [] [] [] | opcodes | [] [] | parted | [] [] [] [] | pies | [] | popt | [] [] [] [] | psmisc | [] [] [] | pspp | [] [] | pwdutils | [] | radius | [] [] [] | recode | [] [] [] [] [] [] [] [] | rosegarden | () () | rpm | [] [] [] | rush | [] [] | sarg | | screem | | scrollkeeper | [] [] [] [] [] [] [] [] | sed | [] [] [] [] [] [] [] [] [] | sharutils | [] [] [] [] | shishi | [] | skencil | [] [] | solfege | [] [] [] [] | solfege-manual | [] [] [] | soundtracker | [] | sp | | sysstat | [] [] [] [] | tar | [] [] [] [] | texinfo | [] [] [] [] | tin | [] | unicode-han-tra... | | unicode-transla... | | util-linux-ng | [] [] [] [] [] | vice | [] | vmm | [] | vorbis-tools | [] [] | wastesedge | [] | wdiff | [] [] | wget | [] [] [] [] [] [] [] | wyslij-po | [] [] [] | xchat | [] [] [] [] [] [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] | +---------------------------------------------------+ nl nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr 135 10 4 7 105 1 29 62 47 91 3 54 46 9 37 sv sw ta te tg th tr uk vi wa zh_CN zh_HK zh_TW +---------------------------------------------------+ a2ps | [] [] [] [] [] | 27 aegis | [] | 9 ant-phone | [] [] [] [] | 9 anubis | [] [] [] [] | 15 aspell | [] [] [] | 20 bash | [] [] [] | 12 bfd | [] | 6 bibshelf | [] [] [] | 16 binutils | [] [] | 8 bison | [] [] | 12 bison-runtime | [] [] [] [] [] [] | 29 bluez-pin | [] [] [] [] [] [] [] [] | 37 bombono-dvd | [] | 4 buzztard | [] | 7 cflow | [] [] [] | 9 clisp | | 10 coreutils | [] [] [] [] | 22 cpio | [] [] [] [] [] [] | 13 cppi | [] [] | 5 cpplib | [] [] [] [] [] [] | 14 cryptsetup | [] [] | 7 dfarc | [] | 9 dialog | [] [] [] [] [] [] [] | 30 dico | [] | 2 diffutils | [] [] [] [] [] [] | 30 dink | | 4 doodle | [] [] | 7 e2fsprogs | [] [] [] | 11 enscript | [] [] [] [] | 17 exif | [] [] [] | 16 fetchmail | [] [] [] | 17 findutils | [] [] [] [] [] | 20 flex | [] [] [] [] | 15 freedink | [] | 10 gas | [] | 4 gawk | [] [] [] [] | 18 gcal | [] [] | 5 gcc | [] [] [] | 7 gettext-examples | [] [] [] [] [] [] [] | 34 gettext-runtime | [] [] [] [] [] [] [] | 29 gettext-tools | [] [] [] [] [] [] | 22 gip | [] [] [] [] | 22 gjay | [] | 3 gliv | [] [] [] | 14 glunarclock | [] [] [] [] [] | 19 gnubiff | [] [] | 4 gnucash | () [] () [] () | 10 gnuedu | [] [] | 7 gnulib | [] [] [] [] | 16 gnunet | [] | 1 gnunet-gtk | [] [] [] | 5 gnutls | [] [] [] | 10 gold | [] | 4 gpe-aerial | [] [] [] | 18 gpe-beam | [] [] [] | 19 gpe-bluetooth | [] [] [] | 13 gpe-calendar | [] [] [] [] | 12 gpe-clock | [] [] [] [] [] | 28 gpe-conf | [] [] [] [] | 20 gpe-contacts | [] [] [] | 17 gpe-edit | [] [] [] | 12 gpe-filemanager | [] [] [] [] | 16 gpe-go | [] [] [] [] [] | 25 gpe-login | [] [] [] | 11 gpe-ownerinfo | [] [] [] [] [] | 25 gpe-package | [] [] [] | 13 gpe-sketchbook | [] [] [] | 20 gpe-su | [] [] [] [] [] | 30 gpe-taskmanager | [] [] [] [] [] | 29 gpe-timesheet | [] [] [] [] [] | 25 gpe-today | [] [] [] [] [] [] | 30 gpe-todo | [] [] [] [] | 17 gphoto2 | [] [] [] [] [] | 24 gprof | [] [] [] | 15 gpsdrive | [] [] [] | 11 gramadoir | [] [] [] | 11 grep | [] [] [] | 10 grub | [] [] [] | 14 gsasl | [] [] [] [] | 14 gss | [] [] [] | 11 gst-plugins-bad | [] [] [] [] | 26 gst-plugins-base | [] [] [] [] [] | 24 gst-plugins-good | [] [] [] [] | 24 gst-plugins-ugly | [] [] [] [] [] | 29 gstreamer | [] [] [] [] | 22 gtick | [] [] [] | 13 gtkam | [] [] [] | 20 gtkorphan | [] [] [] | 14 gtkspell | [] [] [] [] [] [] [] [] [] | 45 gutenprint | [] | 10 hello | [] [] [] [] [] [] | 21 help2man | [] [] | 7 hylafax | [] | 5 idutils | [] [] [] [] | 17 indent | [] [] [] [] [] [] | 30 iso_15924 | () [] () [] [] | 16 iso_3166 | [] [] () [] [] () [] [] [] () | 53 iso_3166_2 | () [] () [] | 9 iso_4217 | [] () [] [] () [] [] | 26 iso_639 | [] [] [] () [] () [] [] [] [] | 38 iso_639_3 | [] () | 8 jwhois | [] [] [] [] [] | 16 kbd | [] [] [] [] [] | 15 keytouch | [] [] [] | 16 keytouch-editor | [] [] [] | 14 keytouch-keyboa... | [] [] [] | 14 klavaro | [] | 11 latrine | [] [] [] | 10 ld | [] [] [] [] | 11 leafpad | [] [] [] [] [] [] | 33 libc | [] [] [] [] [] | 21 libexif | [] () | 7 libextractor | [] | 1 libgnutls | [] [] [] | 9 libgpewidget | [] [] [] | 14 libgpg-error | [] [] [] | 9 libgphoto2 | [] [] | 8 libgphoto2_port | [] [] [] [] | 14 libgsasl | [] [] [] | 13 libiconv | [] [] [] [] | 21 libidn | () [] [] | 11 lifelines | [] | 4 liferea | [] [] [] | 21 lilypond | [] | 7 linkdr | [] [] [] [] [] | 17 lordsawar | | 1 lprng | [] | 3 lynx | [] [] [] [] | 17 m4 | [] [] [] [] | 19 mailfromd | [] [] | 3 mailutils | [] | 5 make | [] [] [] [] | 21 man-db | [] [] [] | 8 man-db-manpages | | 4 minicom | [] [] | 16 mkisofs | [] [] | 9 myserver | | 0 nano | [] [] [] [] | 21 opcodes | [] [] [] | 11 parted | [] [] [] [] [] | 15 pies | [] [] | 3 popt | [] [] [] [] [] [] | 27 psmisc | [] [] | 11 pspp | | 4 pwdutils | [] [] | 6 radius | [] [] | 9 recode | [] [] [] [] | 28 rosegarden | () | 0 rpm | [] [] [] | 11 rush | [] [] | 4 sarg | | 1 screem | [] | 3 scrollkeeper | [] [] [] [] [] | 27 sed | [] [] [] [] [] | 30 sharutils | [] [] [] [] [] | 22 shishi | [] | 3 skencil | [] [] | 7 solfege | [] [] [] [] | 16 solfege-manual | [] | 8 soundtracker | [] [] [] | 9 sp | [] | 3 sysstat | [] [] | 15 tar | [] [] [] [] [] [] | 23 texinfo | [] [] [] [] [] | 17 tin | | 4 unicode-han-tra... | | 0 unicode-transla... | | 2 util-linux-ng | [] [] [] [] | 20 vice | () () | 1 vmm | [] | 4 vorbis-tools | [] | 6 wastesedge | | 2 wdiff | [] [] | 7 wget | [] [] [] [] [] | 26 wyslij-po | [] [] | 8 xchat | [] [] [] [] [] [] | 36 xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] | 63 xkeyboard-config | [] [] [] | 22 +---------------------------------------------------+ 85 teams sv sw ta te tg th tr uk vi wa zh_CN zh_HK zh_TW 178 domains 119 1 3 3 0 10 65 51 155 17 98 7 41 2618 Some counters in the preceding matrix are higher than the number of visible blocks let us expect. This is because a few extra PO files are used for implementing regional variants of languages, or language dialects. For a PO file in the matrix above to be effective, the package to which it applies should also have been internationalized and distributed as such by its maintainer. There might be an observable lag between the mere existence a PO file and its wide availability in a distribution. If June 2010 seems to be old, you may fetch a more recent copy of this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date matrix with full percentage details can be found at `http://translationproject.org/extra/matrix.html'. 1.5 Using `gettext' in new packages =================================== If you are writing a freely available program and want to internationalize it you are welcome to use GNU `gettext' in your package. Of course you have to respect the GNU Library General Public License which covers the use of the GNU `gettext' library. This means in particular that even non-free programs can use `libintl' as a shared library, whereas only free software can use `libintl' as a static library or use modified versions of `libintl'. Once the sources are changed appropriately and the setup can handle the use of `gettext' the only thing missing are the translations. The Free Translation Project is also available for packages which are not developed inside the GNU project. Therefore the information given above applies also for every other Free Software Project. Contact `coordinator@translationproject.org' to make the `.pot' files available to the translation teams. indicator-sensors-1.1/AUTHORS000066400000000000000000000000001356741033200160630ustar00rootroot00000000000000indicator-sensors-1.1/ChangeLog000066400000000000000000000002711356741033200165770ustar00rootroot000000000000002011-05-06 Alex Murray * *: The ChangeLog is auto-generated from git when releasing. If you are seeing this, use 'git log' for a detailed list of changes. indicator-sensors-1.1/Makefile.am000066400000000000000000000010501356741033200170550ustar00rootroot00000000000000SUBDIRS = data icons plugins po indicator-sensors ACLOCAL_AMFLAGS = -I m4 EXTRA_DIST = config.rpath ChangeLog dist-hook: @if test -d "$(srcdir)/.git"; \ then \ echo Creating ChangeLog && \ ( cd "$(top_srcdir)" && \ echo '# Generated by Makefile. Do not edit.'; echo; \ $(top_srcdir)/missing --run git log --stat ) > ChangeLog.tmp \ && mv -f ChangeLog.tmp $(distdir)/ChangeLog \ || ( rm -f ChangeLog.tmp ; \ echo Failed to generate ChangeLog >&2 ); \ else \ echo A git clone is required to generate a ChangeLog >&2; \ fi indicator-sensors-1.1/NEWS000066400000000000000000000000001356741033200155120ustar00rootroot00000000000000indicator-sensors-1.1/README.md000066400000000000000000000021341356741033200163040ustar00rootroot00000000000000# Hardware Sensors Indicator (indicator-sensors) [![License GPL 3](https://img.shields.io/badge/license-GPL_3-green.svg)](http://www.gnu.org/licenses/gpl-3.0.txt) [![Snap Status](https://build.snapcraft.io/badge/alexmurray/indicator-sensors.svg)](https://build.snapcraft.io/user/alexmurray/indicator-sensors) Application indicator to display and monitor the readings from various hardware sensors (temperature, fan speeds, voltages etc) in the desktop panel for GNOME / Ubuntu ![Screenshot](screenshot.png) ## Installation ### Snap Store [![Get it from the Snap Store](https://raw.githubusercontent.com/snapcore/snap-store-badges/master/EN/%5BEN%5D-snap-store-black.png)](https://snapcraft.io/indicator-sensors) The preferred way to install `indicator-sensors` is via the [Snap Store](https://snapcraft.io/indicator-sensors). First ensure you have [snap support in your desktop install](https://docs.snapcraft.io/core/install) Then you can just sudo snap install indicator-sensors to install from the command line. ## License Copyright © 2018 Alex Murray Distributed under GNU GPL, version 3. indicator-sensors-1.1/TODO000066400000000000000000000000001356741033200155030ustar00rootroot00000000000000indicator-sensors-1.1/autogen.sh000077500000000000000000000007731356741033200170350ustar00rootroot00000000000000#!/bin/sh # Run this to generate all the initial makefiles, etc. srcdir=`dirname $0` test -z "$srcdir" && srcdir=. PKG_NAME="indicator-sensors" (test -f $srcdir/configure.ac) || { echo -n "**Error**: Directory "\`$srcdir\'" does not look like the" echo " top-level $PKG_NAME directory" exit 1 } which gnome-autogen.sh || { echo -n "ERROR: gnome-autogen.sh not found in path: " echo "Please install gnome-common before running this script" exit 1 } USE_GNOME2_MACROS=1 . gnome-autogen.sh indicator-sensors-1.1/config.rpath000077500000000000000000000440121356741033200173360ustar00rootroot00000000000000#! /bin/sh # Output a system dependent set of variables, describing how to set the # run time search path of shared libraries in an executable. # # Copyright 1996-2010 Free Software Foundation, Inc. # Taken from GNU libtool, 2001 # Originally by Gordon Matzigkeit , 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld # should be set by the caller. # # The set of defined variables is at the end of this script. # Known limitations: # - On IRIX 6.5 with CC="cc", the run time search patch must not be longer # than 256 bytes, otherwise the compiler driver will dump core. The only # known workaround is to choose shorter directory names for the build # directory and/or the installation directory. # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a shrext=.so host="$1" host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # Code taken from libtool.m4's _LT_CC_BASENAME. for cc_temp in $CC""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` # Code taken from libtool.m4's _LT_COMPILER_PIC. wl= if test "$GCC" = yes; then wl='-Wl,' else case "$host_os" in aix*) wl='-Wl,' ;; darwin*) case $cc_basename in xlc*) wl='-Wl,' ;; esac ;; mingw* | cygwin* | pw32* | os2* | cegcc*) ;; hpux9* | hpux10* | hpux11*) wl='-Wl,' ;; irix5* | irix6* | nonstopux*) wl='-Wl,' ;; newsos6) ;; linux* | k*bsd*-gnu) case $cc_basename in ecc*) wl='-Wl,' ;; icc* | ifort*) wl='-Wl,' ;; lf95*) wl='-Wl,' ;; pgcc | pgf77 | pgf90) wl='-Wl,' ;; ccc*) wl='-Wl,' ;; como) wl='-lopt=' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) wl='-Wl,' ;; esac ;; esac ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; rdos*) ;; solaris*) wl='-Wl,' ;; sunos4*) wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3*) wl='-Wl,' ;; sysv4*MP*) ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) wl='-Wl,' ;; unicos*) wl='-Wl,' ;; uts4*) ;; esac fi # Code taken from libtool.m4's _LT_LINKER_SHLIBS. hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no case "$host_os" in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. # Unlike libtool, we use -rpath here, not --rpath, since the documented # option of GNU ld is called -rpath, not --rpath. hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' case "$host_os" in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no fi ;; amigaos*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we cannot use # them. ld_shlibs=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then : else ld_shlibs=no fi ;; interix[3-9]*) hardcode_direct=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; gnu* | linux* | k*bsd*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; netbsd*) ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' else ld_shlibs=no fi ;; esac ;; sunos4*) hardcode_direct=yes ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then hardcode_libdir_flag_spec= fi else case "$host_os" in aix3*) # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac fi hardcode_direct=yes hardcode_libdir_separator=':' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac fi # Begin _LT_AC_SYS_LIBPATH_AIX. echo 'int main () { return 0; }' > conftest.c ${CC} ${LDFLAGS} conftest.c -o conftest aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` fi if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib" fi rm -f conftest.c conftest # End _LT_AC_SYS_LIBPATH_AIX. if test "$aix_use_runtimelinking" = yes; then hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' else hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" fi fi ;; amigaos*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # see comment about different semantics on the GNU ld section ld_shlibs=no ;; bsdi[45]*) ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' libext=lib ;; darwin* | rhapsody*) hardcode_direct=no if test "$GCC" = yes ; then : else case $cc_basename in xlc*) ;; *) ld_shlibs=no ;; esac fi ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; freebsd1*) ld_shlibs=no ;; freebsd2.2*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; freebsd2*) hardcode_direct=yes hardcode_minus_L=yes ;; freebsd* | dragonfly*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; hpux9*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; hpux10*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no ;; *) hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; netbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; newsos6) hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then hardcode_libdir_flag_spec='${wl}-rpath,$libdir' else case "$host_os" in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) hardcode_libdir_flag_spec='-R$libdir' ;; *) hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; osf3*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) if test "$GCC" = yes; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else # Both cc and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; solaris*) hardcode_libdir_flag_spec='-R$libdir' ;; sunos4*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes ;; sysv4) case $host_vendor in sni) hardcode_direct=yes # is this really true??? ;; siemens) hardcode_direct=no ;; motorola) hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac ;; sysv4.3*) ;; sysv4*MP*) if test -d /usr/nec; then ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) ;; sysv5* | sco3.2v5* | sco5v6*) hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator=':' ;; uts4*) hardcode_libdir_flag_spec='-L$libdir' ;; *) ld_shlibs=no ;; esac fi # Check dynamic linker characteristics # Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER. # Unlike libtool.m4, here we don't care about _all_ names of the library, but # only about the one the linker finds when passed -lNAME. This is the last # element of library_names_spec in libtool.m4, or possibly two of them if the # linker has special search rules. library_names_spec= # the last element of library_names_spec in libtool.m4 libname_spec='lib$name' case "$host_os" in aix3*) library_names_spec='$libname.a' ;; aix[4-9]*) library_names_spec='$libname$shrext' ;; amigaos*) library_names_spec='$libname.a' ;; beos*) library_names_spec='$libname$shrext' ;; bsdi[45]*) library_names_spec='$libname$shrext' ;; cygwin* | mingw* | pw32* | cegcc*) shrext=.dll library_names_spec='$libname.dll.a $libname.lib' ;; darwin* | rhapsody*) shrext=.dylib library_names_spec='$libname$shrext' ;; dgux*) library_names_spec='$libname$shrext' ;; freebsd1*) ;; freebsd* | dragonfly*) case "$host_os" in freebsd[123]*) library_names_spec='$libname$shrext$versuffix' ;; *) library_names_spec='$libname$shrext' ;; esac ;; gnu*) library_names_spec='$libname$shrext' ;; hpux9* | hpux10* | hpux11*) case $host_cpu in ia64*) shrext=.so ;; hppa*64*) shrext=.sl ;; *) shrext=.sl ;; esac library_names_spec='$libname$shrext' ;; interix[3-9]*) library_names_spec='$libname$shrext' ;; irix5* | irix6* | nonstopux*) library_names_spec='$libname$shrext' case "$host_os" in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; *) libsuff= shlibsuff= ;; esac ;; esac ;; linux*oldld* | linux*aout* | linux*coff*) ;; linux* | k*bsd*-gnu) library_names_spec='$libname$shrext' ;; knetbsd*-gnu) library_names_spec='$libname$shrext' ;; netbsd*) library_names_spec='$libname$shrext' ;; newsos6) library_names_spec='$libname$shrext' ;; nto-qnx*) library_names_spec='$libname$shrext' ;; openbsd*) library_names_spec='$libname$shrext$versuffix' ;; os2*) libname_spec='$name' shrext=.dll library_names_spec='$libname.a' ;; osf3* | osf4* | osf5*) library_names_spec='$libname$shrext' ;; rdos*) ;; solaris*) library_names_spec='$libname$shrext' ;; sunos4*) library_names_spec='$libname$shrext$versuffix' ;; sysv4 | sysv4.3*) library_names_spec='$libname$shrext' ;; sysv4*MP*) library_names_spec='$libname$shrext' ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) library_names_spec='$libname$shrext' ;; uts4*) library_names_spec='$libname$shrext' ;; esac sed_quote_subst='s/\(["`$\\]\)/\\\1/g' escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` shlibext=`echo "$shrext" | sed -e 's,^\.,,'` escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <= $GLIB_REQUIRED) AC_SUBST(GLIB_CFLAGS) AC_SUBST(GLIB_LIBS) PKG_CHECK_MODULES(GIO, gio-2.0 >= $GIO_REQUIRED) AC_SUBST(GIO_CFLAGS) AC_SUBST(GIO_LIBS) PKG_CHECK_MODULES(GTK, gtk+-3.0 >= $GTK_REQUIRED) AC_SUBST(GTK_CFLAGS) AC_SUBST(GTK_LIBS) PKG_CHECK_MODULES(LIBPEAS, libpeas-1.0 >= $LIBPEAS_REQUIRED) AC_SUBST(LIBPEAS_CFLAGS) AC_SUBST(LIBPEAS_LIBS) PKG_CHECK_MODULES(LIBPEASGTK, libpeas-gtk-1.0 >= $LIBPEAS_REQUIRED) AC_SUBST(LIBPEASGTK_CFLAGS) AC_SUBST(LIBPEASGTK_LIBS) PKG_CHECK_MODULES(LIBNOTIFY, libnotify >= $LIBNOTIFY_REQUIRED) AC_SUBST(LIBNOTIFY_CFLAGS) AC_SUBST(LIBNOTIFY_LIBS) PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $APPINDICATOR_REQUIRED, AC_DEFINE(HAVE_APPINDICATOR, 1, [appindicator is available]), AC_DEFINE(HAVE_APPINDICATOR, 0, [appindicator is not available])) AM_CONDITIONAL(APPINDICATOR, test -n "$APPINDICATOR_LIBS") AC_SUBST(APPINDICATOR_CFLAGS) AC_SUBST(APPINDICATOR_LIBS) GLIB_GSETTINGS AC_CHECK_HEADERS(regex.h) AC_CHECK_HEADERS(sensors/sensors.h, AC_CHECK_LIB(sensors, sensors_init,[ AC_DEFINE(HAVE_LIBSENSORS,1,[libsensors is available]) if test "x${SENSORS_DIR}" != "x"; then LIBSENSORS_CFLAGS="-I${SENSORS_DIR}/include" LIBSENSORS_LIBS="-L${SENSORS_DIR}/lib -lsensors" else LIBSENSORS_LIBS="-lsensors" fi])) AM_CONDITIONAL(LIBSENSORS, test -n "$LIBSENSORS_LIBS") AC_SUBST(LIBSENSORS_CFLAGS) AC_SUBST(LIBSENSORS_LIBS) # do nvidia by default if available AC_ARG_WITH(nvidia, [ --with-nvidia[=DIR] use nvidia in DIR],[ if test "$withval" != "no" -a "$withval" != "yes"; then NVIDIA_DIR=$withval CFLAGS="${CFLAGS} -I${NVIDIA_DIR}/include" LIBS="${LIBS} -L${NVIDIA_DIR}/lib" fi with_nvidia=$withval],[ with_nvidia="yes" ]) if test "$with_nvidia" = "no"; then echo "Disabling nvidia support" else AC_ARG_WITH(x11, [ --with-x11[=DIR] use x11 in DIR],[ if test "$withval" != "no" -a "$withval" != "yes"; then X11_DIR=$withval CFLAGS="${CFLAGS} -I${X11_DIR}/include" LIBS="${LIBS} -L${X11_DIR}/lib" fi with_x11=$withval],[ with_x11="yes" ]) AC_CHECK_HEADERS(X11/Xlib.h, AC_CHECK_LIB(X11, XOpenDisplay, [ HAVE_X11=true ])) # can't embed next AC_CHECK_HEADERS in true case of AC_CHECK_LIB if test "${HAVE_X11}" = "true"; then LIBS="${LIBS} -lX11 -lXext" # need to specifically include X11/Xlib header when # doing checks for NVCtrl headers AC_CHECK_HEADERS(NVCtrl/NVCtrl.h NVCtrl/NVCtrlLib.h, [ HAVE_NVIDIA=true ], [], [ #include ]) if test "${HAVE_NVIDIA}" = "true"; then AC_CHECK_LIB(XNVCtrl, XNVCTRLQueryExtension, [ NVIDIA_LIBS="-lXNVCtrl" AC_DEFINE(HAVE_NVIDIA,1,[nvidia sensors available]) ]) fi fi fi AM_CONDITIONAL(NVIDIA, test -n "$NVIDIA_LIBS") AC_SUBST(NVIDIA_CFLAGS) AC_SUBST(NVIDIA_LIBS) PKG_CHECK_MODULES(LIBATASMART, libatasmart >= $LIBATASMART_REQUIRED, HAVE_LIBATASMART="yes", HAVE_LIBATASMART="no") AC_SUBST(LIBATASMART_CFLAGS) AC_SUBST(LIBATASMART_LIBS) AM_CONDITIONAL(UDISKS, test -n "$LIBATASMART_CFLAGS") PKG_CHECK_MODULES(LIBUDISKS2, udisks2 >= $LIBUDISKS2_REQUIRED, HAVE_LIBUDISKS2="yes", HAVE_LIBUDISKS2="no") AC_SUBST(LIBUDISKS2_CFLAGS) AC_SUBST(LIBUDISKS2_LIBS) AM_CONDITIONAL(UDISKS2, test -n "$LIBUDISKS2_CFLAGS") # enable fake plugin if requested AC_ARG_ENABLE(fake, AS_HELP_STRING([--enable-fake], [Build plugin to generate fake sensors for testing])) AM_CONDITIONAL(FAKE, test "x$enable_fake" = "xyes") # ============ enable extra warnings etc ============= # if test "$USE_MAINTAINER_MODE" = "yes"; then CFLAGS+=" -ggdb" CFLAGS+=" -Wall -Wextra" CFLAGS+=" -Wno-missing-field-initializers" CFLAGS+=" -Wno-unused-parameter" CFLAGS+=" -Wmissing-declarations" CFLAGS+=" -Wredundant-decls" CFLAGS+=" -Wmissing-noreturn" CFLAGS+=" -Wshadow" CFLAGS+=" -Wpointer-arith" CFLAGS+=" -Wcast-align" CFLAGS+=" -Wwrite-strings" CFLAGS+=" -Winline" CFLAGS+=" -Wformat-nonliteral" CFLAGS+=" -Wformat-security" CFLAGS+=" -Wswitch-enum" CFLAGS+=" -Wswitch-default" CFLAGS+=" -Winit-self" CFLAGS+=" -Wmissing-include-dirs" CFLAGS+=" -Wundef" CFLAGS+=" -Waggregate-return" CFLAGS+=" -Wmissing-format-attribute" CFLAGS+=" -Wnested-externs" fi AC_SUBST(CFLAGS) # ========== extra debugging options ================= # m4_define([debug_default],[minimum]) AC_ARG_ENABLE([debug], [AS_HELP_STRING([--enable-debug=@<:@no/minimum/yes@:>@], [turn on debugging @<:@default=debug_default@:>@])], [], [enable_debug=debug_default]) AS_CASE([$enable_debug], [yes], [ test "$cflags_set" = set || CFLAGS="$CFLAGS -O0 -g3 -ggdb" DEBUG_CFLAGS="-DDEBUG" ], [minimum], [ DEBUG_CFLAGS="-DG_DISABLE_CAST_CHECKS" ], [no], [ DEBUG_CFLAGS="-DG_DISABLE_ASSERT -DG_DISABLE_CHECKS -DG_DISABLE_CAST_CHECKS" ], [AC_MSG_ERROR([Unknown argument to --enable-debug])]) AC_SUBST(DEBUG_CFLAGS) # =========== we need glib-genmarshal ================ # AC_PATH_PROG(GLIB_GENMARSHAL, glib-genmarshal) GNOME_COMPILE_WARNINGS(maximum) # Use --enable-maintainer-mode to disabled deprecated symbols GNOME_MAINTAINER_MODE_DEFINES # ==================== plugin stuff ================== # PLUGIN_LIBTOOL_FLAGS="-module -avoid-version" AC_SUBST(PLUGIN_LIBTOOL_FLAGS) # ================= generate files =================== # AC_CONFIG_FILES([ Makefile data/Makefile data/indicator-sensors.gschema.xml.in indicator-sensors/Makefile icons/Makefile plugins/Makefile plugins/aticonfig/Makefile plugins/dbus/Makefile plugins/dynamic/Makefile plugins/fake/Makefile plugins/libsensors/Makefile plugins/max/Makefile plugins/nvidia/Makefile plugins/udisks/Makefile plugins/udisks2/Makefile po/Makefile.in ]) AC_OUTPUT indicator-sensors-1.1/data/000077500000000000000000000000001356741033200157365ustar00rootroot00000000000000indicator-sensors-1.1/data/Makefile.am000066400000000000000000000013241356741033200177720ustar00rootroot00000000000000desktopdir = $(datadir)/applications desktop_in_files = indicator-sensors.desktop.in desktop_DATA = $(desktop_in_files:.desktop.in=.desktop) @INTLTOOL_XML_NOMERGE_RULE@ appdatadir = $(datadir)/metainfo dist_appdata_DATA = $(appdata_in_files:.xml.in=.xml) appdata_in_files = indicator-sensors.appdata.xml.in @INTLTOOL_DESKTOP_RULE@ gsettings_SCHEMAS = indicator-sensors.gschema.xml @INTLTOOL_XML_NOMERGE_RULE@ @GSETTINGS_RULES@ CLEANFILES = \ $(gsettings_SCHEMAS) \ indicator-sensors.appdata.xml DISTCLEANFILES = $(desktop_DATA) \ $(gsettings_SCHEMAS) MAINTAINERCLEANFILES = $(gsettings_SCHEMAS:.xml=.valid) EXTRA_DIST = $(desktop_in_files) \ $(appdata_in_files) \ indicator-sensors.gschema.xml.in indicator-sensors-1.1/data/indicator-sensors.appdata.xml.in000066400000000000000000000025151356741033200241470ustar00rootroot00000000000000 indicator-sensors.desktop CC0 Hardware Sensors Indicator Provides temperature, fan and voltage sensor readings within the panel of your desktop

Hardware Sensors Indicator provides temperature, fan and voltage sensor readings within the panel of your desktop.

When running GNOME Shell a shell extension is required to view sensors readings within the top panel. Therefore it is recommended to also install either the KStatusNotifierItem/AppIndicator Support extension https://extensions.gnome.org/extension/615/appindicator-support/, or the Hardware Sensors Indicator extension https://extensions.gnome.org/extension/336/hardware-sensors-indicator/ so that sensor readings are visible.

https://extensions.gnome.org/extension-data/screenshots/screenshot_336.png https://github.com/alexmurray/indicator-sensors murray.alex_at_gmail.com
indicator-sensors-1.1/data/indicator-sensors.desktop.in000066400000000000000000000004641356741033200234100ustar00rootroot00000000000000[Desktop Entry] _Name=Hardware Sensors Indicator _GenericName=Hardware Sensors Indicator _Comment=An indicator for Unity which displays hardware sensor readings Exec=indicator-sensors Icon=indicator-sensors StartupNotify=true Terminal=false Type=Application Categories=System; X-GNOME-UsesNotifications=true indicator-sensors-1.1/data/indicator-sensors.gschema.xml.in.in000066400000000000000000000040121356741033200245430ustar00rootroot00000000000000 "" <_summary>Primary sensor to display <_description>The primary sensor to display in the indicator, identified by it’s path. 7 <_summary>Display flags for the indicator <_description>The elements used to display the primary sensor within the indicator. [] <_summary>Enabled sensors <_description>The list of enabled sensors to monitor, each identified by it’s path. 5 <_summary>Seconds to delay hiding / showing alarms <_description>Alarm delay adds some hysteresis so alarms aren't shown for quickly fluctuating values. 1 <_summary>Temperature scale <_description>The temperature scale to display temperature sensor values. true <_summary>Show indicator <_description>Whether to show the indicator in the notification area. indicator-sensors-1.1/icons/000077500000000000000000000000001356741033200161405ustar00rootroot00000000000000indicator-sensors-1.1/icons/Makefile.am000066400000000000000000000036751356741033200202070ustar00rootroot00000000000000statusiconsdir = $(datadir)/icons/hicolor/22x22/status statusicons_DATA = \ hicolor/22x22/status/very-low-value-icon.png \ hicolor/22x22/status/low-value-icon.png \ hicolor/22x22/status/normal-value-icon.png \ hicolor/22x22/status/high-value-icon.png \ hicolor/22x22/status/very-high-value-icon.png deviceiconsdir = $(datadir)/icons/hicolor/22x22/devices deviceicons_DATA = \ hicolor/22x22/devices/indicator-sensors-battery.png \ hicolor/22x22/devices/indicator-sensors-case.png \ hicolor/22x22/devices/indicator-sensors-chip.png \ hicolor/22x22/devices/indicator-sensors-cpu.png \ hicolor/22x22/devices/indicator-sensors-gpu.png \ hicolor/22x22/devices/indicator-sensors-fan.png \ hicolor/22x22/devices/indicator-sensors-disk.png \ hicolor/22x22/devices/indicator-sensors-memory.png appicon256dir = $(datadir)/icons/hicolor/256x256/apps appicon256_DATA = hicolor/256x256/apps/indicator-sensors.png appicon48dir = $(datadir)/icons/hicolor/48x48/apps appicon48_DATA = hicolor/48x48/apps/indicator-sensors.png appicon32dir = $(datadir)/icons/hicolor/32x32/apps appicon32_DATA = hicolor/32x32/apps/indicator-sensors.png appicon24dir = $(datadir)/icons/hicolor/24x24/apps appicon24_DATA = hicolor/24x24/apps/indicator-sensors.png appicon16dir = $(datadir)/icons/hicolor/16x16/apps appicon16_DATA = hicolor/16x16/apps/indicator-sensors.png appicon_files = \ $(appicon256_DATA) \ $(appicon48_DATA) \ $(appicon32_DATA) \ $(appicon24_DATA) \ $(appicon16_DATA) \ hicolor/indicator-sensors.svg gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/hicolor install-data-hook: update_icon_cache uninstall-hook: update_icon_cache update_icon_cache: @-if test -z "$(DESTDIR)"; then \ echo "Updating Gtk icon cache."; \ $(gtk_update_icon_cache); \ else \ echo "*** Icon cache not updated. After (un)install, run this:"; \ echo "*** $(gtk_update_icon_cache)"; \ fi EXTRA_DIST = \ $(statusicons_DATA) \ $(deviceicons_DATA) \ $(appicon_files) indicator-sensors-1.1/icons/hicolor/000077500000000000000000000000001356741033200175775ustar00rootroot00000000000000indicator-sensors-1.1/icons/hicolor/16x16/000077500000000000000000000000001356741033200203645ustar00rootroot00000000000000indicator-sensors-1.1/icons/hicolor/16x16/apps/000077500000000000000000000000001356741033200213275ustar00rootroot00000000000000indicator-sensors-1.1/icons/hicolor/16x16/apps/indicator-sensors.png000066400000000000000000000014561356741033200255110ustar00rootroot00000000000000PNG  IHDRasBIT|d pHYs+tEXtSoftwarewww.inkscape.org<tEXtTitleSuru App Icon Template ZtEXtAuthorSam Hewitt߄FRtEXtCopyrightCC Attribution-ShareAlike http://creativecommons.org/licenses/by-sa/4.0/TbIDAT8=kTAwf~{7Y٘Mv ! Zb_oX(),Tcc@JY;c~ (S 333 +:_%x#‹tVCs//__MNϤfR(F9^u=zs 3>압vXI=x@kaWW[7΍,.*e)=X-"0>DIQ4>y%6_dmxb{P&(=P:s" P(Bm`'1,Ŵb2G?.8%pUjfLg-Ķ|$^F5p۶j͇t"Þw,Ѝ<]l0h}zɍU+Sa39tb`(g5嬦L%S>O|~~!pRT9+:ȣMAtycv`֫̉J~"ԁo2h攭FIENDB`indicator-sensors-1.1/icons/hicolor/22x22/000077500000000000000000000000001356741033200203565ustar00rootroot00000000000000indicator-sensors-1.1/icons/hicolor/22x22/devices/000077500000000000000000000000001356741033200220005ustar00rootroot00000000000000indicator-sensors-1.1/icons/hicolor/22x22/devices/indicator-sensors-battery.png000066400000000000000000000012251356741033200276240ustar00rootroot00000000000000PNG  IHDRĴl;bKGD pHYs B(xtIME .|["IDAT8ݔkQg޾P)Y+$&CIh6*jAPzB?ѻzMI/DM6RKMM5ÃxBuNsx3 Wʋ3=ppw04<\Zh=Kf"!*93yzxt46}8| EBU׿޹uT=l3X(s&SDQ8"qRXL "Aj*y5?$z4ryskl37(c74uDB\:7uب}U7&sZՊ1?~i$HbVkǜs~P1 lRH$jZE2P*NNL3vM aT~_׷+܂_ PCAPe9gpUQP\w&I՞ i \fr?pi' %X"~ r뀥IENDB`indicator-sensors-1.1/icons/hicolor/22x22/devices/indicator-sensors-case.png000066400000000000000000000012711356741033200270660ustar00rootroot00000000000000PNG  IHDRĴl;bKGD pHYs B(xtIME zFIDAT8ݔ_HSQǿ{]c5Z`ӹ.LjY?{zg_ | 5 6朖7E&msN$mq z99;Md>=Aû9Bp6X9{[[Hд6`6y7͐i 36L#M,w=4LSRWT{*m1>a irEkڒ?*BWWx%eR/F}A?q "w@jp.ZvC(W3fuIAMk`:R*_ DbCP?aPq&#O?4P54/ ! SsIENDB`indicator-sensors-1.1/icons/hicolor/22x22/devices/indicator-sensors-chip.png000066400000000000000000000012341356741033200270750ustar00rootroot00000000000000PNG  IHDRĴl;bKGD pHYs B(xtIME  I)IDAT8ݔKTQƿqNR1yfѼT΀1YA=H=K[?D/AL7[cMΌz졾^{]6gG{ };<#­#mG_N <L"/O45<ko籈|) m[vXyjjxxdH{d)ҳb4;~"&³fy wIh#"a(WLb!fn$5@n ^[6819qqLK"qU)5; P[}-ooVs\|i VW\nDge{FS3sO!bF#Yzy|lS/|ByjxF1ip7Yqf:FEL\_WMFf2HfA"ITmx*lۖsgϬXaxd}]Q p‹DHcj4Xk/5U 2y0_jJS{F r җub??)_ 0˖0IENDB`indicator-sensors-1.1/icons/hicolor/22x22/devices/indicator-sensors-cpu.png000066400000000000000000000012531356741033200267420ustar00rootroot00000000000000PNG  IHDRĴl;bKGD pHYs B(xtIME 8IDAT8ݔKQƟ|5DAf8!EBHTdYjtSЍ݄}Ox]ԅ7A7:2V̲)#]-4py(hϰzn{~9skQ 1Fg{p7po&}fv{~a1>Nhmj;D! qH7>U#Iw.i|meHش̅tz&,ۊ7)"fU &w;Yӱ[&bbVz}̼B"9 D42ֺSpÁ-5ϯνrHoRT wV.fns\.w^^:;;RJrUkzesBa<2 =$$Zmi3R^hS)X4*>ͷ|^@vx|"9smm?RtLjk; ht68eB_8^IENDB`indicator-sensors-1.1/icons/hicolor/22x22/devices/indicator-sensors-disk.png000066400000000000000000000012141356741033200271020ustar00rootroot00000000000000PNG  IHDRĴl;bKGD pHYs B(xtIME #)tIDAT8ݔMkSA3޴Aro>QHbV \JZ\)\{*t,~DӄXjbQ+61BY$fE}Ws3g&n9C!ɉOb&n),uefbrlDB;Tol/ܿwQde[BqٱyzUO [8˰ԙ}+fռ}݅miHT2!1y Z$ǎ\gAG.FD$U$Y,Ϗf=\9_ =PmX$2'yؒk+%ơPPTic=-KfZqS55njۭ׉c .BGQ|? %۬TzFÝZp8ͦ_=jj4ݝMM;x"<`[DqY1,s0qlqpSR(qfYc^“d29υkz\wɁ8D q) @@*mtYIENDB`indicator-sensors-1.1/icons/hicolor/22x22/devices/indicator-sensors-fan.png000066400000000000000000000012351356741033200267170ustar00rootroot00000000000000PNG  IHDRĴl;bKGD pHYs B(xtIME .W *IDAT8ݔOAߙRjJ#)#ZSb81HC4z"o\ w?CH1J[Eڨ`Ό3ϼ|3p܊f7gx[[&g?lV?ng^-- a 'DJ~`lPpiv زt]"TŗT(!,0lSvbabzT;2Ǜc)!eMpl*L->MِRQr.~mH^Vc05iBKQV^VTZRjNg;unr.m5V$RMU ria>r.;TNۧ *. 4d+5=HTPhL!z-O9T.o oVLӤ+4JyPQA J0$9nE`Xfs09r DsFݼLE!.&LO;v_/7+~IENDB`indicator-sensors-1.1/icons/hicolor/22x22/devices/indicator-sensors-gpu.png000066400000000000000000000012341356741033200267450ustar00rootroot00000000000000PNG  IHDRĴl;bKGD pHYs B(xtIME 6DZ)IDAT8ݔKTQƟ̹8_Afh)I"L\ mZԺM.EAn6:8`k2%qœoӽ" nQ {s8h{H7A}2˵\"()˃CC~k81L߻{Gh\6-s=~$,oEvsEI&$qy쀕L 1W屟@`=GJu_ ٦2LD !c rNJfļp`n{+O^ufRF_42fZ0 R PGОzv8Xn"kSÅ| ι;zG7fVk{P*Y89'"MJiN+nB(\ۺ#'۟k@f(X.T$7\n4Á Cur;f>`5vj旳}9 8 >P|;BX1m̒zZS) E$S[BlKPʴ5IENDB`indicator-sensors-1.1/icons/hicolor/22x22/devices/indicator-sensors-memory.png000066400000000000000000000012411356741033200274600ustar00rootroot00000000000000PNG  IHDRĴl;bKGD pHYs B(xtIME  he8.IDAT8ݔOSA{HP4T-Xkl.DWvѥk7Ƅ'hFcb0CEAj m_}\ƍisjw~̙b+.n1 Mu,6巩'y)Miȹ/cpn=*|ƗSoYYadO+ޯ,2$N2vDRHda艮N}ގ0NH.H+$AY[F}sX5H~V٪)CA4IR5b^{[VS`h }>K4\着sܬVR9( >}Z{~[om*\q tk-w4SvG :=sT8lQfӹeyzz%Ii|XXX8u R 8"t׺i aB^0yXOp&{H$&%dt _g{B",P~E@IENDB`indicator-sensors-1.1/icons/hicolor/22x22/devices/indicator-sensors-no-icon.png000066400000000000000000000002621356741033200275140ustar00rootroot00000000000000PNG  IHDRĉsRGBbKGD pHYs  tIMEtEXtCommentCreated with GIMPW IDATc````^*:IENDB`indicator-sensors-1.1/icons/hicolor/22x22/status/000077500000000000000000000000001356741033200217015ustar00rootroot00000000000000indicator-sensors-1.1/icons/hicolor/22x22/status/high-value-icon.png000066400000000000000000000006161356741033200253710ustar00rootroot00000000000000PNG  IHDRĴl;bKGD pHYs B(xtIME5IDAT8=K`2ԥZEҡTqv 8At m^FARꝋC'w;P6!a_ PYN ZQO6Vk~jmts{yn/|1tk80)6?iHevHPkP'%x .8I@G"&̣$fZ{|rqdd٬<:ލODepOp,j۶m(t/ߴl=-IENDB`indicator-sensors-1.1/icons/hicolor/22x22/status/low-value-icon.png000066400000000000000000000006221356741033200252500ustar00rootroot00000000000000PNG  IHDRĴl;bKGD pHYs B(xtIME!6IDAT8=KpƟKc4JT A n]:(8D%4Qx` [ P|@ay%/v{sVi))uNxziK=E)RClSƵueFq aow9p6XR?:8I}aEY8I}ewN4,6Ãn y9+[D`/I 4͖eY,yO'$peBIENDB`indicator-sensors-1.1/icons/hicolor/22x22/status/normal-value-icon.png000066400000000000000000000006351356741033200257430ustar00rootroot00000000000000PNG  IHDRĴl;bKGD pHYs B(xtIME" *IDAT8=K` TA:(P/Q8%CTd }IP$ ϹdpC7u3 ]t@pIM?cFߖu>96RC.qzp"K `]˴XX+2U $Yd\є2yMi&L!x> 0 Lؗc!D]_\OxhTom!D.u6_)s"̌O$;a4MS(Iyڽ<5Qp7HIENDB`indicator-sensors-1.1/icons/hicolor/22x22/status/very-high-value-icon.png000066400000000000000000000006001356741033200263450ustar00rootroot00000000000000PNG  IHDRĴl;bKGD pHYs B(xtIME*K IDAT8c`jwo_df`d׿ [)2ޭK?>|tcVQQ^847J@O"22ynkZbT#ÿ_n{UPOҰTTWe`d4fIQAőVbQG f``xэ{ ʊ)jW99\jRCFFF~122k) ... 6H˗_߾}1<V1`5IENDB`indicator-sensors-1.1/icons/hicolor/22x22/status/very-low-value-icon.png000066400000000000000000000006271356741033200262400ustar00rootroot00000000000000PNG  IHDRĴl;bKGD pHYs B(xtIMEn4$IDAT81K`KWHԥZEݟBADG 쟰 QqƥmhnP4w.ݾ:z{pw/0kA:́(F_s-p>'}Jju_9(jZJcm5YtVC^:Z@4 m<S#. NA~HTya2h0Xq 9iwJãhV*ӓf])j;GD`FBxx|%M'˲jm 0L87qaշ^IENDB`indicator-sensors-1.1/icons/hicolor/24x24/000077500000000000000000000000001356741033200203625ustar00rootroot00000000000000indicator-sensors-1.1/icons/hicolor/24x24/apps/000077500000000000000000000000001356741033200213255ustar00rootroot00000000000000indicator-sensors-1.1/icons/hicolor/24x24/apps/indicator-sensors.png000066400000000000000000000021441356741033200255020ustar00rootroot00000000000000PNG  IHDRw=sBIT|d pHYs+tEXtSoftwarewww.inkscape.org<tEXtTitleSuru App Icon Template ZtEXtAuthorSam Hewitt߄FRtEXtCopyrightCC Attribution-ShareAlike http://creativecommons.org/licenses/by-sa/4.0/Tb>IDATHkU眙_\{oTX "BnZݨ(Fp#]NԅHii,MUb[-ބ5wp!{ĎZaXx*( &ZB<$޿zt|UAi٧{G?MV)|B.(1;]~aWNy7XD(߸tq__YM;[?͝.irvX 6TR".IENDB`indicator-sensors-1.1/icons/hicolor/256x256/000077500000000000000000000000001356741033200205405ustar00rootroot00000000000000indicator-sensors-1.1/icons/hicolor/256x256/apps/000077500000000000000000000000001356741033200215035ustar00rootroot00000000000000indicator-sensors-1.1/icons/hicolor/256x256/apps/indicator-sensors.png000066400000000000000000000245001356741033200256600ustar00rootroot00000000000000PNG  IHDR\rfsBIT|d pHYs+tEXtSoftwarewww.inkscape.org<tEXtTitleSuru App Icon Template ZtEXtAuthorSam Hewitt߄FRtEXtCopyrightCC Attribution-ShareAlike http://creativecommons.org/licenses/by-sa/4.0/Tb IDATxy\U79wI' " ʪ822㠸88" NT H @vI'z{ǭ]]]˽յuyz]uV~{B!B!B!B!B!B!BVz&}բVKPy,%}T%wX{7rrw1n^gʙJ%BA3{ӹ9`LEQf6s10J@3EW88 ssB=ƒYOXBa{ `eDt[B2)dTHiXR i%DiE%!ͤqIJCȁh8p 34er7[|XP<2s2ak UM*) oR9o5;0w% cwk=i@P3ߊZH~\_s[ۦ_Wz)3 ')%DOvg0!N) tٯ05jlɈAՓ4w'vLL5 2\_pǯ/>O v29BJ '%F þvR.4}&RXx5=}Ӻcb2z"F,3 ~-?o_t 6/j0Z0K `R`()1S"uh9tf-ВfH{oꇝ,L,Tk]N('7Μc(B, @o@B jP#18: Z||K/Gg{Cםv(܈XJu{;3k*灃 #Q }q*(qǴfXe"i6xf*ʝ2տ~܎U` pBOB̤'G0+`Z@DkAA9@U_9?y~? }1pKD̜]i)Rr )3]}?ٍ(S(WHPyOLCy=Q#&0`VA5@ɣO҃_새V* _݃&T'C ơ(qKXs H;3\QLC&goUUaMM3\`#^[%LMfho\ Kb0R, `8)8TEim_tvmpn5>W_?񇚮3%=B}ʁ9 *TG}n`bbOx|@融WiϘ8( )S= P Wþ*dC~Uq}ocΌ (U ))+@OaL 4!o$Ŕ2s..5%t'1SBrm%ϥbJ*K !,(O'N]pkW/%G A~B! $c' xJ)(g~s{)$ ik4a^sW- D ZdJӁًn$J6*xdhSJʉ8? E&̖iܦ'$=-h\pu(GkP:/l 4~JmAϗL }ZqbPmvƏ p̾/t*@WB͉A9#o@/20͒5!!ugϿ"xJEmj?#TS PZ&o%PHSR+XT}g//bj4Z!Rq(OaD,>dUw'dr.ȡcVj@A2n*7_.'& (83sDS g UmT1+ 2U{7ٜ"M9hP5o q>* Dj;>kU(f>ߡh<)?ha c4![mĐxpcӡ$m^`%k1oM m'}hњ-1| >zl;j43pϻS y%+`ner%>{`/LHj€Kɥ!WB} [~5ɾ\ iLlm<ؼ4H۬5XT͞4h 7Ѐ ;!*X$$g| Kr,ۑKJ}V[ك?1*~xv>4?P$9=/.+\ PV0-oUUy}ܴT05 ;֙/9FνkP 8jܴ҅'6Sg]pm \ [?c>HFs-F\ip?ڧA0mΛIFc@P9.] kc;zĨ6kbS @cgNkq7T4raE#h> @oh f.դ+ m9_^SUZFcT̅*\Qq'wբ 4/ &q-~A˼FW.w#>NJ 0EQ@ Wm~- M 'D$v gh8u Y/*~C8A+m'٢[ ZkΐxvŢ |E^Ȏ~/X%a;~/->|Qz{&Ec^Tf. 6 +m pтZ {'73L߼3(*cPiN2*8o3 m`k[[ ޓ@PeP/$R (Dx^\ 4*Ν=pADu'jᮍHqbΝc2pF?Pj ǵ{WMʟi[h_ޮЅҜX? EFGۧMR RQ+:tx-+igcު*wJsb58mN LF?JZf~/DVHZ%*ώU=ځxw6;'e8KE{n@JD;cr*M TY!o{4r8jkgh" l}R) G)]^_#Dc*n^Xp@Qhgx/ޫ>,Ľ-@c2Q=2گX^Ր?g,UqRc݁ 7+E!݀nsHr0h&TtQo/V@2ѝQ<$25KDȔ"v:F :F :Fs'ZygD&D Ab@jq 2Em1J1J1j$akAhWZF x=b{l@Rۨ @H@H@H@HF:8g]ޟGolr^+:4צ>!$VU7xz>#kX3 jUccccH<9v 2Jēm}Ԡ*!u!u!u%(DB ^go<ǎdP :F :F :F :F :Fē'JO')Dj %ᨅQhAUB%B%B%B5OqBA"e<#2`y-v?(bPL)!u!u!u!u!u!u!u!u!u!u@zLBߏ-16W 9PA>/liW6G_ZDJ aEGGc~yCOdq|ˎ4;_(:XҪU4H o(z'pp R@݂ @Ҋ MÊ⮒zxlWg4c;CmT ) f 1ۡR>$T0W!*~i̢Մ) nP L^c k9 6D1u2yC-"P0?nYn[\ |ː Ge#g-@ Jf+f̫x`pR<{VH]g;7{ ǦA'sq. Smʦ=wIu$ϞM*U8Tܼ b?jhҩP6X.fuQ/:tp刁݃4yuS݉|󛲯 Ƒ${+( Ev/X ^r[}gƲjk% UK>4(J H[ݢo``COi}XR xLߒ3._(H7-dr6?()euǎ;sTGrYD$񆹨hnrR9=oi1V<@L80bHƵ\| p l޳e|mIgo Uy8RlFc՜t7 eETn/e K~9?WRO ᜃf7(xڕi4V _8ĆTnȮqV5$$Gp x}{go #WOʁ[W7A/bQ(''Vp/ uJŒ ')a{,oQ5\{}mn;46ˏuL*EZt8vQƜ=2īT#XqJOH+婑wG7+勂8%> ^oLNzk|Q.,n?(E6rdo(T{N%r{n |js_0V_vLy` _d@kpꦲ̳+ i'y"$Eb oY` )Q(gr.~m8iZ[5]Ǐm+j3XRB#\hB27h&_rÓsn;?Ђڂ&myZ }zKF7, |e'3;fem7S0R&x <^_2tO㔙:-"Nu{L|gC)|Vܔ᜛<F@7eKޛH>u^>-R_ ǜQyKr@?je9RjGMoƝ1RIHn>2{cZ("PfDlRn^Hk*έГҏwP f2z&5)BHzM4mKC8yFGkJ$l~MaHn@{8R J5fk;^ caqت+Cb]wOa'u$ ?r`;JPW8o4ءcz{x'W%i'Z' m?07U @_}_$+qR2IKb}wS3 4۠`Nf#2RۉL)11žAVJ@#'DC]L,+ykN)B `ZG9qތG01y[ u09ܷ '&`|fo"HAWBjCw(j(pfv=R}rA2)1zugL)T z =^'XcBiY) - RX]SHUr$#Ac -R N%z ?>c c`ӿIT=+s<ʟ~wK#S0]|kz顄Tsf4x%mDԋ%Zc&)0兟H`,.3``R]'H]> @ݏ&O@B -z)+)R @Zu) u 2YRbIΫ dzaY"xTB)*) ];~qa_nOWֺf>eř烱&iFI/‚4φ7= ;Uw ! o[4eθ.-+`'ieJDvw?wd{_ɖ$Y}ۢom=ULfIޤ$_H  '7;EUN=ddl>,j>QI&MLQ4@HiCFR&z<~gğ ?kĎKaĭ#?10gNc % " ,3?گ~)ð~+eԍN, /u h[p7:^ơP /RG`ţsJ+Γ ) G),DԾF4_t= NQ?/}]媀'ҀW ܰuEg]p{@ixnK}a赿v?ނwU)/r1mN@Oi-s>}3柯WcDQ|N 6H a&!D2_,W"iE_'b]SO뗼ȟ D~h V̸ |;OUM;0c:f3E-["LZ&0}*e"{^>Ľf540vO}fC_&T&87 moXtܩ)Mm+4R볐u2S5pESS7\I?Ph"HJHa7˴ 4eE!#:{s_y;0V72~6nU |G%esdONBH~V( KOim;#'m3 -2=u7pFƢZ65ܮZTj \~ƕW!1dKK Lw(S%_Ҋ"BJI i2F %q 1!M 3zrق5=g^3=3sm]3j"|I!=3V2~,sk9F&8ғDf=:ϙsȞz}UWͩ/hdܻzI ;|/W lA2W({}Zf[̼wb?۹|7/ W)!7W]f>T HyM\&M/`b2 [ X/A=%>v>ȞS~OWVL=!h(Sq#b.ϗ["hj5[Ѝ:: &U4?},ˉOE_opx2Hv||R@XD/L]Pǂ|OYhʕХfW`btvǟ$pz'2q\_[Nd‹ᯏ '"ݳu``ߑAQ WMJ")CIAV dE7 iQxd{BU;~qÛW]( \CJJy5Zc!Z:3Fˇ>(/|\:k[[6](Bf3Im pb@(V}&L]Z8 8v%xW2/m0+g֕ThiҟDRIENDB`indicator-sensors-1.1/icons/hicolor/48x48/000077500000000000000000000000001356741033200203765ustar00rootroot00000000000000indicator-sensors-1.1/icons/hicolor/48x48/apps/000077500000000000000000000000001356741033200213415ustar00rootroot00000000000000indicator-sensors-1.1/icons/hicolor/48x48/apps/indicator-sensors.png000066400000000000000000000042651356741033200255240ustar00rootroot00000000000000PNG  IHDR00WsBIT|d pHYs+tEXtSoftwarewww.inkscape.org<tEXtTitleSuru App Icon Template ZtEXtAuthorSam Hewitt߄FRtEXtCopyrightCC Attribution-ShareAlike http://creativecommons.org/licenses/by-sa/4.0/TbIDATh[l\Wec{|'vDZ(HHCA @4BcE+R$@H@_( *PEB\M!iLx|;\73v&$E_:s^{p!.C6:tɦMB +7e(5|W}4URʳrhirje80ߋ3>GlM;Z[ 8 8keaT\^t{o 5;f_;o}b;;;ڙ*U/r)rJ+V/) Mo:b)~]S\˿'?tϛ|?w?JoRfx J.ZZ'Ni$wm,]Q}d;Ώu`sg梣 tTe.S%/ (9x@n{m* Sa&ٝ6oz\dR}f*d6wHkW'LnQ`OM$>BGttozKǷUwN<禫!X p -%n‘J\ɻ|t9s6;'3SsC4#.""4zƐ$nT5{u[%S0/(G(ϕ(EGki7I78i ̍d3QP߷tׂ׿wGmO2n|ߖU*K 7(qwGlU يPthYP_ VJViZwqRL67;/ylk)'V,Vjr7^~HU/̍x[)"!%`H&E2yC}Q~ CV>WVnH97zUwc|{{S2"b닮Po.2ֻ#4X,l#[X(}bLkv?F%R޼=7{mP'b%,|ky䟀vX' cзۓ- Dt LM %Q=6zit)邘!FGLs\:yll|)swe㖡hڎ#mPkDk!ňD"pC=nqUű*e"r\~٫#<7Ƌ/yo{hځ6hhk{6hTZSMaBWP8Zc""RV)\؎v+Yoq>WpgY`o0I[9'FDj{72JIENDB`indicator-sensors-1.1/icons/hicolor/indicator-sensors.svg000066400000000000000000001334161356741033200237760ustar00rootroot00000000000000 Suru App Icon Template image/svg+xml Sam Hewitt Suru App Icon Template image/svg+xml apps indicator-sensors indicator-sensors-1.1/indicator-sensors/000077500000000000000000000000001356741033200204735ustar00rootroot00000000000000indicator-sensors-1.1/indicator-sensors/Makefile.am000066400000000000000000000025261356741033200225340ustar00rootroot00000000000000## Process this file with automake to produce Makefile.in AM_CPPFLAGS = -DGNOMELOCALEDIR=\""$(datadir)/locale/"\" \ -DG_LOG_DOMAIN=\""indicator-sensors"\" \ -DPIXMAPS_DIR=\""$(datadir)/pixmaps/$(PACKAGE)/"\" \ -DDATADIR=\""$(datadir)"\" \ -DLIBDIR=\""$(libdir)"\" \ -DSYSCONFDIR=\""$(sysconfdir)"\" \ -DPREFIX=\""$(prefix)"\" \ -I$(top_srcdir) \ $(GLIB_CFLAGS) $(GIO_CFLAGS) $(GTK_CFLAGS) $(APPINDICATOR_CFLAGS) $(LIBPEAS_CFLAGS) $(LIBPEASGTK_CFLAGS) $(LIBNOTIFY_CFLAGS) $(DEBUG_CFLAGS) LIBS = $(GLIB_LIBS) $(GIO_LIBS) $(GTK_LIBS) $(APPINDICATOR_LIBS) $(LIBPEAS_LIBS) $(LIBPEASGTK_LIBS) $(LIBNOTIFY_LIBS) marshallers.h: marshallers.list glib-genmarshal --header $< > $@ marshallers.c: marshallers.list glib-genmarshal --body $< > $@ BUILT_SOURCES = marshallers.h marshallers.c bin_PROGRAMS = indicator-sensors indicator_sensors_SOURCES = \ indicator-sensors.c \ is-application.c \ is-application.h \ is-log.h \ is-log.c \ is-notify.h \ is-notify.c \ is-indicator.h \ is-indicator.c \ is-sensor.h \ is-sensor.c \ is-temperature-sensor.h \ is-temperature-sensor.c \ is-fan-sensor.h \ is-fan-sensor.c \ is-store.h \ is-store.c \ is-manager.h \ is-manager.c \ is-preferences-dialog.h \ is-preferences-dialog.c \ is-sensor-dialog.h \ is-sensor-dialog.c EXTRA_DIST = marshallers.list DISTCLEANFILES = $(BUILT_SOURCES) indicator-sensors-1.1/indicator-sensors/indicator-sensors.c000066400000000000000000000161111356741033200243050ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #ifdef HAVE_CONFIG_H #include #endif #include "is-log.h" #include "is-notify.h" #include "is-application.h" #include "is-indicator.h" #include #include #include #include #include #include static gboolean verbose = FALSE; static void on_extension_added(PeasExtensionSet *set, PeasPluginInfo *info, PeasExtension *exten, IsApplication *application) { is_debug("main", "Activating plugin: %s", peas_plugin_info_get_name(info)); peas_extension_call(exten, "activate", application); } static void on_extension_removed(PeasExtensionSet *set, PeasPluginInfo *info, PeasExtension *exten, IsApplication *application) { is_debug("main", "Deactivating plugin: %s", peas_plugin_info_get_name(info)); peas_extension_call(exten, "deactivate", application); } static void on_plugin_list_notify(PeasEngine *engine, GParamSpec *pspec, gpointer user_data) { const GList *plugins = peas_engine_get_plugin_list(engine); while (plugins != NULL) { PeasPluginInfo *info = PEAS_PLUGIN_INFO(plugins->data); peas_engine_load_plugin(engine, info); plugins = plugins->next; } } static void clear_sensor_icon_cache(void) { GDir *dir = NULL; const gchar *filename; gchar *cache_dir = g_build_filename(g_get_user_cache_dir(), PACKAGE, "icons", NULL); dir = g_dir_open(cache_dir, 0, NULL); if (dir == NULL) { is_error("main", "Failed to open icon cache dir %s\n", cache_dir); goto exit; } for (filename = g_dir_read_name(dir); filename != NULL; filename = g_dir_read_name(dir)) { gchar *path = g_build_filename(cache_dir, filename, NULL); int ret = g_remove(path); if (ret < 0) { is_error("main", "Error removing icon cache file: %s\n", path); } g_free(path); } g_dir_close(dir); exit: g_free(cache_dir); return; } static GOptionEntry options[] = { { "verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose, "Print more verbose debug output", NULL }, { NULL } }; int main(int argc, char **argv) { GOptionContext *context; IsApplication *application; IsTemperatureSensorScale scale; gboolean show_indicator; GSettings *settings; IsManager *manager; gchar *plugin_dir; PeasEngine *engine; PeasExtensionSet *set; GError *error = NULL; gchar *locale_dir; /* Setup locale/gettext */ setlocale(LC_ALL, ""); locale_dir = g_build_filename(DATADIR, "locale", NULL); bindtextdomain(GETTEXT_PACKAGE, locale_dir); g_free(locale_dir); bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); textdomain(GETTEXT_PACKAGE); context = g_option_context_new("- hardware sensors monitor"); g_option_context_add_main_entries(context, options, GETTEXT_PACKAGE); g_option_context_add_group(context, gtk_get_option_group (TRUE)); if (!g_option_context_parse(context, &argc, &argv, &error)) { g_print("command-line option parsing failed: %s\n", error->message); goto exit; } if (verbose) { is_log_set_level(IS_LOG_LEVEL_DEBUG); } /* clear the sensor icon cache directory to use any new icon theme */ clear_sensor_icon_cache(); gtk_init(&argc, &argv); if (!g_irepository_require(g_irepository_get_default(), "Peas", "1.0", 0, &error)) { is_warning("main", "Could not load Peas repository: %s", error->message); g_error_free (error); error = NULL; } engine = peas_engine_get_default(); g_signal_connect(engine, "notify::plugin-list", G_CALLBACK(on_plugin_list_notify), NULL); /* add home dir to search path */ plugin_dir = g_build_filename(g_get_user_config_dir(), PACKAGE, "plugins", NULL); peas_engine_add_search_path(engine, plugin_dir, NULL); g_free(plugin_dir); /* add system path to search path */ plugin_dir = g_build_filename(LIBDIR, PACKAGE, "plugins", NULL); peas_engine_add_search_path(engine, plugin_dir, NULL); g_free(plugin_dir); /* init notifications */ is_notify_init(); /* make sure we create the application with the default settings */ settings = g_settings_new("indicator-sensors.application"); show_indicator = g_settings_get_boolean(settings, "show-indicator"); scale = g_settings_get_int(settings, "temperature-scale"); application = g_object_new(IS_TYPE_APPLICATION, "manager", is_manager_new(), "temperature-scale", scale, "show-indicator", show_indicator, NULL); g_settings_bind(settings, "temperature-scale", application, "temperature-scale", G_SETTINGS_BIND_DEFAULT); g_settings_bind(settings, "show-indicator", application, "show-indicator", G_SETTINGS_BIND_DEFAULT); /* create extension set and set manager as object */ set = peas_extension_set_new(engine, PEAS_TYPE_ACTIVATABLE, "object", application, NULL); /* activate all activatable extensions */ peas_extension_set_call(set, "activate"); /* and make sure to activate any ones which are found in the future */ g_signal_connect(set, "extension-added", G_CALLBACK(on_extension_added), application); g_signal_connect(set, "extension-removed", G_CALLBACK(on_extension_removed), application); /* since all plugins are now inited show a notification if we detected * sensors but none are enabled - TODO: perhaps just open the pref's * dialog?? */ manager = is_application_get_manager(application); GSList *sensors = is_manager_get_all_sensors_list(manager); if (sensors) { gchar **enabled_sensors = is_manager_get_enabled_sensors(manager); if (!g_strv_length(enabled_sensors)) { is_notify(IS_NOTIFY_LEVEL_INFO, _("No Sensors Enabled For Monitoring"), _("Sensors detected but none are enabled for monitoring. To enable monitoring of sensors open the Preferences window and select the sensors to monitor")); } g_strfreev(enabled_sensors); g_slist_foreach(sensors, (GFunc)g_object_unref, NULL); g_slist_free(sensors); } gtk_main(); g_object_unref(application); is_notify_uninit(); exit: return 0; } indicator-sensors-1.1/indicator-sensors/is-application.c000066400000000000000000000722171356741033200235640ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "is-application.h" #include "is-indicator.h" #include "is-manager.h" #include "is-preferences-dialog.h" #include "is-sensor-dialog.h" #include "is-log.h" #include #include #define DESKTOP_FILENAME PACKAGE ".desktop" G_DEFINE_TYPE (IsApplication, is_application, G_TYPE_OBJECT); static void is_application_dispose(GObject *object); static void is_application_finalize(GObject *object); static void is_application_get_property(GObject *object, guint property_id, GValue *value, GParamSpec *pspec); static void is_application_set_property(GObject *object, guint property_id, const GValue *value, GParamSpec *pspec); #define DEFAULT_POLL_TIMEOUT 5 /* properties */ enum { PROP_MANAGER = 1, PROP_SHOW_INDICATOR, PROP_POLL_TIMEOUT, PROP_AUTOSTART, PROP_TEMPERATURE_SCALE, LAST_PROPERTY }; static GParamSpec *properties[LAST_PROPERTY] = {NULL}; struct _IsApplicationPrivate { IsManager *manager; IsIndicator *indicator; GtkWidget *prefs_dialog; guint poll_timeout; glong poll_timeout_id; GFileMonitor *monitor; IsTemperatureSensorScale temperature_scale; GKeyFile *sensor_config; guint idle_write_id; }; static void is_application_class_init(IsApplicationClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS(klass); g_type_class_add_private(klass, sizeof(IsApplicationPrivate)); gobject_class->get_property = is_application_get_property; gobject_class->set_property = is_application_set_property; gobject_class->dispose = is_application_dispose; gobject_class->finalize = is_application_finalize; properties[PROP_MANAGER] = g_param_spec_object("manager", "manager property", "manager property blurp.", IS_TYPE_MANAGER, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property(gobject_class, PROP_MANAGER, properties[PROP_MANAGER]); properties[PROP_SHOW_INDICATOR] = g_param_spec_boolean("show-indicator", "show-indicator property", "show-indicator property blurp.", TRUE, G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property(gobject_class, PROP_SHOW_INDICATOR, properties[PROP_SHOW_INDICATOR]); properties[PROP_POLL_TIMEOUT] = g_param_spec_uint("poll-timeout", "poll-timeout property", "poll-timeout property blurp.", 0, G_MAXUINT, DEFAULT_POLL_TIMEOUT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property(gobject_class, PROP_POLL_TIMEOUT, properties[PROP_POLL_TIMEOUT]); properties[PROP_AUTOSTART] = g_param_spec_boolean("autostart", "autostart property", "start " PACKAGE " automatically on login.", FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property(gobject_class, PROP_AUTOSTART, properties[PROP_AUTOSTART]); /* TODO: convert to an enum type */ properties[PROP_TEMPERATURE_SCALE] = g_param_spec_int("temperature-scale", "temperature scale", "Sensor temperature scale.", IS_TEMPERATURE_SENSOR_SCALE_CELSIUS, IS_TEMPERATURE_SENSOR_SCALE_FAHRENHEIT, IS_TEMPERATURE_SENSOR_SCALE_CELSIUS, G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property(gobject_class, PROP_TEMPERATURE_SCALE, properties[PROP_TEMPERATURE_SCALE]); } static gboolean update_sensors(IsApplication *self) { IsApplicationPrivate *priv; GSList *enabled_sensors; gboolean ret; g_return_val_if_fail(IS_IS_APPLICATION(self), FALSE); priv = self->priv; enabled_sensors = is_manager_get_enabled_sensors_list(priv->manager); g_slist_foreach(enabled_sensors, (GFunc)is_sensor_update_value, NULL); g_slist_foreach(enabled_sensors, (GFunc)g_object_unref, NULL); /* return false if have no sensors left */ ret = (g_slist_length(enabled_sensors) > 0); /* only keep going if have sensors to poll */ if (!ret) { g_source_remove(priv->poll_timeout_id); priv->poll_timeout_id = 0; } g_slist_free(enabled_sensors); return ret; } static void file_monitor_changed(GFileMonitor *monitor, GFile *file, GFile *other_file, GFileMonitorEvent event_type, IsManager *self) { g_object_notify_by_pspec(G_OBJECT(self), properties[PROP_AUTOSTART]); } static void is_application_init(IsApplication *self) { IsApplicationPrivate *priv; gchar *path; GFile *file; GError *error = NULL; gboolean ret; priv = self->priv = G_TYPE_INSTANCE_GET_PRIVATE(self, IS_TYPE_APPLICATION, IsApplicationPrivate); priv->poll_timeout = DEFAULT_POLL_TIMEOUT; path = g_build_filename(g_get_user_config_dir(), "autostart", DESKTOP_FILENAME, NULL); file = g_file_new_for_path(path); priv->monitor = g_file_monitor_file(file, G_FILE_MONITOR_NONE, NULL, NULL); g_signal_connect(priv->monitor, "changed", G_CALLBACK(file_monitor_changed), self); g_object_unref(file); g_free(path); priv->temperature_scale = IS_TEMPERATURE_SENSOR_SCALE_CELSIUS; priv->sensor_config = g_key_file_new(); path = g_build_filename(g_get_user_config_dir(), PACKAGE, "sensors", NULL); ret = g_key_file_load_from_file(priv->sensor_config, path, G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS, &error); if (!ret) { is_warning("manager", "Failed to load sensor configs from file %s: %s", path, error->message); g_error_free(error); } g_free(path); } static void is_application_get_property(GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { IsApplication *self = IS_APPLICATION(object); switch (property_id) { case PROP_MANAGER: g_value_set_object(value, is_application_get_manager(self)); break; case PROP_SHOW_INDICATOR: g_value_set_boolean(value, is_application_get_show_indicator(self)); break; case PROP_POLL_TIMEOUT: g_value_set_uint(value, is_application_get_poll_timeout(self)); break; case PROP_AUTOSTART: g_value_set_boolean(value, is_application_get_autostart(self)); break; case PROP_TEMPERATURE_SCALE: g_value_set_int(value, is_application_get_temperature_scale(self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); break; } } static void sensor_enabled(IsManager *manager, IsSensor *sensor, gint i, IsApplication *self) { IsApplicationPrivate *priv = self->priv; /* get sensor to update and start polling if not already running */ is_sensor_update_value(sensor); if (!priv->poll_timeout_id) { priv->poll_timeout_id = g_timeout_add_seconds(priv->poll_timeout, (GSourceFunc)update_sensors, self); } } static void sensor_disabled(IsManager *manager, IsSensor *sensor, IsApplication *self) { IsApplicationPrivate *priv = self->priv; if (!is_manager_get_num_enabled_sensors(priv->manager)) { g_source_remove(priv->poll_timeout_id); priv->poll_timeout_id = 0; } } static void restore_sensor_config(IsApplication *self, IsSensor *sensor) { IsApplicationPrivate *priv = self->priv; gchar *label; gdouble alarm_value, low_value, high_value; IsSensorAlarmMode alarm_mode; GError *error = NULL; label = g_key_file_get_string(priv->sensor_config, is_sensor_get_path(sensor), "label", &error); if (label) { is_sensor_set_label(sensor, label); g_free(label); } g_clear_error(&error); /* restore alarm mode before alarm value so we don't accidentally trigger an alarm just before we might disable it */ alarm_mode = g_key_file_get_int64(priv->sensor_config, is_sensor_get_path(sensor), "alarm-mode", &error); if (!error) { is_sensor_set_alarm_mode(sensor, alarm_mode); } g_clear_error(&error); alarm_value = g_key_file_get_double(priv->sensor_config, is_sensor_get_path(sensor), "alarm-value", &error); if (!error) { is_sensor_set_alarm_value(sensor, alarm_value); } g_clear_error(&error); low_value = g_key_file_get_double(priv->sensor_config, is_sensor_get_path(sensor), "low-value", &error); if (!error) { is_sensor_set_low_value(sensor, low_value); } g_clear_error(&error); high_value = g_key_file_get_double(priv->sensor_config, is_sensor_get_path(sensor), "high-value", &error); if (!error) { is_sensor_set_high_value(sensor, high_value); } g_clear_error(&error); } static gboolean write_out_sensor_config(IsApplication *self) { IsApplicationPrivate *priv; gchar *data, *path; gsize len; GError *error = NULL; gboolean ret; priv = self->priv; if (!priv->idle_write_id) { is_warning("application", "Not writing out sensor config as has already occurred"); goto out; } /* ensure directory exists */ path = g_build_filename(g_get_user_config_dir(), PACKAGE, NULL); g_mkdir_with_parents(path, 0755); g_free(path); data = g_key_file_to_data(self->priv->sensor_config, &len, NULL); path = g_build_filename(g_get_user_config_dir(), PACKAGE, "sensors", NULL); ret = g_file_set_contents(path, data, len, &error); if (!ret) { is_warning("application", "Failed to write sensor config to file %s: %s", path, error->message); g_error_free(error); } g_free(path); g_free(data); /* make sure we are not called again as an idle callback */ out: priv->idle_write_id = 0; return FALSE; } static void sensor_label_notify(IsSensor *sensor, GParamSpec *pspec, IsApplication *self) { IsApplicationPrivate *priv = self->priv; g_key_file_set_string(priv->sensor_config, is_sensor_get_path(sensor), "label", is_sensor_get_label(sensor)); if (!priv->idle_write_id) { priv->idle_write_id = g_idle_add((GSourceFunc)write_out_sensor_config, self); } } static void sensor_alarm_value_notify(IsSensor *sensor, GParamSpec *pspec, IsApplication *self) { IsApplicationPrivate *priv = self->priv; g_key_file_set_double(priv->sensor_config, is_sensor_get_path(sensor), "alarm-value", is_sensor_get_alarm_value(sensor)); if (!priv->idle_write_id) { priv->idle_write_id = g_idle_add((GSourceFunc)write_out_sensor_config, self); } } static void sensor_alarm_mode_notify(IsSensor *sensor, GParamSpec *pspec, IsApplication *self) { IsApplicationPrivate *priv = self->priv; g_key_file_set_int64(priv->sensor_config, is_sensor_get_path(sensor), "alarm-mode", is_sensor_get_alarm_mode(sensor)); if (!priv->idle_write_id) { priv->idle_write_id = g_idle_add((GSourceFunc)write_out_sensor_config, self); } } static void sensor_low_value_notify(IsSensor *sensor, GParamSpec *pspec, IsApplication *self) { IsApplicationPrivate *priv = self->priv; g_key_file_set_double(priv->sensor_config, is_sensor_get_path(sensor), "low-value", is_sensor_get_low_value(sensor)); if (!priv->idle_write_id) { priv->idle_write_id = g_idle_add((GSourceFunc)write_out_sensor_config, self); } } static void sensor_high_value_notify(IsSensor *sensor, GParamSpec *pspec, IsApplication *self) { IsApplicationPrivate *priv = self->priv; g_key_file_set_double(priv->sensor_config, is_sensor_get_path(sensor), "high-value", is_sensor_get_high_value(sensor)); if (!priv->idle_write_id) { priv->idle_write_id = g_idle_add((GSourceFunc)write_out_sensor_config, self); } } static void sensor_added(IsManager *manager, IsSensor *sensor, IsApplication *self) { IsApplicationPrivate *priv = self->priv; /* set scale first before restoring config so we don't re-convert * fahrenheit values */ if (IS_IS_TEMPERATURE_SENSOR(sensor)) { is_temperature_sensor_set_scale(IS_TEMPERATURE_SENSOR(sensor), priv->temperature_scale); } restore_sensor_config(self, sensor); g_signal_connect(sensor, "notify::label", G_CALLBACK(sensor_label_notify), self); g_signal_connect(sensor, "notify::alarm-value", G_CALLBACK(sensor_alarm_value_notify), self); g_signal_connect(sensor, "notify::alarm-mode", G_CALLBACK(sensor_alarm_mode_notify), self); g_signal_connect(sensor, "notify::low-value", G_CALLBACK(sensor_low_value_notify), self); g_signal_connect(sensor, "notify::high-value", G_CALLBACK(sensor_high_value_notify), self); } static void sensor_removed(IsManager *manager, IsSensor *sensor, IsApplication *self) { /* TODO: disconnect signal handlers */ } static void is_application_set_property(GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { IsApplication *self = IS_APPLICATION(object); IsApplicationPrivate *priv = self->priv; GSettings *settings; switch (property_id) { case PROP_MANAGER: g_assert(!priv->manager); priv->manager = g_object_ref(g_value_get_object(value)); g_signal_connect(priv->manager, "sensor-added", G_CALLBACK(sensor_added), self); g_signal_connect(priv->manager, "sensor-removed", G_CALLBACK(sensor_removed), self); g_signal_connect(priv->manager, "sensor-enabled", G_CALLBACK(sensor_enabled), self); g_signal_connect(priv->manager, "sensor-disabled", G_CALLBACK(sensor_disabled), self); /* bind the enabled-sensors property of the manager as well so * we save / restore the list of enabled sensors too */ settings = g_settings_new("indicator-sensors.manager"); g_settings_bind(settings, "enabled-sensors", priv->manager, "enabled-sensors", G_SETTINGS_BIND_DEFAULT); g_object_set_data_full(G_OBJECT(priv->manager), "gsettings", settings, (GDestroyNotify)g_object_unref); break; case PROP_SHOW_INDICATOR: is_application_set_show_indicator(self, g_value_get_boolean(value)); break; case PROP_POLL_TIMEOUT: is_application_set_poll_timeout(self, g_value_get_uint(value)); break; case PROP_AUTOSTART: is_application_set_autostart(self, g_value_get_boolean(value)); break; case PROP_TEMPERATURE_SCALE: is_application_set_temperature_scale(self, g_value_get_int(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); break; } } static void is_application_dispose(GObject *object) { IsApplication *self = (IsApplication *)object; IsApplicationPrivate *priv = self->priv; if (priv->poll_timeout_id) { g_source_remove(priv->poll_timeout_id); priv->poll_timeout_id = 0; } g_object_unref(priv->monitor); if (priv->prefs_dialog) { gtk_widget_destroy(priv->prefs_dialog); priv->prefs_dialog = NULL; } G_OBJECT_CLASS(is_application_parent_class)->dispose(object); } static void is_application_finalize(GObject *object) { IsApplication *self = (IsApplication *)object; IsApplicationPrivate *priv = self->priv; g_object_unref(priv->manager); G_OBJECT_CLASS(is_application_parent_class)->finalize(object); } static void prefs_dialog_response(IsPreferencesDialog *dialog, gint response_id, IsApplication *self) { IsApplicationPrivate *priv; priv = self->priv; if (response_id == IS_PREFERENCES_DIALOG_RESPONSE_SENSOR_PROPERTIES) { IsSensor *sensor = is_manager_get_selected_sensor(priv->manager); if (sensor) { GtkWidget *sensor_dialog = is_sensor_dialog_new(sensor); g_signal_connect(sensor_dialog, "response", G_CALLBACK(gtk_widget_destroy), NULL); g_signal_connect(sensor_dialog, "delete-event", G_CALLBACK(gtk_widget_destroy), NULL); gtk_widget_show_all(sensor_dialog); g_object_unref(sensor); } } else { gtk_widget_hide(GTK_WIDGET(dialog)); } } guint is_application_get_poll_timeout(IsApplication *self) { g_return_val_if_fail(IS_IS_APPLICATION(self), 0); return self->priv->poll_timeout; } void is_application_set_poll_timeout(IsApplication *self, guint poll_timeout) { IsApplicationPrivate *priv; g_return_if_fail(IS_IS_APPLICATION(self)); priv = self->priv; if (priv->poll_timeout != poll_timeout) { priv->poll_timeout = poll_timeout; if (priv->poll_timeout_id) { g_source_remove(priv->poll_timeout_id); priv->poll_timeout_id = g_timeout_add_seconds(priv->poll_timeout, (GSourceFunc)update_sensors, self); } g_object_notify_by_pspec(G_OBJECT(self), properties[PROP_POLL_TIMEOUT]); } } IsApplication * is_application_new(void) { return g_object_new(IS_TYPE_APPLICATION, "manager", is_manager_new(), NULL); } IsManager *is_application_get_manager(IsApplication *self) { g_return_val_if_fail(IS_IS_APPLICATION(self), NULL); return self->priv->manager; } #define AUTOSTART_KEY "X-GNOME-Autostart-enabled" gboolean is_application_get_autostart(IsApplication *self) { GKeyFile *key_file; gchar *path; GError *error = NULL; gboolean ret = FALSE; g_return_val_if_fail(IS_IS_APPLICATION(self), FALSE); key_file = g_key_file_new(); path = g_build_filename(g_get_user_config_dir(), "autostart", DESKTOP_FILENAME, NULL); ret = g_key_file_load_from_file(key_file, path, G_KEY_FILE_NONE, &error); if (!ret) { is_debug("application", "Failed to load autostart desktop file '%s': %s", path, error->message); g_error_free(error); goto out; } ret = g_key_file_get_boolean(key_file, G_KEY_FILE_DESKTOP_GROUP, AUTOSTART_KEY, &error); if (error) { is_debug("application", "Failed to get key '%s' from autostart desktop file '%s': %s", AUTOSTART_KEY, path, error->message); g_error_free(error); } out: g_free(path); g_key_file_free(key_file); return ret; } void is_application_set_autostart(IsApplication *self, gboolean autostart) { GKeyFile *key_file; gboolean ret; gchar *autostart_file; GError *error = NULL; g_return_if_fail(IS_IS_APPLICATION(self)); key_file = g_key_file_new(); autostart_file = g_build_filename(g_get_user_config_dir(), "autostart", DESKTOP_FILENAME, NULL); ret = g_key_file_load_from_file(key_file, autostart_file, G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS, &error); if (!ret) { gchar *application_file; gchar *autostart_dir; is_debug("application", "Failed to load autostart desktop file '%s': %s", autostart_file, error->message); g_clear_error(&error); /* make sure autostart dir exists */ autostart_dir = g_build_filename(g_get_user_config_dir(), "autostart", NULL); ret = g_mkdir_with_parents(autostart_dir, 0755); if (ret != 0) { is_warning("application", "Failed to create autostart directory '%s'", autostart_dir); } g_free(autostart_dir); application_file = g_build_filename("applications", DESKTOP_FILENAME, NULL); ret = g_key_file_load_from_data_dirs(key_file, application_file, NULL, G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS, &error); if (!ret) { is_warning("application", "Failed to load application desktop file: %s", error->message); g_clear_error(&error); /* create file by hand */ g_key_file_set_string(key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_TYPE, "Application"); g_key_file_set_string(key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_NAME, _(PACKAGE_NAME)); g_key_file_set_string(key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_GENERIC_NAME, _(PACKAGE_NAME)); g_key_file_set_string(key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_EXEC, PACKAGE); g_key_file_set_string(key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_ICON, PACKAGE); g_key_file_set_string(key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_CATEGORIES, "System;"); } g_free(application_file); } g_key_file_set_boolean(key_file, G_KEY_FILE_DESKTOP_GROUP, AUTOSTART_KEY, autostart); ret = g_file_set_contents(autostart_file, g_key_file_to_data(key_file, NULL, NULL), -1, &error); if (!ret) { is_warning("application", "Failed to write autostart desktop file '%s': %s", autostart_file, error->message); g_clear_error(&error); } g_free(autostart_file); g_key_file_free(key_file); } IsTemperatureSensorScale is_application_get_temperature_scale(IsApplication *self) { g_return_val_if_fail(IS_IS_APPLICATION(self), IS_TEMPERATURE_SENSOR_SCALE_INVALID); return self->priv->temperature_scale; } static gboolean set_temperature_sensor_scale_and_unref(IsSensor *sensor, IsTemperatureSensorScale *scale) { if (sensor) { if (IS_IS_TEMPERATURE_SENSOR(sensor)) { is_temperature_sensor_set_scale(IS_TEMPERATURE_SENSOR(sensor), *scale); } g_object_unref(sensor); } return FALSE; } void is_application_set_temperature_scale(IsApplication *self, IsTemperatureSensorScale scale) { IsApplicationPrivate *priv; g_return_if_fail(IS_IS_APPLICATION(self)); g_return_if_fail(scale == IS_TEMPERATURE_SENSOR_SCALE_CELSIUS || scale == IS_TEMPERATURE_SENSOR_SCALE_FAHRENHEIT); priv = self->priv; /* set scale on all temperature sensors */ if (priv->temperature_scale != scale) { priv->temperature_scale = scale; GSList *sensors = is_manager_get_all_sensors_list(priv->manager); g_slist_foreach(sensors, (GFunc)set_temperature_sensor_scale_and_unref, &priv->temperature_scale); g_slist_free(sensors); g_object_notify_by_pspec(G_OBJECT(self), properties[PROP_TEMPERATURE_SCALE]); } } void is_application_show_preferences(IsApplication *self) { IsApplicationPrivate *priv; g_return_if_fail(IS_IS_APPLICATION(self)); priv = self->priv; if (!priv->prefs_dialog) { priv->prefs_dialog = is_preferences_dialog_new(self); g_signal_connect(priv->prefs_dialog, "response", G_CALLBACK(prefs_dialog_response), self); g_signal_connect(priv->prefs_dialog, "delete-event", G_CALLBACK(gtk_widget_hide_on_delete), NULL); gtk_widget_show_all(priv->prefs_dialog); } gtk_window_present(GTK_WINDOW(priv->prefs_dialog)); } void is_application_show_about(IsApplication *self) { const gchar * const authors[] = { "Alex Murray ", NULL }; g_return_if_fail(IS_IS_APPLICATION(self)); gtk_show_about_dialog(NULL, "program-name", _("Hardware Sensors Indicator"), "authors", authors, "comments", _("Indicator for GNOME / Unity showing hardware sensors."), "copyright", "Copyright © 2011-2019 Alex Murray", "logo-icon-name", PACKAGE, "version", VERSION, "website", "https://github.com/alexmurray/indicator-sensors", NULL); } void is_application_quit(IsApplication *self) { g_return_if_fail(IS_IS_APPLICATION(self)); gtk_main_quit(); } static void is_application_show_indicator(IsApplication *self) { IsApplicationPrivate *priv; priv = self->priv; if (!priv->indicator) { GSettings *settings; priv->indicator = is_indicator_new(self); settings = g_settings_new("indicator-sensors.indicator"); is_indicator_set_primary_sensor_path(priv->indicator, g_settings_get_string(settings, "primary-sensor")); is_indicator_set_display_flags(priv->indicator, g_settings_get_int(settings, "display-flags")); g_settings_bind(settings, "primary-sensor", priv->indicator, "primary-sensor-path", G_SETTINGS_BIND_DEFAULT); g_settings_bind(settings, "display-flags", priv->indicator, "display-flags", G_SETTINGS_BIND_DEFAULT); g_object_set_data_full(G_OBJECT(priv->indicator), "gsettings", settings, (GDestroyNotify)g_object_unref); } } static void is_application_hide_indicator(IsApplication *self) { IsApplicationPrivate *priv; priv = self->priv; if (priv->indicator) { g_object_unref(priv->indicator); priv->indicator = NULL; } } void is_application_set_show_indicator(IsApplication *self, gboolean show_indicator) { g_return_if_fail(IS_IS_APPLICATION(self)); if (show_indicator) { is_application_show_indicator(self); } else { is_application_hide_indicator(self); } } gboolean is_application_get_show_indicator(IsApplication *self) { g_return_val_if_fail(IS_IS_APPLICATION(self), FALSE); return self->priv->indicator != NULL; } indicator-sensors-1.1/indicator-sensors/is-application.h000066400000000000000000000057401356741033200235660ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #ifndef __IS_APPLICATION_H__ #define __IS_APPLICATION_H__ #include #include "is-manager.h" G_BEGIN_DECLS #define IS_TYPE_APPLICATION \ (is_application_get_type()) #define IS_APPLICATION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ IS_TYPE_APPLICATION, \ IsApplication)) #define IS_APPLICATION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ IS_TYPE_APPLICATION, \ IsApplicationClass)) #define IS_IS_APPLICATION(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ IS_TYPE_APPLICATION)) #define IS_IS_APPLICATION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), \ IS_TYPE_APPLICATION)) #define IS_APPLICATION_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ IS_TYPE_APPLICATION, \ IsApplicationClass)) typedef struct _IsApplication IsApplication; typedef struct _IsApplicationClass IsApplicationClass; typedef struct _IsApplicationPrivate IsApplicationPrivate; struct _IsApplicationClass { GObjectClass parent_class; }; struct _IsApplication { GObject parent; IsApplicationPrivate *priv; }; GType is_application_get_type(void) G_GNUC_CONST; IsApplication *is_application_new(void); IsManager *is_application_get_manager(IsApplication *self); void is_application_set_show_indicator(IsApplication *self, gboolean show_indicator); gboolean is_application_get_show_indicator(IsApplication *self); guint is_application_get_poll_timeout(IsApplication *self); void is_application_set_poll_timeout(IsApplication *self, guint poll_timeout); gboolean is_application_get_autostart(IsApplication *self); void is_application_set_autostart(IsApplication *self, gboolean autostart); IsTemperatureSensorScale is_application_get_temperature_scale(IsApplication *self); void is_application_set_temperature_scale(IsApplication *self, IsTemperatureSensorScale scale); void is_application_show_preferences(IsApplication *self); void is_application_show_about(IsApplication *self); void is_application_quit(IsApplication *self); G_END_DECLS #endif /* __IS_APPLICATION_H__ */ indicator-sensors-1.1/indicator-sensors/is-fan-sensor.c000066400000000000000000000025661356741033200233340ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #include "is-fan-sensor.h" #include G_DEFINE_TYPE(IsFanSensor, is_fan_sensor, IS_TYPE_SENSOR); static void is_fan_sensor_class_init(IsFanSensorClass *klass) { /* nothing to do */ } static void is_fan_sensor_init(IsFanSensor *self) { /* nothing to do */ } IsSensor * is_fan_sensor_new(const gchar *path) { return g_object_new(IS_TYPE_FAN_SENSOR, "path", path, "value", IS_SENSOR_VALUE_UNSET, "units", _(" RPM"), "low-value", 100.0, "high-value", 5000.0, "icon", IS_STOCK_FAN, NULL); } indicator-sensors-1.1/indicator-sensors/is-fan-sensor.h000066400000000000000000000040411356741033200233270ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #ifndef __IS_FAN_SENSOR_H__ #define __IS_FAN_SENSOR_H__ #include "is-sensor.h" G_BEGIN_DECLS #define IS_TYPE_FAN_SENSOR \ (is_fan_sensor_get_type()) #define IS_FAN_SENSOR(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ IS_TYPE_FAN_SENSOR, \ IsFanSensor)) #define IS_FAN_SENSOR_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ IS_TYPE_FAN_SENSOR, \ IsFanSensorClass)) #define IS_IS_FAN_SENSOR(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ IS_TYPE_FAN_SENSOR)) #define IS_IS_FAN_SENSOR_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), \ IS_TYPE_FAN_SENSOR)) #define IS_FAN_SENSOR_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ IS_TYPE_FAN_SENSOR, \ IsFanSensorClass)) typedef struct _IsFanSensor IsFanSensor; typedef struct _IsFanSensorClass IsFanSensorClass; struct _IsFanSensorClass { IsSensorClass parent_class; }; struct _IsFanSensor { IsSensor parent; }; GType is_fan_sensor_get_type(void) G_GNUC_CONST; IsSensor *is_fan_sensor_new(const gchar *path); G_END_DECLS #endif /* __IS_FAN_SENSOR_H__ */ indicator-sensors-1.1/indicator-sensors/is-indicator.c000066400000000000000000000632621356741033200232350ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "is-indicator.h" #include "is-application.h" #include "is-sensor-dialog.h" #include "is-log.h" #include #include G_DEFINE_TYPE (IsIndicator, is_indicator, IS_INDICATOR_PARENT_TYPE); static void is_indicator_dispose(GObject *object); static void is_indicator_finalize(GObject *object); static void is_indicator_constructed(GObject *object); static void is_indicator_get_property(GObject *object, guint property_id, GValue *value, GParamSpec *pspec); static void is_indicator_set_property(GObject *object, guint property_id, const GValue *value, GParamSpec *pspec); #if HAVE_APPINDICATOR static void is_indicator_connection_changed(AppIndicator *indicator, gboolean connected, gpointer data); #endif static void sensor_enabled(IsManager *manager, IsSensor *sensor, gint position, IsIndicator *self); static void _sensor_disabled(IsSensor *sensor, IsIndicator *self); static void sensor_disabled(IsManager *manager, IsSensor *sensor, IsIndicator *self); static void sensor_added(IsManager *manager, IsSensor *sensor, IsIndicator *self); static void update_sensor_menu_item_label(IsIndicator *self, IsSensor *sensor, GtkMenuItem *menu_item); /* properties */ enum { PROP_APPLICATION = 1, PROP_PRIMARY_SENSOR_PATH, PROP_DISPLAY_FLAGS, LAST_PROPERTY }; static GParamSpec *properties[LAST_PROPERTY] = {NULL}; struct _IsIndicatorPrivate { IsApplication *application; /* the path to the preferred primary sensor */ gchar *primary_sensor_path; IsSensor *primary; IsIndicatorDisplayFlags display_flags; GSList *menu_items; }; static GtkMenu * is_indicator_get_menu(IsIndicator *self) { GtkMenu *menu; #if HAVE_APPINDICATOR menu = app_indicator_get_menu(APP_INDICATOR(self)); #else menu = GTK_MENU(g_object_get_data(G_OBJECT(self), "indicator-menu")); #endif return menu; } #if !HAVE_APPINDICATOR static void popup_menu(GtkStatusIcon *status_icon, guint button, guint activate_time, gpointer user_data) { IsIndicator *self = IS_INDICATOR(status_icon); gtk_menu_popup(is_indicator_get_menu(self), NULL, NULL, gtk_status_icon_position_menu, self, button, activate_time); } #endif static void is_indicator_set_menu(IsIndicator *self, GtkMenu *menu) { #if HAVE_APPINDICATOR app_indicator_set_menu(APP_INDICATOR(self), menu); #else g_object_set_data_full(G_OBJECT(self), "indicator-menu", menu, (GDestroyNotify)gtk_widget_destroy); g_signal_connect(self, "popup-menu", G_CALLBACK(popup_menu), self); #endif } static gboolean fake_add_enable_sensors(IsIndicator *self) { IsManager *manager; GSList *sensors, *_list; gint i = 0; manager = is_application_get_manager(self->priv->application); /* fake addition of any sensors */ sensors = is_manager_get_all_sensors_list(manager); for (_list = sensors; _list != NULL; _list = _list->next) { IsSensor *sensor = IS_SENSOR(_list->data); sensor_added(manager, IS_SENSOR(_list->data), self); g_object_unref(sensor); } g_slist_free(sensors); /* fake enabling of any sensors */ sensors = is_manager_get_enabled_sensors_list(manager); for (_list = sensors; _list != NULL; _list = _list->next) { IsSensor *sensor = IS_SENSOR(_list->data); sensor_enabled(manager, IS_SENSOR(_list->data), i++, self); g_object_unref(sensor); } g_slist_free(sensors); return FALSE; } static void prefs_action(GtkAction *action, IsIndicator *self); static void about_action(GtkAction *action, IsIndicator *self); static void quit_action(GtkAction *action, IsIndicator *self); static GtkActionEntry entries[] = { { "Preferences", "application-preferences", N_("Preferences…"), NULL, N_("Preferences"), G_CALLBACK(prefs_action) }, { "About", "about", N_("About…"), NULL, N_("About"), G_CALLBACK(about_action) }, { "Quit", NULL, N_("_Quit"), NULL, N_("Quit"), G_CALLBACK(quit_action) }, }; static guint n_entries = G_N_ELEMENTS(entries); static const gchar *ui_info = "" " " " " " " " " " " ""; static void prefs_action(GtkAction *action, IsIndicator *self) { is_application_show_preferences(self->priv->application); } static void about_action(GtkAction *action, IsIndicator *self) { is_application_show_about(self->priv->application); } static void quit_action(GtkAction *action, IsIndicator *self) { is_application_quit(self->priv->application); } static void is_indicator_set_label(IsIndicator *self, const gchar *label) { #if HAVE_APPINDICATOR app_indicator_set_label(APP_INDICATOR(self), label, label); #else gtk_status_icon_set_tooltip_text(GTK_STATUS_ICON(self), label); #endif } static void is_indicator_constructed(GObject *object) { IsIndicator *self = IS_INDICATOR(object); GtkActionGroup *action_group; GtkUIManager *ui_manager; GError *error = NULL; GtkWidget *menu; action_group = gtk_action_group_new("AppActions"); gtk_action_group_set_translation_domain(action_group, GETTEXT_PACKAGE); gtk_action_group_add_actions(action_group, entries, n_entries, self); ui_manager = gtk_ui_manager_new(); gtk_ui_manager_insert_action_group(ui_manager, action_group, 0); if (!gtk_ui_manager_add_ui_from_string(ui_manager, ui_info, -1, &error)) { g_error("Failed to build menus: %s\n", error->message); } menu = gtk_ui_manager_get_widget(ui_manager, "/ui/Indicator"); /* manually add separator since specifying it in the ui description means it gets optimised out (since there is no menu item above it) but if we manually add it and show the whole menu then all is good... */ gtk_menu_shell_prepend(GTK_MENU_SHELL(menu), gtk_separator_menu_item_new()); gtk_widget_show_all(menu); is_indicator_set_label(self, _("No Sensors")); is_indicator_set_menu(self, GTK_MENU(menu)); #if HAVE_APPINDICATOR app_indicator_set_status(APP_INDICATOR(self), APP_INDICATOR_STATUS_ACTIVE); #endif fake_add_enable_sensors(IS_INDICATOR(object)); } static void is_indicator_class_init(IsIndicatorClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS(klass); g_type_class_add_private(klass, sizeof(IsIndicatorPrivate)); gobject_class->get_property = is_indicator_get_property; gobject_class->set_property = is_indicator_set_property; gobject_class->constructed = is_indicator_constructed; gobject_class->dispose = is_indicator_dispose; gobject_class->finalize = is_indicator_finalize; #if HAVE_APPINDICATOR APP_INDICATOR_CLASS(klass)->connection_changed = is_indicator_connection_changed; #endif properties[PROP_APPLICATION] = g_param_spec_object("application", "application property", "application property blurp.", IS_TYPE_APPLICATION, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property(gobject_class, PROP_APPLICATION, properties[PROP_APPLICATION]); properties[PROP_PRIMARY_SENSOR_PATH] = g_param_spec_string("primary-sensor-path", "path of preferred primary sensor", "path of preferred primary sensor", NULL, G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property(gobject_class, PROP_PRIMARY_SENSOR_PATH, properties[PROP_PRIMARY_SENSOR_PATH]); properties[PROP_DISPLAY_FLAGS] = g_param_spec_int("display-flags", "display flags property", "display flags property blurp.", IS_INDICATOR_DISPLAY_VALUE, IS_INDICATOR_DISPLAY_ALL, IS_INDICATOR_DISPLAY_ALL, G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property(gobject_class, PROP_DISPLAY_FLAGS, properties[PROP_DISPLAY_FLAGS]); } static void is_indicator_init(IsIndicator *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE(self, IS_TYPE_INDICATOR, IsIndicatorPrivate); } static void is_indicator_get_property(GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { IsIndicator *self = IS_INDICATOR(object); switch (property_id) { case PROP_APPLICATION: g_value_set_object(value, is_indicator_get_application(self)); break; case PROP_PRIMARY_SENSOR_PATH: g_value_set_string(value, is_indicator_get_primary_sensor_path(self)); break; case PROP_DISPLAY_FLAGS: g_value_set_int(value, is_indicator_get_display_flags(self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); break; } } static void is_indicator_set_property(GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { IsIndicator *self = IS_INDICATOR(object); IsIndicatorPrivate *priv = self->priv; IsManager *manager; switch (property_id) { case PROP_APPLICATION: g_assert(!priv->application); priv->application = g_object_ref(g_value_get_object(value)); manager = is_application_get_manager(priv->application); g_signal_connect(manager, "sensor-enabled", G_CALLBACK(sensor_enabled), self); g_signal_connect(manager, "sensor-disabled", G_CALLBACK(sensor_disabled), self); g_signal_connect(manager, "sensor-added", G_CALLBACK(sensor_added), self); break; case PROP_PRIMARY_SENSOR_PATH: is_indicator_set_primary_sensor_path(self, g_value_get_string(value)); break; case PROP_DISPLAY_FLAGS: is_indicator_set_display_flags(self, g_value_get_int(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); break; } } #if HAVE_APPINDICATOR static void is_indicator_connection_changed(AppIndicator *indicator, gboolean connected, gpointer data) { IsIndicator *self = IS_INDICATOR(indicator); IsIndicatorPrivate *priv = self->priv; GtkMenuItem *item; if (!priv->primary) { goto out; } /* force an update of the primary sensor to reset icon etc */ if (!priv->primary) { goto out; } item = (GtkMenuItem *)(g_object_get_data(G_OBJECT(priv->primary), "menu-item")); if (!item) { goto out; } update_sensor_menu_item_label(self, priv->primary, item); out: return; } #endif static void is_indicator_dispose(GObject *object) { IsIndicator *self = (IsIndicator *)object; IsIndicatorPrivate *priv = self->priv; IsManager *manager; GSList *sensors, *_list; manager = is_application_get_manager(priv->application); g_signal_handlers_disconnect_by_func(manager, sensor_enabled, self); g_signal_handlers_disconnect_by_func(manager, sensor_disabled, self); g_signal_handlers_disconnect_by_func(manager, sensor_added, self); /* fake disabling of any sensors */ sensors = is_manager_get_enabled_sensors_list(manager); for (_list = sensors; _list != NULL; _list = _list->next) { IsSensor *sensor = IS_SENSOR(_list->data); _sensor_disabled(IS_SENSOR(_list->data), self); g_object_unref(sensor); } g_slist_free(sensors); #if !HAVE_APPINDICATOR g_object_set_data(G_OBJECT(self), "indicator-menu", NULL); #endif G_OBJECT_CLASS(is_indicator_parent_class)->dispose(object); } static void is_indicator_finalize(GObject *object) { IsIndicator *self = (IsIndicator *)object; IsIndicatorPrivate *priv = self->priv; g_object_unref(priv->application); G_OBJECT_CLASS(is_indicator_parent_class)->finalize(object); } static void update_sensor_menu_item_label(IsIndicator *self, IsSensor *sensor, GtkMenuItem *menu_item) { gchar *text; text = g_strdup_printf("%s %2.*f%s", is_sensor_get_label(sensor), is_sensor_get_digits(sensor), is_sensor_get_value(sensor), is_sensor_get_units(sensor)); gtk_menu_item_set_label(menu_item, text); g_free(text); text = NULL; #if HAVE_APPINDICATOR if (sensor == self->priv->primary) { IsIndicatorPrivate *priv = self->priv; gboolean connected; g_object_get(self, "connected", &connected, NULL); /* using fallback so just set icon */ if (!connected) { app_indicator_set_icon_full(APP_INDICATOR(self), PACKAGE, is_sensor_get_label(sensor)); return; } if (priv->display_flags & IS_INDICATOR_DISPLAY_VALUE) { text = g_strdup_printf("%2.*f%s", is_sensor_get_digits(sensor), is_sensor_get_value(sensor), is_sensor_get_units(sensor)); } if (priv->display_flags & IS_INDICATOR_DISPLAY_LABEL) { /* join label to existing text - if text is NULL this will just show label */ gchar *old = text; text = g_strjoin(" ", is_sensor_get_label(sensor), text, NULL); g_free(old); } if (priv->display_flags & IS_INDICATOR_DISPLAY_ICON) { app_indicator_set_icon_full(APP_INDICATOR(self), is_sensor_get_icon_path(sensor), is_sensor_get_label(sensor)); } else { /* set to a 1x1 transparent icon for no icon */ app_indicator_set_icon_full(APP_INDICATOR(self), "indicator-sensors-no-icon", is_sensor_get_label(sensor)); } /* prefix with a space */ gchar *old = text; text = g_strjoin(" ", "", text, NULL); g_free(old); app_indicator_set_label(APP_INDICATOR(self), text, text); g_free(text); app_indicator_set_status(APP_INDICATOR(self), is_sensor_get_alarmed(sensor) ? APP_INDICATOR_STATUS_ATTENTION : APP_INDICATOR_STATUS_ACTIVE); } #else gtk_status_icon_set_from_icon_name(GTK_STATUS_ICON(self), PACKAGE); #endif } static void sensor_notify(IsSensor *sensor, GParamSpec *psec, IsIndicator *self) { GtkMenuItem *menu_item; g_return_if_fail(IS_IS_SENSOR(sensor)); g_return_if_fail(IS_IS_INDICATOR(self)); menu_item = GTK_MENU_ITEM(g_object_get_data(G_OBJECT(sensor), "menu-item")); if (menu_item) { update_sensor_menu_item_label(self, sensor, menu_item); } } static void _sensor_disabled(IsSensor *sensor, IsIndicator *self) { IsIndicatorPrivate *priv = self->priv; GtkWidget *menu_item; is_debug("indicator", "disabling sensor %s", is_sensor_get_path(sensor)); /* destroy menu item */ menu_item = GTK_WIDGET(g_object_get_data(G_OBJECT(sensor), "menu-item")); priv->menu_items = g_slist_remove(priv->menu_items, menu_item); gtk_container_remove(GTK_CONTAINER(is_indicator_get_menu(self)), menu_item); g_object_set_data(G_OBJECT(sensor), "menu-item", NULL); g_signal_handlers_disconnect_by_func(sensor, sensor_notify, self); } static void sensor_disabled(IsManager *manager, IsSensor *sensor, IsIndicator *self) { IsIndicatorPrivate *priv = self->priv; _sensor_disabled(sensor, self); if (priv->menu_items) { /* ignore if was not primary sensor, otherwise, get a new one */ if (sensor != priv->primary) { goto out; } /* choose top-most menu item and set it as primary one */ GtkWidget *menu_item = GTK_WIDGET(priv->menu_items->data); /* activate it to make this the new primary sensor */ gtk_menu_item_activate(GTK_MENU_ITEM(menu_item)); } else { is_indicator_set_label(self, _("No active sensors")); #if !HAVE_APPINDICATOR gtk_status_icon_set_from_stock(GTK_STATUS_ICON(self), GTK_STOCK_DIALOG_WARNING); #endif g_clear_object(&priv->primary); } out: return; } static void sensor_menu_item_toggled(GtkMenuItem *menu_item, IsIndicator *self) { IsSensor *sensor; gboolean active = FALSE; g_return_if_fail(IS_IS_INDICATOR(self)); /* only set as primary if was toggled to active state since we may have * untoggled it instead */ active = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menu_item)); if (active) { sensor = IS_SENSOR(g_object_get_data(G_OBJECT(menu_item), "sensor")); is_debug("indicator", "Sensor %s menu-item toggled to active - setting as primary sensor", is_sensor_get_path(sensor)); is_indicator_set_primary_sensor_path(self, is_sensor_get_path(sensor)); } } static void sensor_enabled(IsManager *manager, IsSensor *sensor, gint position, IsIndicator *self) { IsIndicatorPrivate *priv = self->priv; /* make sure we haven't seen this sensor before - if sensor has a * menu-item then ignore it */ if (!g_object_get_data(G_OBJECT(sensor), "menu-item")) { GtkMenu *menu; GtkWidget *menu_item; is_debug("indicator", "Creating menu item for newly enabled sensor %s", is_sensor_get_path(sensor)); g_signal_connect(sensor, "notify::value", G_CALLBACK(sensor_notify), self); g_signal_connect(sensor, "notify::label", G_CALLBACK(sensor_notify), self); g_signal_connect(sensor, "notify::alarmed", G_CALLBACK(sensor_notify), self); g_signal_connect(sensor, "notify::low-value", G_CALLBACK(sensor_notify), self); g_signal_connect(sensor, "notify::high-value", G_CALLBACK(sensor_notify), self); /* add a menu entry for this sensor */ menu = is_indicator_get_menu(self); menu_item = gtk_check_menu_item_new(); gtk_check_menu_item_set_draw_as_radio(GTK_CHECK_MENU_ITEM(menu_item), TRUE); g_object_set_data(G_OBJECT(sensor), "menu-item", menu_item); g_object_set_data(G_OBJECT(menu_item), "sensor", sensor); priv->menu_items = g_slist_insert(priv->menu_items, menu_item, position); /* if we haven't seen our primary sensor yet or if this is the * primary sensor, display this as primary anyway */ if (!priv->primary || g_strcmp0(is_sensor_get_path(sensor), priv->primary_sensor_path) == 0) { is_debug("indicator", "Using sensor with path %s as primary", is_sensor_get_path(sensor)); if (priv->primary) { GtkCheckMenuItem *item; /* uncheck menu item if exists for this * existing primary sensor */ item = (GtkCheckMenuItem *)(g_object_get_data(G_OBJECT(priv->primary), "menu-item")); if (item) { is_debug("indicator", "Unchecking current primary sensor item"); gtk_check_menu_item_set_active(item, FALSE); } g_object_unref(priv->primary); } priv->primary = g_object_ref(sensor); is_debug("indicator", "Checking new primary sensor item"); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_item), TRUE); update_sensor_menu_item_label(self, sensor, GTK_MENU_ITEM(menu_item)); } /* connect to toggled signal now - if we connect to it earlier * we may interpret the above menu_item_set_active as a user * initiated setting of the primary sensor rather than us just * picking the first available sensor */ g_signal_connect(menu_item, "toggled", G_CALLBACK(sensor_menu_item_toggled), self); gtk_widget_show_all(menu_item); update_sensor_menu_item_label(self, sensor, GTK_MENU_ITEM(menu_item)); gtk_menu_shell_insert(GTK_MENU_SHELL(menu), menu_item, position); } else { is_debug("indicator", "Newly enabled sensor %s already has a menu-item, ignoring...", is_sensor_get_path(sensor)); } } static void sensor_added(IsManager *manager, IsSensor *sensor, IsIndicator *self) { /* if a sensor has been added and we haven't yet got any enabled sensors to display (and hence no primary sensor), change our text to show this */ if (!self->priv->menu_items) { is_indicator_set_label(self, _("No active sensors")); #if !HAVE_APPINDICATOR gtk_status_icon_set_from_stock(GTK_STATUS_ICON(self), GTK_STOCK_DIALOG_WARNING); #endif } } IsIndicator * is_indicator_new(IsApplication *application) { IsIndicator *self = g_object_new(IS_TYPE_INDICATOR, #if HAVE_APPINDICATOR "id", PACKAGE, "category", "Hardware", #endif "application", application, "icon-name", PACKAGE, "title", PACKAGE_NAME, NULL); return IS_INDICATOR(self); } void is_indicator_set_primary_sensor_path(IsIndicator *self, const gchar *path) { IsIndicatorPrivate *priv; g_return_if_fail(IS_IS_INDICATOR(self)); priv = self->priv; if (g_strcmp0(priv->primary_sensor_path, path) != 0 && g_strcmp0(path, "") != 0) { IsSensor *sensor; is_debug("indicator", "new primary sensor path %s (previously %s)", path, priv->primary_sensor_path); /* uncheck current primary sensor label - may be NULL as is * already disabled */ if (priv->primary) { GtkCheckMenuItem *item; item = (GtkCheckMenuItem *)(g_object_get_data(G_OBJECT(priv->primary), "menu-item")); if (item) { gtk_check_menu_item_set_active(item, FALSE); } g_object_unref(priv->primary); } g_free(priv->primary_sensor_path); priv->primary_sensor_path = g_strdup(path); is_debug("indicator", "Setting primary sensor path to: %s", path); /* try and activate this sensor if it exists */ sensor = is_manager_get_sensor(is_application_get_manager(priv->application), priv->primary_sensor_path); if (sensor) { GtkCheckMenuItem *item = (GtkCheckMenuItem *)(g_object_get_data(G_OBJECT(sensor), "menu-item")); /* take reference from manager */ priv->primary = sensor; if (item) { gtk_check_menu_item_set_active(item, TRUE); update_sensor_menu_item_label(self, sensor, GTK_MENU_ITEM(item)); } } g_object_notify_by_pspec(G_OBJECT(self), properties[PROP_PRIMARY_SENSOR_PATH]); } } const gchar *is_indicator_get_primary_sensor_path(IsIndicator *self) { g_return_val_if_fail(IS_IS_INDICATOR(self), NULL); return self->priv->primary_sensor_path; } IsApplication *is_indicator_get_application(IsIndicator *self) { g_return_val_if_fail(IS_IS_INDICATOR(self), NULL); return self->priv->application; } void is_indicator_set_display_flags(IsIndicator *self, IsIndicatorDisplayFlags display_flags) { IsIndicatorPrivate *priv; g_return_if_fail(IS_IS_INDICATOR(self)); priv = self->priv; if (display_flags != priv->display_flags) { priv->display_flags = display_flags; g_object_notify_by_pspec(G_OBJECT(self), properties[PROP_DISPLAY_FLAGS]); if (priv->primary) { GtkMenuItem *item = GTK_MENU_ITEM(g_object_get_data(G_OBJECT(priv->primary), "menu-item")); if (item) { update_sensor_menu_item_label(self, priv->primary, item); } } } } IsIndicatorDisplayFlags is_indicator_get_display_flags(IsIndicator *self) { g_return_val_if_fail(IS_IS_INDICATOR(self), 0); return self->priv->display_flags; } indicator-sensors-1.1/indicator-sensors/is-indicator.h000066400000000000000000000064131356741033200232350ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #ifndef __IS_INDICATOR_H__ #define __IS_INDICATOR_H__ #if HAVE_APPINDICATOR #include #else #include #endif #include "is-application.h" #include "is-sensor.h" G_BEGIN_DECLS #define IS_TYPE_INDICATOR \ (is_indicator_get_type()) #define IS_INDICATOR(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ IS_TYPE_INDICATOR, \ IsIndicator)) #define IS_INDICATOR_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ IS_TYPE_INDICATOR, \ IsIndicatorClass)) #define IS_IS_INDICATOR(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ IS_TYPE_INDICATOR)) #define IS_IS_INDICATOR_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), \ IS_TYPE_INDICATOR)) #define IS_INDICATOR_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ IS_TYPE_INDICATOR, \ IsIndicatorClass)) typedef struct _IsIndicator IsIndicator; typedef struct _IsIndicatorClass IsIndicatorClass; typedef struct _IsIndicatorPrivate IsIndicatorPrivate; #if HAVE_APPINDICATOR #define IsIndicatorParentClass AppIndicatorClass #define IsIndicatorParent AppIndicator #define IS_INDICATOR_PARENT_TYPE APP_INDICATOR_TYPE #else #define IsIndicatorParentClass GtkStatusIconClass #define IsIndicatorParent GtkStatusIcon #define IS_INDICATOR_PARENT_TYPE GTK_TYPE_STATUS_ICON #endif struct _IsIndicatorClass { IsIndicatorParentClass parent_class; }; struct _IsIndicator { IsIndicatorParent parent; IsIndicatorPrivate *priv; }; typedef enum { IS_INDICATOR_DISPLAY_VALUE = (1 << 0), IS_INDICATOR_DISPLAY_LABEL = (1 << 1), IS_INDICATOR_DISPLAY_ICON = (1 << 2), IS_INDICATOR_DISPLAY_ALL = (IS_INDICATOR_DISPLAY_VALUE | IS_INDICATOR_DISPLAY_LABEL | IS_INDICATOR_DISPLAY_ICON) } IsIndicatorDisplayFlags; GType is_indicator_get_type(void) G_GNUC_CONST; IsIndicator *is_indicator_new(IsApplication *application); IsApplication *is_indicator_get_application(IsIndicator *self); void is_indicator_set_primary_sensor_path(IsIndicator *self, const gchar *path); const gchar *is_indicator_get_primary_sensor_path(IsIndicator *self); void is_indicator_set_display_flags(IsIndicator *self, IsIndicatorDisplayFlags flags); IsIndicatorDisplayFlags is_indicator_get_display_flags(IsIndicator *self); G_END_DECLS #endif /* __IS_INDICATOR_H__ */ indicator-sensors-1.1/indicator-sensors/is-log.c000066400000000000000000000046671356741033200220460ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "is-log.h" #include #include static IsLogLevel is_log_level = IS_LOG_LEVEL_WARNING; void is_log_set_level(IsLogLevel level) { g_return_if_fail((int)level >= IS_LOG_LEVEL_ERROR && level < NUM_IS_LOG_LEVELS); is_log_level = level; } void is_log(const gchar *source, IsLogLevel level, const gchar *format, ...) { va_list args; va_start(args, format); is_logv(source, level, format, args); va_end(args); } static const gchar * is_log_level_to_string(IsLogLevel level) { const gchar *str_level = NULL; g_return_val_if_fail((int)level >= IS_LOG_LEVEL_ERROR && level < NUM_IS_LOG_LEVELS, NULL); switch (level) { case IS_LOG_LEVEL_ERROR: str_level = "ERROR"; break; case IS_LOG_LEVEL_CRITICAL: str_level = "CRITICAL"; break; case IS_LOG_LEVEL_WARNING: str_level = "WARNING"; break; case IS_LOG_LEVEL_MESSAGE: str_level = "MESSAGE"; break; case IS_LOG_LEVEL_DEBUG: str_level = "DEBUG"; break; case NUM_IS_LOG_LEVELS: default: g_assert_not_reached(); } return str_level; } void is_logv(const gchar *source, IsLogLevel level, const gchar *format, va_list args) { if (level <= is_log_level) { gchar *fmt, *output; /* TODO: perhaps add a more elaborate logger */ fmt = g_strdup_printf("[%s] %s: %s", source, is_log_level_to_string(level), format); output = g_strdup_vprintf(fmt, args); fprintf(stdout, "%s\n", output); fflush(stdout); g_free(output); g_free(fmt); } } indicator-sensors-1.1/indicator-sensors/is-log.h000066400000000000000000000033271356741033200220430ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #ifndef __IS_LOG_H__ #define __IS_LOG_H__ #include #include G_BEGIN_DECLS typedef enum { IS_LOG_LEVEL_ERROR = 0, IS_LOG_LEVEL_CRITICAL, IS_LOG_LEVEL_WARNING, IS_LOG_LEVEL_MESSAGE, IS_LOG_LEVEL_DEBUG, NUM_IS_LOG_LEVELS, } IsLogLevel; void is_log_set_level(IsLogLevel level); void is_log(const gchar *source, IsLogLevel level, const gchar *format, ...) G_GNUC_PRINTF(3, 4); void is_logv(const gchar *source, IsLogLevel level, const gchar *format, va_list args); #define is_error(source, ...) is_log(source, IS_LOG_LEVEL_ERROR, __VA_ARGS__) #define is_critical(source, ...) is_log(source, IS_LOG_LEVEL_CRITICAL, __VA_ARGS__) #define is_warning(source, ...) is_log(source, IS_LOG_LEVEL_WARNING, __VA_ARGS__) #define is_message(source, ...) is_log(source, IS_LOG_LEVEL_MESSAGE, __VA_ARGS__) #define is_debug(source, ...) is_log(source, IS_LOG_LEVEL_DEBUG, __VA_ARGS__) G_END_DECLS #endif /* __IS_LOG_H__ */ indicator-sensors-1.1/indicator-sensors/is-manager.c000066400000000000000000000463201356741033200226670ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "is-manager.h" #include "is-store.h" #include "marshallers.h" #include "marshallers.c" #include "is-log.h" #include #include G_DEFINE_TYPE(IsManager, is_manager, GTK_TYPE_TREE_VIEW); static void is_manager_dispose(GObject *object); static void is_manager_finalize(GObject *object); static void is_manager_get_property(GObject *object, guint property_id, GValue *value, GParamSpec *pspec); static void is_manager_set_property(GObject *object, guint property_id, const GValue *value, GParamSpec *pspec); /* signal enum */ enum { SIGNAL_SENSOR_ADDED, SIGNAL_SENSOR_REMOVED, SIGNAL_SENSOR_ENABLED, SIGNAL_SENSOR_DISABLED, SIGNAL_SENSOR_POSITION_CHANGED, LAST_SIGNAL }; static guint signals[LAST_SIGNAL] = {0}; /* properties */ enum { PROP_ENABLED_SENSORS = 1, LAST_PROPERTY }; static GParamSpec *properties[LAST_PROPERTY] = {NULL}; struct _IsManagerPrivate { IsStore *store; GTree *enabled_paths; GSList *enabled_list; }; static void is_manager_class_init(IsManagerClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS(klass); g_type_class_add_private(klass, sizeof(IsManagerPrivate)); gobject_class->get_property = is_manager_get_property; gobject_class->set_property = is_manager_set_property; gobject_class->dispose = is_manager_dispose; gobject_class->finalize = is_manager_finalize; properties[PROP_ENABLED_SENSORS] = g_param_spec_boxed("enabled-sensors", "enabled-sensors property", "enabled-sensors property blurp.", G_TYPE_STRV, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property(gobject_class, PROP_ENABLED_SENSORS, properties[PROP_ENABLED_SENSORS]); signals[SIGNAL_SENSOR_ADDED] = g_signal_new("sensor-added", G_OBJECT_CLASS_TYPE(klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, IS_TYPE_SENSOR); signals[SIGNAL_SENSOR_REMOVED] = g_signal_new("sensor-removed", G_OBJECT_CLASS_TYPE(klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, IS_TYPE_SENSOR); signals[SIGNAL_SENSOR_ENABLED] = g_signal_new("sensor-enabled", G_OBJECT_CLASS_TYPE(klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_user_marshal_VOID__OBJECT_INT, G_TYPE_NONE, 2, IS_TYPE_SENSOR, G_TYPE_INT); signals[SIGNAL_SENSOR_DISABLED] = g_signal_new("sensor-disabled", G_OBJECT_CLASS_TYPE(klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, IS_TYPE_SENSOR); signals[SIGNAL_SENSOR_POSITION_CHANGED] = g_signal_new("sensor-position-changed", G_OBJECT_CLASS_TYPE(klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_user_marshal_VOID__OBJECT_INT, G_TYPE_NONE, 2, IS_TYPE_SENSOR, G_TYPE_INT); } static void sensor_label_edited(GtkCellRendererText *renderer, gchar *path_string, gchar *new_label, IsManager *self) { IsManagerPrivate *priv; GtkTreePath *path; GtkTreeIter iter; GtkTreeModel *model; IsSensor *sensor; priv = self->priv; path = gtk_tree_path_new_from_string(path_string); model = GTK_TREE_MODEL(priv->store); gtk_tree_model_get_iter(model, &iter, path); gtk_tree_model_get(model, &iter, IS_STORE_COL_SENSOR, &sensor, -1); is_sensor_set_label(sensor, new_label); g_object_unref(sensor); gtk_tree_path_free(path); } static int sensor_cmp_by_path(IsSensor *a, IsSensor *b, IsManager *self) { IsManagerPrivate *priv; GtkTreeIter a_iter, b_iter; GtkTreePath *a_path, *b_path; gint ret; priv = self->priv; is_store_get_iter_for_sensor(priv->store, a, &a_iter); is_store_get_iter_for_sensor(priv->store, b, &b_iter); a_path = gtk_tree_model_get_path(GTK_TREE_MODEL(priv->store), &a_iter); b_path = gtk_tree_model_get_path(GTK_TREE_MODEL(priv->store), &b_iter); ret = gtk_tree_path_compare(a_path, b_path); gtk_tree_path_free(b_path); gtk_tree_path_free(a_path); return ret; } static void enable_sensor(IsManager *self, GtkTreeIter *iter, IsSensor *sensor) { IsManagerPrivate *priv; guint i; priv = self->priv; is_store_set_enabled(priv->store, iter, TRUE); priv->enabled_list = g_slist_insert_sorted_with_data(priv->enabled_list, sensor, (GCompareDataFunc)sensor_cmp_by_path, self); i = g_slist_index(priv->enabled_list, sensor); g_signal_emit(self, signals[SIGNAL_SENSOR_ENABLED], 0, sensor, i); /* signal position changed for all following sensors */ while (++i < g_slist_length(priv->enabled_list)) { g_signal_emit(self, signals[SIGNAL_SENSOR_POSITION_CHANGED], 0, g_slist_nth_data(priv->enabled_list, i), i); } if (!g_tree_lookup(priv->enabled_paths, is_sensor_get_path(sensor))) { gchar *path = g_strdup(is_sensor_get_path(sensor)); g_tree_insert(priv->enabled_paths, path, path); g_object_notify_by_pspec(G_OBJECT(self), properties[PROP_ENABLED_SENSORS]); } } static void _disable_sensor(IsManager *self, GtkTreeIter *iter, IsSensor *sensor) { IsManagerPrivate *priv; guint i; priv = self->priv; i = g_slist_index(priv->enabled_list, sensor); is_store_set_enabled(priv->store, iter, FALSE); priv->enabled_list = g_slist_remove(priv->enabled_list, sensor); g_signal_emit(self, signals[SIGNAL_SENSOR_DISABLED], 0, sensor); /* signal position changed for all following sensors - the first sensor * following this one we just removed is at its location so no need to * preincrement the first time */ while (i < g_slist_length(priv->enabled_list)) { g_signal_emit(self, signals[SIGNAL_SENSOR_POSITION_CHANGED], 0, g_slist_nth_data(priv->enabled_list, i), i); i++; } } static void disable_sensor(IsManager *self, GtkTreeIter *iter, IsSensor *sensor) { gboolean ret; _disable_sensor(self, iter, sensor); ret = g_tree_remove(self->priv->enabled_paths, is_sensor_get_path(sensor)); g_assert(ret); g_object_notify_by_pspec(G_OBJECT(self), properties[PROP_ENABLED_SENSORS]); } static void sensor_toggled(GtkCellRendererToggle *renderer, gchar *path_string, IsManager *self) { IsManagerPrivate *priv; GtkTreePath *path; GtkTreeIter iter; GtkTreeModel *model; IsSensor *sensor; gboolean enabled; priv = self->priv; path = gtk_tree_path_new_from_string(path_string); model = GTK_TREE_MODEL(priv->store); gtk_tree_model_get_iter(model, &iter, path); gtk_tree_model_get(model, &iter, IS_STORE_COL_SENSOR, &sensor, -1); if (sensor) { /* as was toggled need to invert */ enabled = !gtk_cell_renderer_toggle_get_active(renderer); if (enabled) { enable_sensor(self, &iter, sensor); } else { disable_sensor(self, &iter, sensor); } g_object_unref(sensor); } gtk_tree_path_free(path); } static void is_manager_init(IsManager *self) { IsManagerPrivate *priv; GtkCellRenderer *renderer; GtkTreeViewColumn *col; priv = G_TYPE_INSTANCE_GET_PRIVATE(self, IS_TYPE_MANAGER, IsManagerPrivate); self->priv = priv; priv->enabled_paths = g_tree_new_full((GCompareDataFunc)g_strcmp0, NULL, g_free, NULL); priv->store = is_store_new(); gtk_tree_view_set_model(GTK_TREE_VIEW(self), GTK_TREE_MODEL(priv->store)); /* id column */ renderer = gtk_cell_renderer_text_new(); col = gtk_tree_view_column_new_with_attributes(_("Sensor"), renderer, "text", IS_STORE_COL_NAME, NULL); gtk_tree_view_column_set_expand(col, FALSE); gtk_tree_view_append_column(GTK_TREE_VIEW(self), col); renderer = gtk_cell_renderer_pixbuf_new(); col = gtk_tree_view_column_new_with_attributes(_("Icon"), renderer, "icon-name", IS_STORE_COL_ICON, NULL); gtk_tree_view_column_set_expand(col, FALSE); gtk_tree_view_append_column(GTK_TREE_VIEW(self), col); renderer = gtk_cell_renderer_text_new(); g_object_set(renderer, "editable", TRUE, NULL); col = gtk_tree_view_column_new_with_attributes(_("Label"), renderer, "text", IS_STORE_COL_LABEL, NULL); gtk_tree_view_column_set_expand(col, TRUE); g_signal_connect(renderer, "edited", G_CALLBACK(sensor_label_edited), self); gtk_tree_view_append_column(GTK_TREE_VIEW(self), col); renderer = gtk_cell_renderer_toggle_new(); col = gtk_tree_view_column_new_with_attributes(_("Enabled"), renderer, "active", IS_STORE_COL_ENABLED, "visible", IS_STORE_COL_IS_SENSOR, NULL); gtk_tree_view_column_set_expand(col, FALSE); g_signal_connect(renderer, "toggled", G_CALLBACK(sensor_toggled), self); gtk_tree_view_append_column(GTK_TREE_VIEW(self), col); } static void is_manager_get_property(GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { IsManager *self = IS_MANAGER(object); switch (property_id) { case PROP_ENABLED_SENSORS: g_value_take_boxed(value, is_manager_get_enabled_sensors(self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); break; } } static void is_manager_set_property(GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { IsManager *self = IS_MANAGER(object); switch (property_id) { case PROP_ENABLED_SENSORS: is_manager_set_enabled_sensors(self, (const gchar **)g_value_get_boxed(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); break; } } static void is_manager_dispose(GObject *object) { IsManager *self = (IsManager *)object; IsManagerPrivate *priv = self->priv; (void)priv; G_OBJECT_CLASS(is_manager_parent_class)->dispose(object); } static void is_manager_finalize(GObject *object) { IsManager *self = (IsManager *)object; IsManagerPrivate *priv = self->priv; g_tree_unref(priv->enabled_paths); g_slist_free(priv->enabled_list); G_OBJECT_CLASS(is_manager_parent_class)->finalize(object); } IsManager * is_manager_new(void) { return g_object_new(IS_TYPE_MANAGER, NULL); } gboolean is_manager_add_sensor(IsManager *self, IsSensor *sensor) { IsManagerPrivate *priv; GtkTreeIter iter; gboolean ret; g_return_val_if_fail(IS_IS_MANAGER(self), FALSE); g_return_val_if_fail(IS_IS_SENSOR(sensor), FALSE); priv = self->priv; ret = is_store_add_sensor(priv->store, sensor, &iter); if (!ret) { goto out; } g_signal_emit(self, signals[SIGNAL_SENSOR_ADDED], 0, sensor); /* enable sensor if is in enabled-sensors list */ if (g_tree_lookup(priv->enabled_paths, is_sensor_get_path(sensor))) { enable_sensor(self, &iter, sensor); } out: return ret; } gboolean is_manager_remove_paths_with_prefix(IsManager *self, const gchar *prefix) { GSList *sensors, *_list; gboolean ret = FALSE; sensors = is_manager_get_all_sensors_list(self); for (_list = sensors; _list != NULL; _list = _list->next) { IsSensor *sensor = IS_SENSOR(_list->data); const gchar *path = is_sensor_get_path(sensor); ret = g_str_has_prefix(path, prefix); if (ret) ret |= is_manager_remove_path(self, path); g_object_unref(sensor); } g_slist_free(sensors); return ret; } gboolean is_manager_remove_path(IsManager *self, const gchar *path) { IsManagerPrivate *priv; IsSensor *sensor; GtkTreeIter iter; gboolean ret = FALSE; g_return_val_if_fail(IS_IS_MANAGER(self), FALSE); g_return_val_if_fail(path, FALSE); priv = self->priv; ret = is_store_get_iter(priv->store, path, &iter); if (!ret) { is_warning("manager", "Unable to remove sensor with path %s as it doesn't exist", path); goto out; } gtk_tree_model_get(GTK_TREE_MODEL(priv->store), &iter, IS_STORE_COL_SENSOR, &sensor, -1); /* disable sensor if is in enabled-sensors list but don't modify list * of enabled sensors since wasn't triggered by user action */ if (g_tree_lookup(priv->enabled_paths, is_sensor_get_path(sensor))) { _disable_sensor(self, &iter, sensor); } ret = is_store_remove(priv->store, &iter); if (!ret) { is_warning("manager", "Unable to remove iter from store for sensor: %s", path); goto out; } g_signal_emit(self, signals[SIGNAL_SENSOR_REMOVED], 0, sensor); is_message("manager", "removed sensor: %s", path); out: return ret; } GSList * is_manager_get_enabled_sensors_list(IsManager *self) { IsManagerPrivate *priv; GSList *_list, *list = NULL; g_return_val_if_fail(IS_IS_MANAGER(self), NULL); priv = self->priv; for (_list = priv->enabled_list; _list != NULL; _list = _list->next) { list = g_slist_prepend(list, g_object_ref(_list->data)); } list = g_slist_reverse(list); return list; } gboolean is_manager_set_enabled_sensors(IsManager *self, const gchar **enabled_sensors) { IsManagerPrivate *priv; int i, n; GSList *list; GTree *tree; g_return_val_if_fail(IS_IS_MANAGER(self), FALSE); priv = self->priv; tree = g_tree_new_full((GCompareDataFunc)g_strcmp0, NULL, g_free, NULL); /* copy this list as new tree of enabled sensors */ n = g_strv_length((gchar **)enabled_sensors); /* copy list and also enable all sensors in the list */ for (i = 0; i < n; i++) { gchar *path; GtkTreeIter iter; path = g_strdup(enabled_sensors[i]); g_tree_insert(tree, path, path); if (is_store_get_iter(priv->store, path, &iter)) { IsSensor *sensor; gtk_tree_model_get(GTK_TREE_MODEL(priv->store), &iter, IS_STORE_COL_SENSOR, &sensor, -1); enable_sensor(self, &iter, sensor); } } for (list = priv->enabled_list; list != NULL; list = list->next) { IsSensor *sensor = (IsSensor *)list->data; const gchar *path; path = is_sensor_get_path(sensor); if (!g_tree_lookup(tree, path)) { GtkTreeIter iter; is_store_get_iter(priv->store, path, &iter); disable_sensor(self, &iter, sensor); } } g_tree_destroy(priv->enabled_paths); priv->enabled_paths = tree; g_object_notify_by_pspec(G_OBJECT(self), properties[PROP_ENABLED_SENSORS]); return TRUE; } guint is_manager_get_num_enabled_sensors(IsManager *self) { IsManagerPrivate *priv; g_return_val_if_fail(IS_IS_MANAGER(self), 0); priv = self->priv; return g_slist_length(priv->enabled_list); } static gboolean add_key_to_array(const gchar *key, const gchar *value, GArray *array) { gchar *path = g_strdup(key); g_array_append_val(array, path); /* keep going */ return FALSE; } gchar ** is_manager_get_enabled_sensors(IsManager *self) { IsManagerPrivate *priv; GArray *array; g_return_val_if_fail(IS_IS_MANAGER(self), NULL); priv = self->priv; array = g_array_new(TRUE, FALSE, sizeof(gchar *)); g_tree_foreach(priv->enabled_paths, (GTraverseFunc)add_key_to_array, array); /* if not freeing element data g_array_free() returns the element data which is exactly what we want */ return (gchar **)(void *)g_array_free(array, FALSE); } static gboolean add_sensor_to_list(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, GSList **list) { IsSensor *sensor; gtk_tree_model_get(model, iter, IS_STORE_COL_SENSOR, &sensor, -1); if (sensor) { /* take reference */ *list = g_slist_prepend(*list, sensor); } return FALSE; } GSList * is_manager_get_all_sensors_list(IsManager *self) { IsManagerPrivate *priv; GSList *list = NULL; g_return_val_if_fail(IS_IS_MANAGER(self), NULL); priv = self->priv; gtk_tree_model_foreach(GTK_TREE_MODEL(priv->store), (GtkTreeModelForeachFunc)add_sensor_to_list, &list); list = g_slist_reverse(list); return list; } IsSensor * is_manager_get_sensor(IsManager *self, const gchar *path) { IsManagerPrivate *priv; gboolean ret; GtkTreeIter iter; IsSensor *sensor = NULL; g_return_val_if_fail(IS_IS_MANAGER(self), NULL); priv = self->priv; ret = is_store_get_iter(priv->store, path, &iter); if (ret) { gtk_tree_model_get(GTK_TREE_MODEL(priv->store), &iter, IS_STORE_COL_SENSOR, &sensor, -1); } return sensor; } IsSensor * is_manager_get_selected_sensor(IsManager *self) { GtkTreeSelection *selection; GtkTreeModel *model; GtkTreeIter iter; IsSensor *sensor = NULL; g_return_val_if_fail(IS_IS_MANAGER(self), NULL); selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(self)); if (gtk_tree_selection_get_selected(selection, &model, &iter)) { gtk_tree_model_get(model, &iter, IS_STORE_COL_SENSOR, &sensor, -1); } return sensor; } indicator-sensors-1.1/indicator-sensors/is-manager.h000066400000000000000000000056231356741033200226750ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #ifndef __IS_MANAGER_H__ #define __IS_MANAGER_H__ #include #include "is-store.h" #include "is-temperature-sensor.h" G_BEGIN_DECLS #define IS_TYPE_MANAGER \ (is_manager_get_type()) #define IS_MANAGER(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ IS_TYPE_MANAGER, \ IsManager)) #define IS_MANAGER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ IS_TYPE_MANAGER, \ IsManagerClass)) #define IS_IS_MANAGER(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ IS_TYPE_MANAGER)) #define IS_IS_MANAGER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), \ IS_TYPE_MANAGER)) #define IS_MANAGER_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ IS_TYPE_MANAGER, \ IsManagerClass)) typedef struct _IsManager IsManager; typedef struct _IsManagerClass IsManagerClass; typedef struct _IsManagerPrivate IsManagerPrivate; struct _IsManagerClass { GtkTreeViewClass parent_class; }; struct _IsManager { GtkTreeView parent; IsManagerPrivate *priv; }; GType is_manager_get_type(void) G_GNUC_CONST; IsManager *is_manager_new(void); gboolean is_manager_add_sensor(IsManager *self, IsSensor *sensor); gboolean is_manager_remove_paths_with_prefix(IsManager *self, const gchar *prefix); gboolean is_manager_remove_path(IsManager *self, const gchar *path); IsSensor *is_manager_get_sensor(IsManager *self, const gchar *path); GSList *is_manager_get_all_sensors_list(IsManager *self); GSList *is_manager_get_enabled_sensors_list(IsManager *self); guint is_manager_get_num_enabled_sensors(IsManager *self); gchar **is_manager_get_enabled_sensors(IsManager *self); gboolean is_manager_set_enabled_sensors(IsManager *self, const gchar **enabled_sensors); IsSensor *is_manager_get_selected_sensor(IsManager *self); G_END_DECLS #endif /* __IS_MANAGER_H__ */ indicator-sensors-1.1/indicator-sensors/is-notify.c000066400000000000000000000101411356741033200225550ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "is-log.h" #include "is-notify.h" #include #include #include #include #include static gboolean inited = FALSE; static gboolean append = FALSE; static gboolean persistence = FALSE; gboolean is_notify_init(void) { if (!inited) { inited = notify_init(PACKAGE); if (inited) { /* look for append capability */ GList *caps = notify_get_server_caps(); while (caps != NULL) { gchar *cap = (gchar *)caps->data; if (g_strcmp0(cap, "append") == 0) { append = TRUE; } if (g_strcmp0(cap, "persistence") == 0) { persistence = TRUE; } g_free(cap); caps = g_list_delete_link(caps, caps); } } } return inited; } void is_notify_uninit() { if (inited) { notify_uninit(); } } NotifyNotification * is_notify(IsNotifyLevel level, const gchar *title, const gchar *format, ...) { NotifyNotification *notification = NULL; va_list args; g_return_val_if_fail(inited, NULL); va_start(args, format); notification = is_notifyv(level, title, format, args); va_end(args); return notification; } static const gchar * is_notify_level_to_icon(IsNotifyLevel level) { const gchar *icon = NULL; g_return_val_if_fail((int)level >= IS_NOTIFY_LEVEL_ERROR && level < NUM_IS_NOTIFY_LEVELS, NULL); switch (level) { case IS_NOTIFY_LEVEL_ERROR: icon = "dialog-error"; break; case IS_NOTIFY_LEVEL_WARNING: icon = "dialog-warning"; break; case IS_NOTIFY_LEVEL_INFO: icon = "dialog-info"; break; case NUM_IS_NOTIFY_LEVELS: default: g_assert_not_reached(); } return icon; } NotifyNotification * is_notifyv(IsNotifyLevel level, const gchar *title, const gchar *format, va_list args) { NotifyNotification *notification; gchar *body; g_return_val_if_fail(inited, NULL); body = g_strdup_vprintf(format, args); is_debug("notify", "Notify: %s - %s", title, body); notification = notify_notification_new(title, body, is_notify_level_to_icon(level)); /* set app-name */ g_object_set(G_OBJECT(notification), "app-name", PACKAGE, NULL); /* use default timeout and urgency */ notify_notification_set_timeout(notification, NOTIFY_EXPIRES_DEFAULT); notify_notification_set_urgency(notification, NOTIFY_URGENCY_NORMAL); g_free(body); if (append) { is_debug("notify", "setting x-canonical-append TRUE"); notify_notification_set_hint(notification, "x-canonical-append", g_variant_new_string("")); } if (persistence) { is_debug("notify", "setting resident TRUE and transient FALSE"); notify_notification_set_hint(notification, "resident", g_variant_new_boolean(TRUE)); notify_notification_set_hint(notification, "transient", g_variant_new_boolean(FALSE)); } /* set desktop entry hint for gnome-shell */ notify_notification_set_hint(notification, "desktop-entry", g_variant_new_string(PACKAGE)); notify_notification_show(notification, NULL); return notification; } indicator-sensors-1.1/indicator-sensors/is-notify.h000066400000000000000000000027571356741033200226000ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #ifndef __IS_NOTIFY_H__ #define __IS_NOTIFY_H__ #include #include #include G_BEGIN_DECLS typedef enum { IS_NOTIFY_LEVEL_ERROR = 0, IS_NOTIFY_LEVEL_WARNING, IS_NOTIFY_LEVEL_INFO, NUM_IS_NOTIFY_LEVELS, } IsNotifyLevel; gboolean is_notify_init(void); void is_notify_uninit(void); NotifyNotification *is_notify(IsNotifyLevel level, const gchar *title, const gchar *format, ...) G_GNUC_PRINTF(3, 4); NotifyNotification *is_notifyv(IsNotifyLevel level, const gchar *title, const gchar *format, va_list args); G_END_DECLS #endif /* __IS_LOG_H__ */ indicator-sensors-1.1/indicator-sensors/is-preferences-dialog.c000066400000000000000000000464641356741033200250240ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "is-preferences-dialog.h" #include "is-indicator.h" #include #include G_DEFINE_TYPE(IsPreferencesDialog, is_preferences_dialog, GTK_TYPE_DIALOG); static void is_preferences_dialog_dispose(GObject *object); static void is_preferences_dialog_finalize(GObject *object); static void is_preferences_dialog_get_property(GObject *object, guint property_id, GValue *value, GParamSpec *pspec); static void is_preferences_dialog_set_property(GObject *object, guint property_id, const GValue *value, GParamSpec *pspec); /* properties */ enum { PROP_APPLICATION = 1, LAST_PROPERTY }; struct _IsPreferencesDialogPrivate { IsApplication *application; GSettings *application_settings; GSettings *indicator_settings; GtkWidget *grid; GtkWidget *autostart_check_button; GtkWidget *celsius_radio_button; GtkWidget *fahrenheit_radio_button; GtkWidget *display_icon_check_button; GtkWidget *display_label_check_button; GtkWidget *display_value_check_button; GtkWidget *sensor_properties_button; }; static void is_preferences_dialog_class_init(IsPreferencesDialogClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS(klass); g_type_class_add_private(klass, sizeof(IsPreferencesDialogPrivate)); gobject_class->get_property = is_preferences_dialog_get_property; gobject_class->set_property = is_preferences_dialog_set_property; gobject_class->dispose = is_preferences_dialog_dispose; gobject_class->finalize = is_preferences_dialog_finalize; g_object_class_install_property(gobject_class, PROP_APPLICATION, g_param_spec_object("application", "application property", "application property blurp.", IS_TYPE_APPLICATION, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); } static void temperature_scale_toggled(GtkToggleButton *toggle_button, IsPreferencesDialog *self) { IsPreferencesDialogPrivate *priv; priv = self->priv; if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->celsius_radio_button))) { g_settings_set_int(priv->application_settings, "temperature-scale", IS_TEMPERATURE_SENSOR_SCALE_CELSIUS); } else { g_settings_set_int(priv->application_settings, "temperature-scale", IS_TEMPERATURE_SENSOR_SCALE_FAHRENHEIT); } } static void sensor_properties_clicked_cb(GtkButton *button, gpointer data) { IsPreferencesDialog *self = IS_PREFERENCES_DIALOG(data); gtk_dialog_response(GTK_DIALOG(self), IS_PREFERENCES_DIALOG_RESPONSE_SENSOR_PROPERTIES); } static void is_preferences_dialog_init(IsPreferencesDialog *self) { IsPreferencesDialogPrivate *priv; GtkWidget *box; GtkWidget *notebook; GtkWidget *plugins; GtkWidget *label; gchar *markup; self->priv = priv = G_TYPE_INSTANCE_GET_PRIVATE(self, IS_TYPE_PREFERENCES_DIALOG, IsPreferencesDialogPrivate); priv->application_settings = g_settings_new("indicator-sensors.application"); priv->indicator_settings = g_settings_new("indicator-sensors.indicator"); gtk_window_set_title(GTK_WINDOW(self), _("Hardware Sensors Indicator Preferences")); gtk_window_set_default_size(GTK_WINDOW(self), 500, 600); priv->sensor_properties_button = gtk_button_new_with_mnemonic(_("_Properties")); g_signal_connect(priv->sensor_properties_button, "clicked", G_CALLBACK(sensor_properties_clicked_cb), self); gtk_widget_set_sensitive(priv->sensor_properties_button, FALSE); gtk_dialog_add_button(GTK_DIALOG(self), _("_Close"), GTK_RESPONSE_ACCEPT); /* pack content into box */ priv->grid = gtk_grid_new(); gtk_grid_set_column_spacing(GTK_GRID(priv->grid), 6); gtk_grid_set_row_spacing(GTK_GRID(priv->grid), 6); gtk_container_set_border_width(GTK_CONTAINER(priv->grid), 6); label = gtk_label_new(NULL); markup = g_strdup_printf("%s", _("General")); gtk_label_set_markup(GTK_LABEL(label), markup); g_free(markup); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_grid_attach(GTK_GRID(priv->grid), label, 0, 0, 1, 1) ; priv->autostart_check_button = gtk_check_button_new_with_label (_("Start automatically on login")); gtk_widget_set_sensitive(priv->autostart_check_button, FALSE); gtk_grid_attach(GTK_GRID(priv->grid), priv->autostart_check_button, 0, 1, 3, 1); label = gtk_label_new(_("Primary sensor display")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_misc_set_padding(GTK_MISC(label), 2, 0); gtk_grid_attach(GTK_GRID(priv->grid), label, 0, 2, 1, 1); box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6); priv->display_icon_check_button = gtk_check_button_new_with_label (_("Icon")); gtk_widget_set_sensitive(priv->display_icon_check_button, FALSE); gtk_box_pack_start(GTK_BOX(box), priv->display_icon_check_button, TRUE, TRUE, 0); priv->display_label_check_button = gtk_check_button_new_with_label (_("Label")); gtk_widget_set_sensitive(priv->display_label_check_button, FALSE); gtk_box_pack_start(GTK_BOX(box), priv->display_label_check_button, TRUE, TRUE, 0); priv->display_value_check_button = gtk_check_button_new_with_label (_("Value")); gtk_widget_set_sensitive(priv->display_value_check_button, FALSE); gtk_box_pack_start(GTK_BOX(box), priv->display_value_check_button, TRUE, TRUE, 0); gtk_grid_attach(GTK_GRID(priv->grid), box, 1, 2, 2, 1); label = gtk_label_new(_("Temperature scale")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_misc_set_padding(GTK_MISC(label), 2, 0); gtk_grid_attach(GTK_GRID(priv->grid), label, 0, 3, 1, 1); priv->celsius_radio_button = gtk_radio_button_new_with_label (NULL, _("Celsius (\302\260C)")); gtk_widget_set_sensitive(priv->celsius_radio_button, FALSE); gtk_widget_set_hexpand(priv->celsius_radio_button, TRUE); gtk_grid_attach(GTK_GRID(priv->grid), priv->celsius_radio_button, 1, 3, 1, 1); g_signal_connect(priv->celsius_radio_button, "toggled", G_CALLBACK(temperature_scale_toggled), self); priv->fahrenheit_radio_button = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON(priv->celsius_radio_button), _("Fahrenheit (\302\260F)")); gtk_widget_set_sensitive(priv->fahrenheit_radio_button, FALSE); gtk_widget_set_hexpand(priv->fahrenheit_radio_button, TRUE); gtk_grid_attach(GTK_GRID(priv->grid), priv->fahrenheit_radio_button, 2, 3, 1, 1); g_signal_connect(priv->fahrenheit_radio_button, "toggled", G_CALLBACK(temperature_scale_toggled), self); notebook = gtk_notebook_new(); label = gtk_label_new(_("Preferences")); box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 6); gtk_box_pack_start(GTK_BOX(box), priv->grid, TRUE, TRUE, 0); gtk_widget_set_hexpand(priv->sensor_properties_button, FALSE); gtk_widget_set_halign(priv->sensor_properties_button, GTK_ALIGN_END); gtk_box_pack_start(GTK_BOX(box), priv->sensor_properties_button, FALSE, TRUE, 0); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), box, label); plugins = peas_gtk_plugin_manager_new(NULL); label = gtk_label_new(_("Plugins")); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), plugins, label); gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(self))), notebook, TRUE, TRUE, 0); } static void is_preferences_dialog_get_property(GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { IsPreferencesDialog *self = IS_PREFERENCES_DIALOG(object); IsPreferencesDialogPrivate *priv = self->priv; switch (property_id) { case PROP_APPLICATION: g_value_set_object(value, priv->application); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); break; } } static void update_flags_sensitivities(IsPreferencesDialog *self) { IsPreferencesDialogPrivate *priv = self->priv; IsIndicatorDisplayFlags flags = g_settings_get_int(priv->indicator_settings, "display-flags"); if (flags == IS_INDICATOR_DISPLAY_ICON) { /* only icon is shown - make sure it can't be disabled */ gtk_widget_set_sensitive(priv->display_icon_check_button, FALSE); } else if (flags == IS_INDICATOR_DISPLAY_LABEL) { /* only label is shown - make sure it can't be disabled */ gtk_widget_set_sensitive(priv->display_label_check_button, FALSE); } else if (flags == IS_INDICATOR_DISPLAY_VALUE) { /* only value is shown - make sure it can't be disabled */ gtk_widget_set_sensitive(priv->display_value_check_button, FALSE); } else { /* set all sensitive */ gtk_widget_set_sensitive(priv->display_icon_check_button, TRUE); gtk_widget_set_sensitive(priv->display_label_check_button, TRUE); gtk_widget_set_sensitive(priv->display_value_check_button, TRUE); } } static void display_icon_toggled(GtkToggleButton *toggle_button, IsPreferencesDialog *self) { IsPreferencesDialogPrivate *priv = self->priv; gboolean display_icon = gtk_toggle_button_get_active(toggle_button); IsIndicatorDisplayFlags flags = g_settings_get_int(priv->indicator_settings, "display-flags"); if (display_icon) { flags |= IS_INDICATOR_DISPLAY_ICON; } else { flags &= ~IS_INDICATOR_DISPLAY_ICON; } g_settings_set_int(priv->indicator_settings, "display-flags", flags); update_flags_sensitivities(self); } static void display_label_toggled(GtkToggleButton *toggle_button, IsPreferencesDialog *self) { IsPreferencesDialogPrivate *priv = self->priv; gboolean display_label = gtk_toggle_button_get_active(toggle_button); IsIndicatorDisplayFlags flags = g_settings_get_int(priv->indicator_settings, "display-flags"); if (display_label) { flags |= IS_INDICATOR_DISPLAY_LABEL; } else { flags &= ~IS_INDICATOR_DISPLAY_LABEL; } g_settings_set_int(priv->indicator_settings, "display-flags", flags); update_flags_sensitivities(self); } static void display_value_toggled(GtkToggleButton *toggle_button, IsPreferencesDialog *self) { IsPreferencesDialogPrivate *priv = self->priv; gboolean display_value = gtk_toggle_button_get_active(toggle_button); IsIndicatorDisplayFlags flags = g_settings_get_int(priv->indicator_settings, "display-flags"); if (display_value) { flags |= IS_INDICATOR_DISPLAY_VALUE; } else { flags &= ~IS_INDICATOR_DISPLAY_VALUE; } g_settings_set_int(priv->indicator_settings, "display-flags", flags); update_flags_sensitivities(self); } static void settings_display_flags_changed(GSettings *settings, gchar *key, IsPreferencesDialog *self) { IsPreferencesDialogPrivate *priv = self->priv; IsIndicatorDisplayFlags flags = g_settings_get_int(priv->indicator_settings, "display-flags"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->display_icon_check_button), flags & IS_INDICATOR_DISPLAY_ICON); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->display_label_check_button), flags & IS_INDICATOR_DISPLAY_LABEL); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->display_value_check_button), flags & IS_INDICATOR_DISPLAY_VALUE); } static void autostart_toggled(GtkToggleButton *toggle_button, IsApplication *application) { is_application_set_autostart(application, gtk_toggle_button_get_active(toggle_button)); } static void application_notify_autostart(IsApplication *application, GParamSpec *pspec, GtkToggleButton *check_button) { gtk_toggle_button_set_active(check_button, is_application_get_autostart(application)); } static void manager_selection_changed(GtkTreeSelection *selection, IsPreferencesDialog *self) { IsSensor *sensor; gboolean sensitive = FALSE; sensor = is_manager_get_selected_sensor(is_application_get_manager(self->priv->application)); if (sensor) { sensitive = TRUE; g_object_unref(sensor); } gtk_widget_set_sensitive(self->priv->sensor_properties_button, sensitive); } static void manager_row_activated(GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column, IsPreferencesDialog *self) { /* when row is activated. simply select it and emit the properties signal */ gtk_tree_selection_select_path(gtk_tree_view_get_selection(tree_view), path); gtk_dialog_response(GTK_DIALOG(self), IS_PREFERENCES_DIALOG_RESPONSE_SENSOR_PROPERTIES); } static void is_preferences_dialog_set_property(GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { IsPreferencesDialog *self = IS_PREFERENCES_DIALOG(object); IsPreferencesDialogPrivate *priv = self->priv; GtkWidget *scrolled_window; IsManager *manager; IsIndicatorDisplayFlags flags; switch (property_id) { case PROP_APPLICATION: priv->application = g_object_ref(g_value_get_object(value)); gtk_widget_set_sensitive(priv->display_icon_check_button, TRUE); gtk_widget_set_sensitive(priv->display_label_check_button, TRUE); gtk_widget_set_sensitive(priv->display_value_check_button, TRUE); flags = g_settings_get_int(self->priv->indicator_settings, "display-flags"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->display_icon_check_button), flags & IS_INDICATOR_DISPLAY_ICON); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->display_label_check_button), flags & IS_INDICATOR_DISPLAY_LABEL); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->display_value_check_button), flags & IS_INDICATOR_DISPLAY_VALUE); g_signal_connect(priv->display_icon_check_button, "toggled", G_CALLBACK(display_icon_toggled), self); g_signal_connect(priv->display_label_check_button, "toggled", G_CALLBACK(display_label_toggled), self); g_signal_connect(priv->display_value_check_button, "toggled", G_CALLBACK(display_value_toggled), self); g_signal_connect(priv->indicator_settings, "changed::display-flags", G_CALLBACK(settings_display_flags_changed), self); manager = is_application_get_manager(priv->application); g_signal_connect(manager, "row-activated", G_CALLBACK(manager_row_activated), self); /* control properties button sensitivity */ g_signal_connect(gtk_tree_view_get_selection(GTK_TREE_VIEW(manager)), "changed", G_CALLBACK(manager_selection_changed), self); /* set state of autostart checkbutton */ gtk_widget_set_sensitive(priv->autostart_check_button, TRUE); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->autostart_check_button), is_application_get_autostart(priv->application)); gtk_widget_set_sensitive(priv->celsius_radio_button, TRUE); gtk_widget_set_sensitive(priv->fahrenheit_radio_button, TRUE); switch (is_application_get_temperature_scale(priv->application)) { case IS_TEMPERATURE_SENSOR_SCALE_CELSIUS: gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->celsius_radio_button), TRUE); break; case IS_TEMPERATURE_SENSOR_SCALE_FAHRENHEIT: gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->fahrenheit_radio_button), TRUE); break; case IS_TEMPERATURE_SENSOR_SCALE_INVALID: case NUM_IS_TEMPERATURE_SENSOR_SCALE: default: g_assert_not_reached(); } g_signal_connect(priv->autostart_check_button, "toggled", G_CALLBACK(autostart_toggled), priv->application); g_signal_connect(priv->application, "notify::autostart", G_CALLBACK(application_notify_autostart), priv->autostart_check_button); scrolled_window = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add(GTK_CONTAINER(scrolled_window), GTK_WIDGET(manager)); gtk_widget_set_hexpand(scrolled_window, TRUE); gtk_widget_set_vexpand(scrolled_window, TRUE); gtk_grid_attach(GTK_GRID(priv->grid), scrolled_window, 0, 4, 3, 1); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); break; } } static void is_preferences_dialog_dispose(GObject *object) { IsPreferencesDialog *self = (IsPreferencesDialog *)object; IsPreferencesDialogPrivate *priv = self->priv; if (priv->application) { g_object_unref(priv->application); priv->application = NULL; } G_OBJECT_CLASS(is_preferences_dialog_parent_class)->dispose(object); } static void is_preferences_dialog_finalize(GObject *object) { IsPreferencesDialog *self = (IsPreferencesDialog *)object; /* Make compiler happy */ (void)self; G_OBJECT_CLASS(is_preferences_dialog_parent_class)->finalize(object); } GtkWidget *is_preferences_dialog_new(IsApplication *application) { return GTK_WIDGET(g_object_new(IS_TYPE_PREFERENCES_DIALOG, "application", application, NULL)); } indicator-sensors-1.1/indicator-sensors/is-preferences-dialog.h000066400000000000000000000047731356741033200250260ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #ifndef __IS_PREFERENCES_DIALOG_H__ #define __IS_PREFERENCES_DIALOG_H__ #include #include "is-application.h" G_BEGIN_DECLS /* response id returned when clicking on properties button */ #define IS_PREFERENCES_DIALOG_RESPONSE_SENSOR_PROPERTIES 1 #define IS_TYPE_PREFERENCES_DIALOG \ (is_preferences_dialog_get_type()) #define IS_PREFERENCES_DIALOG(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ IS_TYPE_PREFERENCES_DIALOG, \ IsPreferencesDialog)) #define IS_PREFERENCES_DIALOG_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ IS_TYPE_PREFERENCES_DIALOG, \ IsPreferencesDialogClass)) #define IS_IS_PREFERENCES_DIALOG(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ IS_TYPE_PREFERENCES_DIALOG)) #define IS_IS_PREFERENCES_DIALOG_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), \ IS_TYPE_PREFERENCES_DIALOG)) #define IS_PREFERENCES_DIALOG_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ IS_TYPE_PREFERENCES_DIALOG, \ IsPreferencesDialogClass)) typedef struct _IsPreferencesDialog IsPreferencesDialog; typedef struct _IsPreferencesDialogClass IsPreferencesDialogClass; typedef struct _IsPreferencesDialogPrivate IsPreferencesDialogPrivate; struct _IsPreferencesDialogClass { GtkDialogClass parent_class; }; struct _IsPreferencesDialog { GtkDialog parent; IsPreferencesDialogPrivate *priv; }; GType is_preferences_dialog_get_type(void) G_GNUC_CONST; GtkWidget *is_preferences_dialog_new(IsApplication *application); G_END_DECLS #endif /* __IS_PREFERENCES_DIALOG_H__ */ indicator-sensors-1.1/indicator-sensors/is-sensor-dialog.c000066400000000000000000000352161356741033200240250ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "is-sensor-dialog.h" #include #define MAX_VALUE 100000 G_DEFINE_TYPE(IsSensorDialog, is_sensor_dialog, GTK_TYPE_DIALOG); static void is_sensor_dialog_dispose(GObject *object); static void is_sensor_dialog_finalize(GObject *object); static void is_sensor_dialog_get_property(GObject *object, guint property_id, GValue *value, GParamSpec *pspec); static void is_sensor_dialog_set_property(GObject *object, guint property_id, const GValue *value, GParamSpec *pspec); /* properties */ enum { PROP_SENSOR = 1, LAST_PROPERTY }; struct _IsSensorDialogPrivate { IsSensor *sensor; GtkWidget *path_label; GtkWidget *label_entry; GtkWidget *alarm_mode_combo_box; GtkWidget *alarm_value_spin_button; GtkWidget *units_label; GtkWidget *low_value; GtkWidget *low_units_label; GtkWidget *high_value; GtkWidget *high_units_label; }; static void is_sensor_dialog_class_init(IsSensorDialogClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS(klass); g_type_class_add_private(klass, sizeof(IsSensorDialogPrivate)); gobject_class->get_property = is_sensor_dialog_get_property; gobject_class->set_property = is_sensor_dialog_set_property; gobject_class->dispose = is_sensor_dialog_dispose; gobject_class->finalize = is_sensor_dialog_finalize; g_object_class_install_property(gobject_class, PROP_SENSOR, g_param_spec_object("sensor", "sensor property", "sensor property blurp.", IS_TYPE_SENSOR, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); } static void is_sensor_dialog_init(IsSensorDialog *self) { IsSensorDialogPrivate *priv; GtkWidget *label, *low_label, *high_label, *grid; self->priv = priv = G_TYPE_INSTANCE_GET_PRIVATE(self, IS_TYPE_SENSOR_DIALOG, IsSensorDialogPrivate); gtk_window_set_title(GTK_WINDOW(self), _(PACKAGE_NAME " Sensor Properties")); gtk_window_set_default_size(GTK_WINDOW(self), 250, 0); gtk_dialog_add_button(GTK_DIALOG(self), _("_Close"), GTK_RESPONSE_ACCEPT); /* pack content into box */ grid = gtk_grid_new(); gtk_grid_set_column_spacing(GTK_GRID(grid), 6); gtk_grid_set_row_spacing(GTK_GRID(grid), 6); gtk_container_set_border_width(GTK_CONTAINER(grid), 6); priv->path_label = gtk_label_new(NULL); gtk_misc_set_alignment(GTK_MISC(priv->path_label), 0.0, 0.5); gtk_grid_attach(GTK_GRID(grid), priv->path_label, 0, 0, 4, 1); label = gtk_label_new(_("Label")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_grid_attach(GTK_GRID(grid), label, 0, 1, 1, 1); priv->label_entry = gtk_entry_new(); gtk_grid_attach(GTK_GRID(grid), priv->label_entry, 1, 1, 3, 1); label = gtk_label_new(_("Alarm")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_grid_attach(GTK_GRID(grid), label, 0, 2, 1, 1); priv->alarm_mode_combo_box = gtk_combo_box_text_new(); gtk_combo_box_text_insert_text(GTK_COMBO_BOX_TEXT(priv->alarm_mode_combo_box), IS_SENSOR_ALARM_MODE_DISABLED, _("Disabled")); gtk_combo_box_text_insert_text(GTK_COMBO_BOX_TEXT(priv->alarm_mode_combo_box), IS_SENSOR_ALARM_MODE_LOW, _("Below")); gtk_combo_box_text_insert_text(GTK_COMBO_BOX_TEXT(priv->alarm_mode_combo_box), IS_SENSOR_ALARM_MODE_HIGH, _("Above")); gtk_widget_set_sensitive(priv->alarm_mode_combo_box, FALSE); gtk_grid_attach(GTK_GRID(grid), priv->alarm_mode_combo_box, 1, 2, 1, 1); priv->alarm_value_spin_button = gtk_spin_button_new_with_range(-MAX_VALUE, MAX_VALUE, 1.0f); gtk_widget_set_sensitive(priv->alarm_value_spin_button, FALSE); gtk_grid_attach(GTK_GRID(grid), priv->alarm_value_spin_button, 2, 2, 1, 1); priv->units_label = gtk_label_new(NULL); gtk_misc_set_alignment(GTK_MISC(priv->units_label), 0.0, 0.5); gtk_grid_attach(GTK_GRID(grid), priv->units_label, 3, 2, 1, 1); low_label = gtk_label_new(_("Low value")); gtk_misc_set_alignment(GTK_MISC(low_label), 0.0, 0.5); gtk_grid_attach(GTK_GRID(grid), low_label, 0, 3, 1, 1); priv->low_value = gtk_spin_button_new_with_range(-MAX_VALUE, MAX_VALUE, 1.0f); gtk_grid_attach(GTK_GRID(grid), priv->low_value, 1, 3, 1, 1); priv->low_units_label = gtk_label_new(NULL); gtk_misc_set_alignment(GTK_MISC(priv->low_units_label), 0.0, 0.5); gtk_grid_attach(GTK_GRID(grid), priv->low_units_label, 2, 3, 1, 1); high_label = gtk_label_new(_("High value")); gtk_misc_set_alignment(GTK_MISC(high_label), 0.0, 0.5); gtk_grid_attach(GTK_GRID(grid), high_label, 0, 4, 1, 1); priv->high_value = gtk_spin_button_new_with_range(-MAX_VALUE, MAX_VALUE, 1.0f); gtk_grid_attach(GTK_GRID(grid), priv->high_value, 1, 4, 1, 1); priv->high_units_label = gtk_label_new(NULL); gtk_misc_set_alignment(GTK_MISC(priv->high_units_label), 0.0, 0.5); gtk_grid_attach(GTK_GRID(grid), priv->high_units_label, 2, 4, 1, 1); gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(self))), grid); } static void is_sensor_dialog_get_property(GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { IsSensorDialog *self = IS_SENSOR_DIALOG(object); IsSensorDialogPrivate *priv = self->priv; switch (property_id) { case PROP_SENSOR: g_value_set_object(value, priv->sensor); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); break; } } static void label_changed(GtkEntry *entry, IsSensorDialog *self) { is_sensor_set_label(self->priv->sensor, gtk_entry_get_text(entry)); } static void sensor_notify_label(IsSensor *sensor, GParamSpec *pspec, IsSensorDialog *self) { gtk_entry_set_text(GTK_ENTRY(self->priv->label_entry), is_sensor_get_label(sensor)); } static void alarm_mode_changed(GtkComboBox *combo_box, IsSensorDialog *self) { is_sensor_set_alarm_mode(self->priv->sensor, gtk_combo_box_get_active(combo_box)); } static void sensor_notify_alarm_mode(IsSensor *sensor, GParamSpec *pspec, IsSensorDialog *self) { IsSensorAlarmMode alarm_mode = is_sensor_get_alarm_mode(sensor); gtk_widget_set_sensitive(self->priv->alarm_value_spin_button, alarm_mode != IS_SENSOR_ALARM_MODE_DISABLED); gtk_combo_box_set_active(GTK_COMBO_BOX(self->priv->alarm_mode_combo_box), alarm_mode); } static void alarm_value_changed(GtkSpinButton *spin_button, IsSensorDialog *self) { is_sensor_set_alarm_value(self->priv->sensor, gtk_spin_button_get_value(spin_button)); } static void sensor_notify_alarm_value(IsSensor *sensor, GParamSpec *pspec, IsSensorDialog *self) { gtk_spin_button_set_value(GTK_SPIN_BUTTON(self->priv->alarm_value_spin_button), is_sensor_get_alarm_value(sensor)); } static void sensor_notify_units(IsSensor *sensor, GParamSpec *pspec, IsSensorDialog *self) { gtk_label_set_text(GTK_LABEL(self->priv->units_label), is_sensor_get_units(sensor)); } static void low_value_changed(GtkSpinButton *spin_button, IsSensorDialog *self) { is_sensor_set_low_value(self->priv->sensor, gtk_spin_button_get_value(spin_button)); } static void sensor_notify_low_value(IsSensor *sensor, GParamSpec *pspec, IsSensorDialog *self) { gtk_spin_button_set_value(GTK_SPIN_BUTTON(self->priv->low_value), is_sensor_get_low_value(sensor)); } static void high_value_changed(GtkSpinButton *spin_button, IsSensorDialog *self) { is_sensor_set_high_value(self->priv->sensor, gtk_spin_button_get_value(spin_button)); } static void sensor_notify_high_value(IsSensor *sensor, GParamSpec *pspec, IsSensorDialog *self) { gtk_spin_button_set_value(GTK_SPIN_BUTTON(self->priv->high_value), is_sensor_get_high_value(sensor)); } static void is_sensor_dialog_set_property(GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { IsSensorDialog *self = IS_SENSOR_DIALOG(object); IsSensorDialogPrivate *priv = self->priv; gchar *markup; switch (property_id) { case PROP_SENSOR: priv->sensor = g_object_ref(g_value_get_object(value)); markup = g_strdup_printf("%s: %s", _("Sensor"), is_sensor_get_path(priv->sensor)); gtk_label_set_markup(GTK_LABEL(priv->path_label), markup); g_free(markup); gtk_widget_set_sensitive(priv->label_entry, TRUE); gtk_entry_set_text(GTK_ENTRY(priv->label_entry), is_sensor_get_label(priv->sensor)); g_signal_connect(priv->label_entry, "changed", G_CALLBACK(label_changed), self); g_signal_connect(priv->sensor, "notify::label", G_CALLBACK(sensor_notify_label), self); gtk_widget_set_sensitive(priv->alarm_mode_combo_box, TRUE); gtk_combo_box_set_active(GTK_COMBO_BOX(priv->alarm_mode_combo_box), is_sensor_get_alarm_mode(priv->sensor)); g_signal_connect(priv->alarm_mode_combo_box, "changed", G_CALLBACK(alarm_mode_changed), self); g_signal_connect(priv->sensor, "notify::alarm-mode", G_CALLBACK(sensor_notify_alarm_mode), self); /* set sensitive so we can update */ gtk_widget_set_sensitive(priv->alarm_value_spin_button, TRUE); gtk_spin_button_set_digits(GTK_SPIN_BUTTON(priv->alarm_value_spin_button), is_sensor_get_digits(priv->sensor)); gtk_spin_button_set_value(GTK_SPIN_BUTTON(priv->alarm_value_spin_button), is_sensor_get_alarm_value(priv->sensor)); g_signal_connect(priv->alarm_value_spin_button, "value-changed", G_CALLBACK(alarm_value_changed), self); g_signal_connect(priv->sensor, "notify::alarm-value", G_CALLBACK(sensor_notify_alarm_value), self); gtk_widget_set_sensitive(priv->alarm_value_spin_button, (is_sensor_get_alarm_mode(priv->sensor) != IS_SENSOR_ALARM_MODE_DISABLED)); gtk_widget_set_sensitive(priv->units_label, TRUE); gtk_label_set_text(GTK_LABEL(priv->units_label), is_sensor_get_units(priv->sensor)); g_signal_connect(priv->sensor, "notify::units", G_CALLBACK(sensor_notify_units), self); gtk_widget_set_sensitive(priv->low_value, TRUE); gtk_spin_button_set_value(GTK_SPIN_BUTTON(priv->low_value), is_sensor_get_low_value(priv->sensor)); g_signal_connect(priv->low_value, "value-changed", G_CALLBACK(low_value_changed), self); g_signal_connect(priv->sensor, "notify::low-value", G_CALLBACK(sensor_notify_low_value), self); gtk_label_set_text(GTK_LABEL(priv->low_units_label), is_sensor_get_units(priv->sensor)); gtk_widget_set_sensitive(priv->high_value, TRUE); gtk_spin_button_set_value(GTK_SPIN_BUTTON(priv->high_value), is_sensor_get_high_value(priv->sensor)); g_signal_connect(priv->high_value, "value-changed", G_CALLBACK(high_value_changed), self); g_signal_connect(priv->sensor, "notify::high-value", G_CALLBACK(sensor_notify_high_value), self); gtk_label_set_text(GTK_LABEL(priv->high_units_label), is_sensor_get_units(priv->sensor)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); break; } } static void is_sensor_dialog_dispose(GObject *object) { IsSensorDialog *self = (IsSensorDialog *)object; IsSensorDialogPrivate *priv = self->priv; if (priv->sensor) { g_object_unref(priv->sensor); priv->sensor = NULL; } G_OBJECT_CLASS(is_sensor_dialog_parent_class)->dispose(object); } static void is_sensor_dialog_finalize(GObject *object) { IsSensorDialog *self = (IsSensorDialog *)object; /* Make compiler happy */ (void)self; G_OBJECT_CLASS(is_sensor_dialog_parent_class)->finalize(object); } GtkWidget *is_sensor_dialog_new(IsSensor *sensor) { return GTK_WIDGET(g_object_new(IS_TYPE_SENSOR_DIALOG, "sensor", sensor, NULL)); } indicator-sensors-1.1/indicator-sensors/is-sensor-dialog.h000066400000000000000000000043351356741033200240300ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #ifndef __IS_SENSOR_DIALOG_H__ #define __IS_SENSOR_DIALOG_H__ #include #include "is-sensor.h" G_BEGIN_DECLS #define IS_TYPE_SENSOR_DIALOG \ (is_sensor_dialog_get_type()) #define IS_SENSOR_DIALOG(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ IS_TYPE_SENSOR_DIALOG, \ IsSensorDialog)) #define IS_SENSOR_DIALOG_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ IS_TYPE_SENSOR_DIALOG, \ IsSensorDialogClass)) #define IS_IS_SENSOR_DIALOG(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ IS_TYPE_SENSOR_DIALOG)) #define IS_IS_SENSOR_DIALOG_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), \ IS_TYPE_SENSOR_DIALOG)) #define IS_SENSOR_DIALOG_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ IS_TYPE_SENSOR_DIALOG, \ IsSensorDialogClass)) typedef struct _IsSensorDialog IsSensorDialog; typedef struct _IsSensorDialogClass IsSensorDialogClass; typedef struct _IsSensorDialogPrivate IsSensorDialogPrivate; struct _IsSensorDialogClass { GtkDialogClass parent_class; }; struct _IsSensorDialog { GtkDialog parent; IsSensorDialogPrivate *priv; }; GType is_sensor_dialog_get_type(void) G_GNUC_CONST; GtkWidget *is_sensor_dialog_new(IsSensor *sensor); G_END_DECLS #endif /* __IS_SENSOR_DIALOG_H__ */ indicator-sensors-1.1/indicator-sensors/is-sensor.c000066400000000000000000000670111356741033200225660ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include "is-sensor.h" #include "is-notify.h" #include "is-log.h" G_DEFINE_TYPE (IsSensor, is_sensor, G_TYPE_OBJECT); static void is_sensor_finalize(GObject *object); static void is_sensor_get_property(GObject *object, guint property_id, GValue *value, GParamSpec *pspec); static void is_sensor_set_property(GObject *object, guint property_id, const GValue *value, GParamSpec *pspec); /* signal enum */ enum { SIGNAL_UPDATE_VALUE, LAST_SIGNAL }; static guint signals[LAST_SIGNAL] = {0}; /* properties */ enum { PROP_0, PROP_PATH, PROP_LABEL, PROP_VALUE, PROP_DIGITS, PROP_ALARM_VALUE, PROP_ALARM_MODE, PROP_UNITS, PROP_UPDATE_INTERVAL, PROP_ALARMED, PROP_ICON, PROP_LOW_VALUE, PROP_HIGH_VALUE, PROP_ICON_PATH, PROP_ERROR, LAST_PROPERTY }; static GParamSpec *properties[LAST_PROPERTY] = {NULL}; struct _IsSensorPrivate { gchar *path; gchar *label; gdouble value; guint digits; gdouble alarm_value; IsSensorAlarmMode alarm_mode; gchar *units; guint update_interval; gint64 last_update; gboolean alarmed; gchar *icon; gdouble low_value; gdouble high_value; guint enable_alarm_id; guint disable_alarm_id; gchar *icon_path; gchar *error; }; static void is_sensor_class_init(IsSensorClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS(klass); g_type_class_add_private(klass, sizeof(IsSensorPrivate)); gobject_class->get_property = is_sensor_get_property; gobject_class->set_property = is_sensor_set_property; gobject_class->finalize = is_sensor_finalize; properties[PROP_PATH] = g_param_spec_string("path", "path property", "path of this sensor.", NULL, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property(gobject_class, PROP_PATH, properties[PROP_PATH]); properties[PROP_LABEL] = g_param_spec_string("label", "sensor label", "label of this sensor.", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property(gobject_class, PROP_LABEL, properties[PROP_LABEL]); properties[PROP_VALUE] = g_param_spec_double("value", "sensor value", "value of this sensor.", -G_MAXDOUBLE, G_MAXDOUBLE, IS_SENSOR_VALUE_UNSET, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property(gobject_class, PROP_VALUE, properties[PROP_VALUE]); properties[PROP_DIGITS] = g_param_spec_uint("digits", "number of digits for this sensor", "the number of decimal places to display for this sensor.", 0, G_MAXUINT, 1, G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property(gobject_class, PROP_DIGITS, properties[PROP_DIGITS]); properties[PROP_ALARM_VALUE] = g_param_spec_double("alarm-value", "sensor alarm limit", "alarm limit of this sensor.", -G_MAXDOUBLE, G_MAXDOUBLE, 0.0, G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property(gobject_class, PROP_ALARM_VALUE, properties[PROP_ALARM_VALUE]); properties[PROP_ALARM_MODE] = g_param_spec_int("alarm-mode", "sensor alarm mode", "alarm mode of this sensor.", IS_SENSOR_ALARM_MODE_DISABLED, IS_SENSOR_ALARM_MODE_HIGH, IS_SENSOR_ALARM_MODE_DISABLED, G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property(gobject_class, PROP_ALARM_MODE, properties[PROP_ALARM_MODE]); properties[PROP_UNITS] = g_param_spec_string("units", "sensor units", "units of this sensor.", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property(gobject_class, PROP_UNITS, properties[PROP_UNITS]); properties[PROP_UPDATE_INTERVAL] = g_param_spec_uint("update-interval", "sensor update interval", "update interval of this sensor in seconds.", 0, G_MAXUINT, 5, G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property(gobject_class, PROP_UPDATE_INTERVAL, properties[PROP_UPDATE_INTERVAL]); properties[PROP_ALARMED] = g_param_spec_boolean("alarmed", "is sensor alarmed", "alarmed state of this sensor.", FALSE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property(gobject_class, PROP_ALARMED, properties[PROP_ALARMED]); properties[PROP_ICON] = g_param_spec_string("icon", "sensor icon", "icon of this sensor.", IS_STOCK_CHIP, G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property(gobject_class, PROP_ICON, properties[PROP_ICON]); properties[PROP_LOW_VALUE] = g_param_spec_double("low-value", "sensor low value", "low value of this sensor.", -G_MAXDOUBLE, G_MAXDOUBLE, 0.0, G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property(gobject_class, PROP_LOW_VALUE, properties[PROP_LOW_VALUE]); properties[PROP_HIGH_VALUE] = g_param_spec_double("high-value", "sensor high value", "high value of this sensor.", -G_MAXDOUBLE, G_MAXDOUBLE, 0.0, G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property(gobject_class, PROP_HIGH_VALUE, properties[PROP_HIGH_VALUE]); properties[PROP_ICON_PATH] = g_param_spec_string("icon-path", "sensor icon path", "path to the icon of this sensor.", IS_STOCK_CHIP, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property(gobject_class, PROP_ICON_PATH, properties[PROP_ICON_PATH]); properties[PROP_ERROR] = g_param_spec_string("error", "sensor error", "error of this sensor.", NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property(gobject_class, PROP_ERROR, properties[PROP_ERROR]); signals[SIGNAL_UPDATE_VALUE] = g_signal_new("update-value", G_OBJECT_CLASS_TYPE(klass), G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, offsetof(IsSensorClass, update_value), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } static void is_sensor_init(IsSensor *self) { IsSensorPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE(self, IS_TYPE_SENSOR, IsSensorPrivate); self->priv = priv; } static void is_sensor_get_property(GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { IsSensor *self = IS_SENSOR(object); switch (property_id) { case PROP_PATH: g_value_set_string(value, is_sensor_get_path(self)); break; case PROP_LABEL: g_value_set_string(value, is_sensor_get_label(self)); break; case PROP_VALUE: g_value_set_double(value, is_sensor_get_value(self)); break; case PROP_DIGITS: g_value_set_uint(value, is_sensor_get_digits(self)); break; case PROP_ALARM_VALUE: g_value_set_double(value, is_sensor_get_alarm_value(self)); break; case PROP_ALARM_MODE: g_value_set_int(value, is_sensor_get_alarm_mode(self)); break; case PROP_UNITS: g_value_set_string(value, is_sensor_get_units(self)); break; case PROP_UPDATE_INTERVAL: g_value_set_uint(value, is_sensor_get_update_interval(self)); break; case PROP_ALARMED: g_value_set_boolean(value, is_sensor_get_alarmed(self)); break; case PROP_ICON: g_value_set_string(value, is_sensor_get_icon(self)); break; case PROP_LOW_VALUE: g_value_set_double(value, is_sensor_get_low_value(self)); break; case PROP_HIGH_VALUE: g_value_set_double(value, is_sensor_get_high_value(self)); break; case PROP_ICON_PATH: g_value_set_string(value, is_sensor_get_icon_path(self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); break; } } static void is_sensor_set_property(GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { IsSensor *self = IS_SENSOR(object); IsSensorPrivate *priv = self->priv; switch (property_id) { case PROP_PATH: priv->path = g_value_dup_string(value); break; case PROP_LABEL: is_sensor_set_label(self, g_value_get_string(value)); break; case PROP_VALUE: is_sensor_set_value(self, g_value_get_double(value)); break; case PROP_DIGITS: is_sensor_set_digits(self, g_value_get_uint(value)); break; case PROP_ALARM_VALUE: is_sensor_set_alarm_value(self, g_value_get_double(value)); break; case PROP_ALARM_MODE: is_sensor_set_alarm_mode(self, g_value_get_int(value)); break; case PROP_UNITS: is_sensor_set_units(self, g_value_get_string(value)); break; case PROP_UPDATE_INTERVAL: is_sensor_set_update_interval(self, g_value_get_uint(value)); break; case PROP_ICON: is_sensor_set_icon(self, g_value_get_string(value)); break; case PROP_LOW_VALUE: is_sensor_set_low_value(self, g_value_get_double(value)); break; case PROP_HIGH_VALUE: is_sensor_set_high_value(self, g_value_get_double(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); break; } } static void is_sensor_finalize (GObject *object) { IsSensor *self = (IsSensor *)object; IsSensorPrivate *priv = self->priv; g_free(priv->path); priv->path = NULL; g_free(priv->label); priv->label = NULL; g_free(priv->units); priv->units = NULL; G_OBJECT_CLASS(is_sensor_parent_class)->finalize(object); } IsSensor * is_sensor_new(const gchar *path) { return g_object_new(IS_TYPE_SENSOR, "path", path, "label", NULL, "digits", 1, "value", IS_SENSOR_VALUE_UNSET, "alarm-value", 0.0, "alarm-mode", IS_SENSOR_ALARM_MODE_DISABLED, "units", "?", "update-interval", 5, "icon", IS_STOCK_CHIP, "low-value", 0.0, "high-value", 0.0, NULL); } const gchar * is_sensor_get_path(IsSensor *self) { g_return_val_if_fail(IS_IS_SENSOR(self), NULL); return self->priv->path; } const gchar * is_sensor_get_label(IsSensor *self) { g_return_val_if_fail(IS_IS_SENSOR(self), NULL); return self->priv->label; } void is_sensor_set_label(IsSensor *self, const gchar *label) { IsSensorPrivate *priv; g_return_if_fail(IS_IS_SENSOR(self)); priv = self->priv; if (g_strcmp0(label, priv->label) != 0) { g_free(priv->label); priv->label = label ? g_strdup(label) : NULL; g_object_notify_by_pspec(G_OBJECT(self), properties[PROP_LABEL]); } } gdouble is_sensor_get_value(IsSensor *self) { g_return_val_if_fail(IS_IS_SENSOR(self), 0.0f); return self->priv->value; } static gboolean enable_alarm(IsSensor *self) { NotifyNotification *notification; g_return_val_if_fail(self != NULL, FALSE); notification = is_notify(IS_NOTIFY_LEVEL_WARNING, _("Sensor Alarm"), "%s: %2.1f%s", is_sensor_get_label(self), is_sensor_get_value(self), is_sensor_get_units(self)); is_debug("sensor", "Displaying alarm notification"); g_object_set_data_full(G_OBJECT(self), "notification", notification, g_object_unref); self->priv->alarmed = TRUE; g_object_notify_by_pspec(G_OBJECT(self), properties[PROP_ALARMED]); self->priv->enable_alarm_id = 0; /* remove as source */ return FALSE; } static gboolean disable_alarm(IsSensor *self) { /* hide any notification */ NotifyNotification *notification; g_return_val_if_fail(self != NULL, FALSE); notification = g_object_get_data(G_OBJECT(self), "notification"); is_debug("sensor", "Closing alarm notification"); notify_notification_close(notification, NULL); g_object_set_data(G_OBJECT(self), "notification", NULL); self->priv->alarmed = FALSE; g_object_notify_by_pspec(G_OBJECT(self), properties[PROP_ALARMED]); self->priv->disable_alarm_id = 0; return FALSE; } typedef enum { VERY_LOW_SENSOR_VALUE = 0, LOW_SENSOR_VALUE, NORMAL_SENSOR_VALUE, HIGH_SENSOR_VALUE, VERY_HIGH_SENSOR_VALUE } SensorValueRange; /* Cast a given value to a valid SensorValueRange */ #define SENSOR_VALUE_RANGE(x) ((SensorValueRange)(CLAMP(x, VERY_LOW_SENSOR_VALUE, VERY_HIGH_SENSOR_VALUE))) static gdouble sensor_value_range_normalised(gdouble value, gdouble low_value, gdouble high_value) { return ((value - low_value)/(high_value - low_value)); } static SensorValueRange sensor_value_range(gdouble sensor_value, gdouble low_value, gdouble high_value) { gdouble range; range = sensor_value_range_normalised(sensor_value, low_value, high_value)*(gdouble)(VERY_HIGH_SENSOR_VALUE); /* check if need to round up, otherwise let int conversion * round down for us and make sure it is a valid range * value */ return SENSOR_VALUE_RANGE(((gint)range + ((range - ((gint)range)) >= 0.5))); } #define DEFAULT_ICON_SIZE 22 #define NUM_OVERLAY_ICONS 5 static const gchar * const value_overlay_icons[NUM_OVERLAY_ICONS] = { "very-low-value-icon", "low-value-icon", "normal-value-icon", "high-value-icon", "very-high-value-icon" }; static const gchar *value_overlay_icon(gdouble value, gdouble low, gdouble high) { SensorValueRange value_range = sensor_value_range(value, low, high); return value_overlay_icons[value_range]; } static gboolean prepare_cache_icon(const gchar *base_icon_name, const gchar *overlay_name, const gchar *icon_path, GError **error) { GdkPixbuf *base_icon, *overlay_icon, *new_icon; gchar *icon_dir; GtkIconTheme *icon_theme; gboolean ret; ret = g_file_test(icon_path, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR); if (ret) { goto out; } icon_theme = gtk_icon_theme_get_default(); base_icon = gtk_icon_theme_load_icon(icon_theme, base_icon_name, DEFAULT_ICON_SIZE, DEFAULT_ICON_SIZE, error); if (!base_icon) { goto out; } overlay_icon = gtk_icon_theme_load_icon(icon_theme, overlay_name, DEFAULT_ICON_SIZE, DEFAULT_ICON_SIZE, error); if (!overlay_icon) { g_object_unref(base_icon); goto out; } new_icon = gdk_pixbuf_copy(base_icon); gdk_pixbuf_composite(overlay_icon, new_icon, 0, 0, DEFAULT_ICON_SIZE, DEFAULT_ICON_SIZE, 0, 0, 1.0, 1.0, GDK_INTERP_BILINEAR, 255); g_object_unref(overlay_icon); /* ensure path to icon exists */ icon_dir = g_path_get_dirname(icon_path); g_mkdir_with_parents(icon_dir, 0755); g_free(icon_dir); /* write out icon */ ret = gdk_pixbuf_save(new_icon, icon_path, "png", error, NULL); g_object_unref(new_icon); g_object_unref(base_icon); out: return ret; } static gchar * get_icon_path(IsSensor *self) { gdouble value, low, high; const gchar *base_name, *overlay_name; gchar *icon_name, *icon_path = NULL, *cache_dir; gboolean ret; GError *error = NULL; base_name = is_sensor_get_icon(self); value = is_sensor_get_value(self); low = is_sensor_get_low_value(self); high = is_sensor_get_high_value(self); /* if no base icon return NULL */ if (!base_name) { is_warning("sensor", "No base icon for sensor %s [%s]", is_sensor_get_label(self), is_sensor_get_path(self)); icon_path = NULL; goto out; } /* no range - return base icon */ if (fabs(low - high) <= DBL_EPSILON) { /* use base_name */ icon_path = g_strdup(base_name); goto out; } overlay_name = value_overlay_icon(value, low, high); cache_dir = g_build_filename(g_get_user_cache_dir(), PACKAGE, "icons", NULL); icon_name = g_strdup_printf("%s-%s.png", base_name, overlay_name); icon_path = g_build_filename(cache_dir, icon_name, NULL); g_free(icon_name); g_free(cache_dir); /* prepare cache icon */ ret = prepare_cache_icon(base_name, overlay_name, icon_path, &error); if (!ret) { is_warning("sensor", "Couldn't create cache icon %s from base %s and overlay %s for sensor %s: %s", icon_path, base_name, overlay_name, is_sensor_get_path(self), error ? error->message : "NO ERROR"); g_clear_error(&error); /* return base_name instead */ g_free(icon_path); icon_path = g_strdup(base_name); goto out; } out: return icon_path; } static void update_icon_path(IsSensor *self) { gchar *icon_path = get_icon_path(self); if (g_strcmp0(icon_path, self->priv->icon_path)) { g_free(self->priv->icon_path); self->priv->icon_path = icon_path; icon_path = NULL; g_object_notify_by_pspec(G_OBJECT(self), properties[PROP_ICON_PATH]); } g_free(icon_path); } static void update_alarmed(IsSensor *self) { IsSensorPrivate *priv = self->priv; gboolean alarmed = FALSE; switch (priv->alarm_mode) { case IS_SENSOR_ALARM_MODE_DISABLED: alarmed = FALSE; break; case IS_SENSOR_ALARM_MODE_LOW: alarmed = (priv->value <= priv->alarm_value); break; case IS_SENSOR_ALARM_MODE_HIGH: alarmed = (priv->value >= priv->alarm_value); break; default: g_assert_not_reached(); } /* override alarmed if value hasn't been set yet */ if (!priv->last_update) { alarmed = FALSE; } if (priv->alarmed != alarmed) { GSettings *settings; gint delay; settings = g_settings_new("indicator-sensors.sensor"); delay = g_settings_get_int(settings, "alarm-delay"); g_object_unref(settings); /* use a hysteresis value so we don't become alarmed too * quickly for fluctuating values */ if (priv->alarmed) { if (priv->enable_alarm_id) { g_source_remove(priv->enable_alarm_id); priv->enable_alarm_id = 0; } if (!priv->disable_alarm_id) { priv->disable_alarm_id = g_timeout_add_seconds(delay, (GSourceFunc)disable_alarm, self); is_debug("sensor", "Alarm triggered - will %sable in %d seconds", alarmed ? "en" : "dis", delay); } } else { if (priv->disable_alarm_id) { g_source_remove(priv->disable_alarm_id); priv->disable_alarm_id = 0; } if (!priv->enable_alarm_id) { priv->enable_alarm_id = g_timeout_add_seconds(delay, (GSourceFunc)enable_alarm, self); is_debug("sensor", "Alarm triggered - will %sable in %d seconds", alarmed ? "en" : "dis", delay); } } } } void is_sensor_set_value(IsSensor *self, gdouble value) { IsSensorPrivate *priv; g_return_if_fail(IS_IS_SENSOR(self)); priv = self->priv; if (fabs(priv->value - value) > DBL_EPSILON) { priv->value = value; g_object_notify_by_pspec(G_OBJECT(self), properties[PROP_VALUE]); update_alarmed(self); update_icon_path(self); } } guint is_sensor_get_digits(IsSensor *self) { g_return_val_if_fail(IS_IS_SENSOR(self), 0); return self->priv->digits; } void is_sensor_set_digits(IsSensor *self, guint digits) { IsSensorPrivate *priv; g_return_if_fail(IS_IS_SENSOR(self)); priv = self->priv; if (digits != priv->digits) { priv->digits = digits; g_object_notify_by_pspec(G_OBJECT(self), properties[PROP_DIGITS]); } } gdouble is_sensor_get_alarm_value(IsSensor *self) { g_return_val_if_fail(IS_IS_SENSOR(self), 0.0f); return self->priv->alarm_value; } void is_sensor_set_alarm_value(IsSensor *self, gdouble alarm_value) { IsSensorPrivate *priv; g_return_if_fail(IS_IS_SENSOR(self)); priv = self->priv; if (fabs(priv->alarm_value - alarm_value) > DBL_EPSILON) { priv->alarm_value = alarm_value; g_object_notify_by_pspec(G_OBJECT(self), properties[PROP_ALARM_VALUE]); update_alarmed(self); } } IsSensorAlarmMode is_sensor_get_alarm_mode(IsSensor *self) { g_return_val_if_fail(IS_IS_SENSOR(self), IS_SENSOR_ALARM_MODE_DISABLED); return self->priv->alarm_mode; } void is_sensor_set_alarm_mode(IsSensor *self, IsSensorAlarmMode alarm_mode) { IsSensorPrivate *priv; g_return_if_fail(IS_IS_SENSOR(self)); priv = self->priv; if (priv->alarm_mode != alarm_mode) { priv->alarm_mode = alarm_mode; g_object_notify_by_pspec(G_OBJECT(self), properties[PROP_ALARM_MODE]); update_alarmed(self); } } const gchar * is_sensor_get_units(IsSensor *self) { g_return_val_if_fail(IS_IS_SENSOR(self), NULL); return self->priv->units; } void is_sensor_set_units(IsSensor *self, const gchar *units) { g_return_if_fail(IS_IS_SENSOR(self)); if (g_strcmp0(units, self->priv->units) != 0) { g_free(self->priv->units); self->priv->units = units ? g_strdup(units) : NULL; g_object_notify_by_pspec(G_OBJECT(self), properties[PROP_UNITS]); } } guint is_sensor_get_update_interval(IsSensor *self) { g_return_val_if_fail(IS_IS_SENSOR(self), 0); return self->priv->update_interval; } void is_sensor_set_update_interval(IsSensor *self, guint update_interval) { g_return_if_fail(IS_IS_SENSOR(self)); if (self->priv->update_interval != update_interval) { self->priv->update_interval = update_interval; g_object_notify_by_pspec(G_OBJECT(self), properties[PROP_UPDATE_INTERVAL]); } } gboolean is_sensor_get_alarmed(IsSensor *self) { g_return_val_if_fail(IS_IS_SENSOR(self), 0.0f); return self->priv->alarmed; } void is_sensor_update_value(IsSensor *self) { IsSensorPrivate *priv; gint64 secs; g_return_if_fail(IS_IS_SENSOR(self)); priv = self->priv; /* respect update_interval */ secs = g_get_monotonic_time() / G_USEC_PER_SEC; if (!priv->last_update || secs - priv->last_update >= priv->update_interval) { priv->last_update = secs; g_signal_emit(self, signals[SIGNAL_UPDATE_VALUE], 0); } } const gchar * is_sensor_get_icon(IsSensor *self) { g_return_val_if_fail(IS_IS_SENSOR(self), NULL); return self->priv->icon; } void is_sensor_set_icon(IsSensor *self, const gchar *icon) { g_return_if_fail(IS_IS_SENSOR(self)); if (g_strcmp0(icon, self->priv->icon) != 0) { g_free(self->priv->icon); self->priv->icon = icon ? g_strdup(icon) : NULL; g_object_notify_by_pspec(G_OBJECT(self), properties[PROP_ICON]); update_icon_path(self); } } gdouble is_sensor_get_low_value(IsSensor *self) { g_return_val_if_fail(IS_IS_SENSOR(self), 0.0f); return self->priv->low_value; } void is_sensor_set_low_value(IsSensor *self, gdouble low_value) { IsSensorPrivate *priv; g_return_if_fail(IS_IS_SENSOR(self)); priv = self->priv; if (fabs(priv->low_value - low_value) > DBL_EPSILON) { priv->low_value = low_value; g_object_notify_by_pspec(G_OBJECT(self), properties[PROP_LOW_VALUE]); update_icon_path(self); } } gdouble is_sensor_get_high_value(IsSensor *self) { g_return_val_if_fail(IS_IS_SENSOR(self), 0.0f); return self->priv->high_value; } void is_sensor_set_high_value(IsSensor *self, gdouble high_value) { IsSensorPrivate *priv; g_return_if_fail(IS_IS_SENSOR(self)); priv = self->priv; if (fabs(priv->high_value - high_value) > DBL_EPSILON) { priv->high_value = high_value; g_object_notify_by_pspec(G_OBJECT(self), properties[PROP_HIGH_VALUE]); update_icon_path(self); } } const gchar * is_sensor_get_icon_path(IsSensor *self) { g_return_val_if_fail(IS_IS_SENSOR(self), NULL); return self->priv->icon_path; } const gchar * is_sensor_get_error(IsSensor *self) { g_return_val_if_fail(IS_IS_SENSOR(self), NULL); return self->priv->error; } void is_sensor_set_error(IsSensor *self, const gchar *error) { NotifyNotification *notification; g_return_if_fail(IS_IS_SENSOR(self)); notification = g_object_get_data(G_OBJECT(self), "error-notification"); if (notification != NULL) { is_debug("sensor", "Closing existing error notification"); notify_notification_close(notification, NULL); } g_free(self->priv->error); self->priv->error = error ? g_strdup(error) : NULL; if (self->priv->error) { notification = is_notify(IS_NOTIFY_LEVEL_WARNING, _("Sensor Error"), "%s", self->priv->error); is_debug("sensor", "Displaying error notification"); g_object_set_data_full(G_OBJECT(self), "error-notification", notification, g_object_unref); } g_object_notify_by_pspec(G_OBJECT(self), properties[PROP_ERROR]); } indicator-sensors-1.1/indicator-sensors/is-sensor.h000066400000000000000000000100771356741033200225730ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #ifndef __IS_SENSOR_H__ #define __IS_SENSOR_H__ #include #include G_BEGIN_DECLS #define IS_TYPE_SENSOR \ (is_sensor_get_type()) #define IS_SENSOR(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ IS_TYPE_SENSOR, \ IsSensor)) #define IS_SENSOR_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ IS_TYPE_SENSOR, \ IsSensorClass)) #define IS_IS_SENSOR(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ IS_TYPE_SENSOR)) #define IS_IS_SENSOR_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), \ IS_TYPE_SENSOR)) #define IS_SENSOR_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ IS_TYPE_SENSOR, \ IsSensorClass)) typedef struct _IsSensor IsSensor; typedef struct _IsSensorClass IsSensorClass; typedef struct _IsSensorPrivate IsSensorPrivate; struct _IsSensorClass { GObjectClass parent_class; /* signals */ void (*update_value)(IsSensor *sensor); }; struct _IsSensor { GObject parent; IsSensorPrivate *priv; }; typedef enum { IS_SENSOR_ALARM_MODE_DISABLED = 0, IS_SENSOR_ALARM_MODE_LOW, IS_SENSOR_ALARM_MODE_HIGH, } IsSensorAlarmMode; /* device icons */ #define IS_STOCK_CPU "indicator-sensors-cpu" #define IS_STOCK_DISK "indicator-sensors-disk" #define IS_STOCK_BATTERY "indicator-sensors-battery" #define IS_STOCK_MEMORY "indicator-sensors-memory" #define IS_STOCK_GPU "indicator-sensors-gpu" #define IS_STOCK_CHIP "indicator-sensors-chip" #define IS_STOCK_FAN "indicator-sensors-fan" #define IS_STOCK_CASE "indicator-sensors-case" #define IS_SENSOR_VALUE_UNSET (-G_MAXDOUBLE) GType is_sensor_get_type(void) G_GNUC_CONST; IsSensor *is_sensor_new(const gchar *path); void is_sensor_update_value(IsSensor *self); const gchar *is_sensor_get_path(IsSensor *self); const gchar *is_sensor_get_label(IsSensor *self); void is_sensor_set_label(IsSensor *self, const gchar *label); const gchar *is_sensor_get_units(IsSensor *self); void is_sensor_set_units(IsSensor *self, const gchar *units); gdouble is_sensor_get_value(IsSensor *self); void is_sensor_set_value(IsSensor *self, gdouble value); guint is_sensor_get_digits(IsSensor *self); void is_sensor_set_digits(IsSensor *self, guint digits); gdouble is_sensor_get_alarm_value(IsSensor *self); void is_sensor_set_alarm_value(IsSensor *self, gdouble limit); IsSensorAlarmMode is_sensor_get_alarm_mode(IsSensor *self); void is_sensor_set_alarm_mode(IsSensor *self, IsSensorAlarmMode mode); guint is_sensor_get_update_interval(IsSensor *self); void is_sensor_set_update_interval(IsSensor *self, guint update_interval); gboolean is_sensor_get_alarmed(IsSensor *self); const gchar *is_sensor_get_icon(IsSensor *self); void is_sensor_set_icon(IsSensor *self, const gchar *icon); gdouble is_sensor_get_low_value(IsSensor *self); void is_sensor_set_low_value(IsSensor *self, gdouble value); gdouble is_sensor_get_high_value(IsSensor *self); void is_sensor_set_high_value(IsSensor *self, gdouble value); const gchar *is_sensor_get_icon_path(IsSensor *self); const gchar *is_sensor_get_error(IsSensor *self); void is_sensor_set_error(IsSensor *self, const gchar *error); void sensor_prepare_cache_icons(); G_END_DECLS #endif /* __IS_SENSOR_H__ */ indicator-sensors-1.1/indicator-sensors/is-store.c000066400000000000000000000531561356741033200224160ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #include "is-store.h" #include "is-log.h" #include static void is_store_dispose(GObject *object); static void is_store_finalize(GObject *object); /* tree model prototypes */ static void is_store_tree_model_init(GtkTreeModelIface *iface); static GtkTreeModelFlags _is_store_get_flags(GtkTreeModel *tree_model); static gint _is_store_get_n_columns(GtkTreeModel *tree_model); static GType _is_store_get_column_type(GtkTreeModel *tree_model, gint index); static gboolean _is_store_get_iter(GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreePath *path); static GtkTreePath *_is_store_get_path(GtkTreeModel *tree_model, GtkTreeIter *iter); static void _is_store_get_value(GtkTreeModel *tree_model, GtkTreeIter *iter, gint column, GValue *value); static gboolean _is_store_iter_next(GtkTreeModel *tree_model, GtkTreeIter *iter); static gboolean _is_store_iter_children(GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreeIter *parent); static gboolean _is_store_iter_has_child(GtkTreeModel *tree_model, GtkTreeIter *iter); static gint _is_store_iter_n_children(GtkTreeModel *tree_model, GtkTreeIter *iter); static gboolean _is_store_iter_nth_child(GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreeIter *parent, gint n); static gboolean _is_store_iter_parent(GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreeIter *child); G_DEFINE_TYPE_EXTENDED(IsStore, is_store, G_TYPE_OBJECT, 0, G_IMPLEMENT_INTERFACE(GTK_TYPE_TREE_MODEL, is_store_tree_model_init)); typedef struct _IsStoreEntry IsStoreEntry; struct _IsStoreEntry { /* entry a path name and other entries, and a sensor + enabled value if it is a leaf sensor */ gchar *name; GSequence *entries; IsSensor *sensor; gboolean enabled; /* bookkeeping */ GSequenceIter *parent; GSequenceIter *iter; }; static void entry_free(IsStoreEntry *entry) { if (entry->sensor) { g_object_unref(entry->sensor); } g_sequence_free(entry->entries); g_free(entry->name); g_slice_free(IsStoreEntry, entry); } static IsStoreEntry * entry_new(const gchar *name) { IsStoreEntry *entry = g_slice_new0(IsStoreEntry); entry->name = g_strdup(name); entry->entries = g_sequence_new((GDestroyNotify)entry_free); return entry; } struct _IsStorePrivate { GSequence *entries; gint stamp; }; static void is_store_class_init(IsStoreClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS(klass); g_type_class_add_private(klass, sizeof(IsStorePrivate)); gobject_class->dispose = is_store_dispose; gobject_class->finalize = is_store_finalize; } static void is_store_init(IsStore *self) { IsStorePrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE(self, IS_TYPE_STORE, IsStorePrivate); self->priv = priv; priv->entries = g_sequence_new((GDestroyNotify)entry_free); priv->stamp = g_random_int(); } static void is_store_dispose(GObject *object) { IsStore *self = (IsStore *)object; IsStorePrivate *priv = self->priv; /* Make compiler happy */ (void)priv; G_OBJECT_CLASS(is_store_parent_class)->dispose(object); } static void is_store_finalize(GObject *object) { IsStore *self = (IsStore *)object; IsStorePrivate *priv = self->priv; g_sequence_free(priv->entries); /* Make compiler happy */ (void)priv; G_OBJECT_CLASS(is_store_parent_class)->finalize(object); } static void is_store_tree_model_init(GtkTreeModelIface *iface) { iface->get_flags = _is_store_get_flags; iface->get_n_columns = _is_store_get_n_columns; iface->get_column_type = _is_store_get_column_type; iface->get_iter = _is_store_get_iter; iface->get_path = _is_store_get_path; iface->get_value = _is_store_get_value; iface->iter_next = _is_store_iter_next; iface->iter_children = _is_store_iter_children; iface->iter_has_child = _is_store_iter_has_child; iface->iter_n_children = _is_store_iter_n_children; iface->iter_nth_child = _is_store_iter_nth_child; iface->iter_parent = _is_store_iter_parent; } static GtkTreeModelFlags _is_store_get_flags(GtkTreeModel *tree_model) { g_return_val_if_fail(IS_IS_STORE(tree_model), (GtkTreeModelFlags)0); return (GTK_TREE_MODEL_ITERS_PERSIST); } static gint _is_store_get_n_columns(GtkTreeModel *tree_model) { g_return_val_if_fail(IS_IS_STORE(tree_model), 0); return IS_STORE_N_COLUMNS; } static const GType column_types[IS_STORE_N_COLUMNS] = { G_TYPE_STRING, /* IS_STORE_COL_NAME */ G_TYPE_STRING, /* IS_STORE_COL_LABEL */ G_TYPE_STRING, /* IS_STORE_COL_ICON */ G_TYPE_BOOLEAN, /* IS_STORE_COL_IS_SENSOR */ G_TYPE_OBJECT, /* IS_STORE_COL_SENSOR */ G_TYPE_BOOLEAN, /* IS_STORE_COL_ENABLED */ }; static GType _is_store_get_column_type(GtkTreeModel *tree_model, gint col) { g_return_val_if_fail(IS_IS_STORE(tree_model), G_TYPE_INVALID); g_return_val_if_fail((col >= 0) && (col < IS_STORE_N_COLUMNS), G_TYPE_INVALID); return column_types[col]; } static gboolean get_iter_for_indices(IsStore *self, const gint *indices, const gint depth, gint i, GSequence *entries, GtkTreeIter *iter) { gint index; GSequenceIter *entry_iter; IsStoreEntry *entry; gboolean ret = FALSE; g_assert(i < depth); index = indices[i]; if (index < 0 || index >= g_sequence_get_length(entries)) { goto out; } entry_iter = g_sequence_get_iter_at_pos(entries, index); entry = (IsStoreEntry *) g_sequence_get(entry_iter); /* if this is the required depth return this iter */ if (i == depth - 1) { iter->stamp = self->priv->stamp; iter->user_data = entry->iter; ret = TRUE; } else { /* parent shouldn't have a sensor */ g_assert(!entry->sensor); ret = get_iter_for_indices(self, indices, depth, ++i, entry->entries, iter); } out: return ret; } gboolean _is_store_get_iter(GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreePath *path) { IsStore *self; IsStorePrivate *priv; gint *indices, depth; gboolean ret = FALSE; g_return_val_if_fail(IS_IS_STORE(tree_model), FALSE); g_return_val_if_fail(path != NULL, FALSE); self = IS_STORE(tree_model); priv = self->priv; indices = gtk_tree_path_get_indices(path); depth = gtk_tree_path_get_depth(path); ret = get_iter_for_indices(self, indices, depth, 0, priv->entries, iter); return ret; } static GtkTreePath *_is_store_get_path(GtkTreeModel *tree_model, GtkTreeIter *iter) { IsStore *self; IsStorePrivate *priv; GtkTreePath *path; GSequenceIter *entry_iter; g_return_val_if_fail(IS_IS_STORE(tree_model), NULL); g_return_val_if_fail(iter != NULL, NULL); self = IS_STORE(tree_model); priv = self->priv; g_return_val_if_fail(iter->stamp == priv->stamp, NULL); g_assert(iter->user_data); path = gtk_tree_path_new(); entry_iter = (GSequenceIter *)iter->user_data; while (entry_iter != NULL) { IsStoreEntry *entry; gtk_tree_path_prepend_index(path, g_sequence_iter_get_position(entry_iter)); entry = (IsStoreEntry *)g_sequence_get(entry_iter); entry_iter = entry->parent; } return path; } static void _is_store_get_value(GtkTreeModel *tree_model, GtkTreeIter *iter, gint column, GValue *value) { IsStore *self; IsStorePrivate *priv; IsStoreEntry *entry = NULL; g_return_if_fail(IS_IS_STORE(tree_model)); g_return_if_fail(iter != NULL); self = IS_STORE(tree_model); priv = self->priv; g_return_if_fail(iter->stamp == priv->stamp); g_assert(iter->user_data); g_value_init(value, column_types[column]); entry = (IsStoreEntry *) g_sequence_get((GSequenceIter *)iter->user_data); g_assert(entry); switch (column) { case IS_STORE_COL_NAME: g_value_set_string(value, entry->name); break; case IS_STORE_COL_LABEL: g_value_set_string(value, (entry->sensor ? is_sensor_get_label(entry->sensor) : NULL)); break; case IS_STORE_COL_IS_SENSOR: g_value_set_boolean(value, (entry->sensor != NULL)); break; case IS_STORE_COL_SENSOR: g_value_set_object(value, entry->sensor); break; case IS_STORE_COL_ENABLED: g_value_set_boolean(value, entry->enabled); break; case IS_STORE_COL_ICON: g_value_set_string(value, (entry->sensor ? is_sensor_get_icon(entry->sensor) : NULL)); break; default: g_assert_not_reached(); } } static gboolean _is_store_iter_next(GtkTreeModel *tree_model, GtkTreeIter *iter) { IsStore *self; IsStorePrivate *priv; GSequenceIter *next; gboolean ret = FALSE; g_return_val_if_fail(IS_IS_STORE(tree_model), FALSE); g_return_val_if_fail(iter != NULL, FALSE); self = IS_STORE(tree_model); priv = self->priv; g_return_val_if_fail(iter->stamp == priv->stamp, FALSE); g_assert(iter->user_data); next = g_sequence_iter_next((GSequenceIter *)iter->user_data); if (!g_sequence_iter_is_end(next)) { iter->user_data = next; ret = TRUE; } return ret; } static gboolean _is_store_iter_children(GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreeIter *parent) { IsStore *self; IsStorePrivate *priv; IsStoreEntry *entry; gboolean ret = FALSE; g_return_val_if_fail(IS_IS_STORE(tree_model), FALSE); self = IS_STORE(tree_model); priv = self->priv; /* special case - return first node */ if (!parent) { GSequenceIter *seq_iter = g_sequence_get_begin_iter(priv->entries); if (seq_iter) { iter->stamp = priv->stamp; iter->user_data = seq_iter; ret = TRUE; } goto out; } g_return_val_if_fail(parent->stamp == priv->stamp, FALSE); g_assert(parent->user_data); entry = (IsStoreEntry *)g_sequence_get(parent->user_data); if (!entry->sensor) { iter->stamp = priv->stamp; iter->user_data = g_sequence_get_begin_iter(entry->entries); ret = TRUE; } out: return ret; } static gboolean _is_store_iter_has_child(GtkTreeModel *tree_model, GtkTreeIter *iter) { IsStore *self; IsStorePrivate *priv; IsStoreEntry *entry; gboolean ret = FALSE; g_return_val_if_fail(IS_IS_STORE(tree_model), FALSE); g_return_val_if_fail(iter != NULL, FALSE); self = IS_STORE(tree_model); priv = self->priv; g_return_val_if_fail(iter->stamp == priv->stamp, FALSE); g_assert(iter->user_data); /* end iter is invalid and has no entry associated with it */ if (!g_sequence_iter_is_end((GSequenceIter *)iter->user_data)) { entry = (IsStoreEntry *) g_sequence_get((GSequenceIter *)iter->user_data); ret = (g_sequence_get_length(entry->entries) > 0); } return ret; } static gint _is_store_iter_n_children(GtkTreeModel *tree_model, GtkTreeIter *iter) { IsStore *self; IsStorePrivate *priv; IsStoreEntry *entry; gint n; g_return_val_if_fail(IS_IS_STORE(tree_model), 0); self = IS_STORE(tree_model); priv = self->priv; if (!iter) { n = g_sequence_get_length(priv->entries); goto out; } g_return_val_if_fail(iter->stamp == priv->stamp, 0); g_assert(iter->user_data); entry = (IsStoreEntry *) g_sequence_get((GSequenceIter *)iter->user_data); n = g_sequence_get_length(entry->entries); out: return n; } static gboolean _is_store_iter_nth_child(GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreeIter *parent, gint n) { IsStore *self; IsStorePrivate *priv; IsStoreEntry *entry; gboolean ret = FALSE; g_return_val_if_fail(IS_IS_STORE(tree_model), FALSE); self = IS_STORE(tree_model); priv = self->priv; if (!parent) { g_return_val_if_fail(n >= 0 && n < g_sequence_get_length(priv->entries), FALSE); iter->stamp = priv->stamp; iter->user_data = g_sequence_get_iter_at_pos(priv->entries, n); ret = TRUE; goto out; } g_return_val_if_fail(parent->stamp == priv->stamp, FALSE); g_assert(parent->user_data); entry = (IsStoreEntry *) g_sequence_get((GSequenceIter *)parent->user_data); if (entry->entries) { iter->stamp = priv->stamp; iter->user_data = g_sequence_get_iter_at_pos(entry->entries, n); ret = TRUE; } out: return ret; } static gboolean _is_store_iter_parent(GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreeIter *child) { IsStore *self; IsStorePrivate *priv; IsStoreEntry *entry; gboolean ret = FALSE; g_return_val_if_fail(IS_IS_STORE(tree_model), FALSE); g_return_val_if_fail(child != NULL, FALSE); self = IS_STORE(tree_model); priv = self->priv; g_return_val_if_fail(child->stamp == priv->stamp, FALSE); g_assert(child->user_data); entry = (IsStoreEntry *) g_sequence_get((GSequenceIter *)child->user_data); if (entry->parent) { iter->stamp = priv->stamp; iter->user_data = entry->parent; ret = TRUE; } return ret; } static IsStoreEntry * find_entry(IsStore *self, const gchar *path) { IsStorePrivate *priv; GSequence *entries; GSequenceIter *iter; IsStoreEntry *entry = NULL; gchar **names; int i; priv = self->priv; entries = priv->entries; names = g_strsplit(path, "/", 0); /* iterate through name components */ for (i = 0; names[i] != NULL; i++) { const gchar *name = names[i]; entry = NULL; for (iter = g_sequence_get_begin_iter(entries); !g_sequence_iter_is_end(iter); iter = g_sequence_iter_next(iter)) { entry = (IsStoreEntry *)g_sequence_get(iter); if (g_strcmp0(entry->name, name) == 0) { entries = entry->entries; break; } entry = NULL; } if (!entry) { /* no entry exists with this name component */ break; } } g_strfreev(names); return entry; } IsStore * is_store_new(void) { return g_object_new(IS_TYPE_STORE, NULL); } gboolean is_store_add_sensor(IsStore *self, IsSensor *sensor, GtkTreeIter *iter) { IsStorePrivate *priv; GSequence *entries; IsStoreEntry *entry = NULL; GSequenceIter *parent = NULL; gchar **names = NULL; int i; GtkTreePath *path; GtkTreeIter _iter; gboolean ret = FALSE; g_return_val_if_fail(IS_IS_STORE(self), FALSE); g_return_val_if_fail(IS_IS_SENSOR(sensor), FALSE); priv = self->priv; entry = find_entry(self, is_sensor_get_path(sensor)); if (entry) { is_warning("store", "sensor %s already exists in store, not adding duplicate", is_sensor_get_path(sensor)); goto out; } entries = priv->entries; names = g_strsplit(is_sensor_get_path(sensor), "/", 0); /* otherwise iterate through to create the entry */ for (i = 0; names[i] != NULL; i++) { GSequenceIter *seq_iter; gchar *name = names[i]; entry = NULL; for (seq_iter = g_sequence_get_begin_iter(entries); !g_sequence_iter_is_end(seq_iter); seq_iter = g_sequence_iter_next(seq_iter)) { entry = (IsStoreEntry *)g_sequence_get(seq_iter); if (g_strcmp0(entry->name, name) == 0) { entries = entry->entries; parent = seq_iter; break; } entry = NULL; } if (!entry) { /* create entry for this name component */ entry = entry_new(name); entry->iter = g_sequence_append(entries, entry); entry->parent = parent; entries = entry->entries; _iter.stamp = priv->stamp; _iter.user_data = entry->iter; path = gtk_tree_model_get_path(GTK_TREE_MODEL(self), &_iter); gtk_tree_model_row_inserted(GTK_TREE_MODEL(self), path, &_iter); gtk_tree_path_free(path); /* parent of the next entry we create will be this * entry */ parent = entry->iter; } } g_strfreev(names); g_assert(entry); g_assert(find_entry(self, is_sensor_get_path(sensor)) == entry); is_debug("store", "inserted sensor %s with label %s", is_sensor_get_path(sensor), is_sensor_get_label(sensor)); entry->sensor = g_object_ref(sensor); _iter.stamp = priv->stamp; _iter.user_data = entry->iter; path = gtk_tree_model_get_path(GTK_TREE_MODEL(self), &_iter); gtk_tree_model_row_changed(GTK_TREE_MODEL(self), path, &_iter); gtk_tree_path_free(path); /* return a copy of iter */ if (iter != NULL) { iter->stamp = priv->stamp; iter->user_data = entry->iter; } ret = TRUE; out: return ret; } static void remove_entry(IsStore *self, IsStoreEntry *entry) { IsStorePrivate *priv; GtkTreeIter iter; GtkTreePath *path; GSequenceIter *parent_iter; priv = self->priv; parent_iter = entry->parent; iter.stamp = priv->stamp; iter.user_data = entry->iter; path = gtk_tree_model_get_path(GTK_TREE_MODEL(self), &iter); g_sequence_remove(entry->iter); gtk_tree_model_row_deleted(GTK_TREE_MODEL(self), path); gtk_tree_path_free(path); /* remove parent if it has no children now */ if (parent_iter) { IsStoreEntry *parent = g_sequence_get(parent_iter); if (g_sequence_get_length(parent->entries) == 0) { remove_entry(self, parent); } } } gboolean is_store_remove_path(IsStore *self, const gchar *path) { IsStoreEntry *entry = NULL; gboolean ret = FALSE; g_return_val_if_fail(IS_IS_STORE(self), FALSE); g_return_val_if_fail(path != NULL, FALSE); entry = find_entry(self, path); if (entry) { remove_entry(self, entry); ret = TRUE; } return ret; } gboolean is_store_set_label(IsStore *self, GtkTreeIter *iter, const gchar *label) { IsStorePrivate *priv; IsStoreEntry *entry = NULL; gboolean ret = FALSE; g_return_val_if_fail(IS_IS_STORE(self), FALSE); g_return_val_if_fail(iter != NULL, FALSE); priv = self->priv; g_return_val_if_fail(iter->stamp == priv->stamp, FALSE); g_return_val_if_fail(iter->user_data, FALSE); entry = (IsStoreEntry *)g_sequence_get(iter->user_data); if (entry->sensor && g_strcmp0(is_sensor_get_label(entry->sensor), label) != 0) { GtkTreePath *path; is_sensor_set_label(entry->sensor, label); path = gtk_tree_model_get_path(GTK_TREE_MODEL(self), iter); gtk_tree_model_row_changed(GTK_TREE_MODEL(self), path, iter); gtk_tree_path_free(path); ret = TRUE; } return ret; } gboolean is_store_set_enabled(IsStore *self, GtkTreeIter *iter, gboolean enabled) { IsStorePrivate *priv; IsStoreEntry *entry = NULL; gboolean ret = FALSE; g_return_val_if_fail(IS_IS_STORE(self), FALSE); g_return_val_if_fail(iter != NULL, FALSE); priv = self->priv; g_return_val_if_fail(iter->stamp == priv->stamp, FALSE); g_return_val_if_fail(iter->user_data, FALSE); entry = (IsStoreEntry *)g_sequence_get(iter->user_data); if (entry->sensor && entry->enabled != enabled) { GtkTreePath *path; entry->enabled = enabled; path = gtk_tree_model_get_path(GTK_TREE_MODEL(self), iter); gtk_tree_model_row_changed(GTK_TREE_MODEL(self), path, iter); gtk_tree_path_free(path); ret = TRUE; } return ret; } gboolean is_store_remove(IsStore *self, GtkTreeIter *iter) { IsStorePrivate *priv; IsStoreEntry *entry; g_return_val_if_fail(IS_IS_STORE(self), FALSE); g_return_val_if_fail(iter != NULL, FALSE); priv = self->priv; g_return_val_if_fail(iter->stamp == priv->stamp, FALSE); g_return_val_if_fail(iter->user_data, FALSE); entry = (IsStoreEntry *) g_sequence_get((GSequenceIter *)(iter->user_data)); remove_entry(self, entry); return TRUE; } gboolean is_store_get_iter(IsStore *self, const gchar *path, GtkTreeIter *iter) { IsStorePrivate *priv; IsStoreEntry *entry = NULL; gboolean ret = FALSE; g_return_val_if_fail(IS_IS_STORE(self), FALSE); g_return_val_if_fail(path != NULL, FALSE); priv = self->priv; entry = find_entry(self, path); if (!entry) { goto out; } iter->stamp = priv->stamp; iter->user_data = entry->iter; ret = TRUE; out: return ret; } indicator-sensors-1.1/indicator-sensors/is-store.h000066400000000000000000000060361356741033200224160ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #ifndef __IS_STORE_H__ #define __IS_STORE_H__ #include #include #include "is-sensor.h" G_BEGIN_DECLS #define IS_TYPE_STORE \ (is_store_get_type()) #define IS_STORE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ IS_TYPE_STORE, \ IsStore)) #define IS_STORE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ IS_TYPE_STORE, \ IsStoreClass)) #define IS_IS_STORE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ IS_TYPE_STORE)) #define IS_IS_STORE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), \ IS_TYPE_STORE)) #define IS_STORE_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ IS_TYPE_STORE, \ IsStoreClass)) typedef struct _IsStore IsStore; typedef struct _IsStoreClass IsStoreClass; typedef struct _IsStorePrivate IsStorePrivate; struct _IsStoreClass { GObjectClass parent_class; }; struct _IsStore { GObject parent; IsStorePrivate *priv; }; enum { IS_STORE_COL_NAME = 0, IS_STORE_COL_LABEL, IS_STORE_COL_ICON, IS_STORE_COL_IS_SENSOR, IS_STORE_COL_SENSOR, IS_STORE_COL_ENABLED, IS_STORE_N_COLUMNS, }; GType is_store_get_type(void) G_GNUC_CONST; IsStore *is_store_new(void); gboolean is_store_add_sensor(IsStore *self, IsSensor *sensor, GtkTreeIter *iter); gboolean is_store_remove(IsStore *self, GtkTreeIter *iter); gboolean is_store_remove_path(IsStore *self, const gchar *path); gboolean is_store_set_label(IsStore *self, GtkTreeIter *iter, const gchar *label); gboolean is_store_set_enabled(IsStore *self, GtkTreeIter *iter, gboolean enabled); gboolean is_store_get_iter(IsStore *self, const gchar *path, GtkTreeIter *iter); #define is_store_get_iter_for_sensor(self, sensor, iter) \ is_store_get_iter(self, \ is_sensor_get_path(sensor), \ iter) G_END_DECLS #endif /* __IS_STORE_H__ */ indicator-sensors-1.1/indicator-sensors/is-temperature-sensor.c000066400000000000000000000171671356741033200251300ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #include #include "is-temperature-sensor.h" #include "is-log.h" G_DEFINE_TYPE(IsTemperatureSensor, is_temperature_sensor, IS_TYPE_SENSOR); static void is_temperature_sensor_finalize(GObject *object); static void is_temperature_sensor_get_property(GObject *object, guint property_id, GValue *value, GParamSpec *pspec); static void is_temperature_sensor_set_property(GObject *object, guint property_id, const GValue *value, GParamSpec *pspec); /* properties */ enum { PROP_0, PROP_SCALE, LAST_PROPERTY }; static GParamSpec *properties[LAST_PROPERTY]; struct _IsTemperatureSensorPrivate { IsTemperatureSensorScale scale; }; static void is_temperature_sensor_class_init(IsTemperatureSensorClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS(klass); g_type_class_add_private(klass, sizeof(IsTemperatureSensorPrivate)); gobject_class->finalize = is_temperature_sensor_finalize; gobject_class->get_property = is_temperature_sensor_get_property; gobject_class->set_property = is_temperature_sensor_set_property; /* TODO: convert to an enum type */ properties[PROP_SCALE] = g_param_spec_int("scale", "temperature scale", "Sensor temperature scale.", IS_TEMPERATURE_SENSOR_SCALE_CELSIUS, IS_TEMPERATURE_SENSOR_SCALE_FAHRENHEIT, IS_TEMPERATURE_SENSOR_SCALE_CELSIUS, G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property(gobject_class, PROP_SCALE, properties[PROP_SCALE]); } static const gchar * is_temperature_sensor_scale_to_string(IsTemperatureSensorScale scale) { const gchar *string = ""; switch (scale) { case IS_TEMPERATURE_SENSOR_SCALE_CELSIUS: string = "\342\204\203"; break; case IS_TEMPERATURE_SENSOR_SCALE_FAHRENHEIT: string = "\342\204\211"; break; case IS_TEMPERATURE_SENSOR_SCALE_INVALID: case NUM_IS_TEMPERATURE_SENSOR_SCALE: default: is_warning("temperature sensor", "Unable to convert IsTemperatureSensorScale %d to string", scale); } return string; } static void is_temperature_sensor_init(IsTemperatureSensor *self) { IsTemperatureSensorPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE(self, IS_TYPE_TEMPERATURE_SENSOR, IsTemperatureSensorPrivate); self->priv = priv; /* initialise scale to celcius */ priv->scale = IS_TEMPERATURE_SENSOR_SCALE_CELSIUS; is_sensor_set_units(IS_SENSOR(self), is_temperature_sensor_scale_to_string(priv->scale)); } static void is_temperature_sensor_get_property(GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { IsTemperatureSensor *self = IS_TEMPERATURE_SENSOR(object); switch (property_id) { case PROP_SCALE: g_value_set_int(value, is_temperature_sensor_get_scale(self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); break; } } static void is_temperature_sensor_set_property(GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { IsTemperatureSensor *self = IS_TEMPERATURE_SENSOR(object); switch (property_id) { case PROP_SCALE: is_temperature_sensor_set_scale(self, g_value_get_int(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); break; } } static void is_temperature_sensor_finalize(GObject *object) { IsTemperatureSensor *self = (IsTemperatureSensor *)object; /* Make compiler happy */ (void)self; G_OBJECT_CLASS(is_temperature_sensor_parent_class)->finalize(object); } IsSensor * is_temperature_sensor_new(const gchar *path) { return g_object_new(IS_TYPE_TEMPERATURE_SENSOR, "path", path, "value", IS_SENSOR_VALUE_UNSET, "digits", 0, "scale", IS_TEMPERATURE_SENSOR_SCALE_CELSIUS, "high-value", 100.0, NULL); } IsTemperatureSensorScale is_temperature_sensor_get_scale(IsTemperatureSensor *self) { g_return_val_if_fail(IS_IS_TEMPERATURE_SENSOR(self), 0); return self->priv->scale; } static gdouble celcius_to_fahrenheit(gdouble celcius) { return (celcius * 9.0 / 5.0) + 32.0; } static gdouble fahrenheit_to_celcius(gdouble fahrenheit) { return (fahrenheit - 32.0) * 5.0 / 9.0; } void is_temperature_sensor_set_scale(IsTemperatureSensor *self, IsTemperatureSensorScale scale) { IsTemperatureSensorPrivate *priv; g_return_if_fail(IS_IS_TEMPERATURE_SENSOR(self)); g_return_if_fail(scale == IS_TEMPERATURE_SENSOR_SCALE_CELSIUS || scale == IS_TEMPERATURE_SENSOR_SCALE_FAHRENHEIT); priv = self->priv; if (scale != priv->scale) { gdouble value = is_sensor_get_value(IS_SENSOR(self)); gdouble alarm_value = is_sensor_get_alarm_value(IS_SENSOR(self)); gdouble low_value = is_sensor_get_low_value(IS_SENSOR(self)); gdouble high_value = is_sensor_get_high_value(IS_SENSOR(self)); /* convert from current scale to new */ switch (priv->scale) { case IS_TEMPERATURE_SENSOR_SCALE_CELSIUS: value = celcius_to_fahrenheit(value); alarm_value = celcius_to_fahrenheit(alarm_value); low_value = celcius_to_fahrenheit(low_value); high_value = celcius_to_fahrenheit(high_value); break; case IS_TEMPERATURE_SENSOR_SCALE_FAHRENHEIT: value = fahrenheit_to_celcius(value); alarm_value = fahrenheit_to_celcius(alarm_value); low_value = fahrenheit_to_celcius(low_value); high_value = fahrenheit_to_celcius(high_value); break; case IS_TEMPERATURE_SENSOR_SCALE_INVALID: case NUM_IS_TEMPERATURE_SENSOR_SCALE: default: g_assert_not_reached(); break; } priv->scale = scale; is_sensor_set_units(IS_SENSOR(self), is_temperature_sensor_scale_to_string(priv->scale)); /* set all in one go */ g_object_set(self, "value", value, "alarm-value", alarm_value, "low-value", low_value, "high-value", high_value, NULL); } } void is_temperature_sensor_set_celsius_value(IsTemperatureSensor *self, gdouble value) { IsTemperatureSensorPrivate *priv; g_return_if_fail(IS_IS_TEMPERATURE_SENSOR(self)); priv = self->priv; switch (priv->scale) { case IS_TEMPERATURE_SENSOR_SCALE_CELSIUS: break; case IS_TEMPERATURE_SENSOR_SCALE_FAHRENHEIT: value = celcius_to_fahrenheit(value); break; case IS_TEMPERATURE_SENSOR_SCALE_INVALID: case NUM_IS_TEMPERATURE_SENSOR_SCALE: default: g_assert_not_reached(); } is_sensor_set_value(IS_SENSOR(self), value); } indicator-sensors-1.1/indicator-sensors/is-temperature-sensor.h000066400000000000000000000055401356741033200251250ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #ifndef __IS_TEMPERATURE_SENSOR_H__ #define __IS_TEMPERATURE_SENSOR_H__ #include "is-sensor.h" G_BEGIN_DECLS #define IS_TYPE_TEMPERATURE_SENSOR \ (is_temperature_sensor_get_type()) #define IS_TEMPERATURE_SENSOR(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ IS_TYPE_TEMPERATURE_SENSOR, \ IsTemperatureSensor)) #define IS_TEMPERATURE_SENSOR_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ IS_TYPE_TEMPERATURE_SENSOR, \ IsTemperatureSensorClass)) #define IS_IS_TEMPERATURE_SENSOR(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ IS_TYPE_TEMPERATURE_SENSOR)) #define IS_IS_TEMPERATURE_SENSOR_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), \ IS_TYPE_TEMPERATURE_SENSOR)) #define IS_TEMPERATURE_SENSOR_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ IS_TYPE_TEMPERATURE_SENSOR, \ IsTemperatureSensorClass)) typedef struct _IsTemperatureSensor IsTemperatureSensor; typedef struct _IsTemperatureSensorClass IsTemperatureSensorClass; typedef struct _IsTemperatureSensorPrivate IsTemperatureSensorPrivate; struct _IsTemperatureSensorClass { IsSensorClass parent_class; }; struct _IsTemperatureSensor { IsSensor parent; IsTemperatureSensorPrivate *priv; }; typedef enum { IS_TEMPERATURE_SENSOR_SCALE_INVALID, IS_TEMPERATURE_SENSOR_SCALE_CELSIUS, IS_TEMPERATURE_SENSOR_SCALE_FAHRENHEIT, NUM_IS_TEMPERATURE_SENSOR_SCALE, } IsTemperatureSensorScale; GType is_temperature_sensor_get_type(void) G_GNUC_CONST; IsSensor *is_temperature_sensor_new(const gchar *path); void is_temperature_sensor_set_scale(IsTemperatureSensor *sensor, IsTemperatureSensorScale scale); IsTemperatureSensorScale is_temperature_sensor_get_scale(IsTemperatureSensor *sensor); void is_temperature_sensor_set_celsius_value(IsTemperatureSensor *sensor, gdouble value); G_END_DECLS #endif /* __IS_TEMPERATURE_SENSOR_H__ */ indicator-sensors-1.1/indicator-sensors/marshallers.list000066400000000000000000000000201356741033200236750ustar00rootroot00000000000000VOID:OBJECT,INT indicator-sensors-1.1/plugins/000077500000000000000000000000001356741033200165065ustar00rootroot00000000000000indicator-sensors-1.1/plugins/Makefile.am000066400000000000000000000003321356741033200205400ustar00rootroot00000000000000SUBDIRS = aticonfig dbus dynamic max if LIBSENSORS SUBDIRS += libsensors endif if NVIDIA SUBDIRS += nvidia endif if UDISKS SUBDIRS += udisks endif if UDISKS2 SUBDIRS += udisks2 endif if FAKE SUBDIRS += fake endif indicator-sensors-1.1/plugins/aticonfig/000077500000000000000000000000001356741033200204515ustar00rootroot00000000000000indicator-sensors-1.1/plugins/aticonfig/Makefile.am000066400000000000000000000010731356741033200225060ustar00rootroot00000000000000plugindir = $(libdir)/$(PACKAGE)/plugins/aticonfig AM_CPPFLAGS = \ -I$(top_srcdir) \ $(GLIB_CFLAGS) \ $(GTK_CFLAGS) \ $(APPINDICATOR_CFLAGS) \ $(LIBPEAS_CFLAGS) \ $(ATICONFIG_CFLAGS) \ $(DEBUG_CFLAGS) plugin_LTLIBRARIES = libaticonfig.la libaticonfig_la_SOURCES = \ is-aticonfig-plugin.h \ is-aticonfig-plugin.c libaticonfig_la_LDFLAGS = $(PLUGIN_LIBTOOL_FLAGS) libaticonfig_la_LIBADD = \ $(GLIB_LIBS) \ $(GTK_LIBS) \ $(APPINDICATOR_LIBS) \ $(LIBPEAS_LIBS) \ $(ATICONFIG_LIBS) plugin_DATA = aticonfig.plugin EXTRA_DIST = $(plugin_DATA) indicator-sensors-1.1/plugins/aticonfig/aticonfig.plugin000066400000000000000000000004571356741033200236420ustar00rootroot00000000000000[Plugin] Module=libaticonfig IAge=2 Name=ATIConfig Description=Provides sensors from ATI GPUs via aticonfig Authors=Alex Murray Copyright=Copyright © 2011-2019 Alex Murray Website=http://github.com/alexmurray/indicator-sensors Help=http://github.com/alexmurray/indicator-sensorsindicator-sensors-1.1/plugins/aticonfig/is-aticonfig-plugin.c000066400000000000000000000323601356741033200244710ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #ifdef HAVE_CONFIG_H #include #endif #include "is-aticonfig-plugin.h" #include #include #include #include #include #include #include #include #include #define ATICONFIG_PATH_PREFIX "aticonfig" static void peas_activatable_iface_init(PeasActivatableInterface *iface); G_DEFINE_DYNAMIC_TYPE_EXTENDED(IsATIConfigPlugin, is_aticonfig_plugin, PEAS_TYPE_EXTENSION_BASE, 0, G_IMPLEMENT_INTERFACE_DYNAMIC(PEAS_TYPE_ACTIVATABLE, peas_activatable_iface_init)); enum { PROP_OBJECT = 1, }; struct _IsATIConfigPluginPrivate { IsApplication *application; GRegex *temperature_regex; GRegex *fanspeed_regex; }; static void is_aticonfig_plugin_finalize(GObject *object); static void is_aticonfig_plugin_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { IsATIConfigPlugin *plugin = IS_ATICONFIG_PLUGIN(object); switch (prop_id) { case PROP_OBJECT: plugin->priv->application = IS_APPLICATION(g_value_dup_object(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void is_aticonfig_plugin_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { IsATIConfigPlugin *plugin = IS_ATICONFIG_PLUGIN(object); switch (prop_id) { case PROP_OBJECT: g_value_set_object(value, plugin->priv->application); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void is_aticonfig_plugin_init(IsATIConfigPlugin *self) { GError *error = NULL; IsATIConfigPluginPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE(self, IS_TYPE_ATICONFIG_PLUGIN, IsATIConfigPluginPrivate); self->priv = priv; priv->temperature_regex = g_regex_new(".*Sensor 0: Temperature - ([0-9|\\.]+) C", 0, 0, &error); if (!priv->temperature_regex) { is_warning("aticonfig", "Error compiling regex to read sensor temperatures: %s", error->message); g_clear_error(&error); } priv->fanspeed_regex = g_regex_new(".*Fan Speed: ([0-9]+)%", 0, 0, &error); if (!priv->fanspeed_regex) { is_warning("aticonfig", "Error compiling regex to read sensor fanspeeds: %s", error->message); g_clear_error(&error); } } static void is_aticonfig_plugin_finalize(GObject *object) { IsATIConfigPlugin *plugin = IS_ATICONFIG_PLUGIN(object); IsATIConfigPluginPrivate *priv = plugin->priv; if (priv->temperature_regex) { g_regex_unref(priv->temperature_regex); } if (priv->fanspeed_regex) { g_regex_unref(priv->fanspeed_regex); } G_OBJECT_CLASS(is_aticonfig_plugin_parent_class)->finalize(object); } #define ATICONFIG_GPU_PREFIX ATICONFIG_PATH_PREFIX "/GPU" static gboolean aticonfig_get_temperature(IsATIConfigPlugin *self, int gpu, gdouble *result, GError **error) { gchar *command = NULL; gchar *output = NULL; GMatchInfo *match = NULL; gchar *temperature = NULL; gboolean ret; command = g_strdup_printf("aticonfig --od-gettemperature --adapter=%d", gpu); ret = g_spawn_command_line_sync(command, &output, NULL, NULL, error); if (!ret) { is_warning("aticonfig", "Error calling aticonfig to get temperature for GPU %d: %s", gpu, (*error)->message); goto out; } ret = g_regex_match(self->priv->temperature_regex, output, 0, &match); if (!ret) { *error = g_error_new(g_quark_from_string("aticonfig-plugin-error-quark"), 0, /* first placeholder is sensor name */ _("Error reading temperature value for GPU %d"), gpu); goto out; } temperature = g_match_info_fetch(match, 1); *result = g_strtod(temperature, NULL); g_free(temperature); out: g_match_info_free(match); g_free(output); g_free(command); return ret; } static gboolean aticonfig_get_fanspeed(IsATIConfigPlugin *self, int gpu, gdouble *result, GError **error) { gchar *command = NULL; gchar *output = NULL; GMatchInfo *match = NULL; gchar *fanspeed = NULL; gboolean ret; command = g_strdup_printf("aticonfig --pplib-cmd \"get fanspeed %d\"", gpu); ret = g_spawn_command_line_sync(command, &output, NULL, NULL, error); if (!ret) { is_warning("aticonfig", "Error calling aticonfig to get fanspeed for GPU %d: %s", gpu, (*error)->message); goto out; } ret = g_regex_match(self->priv->fanspeed_regex, output, 0, &match); if (!ret) { *error = g_error_new(g_quark_from_string("aticonfig-plugin-error-quark"), 0, /* first placeholder is sensor name */ _("Error reading fanspeed value for GPU %d"), gpu); goto out; } fanspeed = g_match_info_fetch(match, 1); *result = g_strtod(fanspeed, NULL); g_free(fanspeed); out: g_match_info_free(match); g_free(output); g_free(command); return ret; } static void update_sensor_value(IsSensor *sensor, IsATIConfigPlugin *self) { const gchar *path; gint gpu; gdouble value = 0.0; gboolean ret = FALSE; GError *error = NULL; path = is_sensor_get_path(sensor); gpu = g_ascii_strtoll(path + strlen(ATICONFIG_GPU_PREFIX), NULL, 10); if (IS_IS_TEMPERATURE_SENSOR(sensor)) { ret = aticonfig_get_temperature(self, gpu, &value, &error); if (ret) { is_temperature_sensor_set_celsius_value(IS_TEMPERATURE_SENSOR(sensor), value); } } else { /* is a fan sensor */ ret = aticonfig_get_fanspeed(self, gpu, &value, &error); if (ret) { is_sensor_set_value(sensor, value); } } /* set any error which may have occurred */ if (error) { is_sensor_set_error(sensor, error->message); g_error_free(error); } else { is_sensor_set_error(sensor, NULL); } } static void is_aticonfig_plugin_activate(PeasActivatable *activatable) { IsATIConfigPlugin *self = IS_ATICONFIG_PLUGIN(activatable); IsManager *manager; gchar *output = NULL; GError *error = NULL; GRegex *regex = NULL; GMatchInfo *match = NULL; gboolean ret; manager = is_application_get_manager(self->priv->application); is_debug("aticonfig", "Checking for hybrid system with integrated GPU active"); ret = g_spawn_command_line_sync("aticonfig --pxl", &output, NULL, NULL, &error); if (!ret) { is_warning("aticonfig", "Error calling aticonfig to detect if running on a hybrid system with integrated GPU active: %s", error->message); g_error_free(error); goto out; } is_debug("aticonfig", "Trying to match output to see if integrated GPU is active: '%s'", output); regex = g_regex_new("^.*integrated gpu is active.*$", G_REGEX_CASELESS | G_REGEX_MULTILINE, 0, &error); if (!regex) { is_warning("aticonfig", "Error compiling regex to detect if running on a hybrid system with integrated GPU active: %s", error->message); g_error_free(error); goto out; } ret = g_regex_match(regex, output, 0, NULL); if (ret) { is_warning("aticonfig", "Running on a hybrid system with integrated active - bailing so we don't hit bug LP #1016896"); goto out; } is_debug("aticonfig", "This does not appear to be a hybrid system with integrated GPU active - we're good to go!"); /* search for sensors and add them to manager */ is_debug("aticonfig", "searching for sensors"); /* call aticonfig with --list-adapters to get available adapters, * then test if each can do temperature and fan speed - if so add * appropriate sensors */ ret = g_spawn_command_line_sync("aticonfig --list-adapters", &output, NULL, NULL, &error); if (!ret) { is_warning("aticonfig", "Error calling aticonfig to detect available sensors: %s", error->message); g_error_free(error); goto out; } regex = g_regex_new("^.*([0-9]+)\\. ([0-9][0-9]:[0-9][0-9]\\.[0-9])\\s*(.*?)\\s*$", G_REGEX_MULTILINE, 0, &error); if (!regex) { is_warning("aticonfig", "Error compiling regex to detect listed sensors: %s", error->message); g_error_free(error); goto out; } ret = g_regex_match(regex, output, 0, &match); if (!ret) { is_warning("aticonfig", "No sensors found in aticonfig output: %s", output); goto out; } while (g_match_info_matches(match)) { gint i; gchar *idx, *pci, *name; gdouble value; gchar *path; IsSensor *sensor; idx = g_match_info_fetch(match, 1); pci = g_match_info_fetch(match, 2); name = g_match_info_fetch(match, 3); i = g_ascii_strtoull(idx, NULL, 10); /* we have an adapter - see if we can get its temperature and fanspeed */ ret = aticonfig_get_temperature(self, i, &value, &error); if (!ret) { is_warning("aticonfig", "Error getting temperature for adapter %d: %s", i, error->message); g_clear_error(&error); } else { path = g_strdup_printf("%s%d%s", ATICONFIG_GPU_PREFIX, i, _("Temperature")); sensor = is_temperature_sensor_new(path); is_sensor_set_label(sensor, name); is_sensor_set_icon(sensor, IS_STOCK_GPU); g_signal_connect(sensor, "update-value", G_CALLBACK(update_sensor_value), self); is_manager_add_sensor(manager, sensor); g_object_unref(sensor); g_free(path); } ret = aticonfig_get_fanspeed(self, i, &value, &error); if (!ret) { is_warning("aticonfig", "Error getting fanpeed for adapter %d: %s", i, error->message); g_clear_error(&error); } else { path = g_strdup_printf("%s%d%s", ATICONFIG_GPU_PREFIX, i, _("Fan")); sensor = is_sensor_new(path); is_sensor_set_label(sensor, name); /* fan sensors are given as a percentage from 0 to 100 */ is_sensor_set_units(sensor, "%"); is_sensor_set_low_value(sensor, 0.0); is_sensor_set_high_value(sensor, 100.0); is_sensor_set_digits(sensor, 0); is_sensor_set_icon(sensor, IS_STOCK_FAN); g_signal_connect(sensor, "update-value", G_CALLBACK(update_sensor_value), self); is_manager_add_sensor(manager, sensor); g_object_unref(sensor); g_free(path); } g_free(idx); g_free(pci); g_free(name); g_match_info_next(match, &error); } out: g_match_info_free(match); if (regex) { g_regex_unref(regex); } g_free(output); return; } static void is_aticonfig_plugin_deactivate(PeasActivatable *activatable) { IsATIConfigPlugin *plugin = IS_ATICONFIG_PLUGIN(activatable); IsATIConfigPluginPrivate *priv = plugin->priv; IsManager *manager; manager = is_application_get_manager(priv->application); is_manager_remove_paths_with_prefix(manager, ATICONFIG_PATH_PREFIX); } static void is_aticonfig_plugin_class_init(IsATIConfigPluginClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS(klass); g_type_class_add_private(klass, sizeof(IsATIConfigPluginPrivate)); gobject_class->get_property = is_aticonfig_plugin_get_property; gobject_class->set_property = is_aticonfig_plugin_set_property; gobject_class->finalize = is_aticonfig_plugin_finalize; g_object_class_override_property(gobject_class, PROP_OBJECT, "object"); } static void peas_activatable_iface_init(PeasActivatableInterface *iface) { iface->activate = is_aticonfig_plugin_activate; iface->deactivate = is_aticonfig_plugin_deactivate; } static void is_aticonfig_plugin_class_finalize(IsATIConfigPluginClass *klass) { /* nothing to do */ } G_MODULE_EXPORT void peas_register_types(PeasObjectModule *module) { is_aticonfig_plugin_register_type(G_TYPE_MODULE(module)); peas_object_module_register_extension_type(module, PEAS_TYPE_ACTIVATABLE, IS_TYPE_ATICONFIG_PLUGIN); } indicator-sensors-1.1/plugins/aticonfig/is-aticonfig-plugin.h000066400000000000000000000044471356741033200245030ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #ifndef __IS_ATICONFIG_PLUGIN_H__ #define __IS_ATICONFIG_PLUGIN_H__ #include G_BEGIN_DECLS #define IS_TYPE_ATICONFIG_PLUGIN \ (is_aticonfig_plugin_get_type()) #define IS_ATICONFIG_PLUGIN(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ IS_TYPE_ATICONFIG_PLUGIN, \ IsATIConfigPlugin)) #define IS_ATICONFIG_PLUGIN_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ IS_TYPE_ATICONFIG_PLUGIN, \ IsATIConfigPluginClass)) #define IS_IS_ATICONFIG_PLUGIN(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ IS_TYPE_ATICONFIG_PLUGIN)) #define IS_IS_ATICONFIG_PLUGIN_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), \ IS_TYPE_ATICONFIG_PLUGIN)) #define IS_ATICONFIG_PLUGIN_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ IS_TYPE_ATICONFIG_PLUGIN, \ IsATIConfigPluginClass)) typedef struct _IsATIConfigPlugin IsATIConfigPlugin; typedef struct _IsATIConfigPluginClass IsATIConfigPluginClass; typedef struct _IsATIConfigPluginPrivate IsATIConfigPluginPrivate; struct _IsATIConfigPluginClass { PeasExtensionBaseClass parent_class; }; struct _IsATIConfigPlugin { PeasExtensionBase parent; IsATIConfigPluginPrivate *priv; }; GType is_aticonfig_plugin_get_type(void) G_GNUC_CONST; G_MODULE_EXPORT void peas_register_types(PeasObjectModule *module); G_END_DECLS #endif /* __IS_ATICONFIG_PLUGIN_H__ */ indicator-sensors-1.1/plugins/dbus/000077500000000000000000000000001356741033200174435ustar00rootroot00000000000000indicator-sensors-1.1/plugins/dbus/Makefile.am000066400000000000000000000040101356741033200214720ustar00rootroot00000000000000plugindir = $(libdir)/$(PACKAGE)/plugins/dbus AM_CPPFLAGS = \ -I$(top_srcdir) \ $(GLIB_CFLAGS) \ $(GTK_CFLAGS) \ $(APPINDICATOR_CFLAGS) \ $(LIBPEAS_CFLAGS) \ $(GIO_CFLAGS) \ $(DEBUG_CFLAGS) plugin_LTLIBRARIES = libdbus.la libdbus_la_SOURCES = \ is-active-sensor-generated.h \ is-active-sensor-generated.c \ is-org-gnome-shell-search-provider-generated.c \ is-org-gnome-shell-search-provider-generated.h \ is-dbus-plugin.h \ is-dbus-plugin.c libdbus_la_LDFLAGS = $(PLUGIN_LIBTOOL_FLAGS) libdbus_la_LIBADD = \ $(GLIB_LIBS) \ $(GTK_LIBS) \ $(APPINDICATOR_LIBS) \ $(LIBPEAS_LIBS) \ $(GIO_LIBS) plugin_DATA = dbus.plugin dbus_search_provider_built_sources = \ is-org-gnome-shell-search-provider-generated.c \ is-org-gnome-shell-search-provider-generated.h \ $(NULL) $(dbus_search_provider_built_sources) : Makefile.am shell-search-provider-dbus-interfaces.xml $(AM_V_GEN) gdbus-codegen \ --interface-prefix com.github.alexmurray.IndicatorSensors. \ --c-namespace Is \ --generate-c-code is-org-gnome-shell-search-provider-generated \ shell-search-provider-dbus-interfaces.xml \ $(NULL) active_sensor_built_sources = \ is-active-sensor-generated.h \ is-active-sensor-generated.c \ is-active-sensor-generated-com.github.alexmurray.IndicatorSensors.ActiveSensor.xml $(active_sensor_built_sources): Makefile.am is-active-sensor.xml $(AM_V_GEN) gdbus-codegen \ --interface-prefix com.github.alexmurray.IndicatorSensors. \ --c-namespace Is \ --c-generate-object-manager \ --generate-c-code is-active-sensor-generated \ --generate-docbook is-active-sensor-generated \ is-active-sensor.xml \ $(NULL) searchproviderdir = $(datadir)/gnome-shell/search-providers searchprovider_DATA = is-search-provider.ini BUILT_SOURCES = $(dbus_search_provider_built_sources) \ $(active_sensor_built_sources) EXTRA_DIST = $(plugin_DATA) \ shell-search-provider-dbus-interfaces.xml \ is-active-sensor.xml \ $(NULL) CLEANFILES = $(dbus_search_provider_built_sources) \ $(active_sensor_built_sources) indicator-sensors-1.1/plugins/dbus/dbus.plugin000066400000000000000000000004311356741033200216160ustar00rootroot00000000000000[Plugin] Module=libdbus IAge=2 Name=DBus Description=Provides sensor information over DBus Authors=Alex Murray Copyright=Copyright © 2012 Alex Murray Website=http://github.com/alexmurray/indicator-sensors Help=http://github.com/alexmurray/indicator-sensorsindicator-sensors-1.1/plugins/dbus/is-active-sensor.xml000066400000000000000000000025531356741033200233650ustar00rootroot00000000000000 indicator-sensors-1.1/plugins/dbus/is-dbus-plugin.c000066400000000000000000000511551356741033200224600ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #ifdef HAVE_CONFIG_H #include #endif #include "is-dbus-plugin.h" #include "is-org-gnome-shell-search-provider-generated.h" #include "is-active-sensor-generated.h" #include #include #include #include static void peas_activatable_iface_init(PeasActivatableInterface *iface); G_DEFINE_DYNAMIC_TYPE_EXTENDED(IsDBusPlugin, is_dbus_plugin, PEAS_TYPE_EXTENSION_BASE, 0, G_IMPLEMENT_INTERFACE_DYNAMIC(PEAS_TYPE_ACTIVATABLE, peas_activatable_iface_init)); enum { PROP_OBJECT = 1, }; struct _IsDBusPluginPrivate { IsApplication *application; guint id; GDBusObjectManagerServer *sensors_object_manager; GDBusObjectManagerServer *search_object_manager; IsOrgGnomeShellSearchProvider2 *skeleton; }; static void is_dbus_plugin_finalize(GObject *object); static void is_dbus_plugin_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { IsDBusPlugin *plugin = IS_DBUS_PLUGIN(object); switch (prop_id) { case PROP_OBJECT: plugin->priv->application = IS_APPLICATION(g_value_dup_object(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void is_dbus_plugin_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { IsDBusPlugin *plugin = IS_DBUS_PLUGIN(object); switch (prop_id) { case PROP_OBJECT: g_value_set_object(value, plugin->priv->application); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void is_dbus_plugin_init(IsDBusPlugin *self) { IsDBusPluginPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE(self, IS_TYPE_DBUS_PLUGIN, IsDBusPluginPrivate); self->priv = priv; } static void is_dbus_plugin_finalize(GObject *object) { IsDBusPlugin *self = (IsDBusPlugin *)object; IsDBusPluginPrivate *priv = self->priv; if (priv->application) { g_object_unref(priv->application); priv->application = NULL; } G_OBJECT_CLASS(is_dbus_plugin_parent_class)->finalize(object); } static void sensor_property_changed(IsSensor *sensor, GParamSpec *pspec, gpointer data) { const gchar *name = g_param_spec_get_name(pspec); IsActiveSensor *active_sensor = IS_ACTIVE_SENSOR(data); if (!g_strcmp0(name, "value")) { is_active_sensor_set_value(active_sensor, is_sensor_get_value(sensor)); } else if (!g_strcmp0(name, "label")) { is_active_sensor_set_label(active_sensor, is_sensor_get_label(sensor)); } else if (!g_strcmp0(name, "units")) { is_active_sensor_set_units(active_sensor, is_sensor_get_units(sensor)); } else if (!g_strcmp0(name, "icon-path")) { is_active_sensor_set_icon_path(active_sensor, is_sensor_get_icon_path(sensor)); } else if (!g_strcmp0(name, "digits")) { is_active_sensor_set_digits(active_sensor, is_sensor_get_digits(sensor)); } else if (!g_strcmp0(name, "error")) { is_active_sensor_set_error(active_sensor, is_sensor_get_error(sensor)); } } static gchar * dbus_sensor_object_path(IsSensor *sensor) { gchar *path; /* Create a new D-Bus object at the path * /com/github/alexmurray/IndicatorSensors/ActiveSensors/path where path * is path of each sensor */ path = g_strdup_printf("/com/github/alexmurray/IndicatorSensors/ActiveSensors/%s", is_sensor_get_path(sensor)); /* ensure valid path */ path = g_strcanon(path, "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz" "1234567890_/", '_'); return path; } static void sensor_position_changed(IsManager *manager, IsSensor *sensor, gint i, IsDBusPlugin *self) { IsDBusPluginPrivate *priv; IsObjectSkeleton *object; IsActiveSensor *active_sensor; gchar *path; priv = self->priv; path = dbus_sensor_object_path(sensor); object = IS_OBJECT_SKELETON(g_dbus_object_manager_get_object(G_DBUS_OBJECT_MANAGER(priv->sensors_object_manager), path)); g_object_get(object, "active-sensor", &active_sensor, NULL); is_active_sensor_set_index(active_sensor, i); g_object_unref(object); g_free(path); } static void sensor_enabled(IsManager *manager, IsSensor *sensor, gint i, IsDBusPlugin *self) { IsDBusPluginPrivate *priv; gchar *path; IsActiveSensor *active_sensor; IsObjectSkeleton *object; priv = self->priv; path = dbus_sensor_object_path(sensor); object = is_object_skeleton_new(path); is_debug("dbus-plugin", "Creating an ActiveSensor at path %s\n", path); g_free(path); /* Make the newly created object export the interface * com.github.alexmurray.indicator-sensors.ActiveSensor * (note that @object takes its own reference to * @active_sensor). */ active_sensor = is_active_sensor_skeleton_new(); is_active_sensor_set_path(active_sensor, is_sensor_get_path(sensor)); is_active_sensor_set_label(active_sensor, is_sensor_get_label(sensor)); is_active_sensor_set_units(active_sensor, is_sensor_get_units(sensor)); is_active_sensor_set_value(active_sensor, is_sensor_get_value(sensor)); is_active_sensor_set_digits(active_sensor, is_sensor_get_digits(sensor)); is_active_sensor_set_index(active_sensor, i); is_active_sensor_set_icon_path(active_sensor, is_sensor_get_icon_path(sensor)); g_signal_connect(sensor, "notify", G_CALLBACK(sensor_property_changed), active_sensor); is_object_skeleton_set_active_sensor(object, active_sensor); g_object_unref(active_sensor); /* Export the object (@manager takes its own reference to * @object) */ g_dbus_object_manager_server_export(priv->sensors_object_manager, G_DBUS_OBJECT_SKELETON(object)); g_object_unref(object); } static void sensor_disabled(IsManager *manager, IsSensor *sensor, IsDBusPlugin *self) { IsDBusPluginPrivate *priv; IsObjectSkeleton *object; IsActiveSensor *active_sensor; gchar *path; priv = self->priv; path = dbus_sensor_object_path(sensor); object = IS_OBJECT_SKELETON(g_dbus_object_manager_get_object(G_DBUS_OBJECT_MANAGER(priv->sensors_object_manager), path)); g_object_get(object, "active-sensor", &active_sensor, NULL); g_object_unref(object); g_signal_handlers_disconnect_by_func(sensor, sensor_property_changed, active_sensor); g_dbus_object_manager_server_unexport(priv->sensors_object_manager, path); g_free(path); } static GDBusNodeInfo *introspection_data = NULL; /* Introspection data for IndicatorSensors */ static const gchar introspection_xml[] = "" " " " " " " " " " " " " " " " " ""; static void handle_method_call(GDBusConnection *connection, const gchar *sender, const gchar *object_path, const gchar *interface_name, const gchar *method_name, GVariant *parameters, GDBusMethodInvocation *invocation, gpointer user_data) { IsDBusPlugin *self = IS_DBUS_PLUGIN(user_data); IsDBusPluginPrivate *priv = self->priv; if (g_strcmp0(method_name, "ShowPreferences") == 0) { is_application_show_preferences(priv->application); } else if (g_strcmp0(method_name, "ShowIndicator") == 0) { is_application_set_show_indicator(priv->application, TRUE); } else if (g_strcmp0(method_name, "HideIndicator") == 0) { is_application_set_show_indicator(priv->application, FALSE); } g_dbus_method_invocation_return_value(invocation, NULL); } /* for now */ static const GDBusInterfaceVTable interface_vtable = { handle_method_call, NULL, NULL, }; static GVariant * get_result_set(IsDBusPlugin *self, gchar **terms) { GVariantBuilder builder; GSList *sensors, *_list; IsManager *manager; g_variant_builder_init(&builder, G_VARIANT_TYPE ("as")); manager = is_application_get_manager(self->priv->application); sensors = is_manager_get_enabled_sensors_list(manager); for (_list = sensors; _list != NULL; _list = _list->next) { int i; IsSensor *sensor = IS_SENSOR(_list->data); const gchar *label = is_sensor_get_label(sensor); for (i = 0; terms[i] != NULL; i++) { if (g_str_match_string(terms[i], label, TRUE) || g_str_match_string(terms[i], "sensors", TRUE)) { is_debug("dbus", "matched term %s against label %s", terms[i], label); g_variant_builder_add(&builder, "s", is_sensor_get_path(sensor)); } } g_object_unref(sensor); } g_slist_free(sensors); return g_variant_new("(as)", &builder); } static GVariant * get_result_metas (IsDBusPlugin *self, const gchar **results) { IsManager *manager; gint idx; GVariantBuilder meta, metas; g_variant_builder_init(&metas, G_VARIANT_TYPE ("aa{sv}")); manager = is_application_get_manager(self->priv->application); for (idx = 0; results[idx] != NULL; idx++) { IsSensor *sensor = is_manager_get_sensor(manager, results[idx]); GIcon *gicon = g_themed_icon_new(is_sensor_get_icon(sensor)); gchar *name; gchar *gicon_str; g_variant_builder_init(&meta, G_VARIANT_TYPE ("a{sv}")); g_variant_builder_add(&meta, "{sv}", "id", g_variant_new_string(results[idx])); name = g_strdup_printf("%s %2.*f%s", is_sensor_get_label(sensor), is_sensor_get_digits(sensor), is_sensor_get_value(sensor), is_sensor_get_units(sensor)); g_variant_builder_add(&meta, "{sv}", "name", g_variant_new_string(name)); g_free(name); gicon_str = g_icon_to_string (gicon); g_variant_builder_add (&meta, "{sv}", "gicon", g_variant_new_string (gicon_str)); g_free(gicon_str); g_variant_builder_add_value(&metas, g_variant_builder_end (&meta)); } return g_variant_new("(aa{sv})", &metas); } static void handle_get_initial_result_set (IsOrgGnomeShellSearchProvider2 *skeleton, GDBusMethodInvocation *invocation, gchar **terms, gpointer user_data) { IsDBusPlugin *self = IS_DBUS_PLUGIN(user_data); gchar *joined_terms = g_strjoinv (" ", terms); is_debug("dbus", "GetInitialResultSet() called with %s", joined_terms); g_free (joined_terms); g_dbus_method_invocation_return_value (invocation, get_result_set(self, terms)); } static void handle_get_subsearch_result_set (IsOrgGnomeShellSearchProvider2 *skeleton, GDBusMethodInvocation *invocation, gchar **previous_results, gchar **terms, gpointer user_data) { IsDBusPlugin *self = IS_DBUS_PLUGIN(user_data); gchar *joined_terms = g_strjoinv (" ", terms); is_debug("dbus", "GetSubSearchResultSet() called with %s", joined_terms); g_free (joined_terms); g_dbus_method_invocation_return_value(invocation, get_result_set(self, terms)); } static void handle_get_result_metas (IsOrgGnomeShellSearchProvider2 *skeleton, GDBusMethodInvocation *invocation, gchar **results, gpointer user_data) { IsDBusPlugin *self = IS_DBUS_PLUGIN(user_data); gint idx; is_debug("dbus", "GetResultMetas() called for results"); for (idx = 0; results[idx] != NULL; idx++) is_debug("dbus", " %s\n", results[idx]); is_debug("dbus", "\n"); g_dbus_method_invocation_return_value (invocation, get_result_metas (self, (const gchar **)results)); } static void handle_launch_search (IsOrgGnomeShellSearchProvider2 *skeleton, GDBusMethodInvocation *invocation, gchar **terms, guint32 timestamp, gpointer user_data) { gchar *joined_terms = g_strjoinv (" ", terms); is_debug("dbus", "LaunchSearch() called with %s\n", joined_terms); g_free (joined_terms); g_dbus_method_invocation_return_value (invocation, NULL); } static void handle_activate_result (IsOrgGnomeShellSearchProvider2 *skeleton, GDBusMethodInvocation *invocation, gchar *result, gchar **terms, guint32 timestamp, gpointer user_data) { gchar *joined_terms = g_strjoinv (" ", terms); is_debug("dbus", "ActivateResult() called for %s and result %s\n", joined_terms, result); g_free (joined_terms); g_dbus_method_invocation_return_value (invocation, NULL); } static void on_bus_acquired(GDBusConnection *connection, const gchar *name, gpointer user_data) { IsDBusPlugin *self; IsDBusPluginPrivate *priv; IsManager *manager; guint id; GError *error = NULL; GSList *sensors, *_list; gint i = 0; self = IS_DBUS_PLUGIN(user_data); priv = self->priv; is_debug("dbus-plugin", "Acquired a message bus connection\n"); priv->search_object_manager = g_dbus_object_manager_server_new ("/com/github/alexmurray/IndicatorSensors/SearchProvider"); priv->skeleton = is_org_gnome_shell_search_provider2_skeleton_new (); g_signal_connect (priv->skeleton, "handle-get-initial-result-set", G_CALLBACK (handle_get_initial_result_set), self); g_signal_connect (priv->skeleton, "handle-get-subsearch-result-set", G_CALLBACK (handle_get_subsearch_result_set), self); g_signal_connect (priv->skeleton, "handle-get-result-metas", G_CALLBACK (handle_get_result_metas), self); g_signal_connect (priv->skeleton, "handle-activate-result", G_CALLBACK (handle_activate_result), self); g_signal_connect (priv->skeleton, "handle-launch-search", G_CALLBACK (handle_launch_search), self); g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (priv->skeleton), connection, "/com/github/alexmurray/IndicatorSensors/SearchProvider", NULL); g_dbus_object_manager_server_set_connection (priv->search_object_manager, connection); id = g_dbus_connection_register_object(connection, "/com/github/alexmurray/IndicatorSensors", introspection_data->interfaces[0], &interface_vtable, self, NULL, &error); if (!id) { is_warning("dbus-plugin", "Unabled to register IndicatorSensors object on dbus: %s", error->message); g_error_free(error); } /* Create a new org.freedesktop.DBus.ObjectManager rooted at * /indicator-sensors/ActiveSensors */ priv->sensors_object_manager = g_dbus_object_manager_server_new("/com/github/alexmurray/IndicatorSensors/ActiveSensors"); manager = is_application_get_manager(priv->application); /* set up a skeleton object and sensor for each active sensor */ sensors = is_manager_get_enabled_sensors_list(manager); for (_list = sensors; _list != NULL; _list = _list->next) { IsSensor *sensor; sensor = IS_SENSOR(_list->data); sensor_enabled(manager, sensor, i++, self); } g_signal_connect(manager, "sensor-enabled", G_CALLBACK(sensor_enabled), self); g_signal_connect(manager, "sensor-disabled", G_CALLBACK(sensor_disabled), self); g_signal_connect(manager, "sensor-position-changed", G_CALLBACK(sensor_position_changed), self); /* Export all objects */ g_dbus_object_manager_server_set_connection(priv->sensors_object_manager, connection); } static void on_name_acquired(GDBusConnection *connection, const gchar *name, gpointer user_data) { is_debug("dbus-plugin", "Acquired the name %s\n", name); } static void on_name_lost(GDBusConnection *connection, const gchar *name, gpointer user_data) { is_debug("dbus-plugin", "Lost the name %s\n", name); } static void is_dbus_plugin_activate(PeasActivatable *activatable) { IsDBusPlugin *self = IS_DBUS_PLUGIN(activatable); IsDBusPluginPrivate *priv = self->priv; /* get our dbus name */ priv->id = g_bus_own_name(G_BUS_TYPE_SESSION, "com.github.alexmurray.IndicatorSensors", G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT | G_BUS_NAME_OWNER_FLAGS_REPLACE, on_bus_acquired, on_name_acquired, on_name_lost, self, NULL); /* connect to sensors enabled / disabled signals and export them over * dbus - also iterate through any existing enabled sensors and export * those as well */ /* setup dbus object manager */ } static void is_dbus_plugin_deactivate(PeasActivatable *activatable) { IsDBusPlugin *self = IS_DBUS_PLUGIN(activatable); IsDBusPluginPrivate *priv = self->priv; /* teardown dbus object manager */ /* disconnect from signals */ g_bus_unown_name(priv->id); } static void is_dbus_plugin_class_init(IsDBusPluginClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS(klass); g_type_class_add_private(klass, sizeof(IsDBusPluginPrivate)); gobject_class->get_property = is_dbus_plugin_get_property; gobject_class->set_property = is_dbus_plugin_set_property; gobject_class->finalize = is_dbus_plugin_finalize; g_object_class_override_property(gobject_class, PROP_OBJECT, "object"); /* do interface introspection data */ introspection_data = g_dbus_node_info_new_for_xml(introspection_xml, NULL); g_assert(introspection_data != NULL); } static void peas_activatable_iface_init(PeasActivatableInterface *iface) { iface->activate = is_dbus_plugin_activate; iface->deactivate = is_dbus_plugin_deactivate; } static void is_dbus_plugin_class_finalize(IsDBusPluginClass *klass) { /* nothing to do */ } G_MODULE_EXPORT void peas_register_types(PeasObjectModule *module) { is_dbus_plugin_register_type(G_TYPE_MODULE(module)); peas_object_module_register_extension_type(module, PEAS_TYPE_ACTIVATABLE, IS_TYPE_DBUS_PLUGIN); } indicator-sensors-1.1/plugins/dbus/is-dbus-plugin.h000066400000000000000000000042301356741033200224550ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #ifndef __IS_DBUS_PLUGIN_H__ #define __IS_DBUS_PLUGIN_H__ #include G_BEGIN_DECLS #define IS_TYPE_DBUS_PLUGIN \ (is_dbus_plugin_get_type()) #define IS_DBUS_PLUGIN(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ IS_TYPE_DBUS_PLUGIN, \ IsDBusPlugin)) #define IS_DBUS_PLUGIN_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ IS_TYPE_DBUS_PLUGIN, \ IsDBusPluginClass)) #define IS_IS_DBUS_PLUGIN(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ IS_TYPE_DBUS_PLUGIN)) #define IS_IS_DBUS_PLUGIN_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), \ IS_TYPE_DBUS_PLUGIN)) #define IS_DBUS_PLUGIN_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ IS_TYPE_DBUS_PLUGIN, \ IsDBusPluginClass)) typedef struct _IsDBusPlugin IsDBusPlugin; typedef struct _IsDBusPluginClass IsDBusPluginClass; typedef struct _IsDBusPluginPrivate IsDBusPluginPrivate; struct _IsDBusPluginClass { PeasExtensionBaseClass parent_class; }; struct _IsDBusPlugin { PeasExtensionBase parent; IsDBusPluginPrivate *priv; }; GType is_dbus_plugin_get_type(void) G_GNUC_CONST; G_MODULE_EXPORT void peas_register_types(PeasObjectModule *module); G_END_DECLS #endif /* __IS_DBUS_PLUGIN_H__ */ indicator-sensors-1.1/plugins/dbus/is-search-provider.ini000066400000000000000000000002671356741033200236570ustar00rootroot00000000000000[Shell Search Provider] DesktopId=indicator-sensors.desktop BusName=com.github.alexmurray.IndicatorSensors ObjectPath=/com/github/alexmurray/IndicatorSensors/SearchProvider Version=2 indicator-sensors-1.1/plugins/dbus/shell-search-provider-dbus-interfaces.xml000066400000000000000000000036061356741033200274500ustar00rootroot00000000000000 indicator-sensors-1.1/plugins/dynamic/000077500000000000000000000000001356741033200201325ustar00rootroot00000000000000indicator-sensors-1.1/plugins/dynamic/Makefile.am000066400000000000000000000010511356741033200221630ustar00rootroot00000000000000plugindir = $(libdir)/$(PACKAGE)/plugins/dynamic AM_CPPFLAGS = \ -I$(top_srcdir) \ $(GLIB_CFLAGS) \ $(GTK_CFLAGS) \ $(APPINDICATOR_CFLAGS) \ $(LIBPEAS_CFLAGS) \ $(DYNAMIC_CFLAGS) \ $(DEBUG_CFLAGS) plugin_LTLIBRARIES = libdynamic.la libdynamic_la_SOURCES = \ is-dynamic-plugin.h \ is-dynamic-plugin.c libdynamic_la_LDFLAGS = $(PLUGIN_LIBTOOL_FLAGS) libdynamic_la_LIBADD = \ $(GLIB_LIBS) \ $(GTK_LIBS) \ $(APPINDICATOR_LIBS) \ $(LIBPEAS_LIBS) \ $(DYNAMIC_LIBS) plugin_DATA = dynamic.plugin EXTRA_DIST = $(plugin_DATA) indicator-sensors-1.1/plugins/dynamic/dynamic.plugin000066400000000000000000000004401356741033200227740ustar00rootroot00000000000000[Plugin] Module=libdynamic IAge=2 Name=Dynamic Description=Provides dynamic monitoring of sensors Authors=Alex Murray Copyright=Copyright © 2014 Alex Murray Website=http://github.com/alexmurray/indicator-sensors Help=http://github.com/alexmurray/indicator-sensorsindicator-sensors-1.1/plugins/dynamic/is-dynamic-plugin.c000066400000000000000000000263061356741033200236360ustar00rootroot00000000000000/* * Copyright (C) 2014 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #ifdef HAVE_CONFIG_H #include #endif #include "is-dynamic-plugin.h" #include #include #include #include #include #include #include static void peas_activatable_iface_init(PeasActivatableInterface *iface); G_DEFINE_DYNAMIC_TYPE_EXTENDED(IsDynamicPlugin, is_dynamic_plugin, PEAS_TYPE_EXTENSION_BASE, 0, G_IMPLEMENT_INTERFACE_DYNAMIC(PEAS_TYPE_ACTIVATABLE, peas_activatable_iface_init)); #define DYNAMIC_RATE_DATA_KEY "dynamic-rate-data" #define DYNAMIC_SENSOR_PATH "virtual/dynamic" #define EWMA_ALPHA 0.2 enum { PROP_OBJECT = 1, }; struct _IsDynamicPluginPrivate { IsApplication *application; IsSensor *sensor; IsSensor *max; gdouble max_rate; }; typedef struct _RateData { gdouble rate; gdouble last_value; gint64 last_time; } RateData; static void is_dynamic_plugin_finalize(GObject *object); static void is_dynamic_plugin_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { IsDynamicPlugin *plugin = IS_DYNAMIC_PLUGIN(object); switch (prop_id) { case PROP_OBJECT: plugin->priv->application = IS_APPLICATION(g_value_dup_object(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void is_dynamic_plugin_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { IsDynamicPlugin *plugin = IS_DYNAMIC_PLUGIN(object); switch (prop_id) { case PROP_OBJECT: g_value_set_object(value, plugin->priv->application); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void is_dynamic_plugin_init(IsDynamicPlugin *self) { IsDynamicPluginPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE(self, IS_TYPE_DYNAMIC_PLUGIN, IsDynamicPluginPrivate); self->priv = priv; } static void is_dynamic_plugin_finalize(GObject *object) { IsDynamicPlugin *self = (IsDynamicPlugin *)object; IsDynamicPluginPrivate *priv = self->priv; (void)priv; G_OBJECT_CLASS(is_dynamic_plugin_parent_class)->finalize(object); } static void update_sensor_from_max(IsDynamicPlugin *self) { IsDynamicPluginPrivate *priv; gchar *label; priv = self->priv; label = g_strdup_printf("Δ%s", is_sensor_get_label(priv->max)); is_sensor_set_label(priv->sensor, label); is_sensor_set_icon(priv->sensor, is_sensor_get_icon(priv->max)); is_sensor_set_value(priv->sensor, is_sensor_get_value(priv->max)); is_sensor_set_units(priv->sensor, is_sensor_get_units(priv->max)); is_sensor_set_digits(priv->sensor, is_sensor_get_digits(priv->max)); g_free(label); } static void on_sensor_value_notify(IsSensor *sensor, GParamSpec *pspec, gpointer user_data) { IsDynamicPlugin *self; IsDynamicPluginPrivate *priv; RateData *data; gdouble value, dv, dt, rate; gint64 now; self = IS_DYNAMIC_PLUGIN(user_data); priv = self->priv; value = is_sensor_get_value(sensor); if (value - IS_SENSOR_VALUE_UNSET <= DBL_EPSILON) { is_debug("dynamic", "sensor value for sensor %s is unset - ignoring", is_sensor_get_label(sensor)); goto exit; } now = g_get_monotonic_time(); data = g_object_get_data(G_OBJECT(sensor), DYNAMIC_RATE_DATA_KEY); if (data == NULL) { is_debug("dynamic", "Creating new dynamic rate data for sensor: %s", is_sensor_get_label(sensor)); // allocate data data = g_malloc0(sizeof(*data)); data->rate = 0.0f; data->last_value = value; data->last_time = now; g_object_set_data_full(G_OBJECT(sensor), DYNAMIC_RATE_DATA_KEY, data, g_free); goto exit; } is_debug("dynamic", "Got existing rate data for sensor: %s - rate: %f, last_value %f, last_time %"PRId64"", is_sensor_get_label(sensor), data->rate, data->last_value, data->last_time); dv = value - data->last_value; dt = ((double)(now - data->last_time) / (double)G_USEC_PER_SEC); // convert rate to units per second rate = fabs(dv / dt); is_debug("dynamic", "abs rate of change of sensor %s: %f (t0: %f, t-1: %f, dv: %f, dt: %f)", is_sensor_get_label(sensor), rate, value, data->last_value, dv, dt); // calculate exponentially weighted moving average of rate rate = (EWMA_ALPHA * rate) + ((1 - EWMA_ALPHA) * data->rate); data->rate = rate; data->last_value = value; data->last_time = now; is_debug("dynamic", "EWMA abs rate of change of sensor %s: %f", is_sensor_get_label(sensor), rate); if (rate > priv->max_rate && sensor != priv->max) { // let's see if we can get away without taking a reference on sensor priv->max = sensor; is_message("dynamic", "New highest EWMA rate sensor: %s (rate %f)", is_sensor_get_label(sensor), rate); } if (sensor == priv->max) { priv->max_rate = rate; update_sensor_from_max(self); } exit: return; } static void on_sensor_enabled(IsManager *manager, IsSensor *sensor, gint index, gpointer data) { IsDynamicPlugin *self = (IsDynamicPlugin *)data; // don't bother monitoring non-temperature sensors if (IS_IS_TEMPERATURE_SENSOR(sensor)) { is_debug("dynamic", "sensor enabled: %s", is_sensor_get_label(sensor)); on_sensor_value_notify(sensor, NULL, self); g_signal_connect(sensor, "notify::value", G_CALLBACK(on_sensor_value_notify), self); } } static void on_sensor_disabled(IsManager *manager, IsSensor *sensor, gpointer data) { IsDynamicPlugin *self = (IsDynamicPlugin *)data; IsDynamicPluginPrivate *priv = self->priv; // don't bother monitoring non-temperature sensors if (IS_IS_TEMPERATURE_SENSOR(sensor)) { is_debug("dynamic", "sensor disabled: %s", is_sensor_get_label(sensor)); g_signal_handlers_disconnect_by_func(sensor, G_CALLBACK(on_sensor_value_notify), self); if (priv->max == sensor) { // get all sensors and find the one with the maximum rate and switch to // this GSList *sensors, *_list; priv->max = NULL; priv->max_rate = 0.0; is_sensor_set_label(priv->sensor, "Δ"); is_sensor_set_icon(priv->sensor, IS_STOCK_CHIP); is_sensor_set_value(priv->sensor, 0.0); is_sensor_set_units(priv->sensor, ""); is_sensor_set_digits(priv->sensor, 1); sensors = is_manager_get_enabled_sensors_list(manager); for (_list = sensors; _list != NULL; _list = _list->next) { if (IS_IS_TEMPERATURE_SENSOR(_list->data)) { on_sensor_value_notify(IS_SENSOR(_list->data), NULL, self); } } } } } static void is_dynamic_plugin_activate(PeasActivatable *activatable) { IsDynamicPlugin *self = IS_DYNAMIC_PLUGIN(activatable); IsDynamicPluginPrivate *priv = self->priv; IsManager *manager; GSList *sensors, *_list; int i = 0; manager = is_application_get_manager(priv->application); // create our virtual sensor which mimics the current highest rate of change // sensor's value and label is_debug("dynamic", "creating virtual sensor"); priv->sensor = is_sensor_new(DYNAMIC_SENSOR_PATH); is_sensor_set_label(priv->sensor, "Δ"); is_sensor_set_icon(priv->sensor, IS_STOCK_CHIP); is_sensor_set_value(priv->sensor, 0.0); is_sensor_set_units(priv->sensor, ""); is_sensor_set_digits(priv->sensor, 1); is_manager_add_sensor(manager, priv->sensor); is_debug("dynamic", "attaching to signals"); sensors = is_manager_get_enabled_sensors_list(manager); for (_list = sensors; _list != NULL; _list = _list->next) { IsSensor *sensor = IS_SENSOR(_list->data); on_sensor_enabled(manager, sensor, i, self); g_object_unref(sensor); i++; } g_slist_free(sensors); g_signal_connect(manager, "sensor-enabled", G_CALLBACK(on_sensor_enabled), self); g_signal_connect(manager, "sensor-disabled", G_CALLBACK(on_sensor_disabled), self); } static void is_dynamic_plugin_deactivate(PeasActivatable *activatable) { IsDynamicPlugin *self = IS_DYNAMIC_PLUGIN(activatable); IsDynamicPluginPrivate *priv = self->priv; IsManager *manager; GSList *sensors, *_list; is_debug("dynamic", "dettaching from signals"); manager = is_application_get_manager(priv->application); is_manager_remove_path(manager, DYNAMIC_SENSOR_PATH); sensors = is_manager_get_enabled_sensors_list(manager); for (_list = sensors; _list != NULL; _list = _list->next) { IsSensor *sensor = IS_SENSOR(_list->data); on_sensor_disabled(manager, sensor, self); g_object_unref(sensor); } g_slist_free(sensors); g_signal_handlers_disconnect_by_func(manager, G_CALLBACK(on_sensor_enabled), self); g_signal_handlers_disconnect_by_func(manager, G_CALLBACK(on_sensor_disabled), self); } static void is_dynamic_plugin_class_init(IsDynamicPluginClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS(klass); g_type_class_add_private(klass, sizeof(IsDynamicPluginPrivate)); gobject_class->get_property = is_dynamic_plugin_get_property; gobject_class->set_property = is_dynamic_plugin_set_property; gobject_class->finalize = is_dynamic_plugin_finalize; g_object_class_override_property(gobject_class, PROP_OBJECT, "object"); } static void peas_activatable_iface_init(PeasActivatableInterface *iface) { iface->activate = is_dynamic_plugin_activate; iface->deactivate = is_dynamic_plugin_deactivate; } static void is_dynamic_plugin_class_finalize(IsDynamicPluginClass *klass) { /* nothing to do */ } G_MODULE_EXPORT void peas_register_types(PeasObjectModule *module) { is_dynamic_plugin_register_type(G_TYPE_MODULE(module)); peas_object_module_register_extension_type(module, PEAS_TYPE_ACTIVATABLE, IS_TYPE_DYNAMIC_PLUGIN); } indicator-sensors-1.1/plugins/dynamic/is-dynamic-plugin.h000066400000000000000000000043541356741033200236420ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #ifndef __IS_DYNAMIC_PLUGIN_H__ #define __IS_DYNAMIC_PLUGIN_H__ #include G_BEGIN_DECLS #define IS_TYPE_DYNAMIC_PLUGIN \ (is_dynamic_plugin_get_type()) #define IS_DYNAMIC_PLUGIN(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ IS_TYPE_DYNAMIC_PLUGIN, \ IsDynamicPlugin)) #define IS_DYNAMIC_PLUGIN_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ IS_TYPE_DYNAMIC_PLUGIN, \ IsDynamicPluginClass)) #define IS_IS_DYNAMIC_PLUGIN(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ IS_TYPE_DYNAMIC_PLUGIN)) #define IS_IS_DYNAMIC_PLUGIN_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), \ IS_TYPE_DYNAMIC_PLUGIN)) #define IS_DYNAMIC_PLUGIN_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ IS_TYPE_DYNAMIC_PLUGIN, \ IsDynamicPluginClass)) typedef struct _IsDynamicPlugin IsDynamicPlugin; typedef struct _IsDynamicPluginClass IsDynamicPluginClass; typedef struct _IsDynamicPluginPrivate IsDynamicPluginPrivate; struct _IsDynamicPluginClass { PeasExtensionBaseClass parent_class; }; struct _IsDynamicPlugin { PeasExtensionBase parent; IsDynamicPluginPrivate *priv; }; GType is_dynamic_plugin_get_type(void) G_GNUC_CONST; G_MODULE_EXPORT void peas_register_types(PeasObjectModule *module); G_END_DECLS #endif /* __IS_DYNAMIC_PLUGIN_H__ */ indicator-sensors-1.1/plugins/fake/000077500000000000000000000000001356741033200174145ustar00rootroot00000000000000indicator-sensors-1.1/plugins/fake/Makefile.am000066400000000000000000000007471356741033200214600ustar00rootroot00000000000000plugindir = $(libdir)/$(PACKAGE)/plugins/fake AM_CPPFLAGS = \ -I$(top_srcdir) \ $(GLIB_CFLAGS) \ $(GTK_CFLAGS) \ $(APPINDICATOR_CFLAGS) \ $(LIBPEAS_CFLAGS) \ $(DEBUG_CFLAGS) plugin_LTLIBRARIES = libfake.la libfake_la_SOURCES = \ is-fake-plugin.h \ is-fake-plugin.c libfake_la_LDFLAGS = $(PLUGIN_LIBTOOL_FLAGS) libfake_la_LIBADD = \ $(GLIB_LIBS) \ $(GTK_LIBS) \ $(APPINDICATOR_LIBS) \ $(LIBPEAS_LIBS) plugin_DATA = fake.plugin EXTRA_DIST = $(plugin_DATA) indicator-sensors-1.1/plugins/fake/fake.plugin000066400000000000000000000004211356741033200215370ustar00rootroot00000000000000[Plugin] Module=libfake IAge=2 Name=Fake Sensors Description=Provides fake sensors Authors=Alex Murray Copyright=Copyright © 2014 Alex Murray Website=http://github.com/alexmurray/indicator-sensors Help=http://github.com/alexmurray/indicator-sensorsindicator-sensors-1.1/plugins/fake/is-fake-plugin.c000066400000000000000000000135201356741033200223740ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #ifdef HAVE_CONFIG_H #include #endif #include "is-fake-plugin.h" #include #include #include #include #include #define FAKE_PATH_PREFIX "fake" static void peas_activatable_iface_init(PeasActivatableInterface *iface); G_DEFINE_DYNAMIC_TYPE_EXTENDED(IsFakePlugin, is_fake_plugin, PEAS_TYPE_EXTENSION_BASE, 0, G_IMPLEMENT_INTERFACE_DYNAMIC(PEAS_TYPE_ACTIVATABLE, peas_activatable_iface_init)); enum { PROP_OBJECT = 1, }; struct _IsFakePluginPrivate { IsApplication *application; GRand *rand; }; static void is_fake_plugin_finalize(GObject *object); static void is_fake_plugin_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { IsFakePlugin *plugin = IS_FAKE_PLUGIN(object); switch (prop_id) { case PROP_OBJECT: plugin->priv->application = IS_APPLICATION(g_value_dup_object(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void is_fake_plugin_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { IsFakePlugin *plugin = IS_FAKE_PLUGIN(object); switch (prop_id) { case PROP_OBJECT: g_value_set_object(value, plugin->priv->application); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void is_fake_plugin_init(IsFakePlugin *self) { IsFakePluginPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE(self, IS_TYPE_FAKE_PLUGIN, IsFakePluginPrivate); self->priv = priv; priv->rand = g_rand_new(); } static void is_fake_plugin_finalize(GObject *object) { IsFakePlugin *self = IS_FAKE_PLUGIN(object); IsFakePluginPrivate *priv = self->priv; g_rand_free(priv->rand); G_OBJECT_CLASS(is_fake_plugin_parent_class)->finalize(object); } static void update_sensor_value(IsSensor *sensor, IsFakePlugin *self) { /* fake value */ is_sensor_set_value(sensor, g_rand_double_range(self->priv->rand, is_sensor_get_low_value(sensor), is_sensor_get_high_value(sensor))); } static void is_fake_plugin_activate(PeasActivatable *activatable) { IsFakePlugin *self = IS_FAKE_PLUGIN(activatable); IsFakePluginPrivate *priv = self->priv; int i; int n_fans = 0; /* generate some fake sensors */ for (i = 0; i < 5; i++) { gchar *path; gchar *label; IsSensor *sensor; path = g_strdup_printf(FAKE_PATH_PREFIX "/sensor%d", i); if (g_rand_boolean(priv->rand)) { n_fans++; sensor = is_fan_sensor_new(path); is_sensor_set_low_value(sensor, 100.0); is_sensor_set_high_value(sensor, 5000.0); label = g_strdup_printf(_("Fake Fan %d"), n_fans); } else { sensor = is_temperature_sensor_new(path); is_sensor_set_icon(sensor, IS_STOCK_CPU); label = g_strdup_printf(_("Fake CPU %d"), i - n_fans + 1); } /* no decimal places to display */ is_sensor_set_digits(sensor, 0); is_sensor_set_label(sensor, label); /* connect to update-value signal */ g_signal_connect(sensor, "update-value", G_CALLBACK(update_sensor_value), self); is_manager_add_sensor(is_application_get_manager(priv->application), sensor); g_free(label); g_free(path); } } static void is_fake_plugin_deactivate(PeasActivatable *activatable) { IsFakePlugin *plugin = IS_FAKE_PLUGIN(activatable); IsFakePluginPrivate *priv = plugin->priv; IsManager *manager; manager = is_application_get_manager(priv->application); is_manager_remove_paths_with_prefix(manager, FAKE_PATH_PREFIX); } static void is_fake_plugin_class_init(IsFakePluginClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS(klass); g_type_class_add_private(klass, sizeof(IsFakePluginPrivate)); gobject_class->get_property = is_fake_plugin_get_property; gobject_class->set_property = is_fake_plugin_set_property; gobject_class->finalize = is_fake_plugin_finalize; g_object_class_override_property(gobject_class, PROP_OBJECT, "object"); } static void peas_activatable_iface_init(PeasActivatableInterface *iface) { iface->activate = is_fake_plugin_activate; iface->deactivate = is_fake_plugin_deactivate; } static void is_fake_plugin_class_finalize(IsFakePluginClass *klass) { /* nothing to do */ } G_MODULE_EXPORT void peas_register_types(PeasObjectModule *module) { is_fake_plugin_register_type(G_TYPE_MODULE(module)); peas_object_module_register_extension_type(module, PEAS_TYPE_ACTIVATABLE, IS_TYPE_FAKE_PLUGIN); } indicator-sensors-1.1/plugins/fake/is-fake-plugin.h000066400000000000000000000042301356741033200223770ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #ifndef __IS_FAKE_PLUGIN_H__ #define __IS_FAKE_PLUGIN_H__ #include G_BEGIN_DECLS #define IS_TYPE_FAKE_PLUGIN \ (is_fake_plugin_get_type()) #define IS_FAKE_PLUGIN(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ IS_TYPE_FAKE_PLUGIN, \ IsFakePlugin)) #define IS_FAKE_PLUGIN_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ IS_TYPE_FAKE_PLUGIN, \ IsFakePluginClass)) #define IS_IS_FAKE_PLUGIN(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ IS_TYPE_FAKE_PLUGIN)) #define IS_IS_FAKE_PLUGIN_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), \ IS_TYPE_FAKE_PLUGIN)) #define IS_FAKE_PLUGIN_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ IS_TYPE_FAKE_PLUGIN, \ IsFakePluginClass)) typedef struct _IsFakePlugin IsFakePlugin; typedef struct _IsFakePluginClass IsFakePluginClass; typedef struct _IsFakePluginPrivate IsFakePluginPrivate; struct _IsFakePluginClass { PeasExtensionBaseClass parent_class; }; struct _IsFakePlugin { PeasExtensionBase parent; IsFakePluginPrivate *priv; }; GType is_fake_plugin_get_type(void) G_GNUC_CONST; G_MODULE_EXPORT void peas_register_types(PeasObjectModule *module); G_END_DECLS #endif /* __IS_FAKE_PLUGIN_H__ */ indicator-sensors-1.1/plugins/libsensors/000077500000000000000000000000001356741033200206715ustar00rootroot00000000000000indicator-sensors-1.1/plugins/libsensors/Makefile.am000066400000000000000000000011041356741033200227210ustar00rootroot00000000000000plugindir = $(libdir)/$(PACKAGE)/plugins/libsensors AM_CPPFLAGS = \ -I$(top_srcdir) \ $(GLIB_CFLAGS) \ $(GTK_CFLAGS) \ $(APPINDICATOR_CFLAGS) \ $(LIBPEAS_CFLAGS) \ $(LIBSENSORS_CFLAGS) \ $(DEBUG_CFLAGS) plugin_LTLIBRARIES = liblibsensors.la liblibsensors_la_SOURCES = \ is-libsensors-plugin.h \ is-libsensors-plugin.c liblibsensors_la_LDFLAGS = $(PLUGIN_LIBTOOL_FLAGS) liblibsensors_la_LIBADD = \ $(GLIB_LIBS) \ $(GTK_LIBS) \ $(APPINDICATOR_LIBS) \ $(LIBPEAS_LIBS) \ $(LIBSENSORS_LIBS) plugin_DATA = libsensors.plugin EXTRA_DIST = $(plugin_DATA) indicator-sensors-1.1/plugins/libsensors/is-libsensors-plugin.c000066400000000000000000000351571356741033200251400ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #ifdef HAVE_CONFIG_H #include #endif #include "is-libsensors-plugin.h" #include #include #include #include #include #include #include #include #include #define LIBSENSORS_PATH_PREFIX "libsensors" static void peas_activatable_iface_init(PeasActivatableInterface *iface); G_DEFINE_DYNAMIC_TYPE_EXTENDED(IsLibsensorsPlugin, is_libsensors_plugin, PEAS_TYPE_EXTENSION_BASE, 0, G_IMPLEMENT_INTERFACE_DYNAMIC(PEAS_TYPE_ACTIVATABLE, peas_activatable_iface_init)); enum { PROP_OBJECT = 1, }; struct _IsLibsensorsPluginPrivate { IsApplication *application; gboolean inited; GHashTable *sensor_chip_names; }; static void is_libsensors_plugin_finalize(GObject *object); static void is_libsensors_plugin_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { IsLibsensorsPlugin *plugin = IS_LIBSENSORS_PLUGIN(object); switch (prop_id) { case PROP_OBJECT: plugin->priv->application = IS_APPLICATION(g_value_dup_object(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void is_libsensors_plugin_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { IsLibsensorsPlugin *plugin = IS_LIBSENSORS_PLUGIN(object); switch (prop_id) { case PROP_OBJECT: g_value_set_object(value, plugin->priv->application); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void is_libsensors_plugin_init(IsLibsensorsPlugin *self) { gint res; IsLibsensorsPluginPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE(self, IS_TYPE_LIBSENSORS_PLUGIN, IsLibsensorsPluginPrivate); self->priv = priv; is_debug("libsensors", "Trying to initialise libsensors with default path...\n"); res = sensors_init(NULL); if (res != 0) { is_warning("libsensors", "Failed to initialise libsensors with default path...\n"); if (getenv("SNAP") != NULL) { gchar *path; FILE *f; path = g_build_filename(getenv("SNAP"), "etc", "sensors3.conf", NULL); f = fopen(path, "r"); if (f != NULL) { res = sensors_init(f); if (res != 0) { is_warning("libsensors", "Failed to initialise libsensors with snap path %s...\n", path); } } g_free(path); } // TODO: fclose(f) ? } if (res == 0) { priv->sensor_chip_names = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); priv->inited = TRUE; } } static void is_libsensors_plugin_finalize(GObject *object) { IsLibsensorsPlugin *self = (IsLibsensorsPlugin *)object; IsLibsensorsPluginPrivate *priv = self->priv; if (priv->sensor_chip_names) { g_hash_table_destroy(priv->sensor_chip_names); } /* think about storing this in the class structure so we only init once and unload once */ if (priv->inited) { sensors_cleanup(); priv->inited = FALSE; } G_OBJECT_CLASS(is_libsensors_plugin_parent_class)->finalize(object); } static gchar *get_chip_name_string(const sensors_chip_name *chip) { gchar *name = NULL; // adapted from lm-sensors:prog/sensors/main.c:sprintf_chip_name // in lm-sensors-3.0 #define BUF_SIZE 200 name = g_malloc0(BUF_SIZE); if (sensors_snprintf_chip_name(name, BUF_SIZE, chip) < 0) { g_free(name); name = NULL; } #undef BUF_SIZE return name; } static void update_sensor_value(IsSensor *sensor, IsLibsensorsPlugin *self) { const gchar *path; const sensors_chip_name *found_chip; gchar *offset, *end; int n, ret; gdouble value = is_sensor_get_value(sensor); path = is_sensor_get_path(sensor); found_chip = g_hash_table_lookup(self->priv->sensor_chip_names, path); g_assert(found_chip != NULL); /* get last separator */ offset = g_strrstr(path, "/"); g_assert(offset != NULL); n = (int)g_ascii_strtoll(offset + 1, &end, 10); /* conversion should also never fail */ g_assert(end != NULL); /* ignore IO error */ if ((ret = sensors_get_value(found_chip, n, &value)) < 0 && ret != -SENSORS_ERR_IO) { GError *error = g_error_new(g_quark_from_string("libsensors-plugin-error-quark"), 0, /* first placeholder is sensor name, * second is error message */ _("Error getting sensor value for sensor %s: %s [%d]"), path, sensors_strerror(ret), ret); is_sensor_set_error(sensor, error->message); g_error_free(error); goto out; } if (IS_IS_TEMPERATURE_SENSOR(sensor)) { is_temperature_sensor_set_celsius_value(IS_TEMPERATURE_SENSOR(sensor), value); } else { is_sensor_set_value(sensor, value); } is_sensor_set_error(sensor, NULL); out: return; } static void process_sensors_chip_name(IsLibsensorsPlugin *self, const sensors_chip_name *chip_name) { IsLibsensorsPluginPrivate *priv = self->priv; gchar *chip_name_string = NULL; const sensors_feature *main_feature; gint nr1 = 0; chip_name_string = get_chip_name_string(chip_name); if (chip_name_string == NULL) { is_warning("libsensors", "error getting name string for sensor '%s'", chip_name->path); goto out; } while ((main_feature = sensors_get_features(chip_name, &nr1))) { gchar *label = NULL; const sensors_subfeature *input_feature = NULL; const sensors_subfeature *min_feature = NULL; const sensors_subfeature *max_feature = NULL; gchar *path; IsSensor *sensor; gdouble value, min, max; int ret; switch (main_feature->type) { case SENSORS_FEATURE_IN: input_feature = sensors_get_subfeature(chip_name, main_feature, SENSORS_SUBFEATURE_IN_INPUT); min_feature = sensors_get_subfeature(chip_name, main_feature, SENSORS_SUBFEATURE_IN_MIN); break; case SENSORS_FEATURE_FAN: input_feature = sensors_get_subfeature(chip_name, main_feature, SENSORS_SUBFEATURE_FAN_INPUT); min_feature = sensors_get_subfeature(chip_name, main_feature, SENSORS_SUBFEATURE_FAN_ALARM); break; case SENSORS_FEATURE_TEMP: input_feature = sensors_get_subfeature(chip_name, main_feature, SENSORS_SUBFEATURE_TEMP_INPUT); max_feature = sensors_get_subfeature(chip_name, main_feature, SENSORS_SUBFEATURE_TEMP_MAX); min_feature = sensors_get_subfeature(chip_name, main_feature, SENSORS_SUBFEATURE_TEMP_MIN); break; #if SENSORS_API_VERSION > 0x432 case SENSORS_FEATURE_MAX: #endif #if SENSORS_API_VERSION > 0x430 case SENSORS_FEATURE_HUMIDITY: case SENSORS_FEATURE_MAX_MAIN: case SENSORS_FEATURE_INTRUSION: case SENSORS_FEATURE_MAX_OTHER: #endif case SENSORS_FEATURE_POWER: case SENSORS_FEATURE_ENERGY: case SENSORS_FEATURE_CURR: case SENSORS_FEATURE_VID: case SENSORS_FEATURE_BEEP_ENABLE: case SENSORS_FEATURE_UNKNOWN: is_debug("libsensors", "Ignoring unimplemented sensor type %d", main_feature->type); break; default: is_warning("libsensors", "error determining type for sensor '%s'", chip_name_string); continue; } if (!input_feature) { is_warning("libsensors", "could not get input subfeature for sensor '%s'", chip_name_string); continue; } // if still here we got input feature so get label label = sensors_get_label(chip_name, main_feature); if (!label) { is_warning("libsensors", "could not get label for sensor '%s'", chip_name_string); continue; } // label can sometimes have leading / trailing whitespace so // remove any g_strstrip(label); g_assert(chip_name_string && label); /* ignore IO Errors since some chips report these sometimes intermittently */ if ((ret = sensors_get_value(chip_name, input_feature->number, &value)) < 0 && ret != -SENSORS_ERR_IO) { is_warning("libsensors", "could not get value for input feature of sensor '%s': %s [%d]", chip_name_string, sensors_strerror(ret), ret); free(label); continue; } path = g_strdup_printf(LIBSENSORS_PATH_PREFIX "/%s/%d", chip_name_string, input_feature->number); if (main_feature->type == SENSORS_FEATURE_TEMP) { sensor = is_temperature_sensor_new(path); is_sensor_set_icon(sensor, IS_STOCK_CPU); } else if (main_feature->type == SENSORS_FEATURE_FAN) { sensor = is_fan_sensor_new(path); /* display fan readings to 0 decimal places like sensors command */ is_sensor_set_digits(sensor, 0); } else { /* is a voltage sensor */ sensor = is_sensor_new(path); /* display voltage readings to 2 decimal places like sensors command */ is_sensor_set_digits(sensor, 2); /* translators: V is the unit for Voltage, replace with appropriate unit */ is_sensor_set_units(sensor, _("V")); is_sensor_set_icon(sensor, IS_STOCK_CHIP); } is_sensor_set_label(sensor, label); if (min_feature && sensors_get_value(chip_name, min_feature->number, &min) == 0) { is_sensor_set_alarm_mode(sensor, IS_SENSOR_ALARM_MODE_LOW); is_sensor_set_alarm_value(sensor, min); if (main_feature->type == SENSORS_FEATURE_TEMP) { is_sensor_set_low_value(sensor, min); } } if (max_feature && sensors_get_value(chip_name, max_feature->number, &max) == 0) { is_sensor_set_alarm_mode(sensor, IS_SENSOR_ALARM_MODE_HIGH); is_sensor_set_alarm_value(sensor, max); if (main_feature->type == SENSORS_FEATURE_TEMP) { is_sensor_set_high_value(sensor, max); } } /* take ownership of path pointer */ g_hash_table_insert(priv->sensor_chip_names, path, (void *)chip_name); /* connect to update-value signal */ g_signal_connect(sensor, "update-value", G_CALLBACK(update_sensor_value), self); is_manager_add_sensor(is_application_get_manager(priv->application), sensor); free(label); } g_free(chip_name_string); out: return; } static void is_libsensors_plugin_activate(PeasActivatable *activatable) { IsLibsensorsPlugin *self = IS_LIBSENSORS_PLUGIN(activatable); IsLibsensorsPluginPrivate *priv = self->priv; const sensors_chip_name *chip_name; int nr = 0; /* search for sensors and add them to manager */ if (!priv->inited) { is_warning("libsensors", "not inited, unable to find sensors"); goto out; } is_debug("libsensors", "searching for sensors"); while ((chip_name = sensors_get_detected_chips(NULL, &nr))) { process_sensors_chip_name(self, chip_name); } /* if we couldn't find any sensors then show a notification to tell the * user to try and run sensors-detect from the command line */ if (!g_hash_table_size(priv->sensor_chip_names)) { is_notify(IS_NOTIFY_LEVEL_INFO, _("No Sensors Detected"), _("Try running the command 'sensors-detect' from the command-line and restarting %s"), PACKAGE_NAME); } out: return; } static void is_libsensors_plugin_deactivate(PeasActivatable *activatable) { IsLibsensorsPlugin *plugin = IS_LIBSENSORS_PLUGIN(activatable); IsLibsensorsPluginPrivate *priv = plugin->priv; IsManager *manager; manager = is_application_get_manager(priv->application); is_manager_remove_paths_with_prefix(manager, LIBSENSORS_PATH_PREFIX); } static void is_libsensors_plugin_class_init(IsLibsensorsPluginClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS(klass); g_type_class_add_private(klass, sizeof(IsLibsensorsPluginPrivate)); gobject_class->get_property = is_libsensors_plugin_get_property; gobject_class->set_property = is_libsensors_plugin_set_property; gobject_class->finalize = is_libsensors_plugin_finalize; g_object_class_override_property(gobject_class, PROP_OBJECT, "object"); } static void peas_activatable_iface_init(PeasActivatableInterface *iface) { iface->activate = is_libsensors_plugin_activate; iface->deactivate = is_libsensors_plugin_deactivate; } static void is_libsensors_plugin_class_finalize(IsLibsensorsPluginClass *klass) { /* nothing to do */ } G_MODULE_EXPORT void peas_register_types(PeasObjectModule *module) { is_libsensors_plugin_register_type(G_TYPE_MODULE(module)); peas_object_module_register_extension_type(module, PEAS_TYPE_ACTIVATABLE, IS_TYPE_LIBSENSORS_PLUGIN); } indicator-sensors-1.1/plugins/libsensors/is-libsensors-plugin.h000066400000000000000000000045001356741033200251310ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #ifndef __IS_LIBSENSORS_PLUGIN_H__ #define __IS_LIBSENSORS_PLUGIN_H__ #include G_BEGIN_DECLS #define IS_TYPE_LIBSENSORS_PLUGIN \ (is_libsensors_plugin_get_type()) #define IS_LIBSENSORS_PLUGIN(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ IS_TYPE_LIBSENSORS_PLUGIN, \ IsLibsensorsPlugin)) #define IS_LIBSENSORS_PLUGIN_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ IS_TYPE_LIBSENSORS_PLUGIN, \ IsLibsensorsPluginClass)) #define IS_IS_LIBSENSORS_PLUGIN(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ IS_TYPE_LIBSENSORS_PLUGIN)) #define IS_IS_LIBSENSORS_PLUGIN_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), \ IS_TYPE_LIBSENSORS_PLUGIN)) #define IS_LIBSENSORS_PLUGIN_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ IS_TYPE_LIBSENSORS_PLUGIN, \ IsLibsensorsPluginClass)) typedef struct _IsLibsensorsPlugin IsLibsensorsPlugin; typedef struct _IsLibsensorsPluginClass IsLibsensorsPluginClass; typedef struct _IsLibsensorsPluginPrivate IsLibsensorsPluginPrivate; struct _IsLibsensorsPluginClass { PeasExtensionBaseClass parent_class; }; struct _IsLibsensorsPlugin { PeasExtensionBase parent; IsLibsensorsPluginPrivate *priv; }; GType is_libsensors_plugin_get_type(void) G_GNUC_CONST; G_MODULE_EXPORT void peas_register_types(PeasObjectModule *module); G_END_DECLS #endif /* __IS_LIBSENSORS_PLUGIN_H__ */ indicator-sensors-1.1/plugins/libsensors/libsensors.plugin000066400000000000000000000004771356741033200243040ustar00rootroot00000000000000[Plugin] Module=liblibsensors IAge=2 Name=LM-Sensors (libsensors) Description=Provides sensors from libsensors (lm-sensors) Authors=Alex Murray Copyright=Copyright © 2011-2019 Alex Murray Website=http://github.com/alexmurray/indicator-sensors Help=http://github.com/alexmurray/indicator-sensorsindicator-sensors-1.1/plugins/max/000077500000000000000000000000001356741033200172735ustar00rootroot00000000000000indicator-sensors-1.1/plugins/max/Makefile.am000066400000000000000000000010011356741033200213170ustar00rootroot00000000000000plugindir = $(libdir)/$(PACKAGE)/plugins/max AM_CPPFLAGS = \ -I$(top_srcdir) \ $(GLIB_CFLAGS) \ $(GTK_CFLAGS) \ $(APPINDICATOR_CFLAGS) \ $(LIBPEAS_CFLAGS) \ $(MAX_CFLAGS) \ $(DEBUG_CFLAGS) plugin_LTLIBRARIES = libmax.la libmax_la_SOURCES = \ is-max-plugin.h \ is-max-plugin.c libmax_la_LDFLAGS = $(PLUGIN_LIBTOOL_FLAGS) libmax_la_LIBADD = \ $(GLIB_LIBS) \ $(GTK_LIBS) \ $(APPINDICATOR_LIBS) \ $(LIBPEAS_LIBS) \ $(MAX_LIBS) plugin_DATA = max.plugin EXTRA_DIST = $(plugin_DATA) indicator-sensors-1.1/plugins/max/is-max-plugin.c000066400000000000000000000225751356741033200221440ustar00rootroot00000000000000/* * Copyright (C) 2014 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #ifdef HAVE_CONFIG_H #include #endif #include "is-max-plugin.h" #include #include #include #include #include #include static void peas_activatable_iface_init(PeasActivatableInterface *iface); G_DEFINE_DYNAMIC_TYPE_EXTENDED(IsMaxPlugin, is_max_plugin, PEAS_TYPE_EXTENSION_BASE, 0, G_IMPLEMENT_INTERFACE_DYNAMIC(PEAS_TYPE_ACTIVATABLE, peas_activatable_iface_init)); #define MAX_SENSOR_PATH "virtual/max" enum { PROP_OBJECT = 1, }; struct _IsMaxPluginPrivate { IsApplication *application; IsSensor *sensor; IsSensor *max; gdouble max_value; }; static void is_max_plugin_finalize(GObject *object); static void is_max_plugin_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { IsMaxPlugin *plugin = IS_MAX_PLUGIN(object); switch (prop_id) { case PROP_OBJECT: plugin->priv->application = IS_APPLICATION(g_value_dup_object(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void is_max_plugin_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { IsMaxPlugin *plugin = IS_MAX_PLUGIN(object); switch (prop_id) { case PROP_OBJECT: g_value_set_object(value, plugin->priv->application); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void is_max_plugin_init(IsMaxPlugin *self) { IsMaxPluginPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE(self, IS_TYPE_MAX_PLUGIN, IsMaxPluginPrivate); self->priv = priv; } static void is_max_plugin_finalize(GObject *object) { IsMaxPlugin *self = (IsMaxPlugin *)object; IsMaxPluginPrivate *priv = self->priv; (void)priv; G_OBJECT_CLASS(is_max_plugin_parent_class)->finalize(object); } static void update_sensor_from_max(IsMaxPlugin *self) { IsMaxPluginPrivate *priv; gchar *label; priv = self->priv; label = g_strdup_printf("↑%s", is_sensor_get_label(priv->max)); is_sensor_set_label(priv->sensor, label); is_sensor_set_icon(priv->sensor, is_sensor_get_icon(priv->max)); is_sensor_set_value(priv->sensor, is_sensor_get_value(priv->max)); is_sensor_set_units(priv->sensor, is_sensor_get_units(priv->max)); is_sensor_set_digits(priv->sensor, is_sensor_get_digits(priv->max)); g_free(label); } static void on_sensor_value_notify(IsSensor *sensor, GParamSpec *pspec, gpointer user_data) { IsMaxPlugin *self; IsMaxPluginPrivate *priv; gdouble value; self = IS_MAX_PLUGIN(user_data); priv = self->priv; value = is_sensor_get_value(sensor); if (value - IS_SENSOR_VALUE_UNSET <= DBL_EPSILON) { is_debug("max", "sensor value for sensor %s is unset - ignoring", is_sensor_get_label(sensor)); goto exit; } if (value > priv->max_value && sensor != priv->max) { // let's see if we can get away without taking a reference on sensor priv->max = sensor; is_message("max", "New highest value sensor: %s (value %f)", is_sensor_get_label(sensor), value); } if (sensor == priv->max) { priv->max_value = value; update_sensor_from_max(self); } exit: return; } static void on_sensor_enabled(IsManager *manager, IsSensor *sensor, gint index, gpointer data) { IsMaxPlugin *self = (IsMaxPlugin *)data; // don't bother monitoring non-temperature sensors if (IS_IS_TEMPERATURE_SENSOR(sensor)) { is_debug("max", "sensor enabled: %s", is_sensor_get_label(sensor)); on_sensor_value_notify(sensor, NULL, self); g_signal_connect(sensor, "notify::value", G_CALLBACK(on_sensor_value_notify), self); } } static void on_sensor_disabled(IsManager *manager, IsSensor *sensor, gpointer data) { IsMaxPlugin *self = (IsMaxPlugin *)data; IsMaxPluginPrivate *priv = self->priv; // don't bother monitoring non-temperature sensors if (IS_IS_TEMPERATURE_SENSOR(sensor)) { is_debug("max", "sensor disabled: %s", is_sensor_get_label(sensor)); g_signal_handlers_disconnect_by_func(sensor, G_CALLBACK(on_sensor_value_notify), self); if (priv->max == sensor) { // get all sensors and find the one with the maximum value and switch to // this GSList *sensors, *_list; priv->max = NULL; priv->max_value = 0.0; is_sensor_set_label(priv->sensor, "Δ"); is_sensor_set_icon(priv->sensor, IS_STOCK_CHIP); is_sensor_set_value(priv->sensor, 0.0); is_sensor_set_units(priv->sensor, ""); is_sensor_set_digits(priv->sensor, 1); sensors = is_manager_get_enabled_sensors_list(manager); for (_list = sensors; _list != NULL; _list = _list->next) { if (IS_IS_TEMPERATURE_SENSOR(_list->data)) { on_sensor_value_notify(IS_SENSOR(_list->data), NULL, self); } } } } } static void is_max_plugin_activate(PeasActivatable *activatable) { IsMaxPlugin *self = IS_MAX_PLUGIN(activatable); IsMaxPluginPrivate *priv = self->priv; IsManager *manager; GSList *sensors, *_list; int i = 0; manager = is_application_get_manager(priv->application); // create our virtual sensor which mimics the current highest value sensor's // value and label is_debug("max", "creating virtual sensor"); priv->sensor = is_sensor_new(MAX_SENSOR_PATH); is_sensor_set_label(priv->sensor, "Δ"); is_sensor_set_icon(priv->sensor, IS_STOCK_CHIP); is_sensor_set_value(priv->sensor, 0.0); is_sensor_set_units(priv->sensor, ""); is_sensor_set_digits(priv->sensor, 1); is_manager_add_sensor(manager, priv->sensor); is_debug("max", "attaching to signals"); sensors = is_manager_get_enabled_sensors_list(manager); for (_list = sensors; _list != NULL; _list = _list->next) { IsSensor *sensor = IS_SENSOR(_list->data); on_sensor_enabled(manager, sensor, i, self); g_object_unref(sensor); i++; } g_slist_free(sensors); g_signal_connect(manager, "sensor-enabled", G_CALLBACK(on_sensor_enabled), self); g_signal_connect(manager, "sensor-disabled", G_CALLBACK(on_sensor_disabled), self); } static void is_max_plugin_deactivate(PeasActivatable *activatable) { IsMaxPlugin *self = IS_MAX_PLUGIN(activatable); IsMaxPluginPrivate *priv = self->priv; IsManager *manager; GSList *sensors, *_list; is_debug("max", "dettaching from signals"); manager = is_application_get_manager(priv->application); is_manager_remove_path(manager, MAX_SENSOR_PATH); sensors = is_manager_get_enabled_sensors_list(manager); for (_list = sensors; _list != NULL; _list = _list->next) { IsSensor *sensor = IS_SENSOR(_list->data); on_sensor_disabled(manager, sensor, self); g_object_unref(sensor); } g_slist_free(sensors); g_signal_handlers_disconnect_by_func(manager, G_CALLBACK(on_sensor_enabled), self); g_signal_handlers_disconnect_by_func(manager, G_CALLBACK(on_sensor_disabled), self); } static void is_max_plugin_class_init(IsMaxPluginClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS(klass); g_type_class_add_private(klass, sizeof(IsMaxPluginPrivate)); gobject_class->get_property = is_max_plugin_get_property; gobject_class->set_property = is_max_plugin_set_property; gobject_class->finalize = is_max_plugin_finalize; g_object_class_override_property(gobject_class, PROP_OBJECT, "object"); } static void peas_activatable_iface_init(PeasActivatableInterface *iface) { iface->activate = is_max_plugin_activate; iface->deactivate = is_max_plugin_deactivate; } static void is_max_plugin_class_finalize(IsMaxPluginClass *klass) { /* nothing to do */ } G_MODULE_EXPORT void peas_register_types(PeasObjectModule *module) { is_max_plugin_register_type(G_TYPE_MODULE(module)); peas_object_module_register_extension_type(module, PEAS_TYPE_ACTIVATABLE, IS_TYPE_MAX_PLUGIN); } indicator-sensors-1.1/plugins/max/is-max-plugin.h000066400000000000000000000042001356741033200221320ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #ifndef __IS_MAX_PLUGIN_H__ #define __IS_MAX_PLUGIN_H__ #include G_BEGIN_DECLS #define IS_TYPE_MAX_PLUGIN \ (is_max_plugin_get_type()) #define IS_MAX_PLUGIN(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ IS_TYPE_MAX_PLUGIN, \ IsMaxPlugin)) #define IS_MAX_PLUGIN_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ IS_TYPE_MAX_PLUGIN, \ IsMaxPluginClass)) #define IS_IS_MAX_PLUGIN(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ IS_TYPE_MAX_PLUGIN)) #define IS_IS_MAX_PLUGIN_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), \ IS_TYPE_MAX_PLUGIN)) #define IS_MAX_PLUGIN_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ IS_TYPE_MAX_PLUGIN, \ IsMaxPluginClass)) typedef struct _IsMaxPlugin IsMaxPlugin; typedef struct _IsMaxPluginClass IsMaxPluginClass; typedef struct _IsMaxPluginPrivate IsMaxPluginPrivate; struct _IsMaxPluginClass { PeasExtensionBaseClass parent_class; }; struct _IsMaxPlugin { PeasExtensionBase parent; IsMaxPluginPrivate *priv; }; GType is_max_plugin_get_type(void) G_GNUC_CONST; G_MODULE_EXPORT void peas_register_types(PeasObjectModule *module); G_END_DECLS #endif /* __IS_MAX_PLUGIN_H__ */ indicator-sensors-1.1/plugins/max/max.plugin000066400000000000000000000004661356741033200213060ustar00rootroot00000000000000[Plugin] Module=libmax IAge=2 Name=Max Description=Provides a virtual sensor which is the maximum of all active sensors Authors=Alex Murray Copyright=Copyright © 2014 Alex Murray Website=http://github.com/alexmurray/indicator-sensors Help=http://github.com/alexmurray/indicator-sensorsindicator-sensors-1.1/plugins/nvidia/000077500000000000000000000000001356741033200177605ustar00rootroot00000000000000indicator-sensors-1.1/plugins/nvidia/Makefile.am000066400000000000000000000010401356741033200220070ustar00rootroot00000000000000plugindir = $(libdir)/$(PACKAGE)/plugins/nvidia AM_CPPFLAGS = \ -I$(top_srcdir) \ $(GLIB_CFLAGS) \ $(GTK_CFLAGS) \ $(APPINDICATOR_CFLAGS) \ $(LIBPEAS_CFLAGS) \ $(NVIDIA_CFLAGS) \ $(DEBUG_CFLAGS) plugin_LTLIBRARIES = libnvidia.la libnvidia_la_SOURCES = \ is-nvidia-plugin.h \ is-nvidia-plugin.c libnvidia_la_LDFLAGS = $(PLUGIN_LIBTOOL_FLAGS) libnvidia_la_LIBADD = \ $(GLIB_LIBS) \ $(GTK_LIBS) \ $(APPINDICATOR_LIBS) \ $(LIBPEAS_LIBS) \ $(NVIDIA_LIBS) plugin_DATA = nvidia.plugin EXTRA_DIST = $(plugin_DATA) indicator-sensors-1.1/plugins/nvidia/is-nvidia-plugin.c000066400000000000000000000303161356741033200233060ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #ifdef HAVE_CONFIG_H #include #endif #include "is-nvidia-plugin.h" #include #include #include #include #include #include #include #include #include #define NVIDIA_PATH_PREFIX "nvidia" static void peas_activatable_iface_init(PeasActivatableInterface *iface); G_DEFINE_DYNAMIC_TYPE_EXTENDED(IsNvidiaPlugin, is_nvidia_plugin, PEAS_TYPE_EXTENSION_BASE, 0, G_IMPLEMENT_INTERFACE_DYNAMIC(PEAS_TYPE_ACTIVATABLE, peas_activatable_iface_init)); enum { PROP_OBJECT = 1, }; struct _IsNvidiaPluginPrivate { IsApplication *application; Display *display; /* the connection to the X server */ gboolean inited; GHashTable *sensor_chip_names; }; static void is_nvidia_plugin_finalize(GObject *object); static void is_nvidia_plugin_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { IsNvidiaPlugin *plugin = IS_NVIDIA_PLUGIN(object); switch (prop_id) { case PROP_OBJECT: plugin->priv->application = IS_APPLICATION(g_value_dup_object(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void is_nvidia_plugin_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { IsNvidiaPlugin *plugin = IS_NVIDIA_PLUGIN(object); switch (prop_id) { case PROP_OBJECT: g_value_set_object(value, plugin->priv->application); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void is_nvidia_plugin_init(IsNvidiaPlugin *self) { IsNvidiaPluginPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE(self, IS_TYPE_NVIDIA_PLUGIN, IsNvidiaPluginPrivate); self->priv = priv; priv->display = XOpenDisplay(NULL); if (priv->display != NULL) { priv->inited = TRUE; } } static void is_nvidia_plugin_finalize(GObject *object) { IsNvidiaPlugin *self = (IsNvidiaPlugin *)object; IsNvidiaPluginPrivate *priv = self->priv; /* think about storing this in the class structure so we only init once and unload once */ if (priv->inited) { XCloseDisplay(priv->display); priv->inited = FALSE; } G_OBJECT_CLASS(is_nvidia_plugin_parent_class)->finalize(object); } struct map_entry { gint gpu_attribute; gint target; gint attribute; const gchar *description; }; static const struct map_entry map[] = { /* use thermal sensors if available, otherwise use core and ambient * temp */ #ifdef NV_CTRL_BINARY_DATA_THERMAL_SENSORS_USED_BY_GPU { NV_CTRL_BINARY_DATA_THERMAL_SENSORS_USED_BY_GPU, NV_CTRL_TARGET_TYPE_THERMAL_SENSOR, NV_CTRL_THERMAL_SENSOR_READING, "ThermalSensor" }, #else { -1, NV_CTRL_TARGET_TYPE_GPU, NV_CTRL_GPU_CORE_TEMPERATURE, "CoreTemp" }, { -1, NV_CTRL_TARGET_TYPE_GPU, NV_CTRL_AMBIENT_TEMPERATURE, "AmbientTemp" }, #endif /* use thermal coolers if available */ #ifdef NV_CTRL_BINARY_DATA_COOLERS_USED_BY_GPU { NV_CTRL_BINARY_DATA_COOLERS_USED_BY_GPU, NV_CTRL_TARGET_TYPE_COOLER, NV_CTRL_THERMAL_COOLER_LEVEL, "Fan" }, #endif }; static void update_sensor_value(IsSensor *sensor, IsNvidiaPlugin *self) { IsNvidiaPluginPrivate *priv; const gchar *path; guint i; priv = self->priv; path = is_sensor_get_path(sensor); for (i = 0; i < G_N_ELEMENTS(map); i++) { Bool ret; int value; int idx; if (g_strrstr(path, map[i].description) == NULL) { continue; } idx = g_ascii_strtoll(g_strrstr(path, map[i].description) + strlen(map[i].description), NULL, 10); ret = XNVCTRLQueryTargetAttribute(priv->display, map[i].target, idx, 0, map[i].attribute, &value); if (!ret) { GError *error = g_error_new(g_quark_from_string("nvidia-plugin-error-quark"), 0, /* first placeholder is * sensor name */ _("Error getting sensor value for sensor %s"), is_sensor_get_label(sensor)); is_sensor_set_error(sensor, error->message); g_error_free(error); continue; } if (IS_IS_TEMPERATURE_SENSOR(sensor)) { is_temperature_sensor_set_celsius_value(IS_TEMPERATURE_SENSOR(sensor), value); } else { is_sensor_set_value(sensor, value); } is_sensor_set_error(sensor, NULL); } } static void is_nvidia_plugin_activate(PeasActivatable *activatable) { IsNvidiaPlugin *self = IS_NVIDIA_PLUGIN(activatable); IsNvidiaPluginPrivate *priv = self->priv; Bool ret; int event_base, error_base; gint n; int i; /* search for sensors and add them to manager */ if (!priv->inited) { is_warning("nvidia", "not inited, unable to find sensors"); goto out; } is_debug("nvidia", "searching for sensors"); /* check if the NV-CONTROL extension is available on this X * server */ ret = XNVCTRLQueryExtension(priv->display, &event_base, &error_base); if (!ret) { goto out; } /* get number of GPUs, then for each GPU get any thermal_sensors and coolers used by it */ ret = XNVCTRLQueryTargetCount(priv->display, NV_CTRL_TARGET_TYPE_GPU, &n); if (!ret) { goto out; } for (i = 0; i < n; i++) { guint j; char *label = NULL; ret = XNVCTRLQueryTargetStringAttribute(priv->display, NV_CTRL_TARGET_TYPE_GPU, i, 0, NV_CTRL_STRING_PRODUCT_NAME, &label); if (!ret) { free(label); continue; } for (j = 0; j < G_N_ELEMENTS(map); j++) { int32_t *data = NULL; int len; int k; /* old API has no binary targets (in which case gpu_attribute is -1) so ignore this and instead query for the number of targets */ if (map[j].gpu_attribute == -1) { ret = XNVCTRLQueryTargetCount(priv->display, map[j].target, &k); if (!ret) { continue; } /* create fake binary data with first element as number of target's and each element the index of that element */ data = malloc(sizeof(int32_t) * (k + 1)); data[0] = k; while (--k > 0) { data[k] = k; } } else { ret = XNVCTRLQueryTargetBinaryData(priv->display, NV_CTRL_TARGET_TYPE_GPU, i, 0, map[j].gpu_attribute, (unsigned char **)&data, &len); if (!ret) { continue; } } /* data[0] contains number of sensors, and each sensor indice follows */ g_assert(data != NULL); for (k = 1; k <= data[0]; k++) { int32_t idx = data[k]; gint value; IsSensor *sensor; gchar *path; /* if we are using the old API, requery for GPU name but using idx */ if (map[j].gpu_attribute == -1) { gchar *old_label; ret = XNVCTRLQueryTargetStringAttribute(priv->display, NV_CTRL_TARGET_TYPE_GPU, idx, 0, NV_CTRL_STRING_PRODUCT_NAME, &old_label); if (ret) { free(label); label = old_label; } } ret = XNVCTRLQueryTargetAttribute(priv->display, map[j].target, idx, 0, map[j].attribute, &value); if (!ret) { continue; } path = g_strdup_printf(NVIDIA_PATH_PREFIX "/%s%d", map[j].description, idx); #ifdef NV_CTRL_TARGET_TYPE_COOLER if (map[j].target == NV_CTRL_TARGET_TYPE_COOLER) { /* fan sensors are given as a percentage from 0 to 100 */ sensor = is_sensor_new(path); is_sensor_set_icon(sensor, IS_STOCK_FAN); is_sensor_set_units(sensor, "%"); is_sensor_set_low_value(sensor, 0.0); is_sensor_set_high_value(sensor, 100.0); } else { #endif sensor = is_temperature_sensor_new(path); is_sensor_set_icon(sensor, IS_STOCK_GPU); #ifdef NV_CTRL_TARGET_TYPE_COOLER } #endif /* no decimal places to display */ is_sensor_set_digits(sensor, 0); is_sensor_set_label(sensor, label); /* connect to update-value signal */ g_signal_connect(sensor, "update-value", G_CALLBACK(update_sensor_value), self); is_manager_add_sensor(is_application_get_manager(priv->application), sensor); g_free(path); } free(data); } free(label); } out: return; } static void is_nvidia_plugin_deactivate(PeasActivatable *activatable) { IsNvidiaPlugin *plugin = IS_NVIDIA_PLUGIN(activatable); IsNvidiaPluginPrivate *priv = plugin->priv; IsManager *manager; manager = is_application_get_manager(priv->application); is_manager_remove_paths_with_prefix(manager, NVIDIA_PATH_PREFIX); } static void is_nvidia_plugin_class_init(IsNvidiaPluginClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS(klass); g_type_class_add_private(klass, sizeof(IsNvidiaPluginPrivate)); gobject_class->get_property = is_nvidia_plugin_get_property; gobject_class->set_property = is_nvidia_plugin_set_property; gobject_class->finalize = is_nvidia_plugin_finalize; g_object_class_override_property(gobject_class, PROP_OBJECT, "object"); } static void peas_activatable_iface_init(PeasActivatableInterface *iface) { iface->activate = is_nvidia_plugin_activate; iface->deactivate = is_nvidia_plugin_deactivate; } static void is_nvidia_plugin_class_finalize(IsNvidiaPluginClass *klass) { /* nothing to do */ } G_MODULE_EXPORT void peas_register_types(PeasObjectModule *module) { is_nvidia_plugin_register_type(G_TYPE_MODULE(module)); peas_object_module_register_extension_type(module, PEAS_TYPE_ACTIVATABLE, IS_TYPE_NVIDIA_PLUGIN); } indicator-sensors-1.1/plugins/nvidia/is-nvidia-plugin.h000066400000000000000000000043201356741033200233070ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #ifndef __IS_NVIDIA_PLUGIN_H__ #define __IS_NVIDIA_PLUGIN_H__ #include G_BEGIN_DECLS #define IS_TYPE_NVIDIA_PLUGIN \ (is_nvidia_plugin_get_type()) #define IS_NVIDIA_PLUGIN(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ IS_TYPE_NVIDIA_PLUGIN, \ IsNvidiaPlugin)) #define IS_NVIDIA_PLUGIN_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ IS_TYPE_NVIDIA_PLUGIN, \ IsNvidiaPluginClass)) #define IS_IS_NVIDIA_PLUGIN(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ IS_TYPE_NVIDIA_PLUGIN)) #define IS_IS_NVIDIA_PLUGIN_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), \ IS_TYPE_NVIDIA_PLUGIN)) #define IS_NVIDIA_PLUGIN_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ IS_TYPE_NVIDIA_PLUGIN, \ IsNvidiaPluginClass)) typedef struct _IsNvidiaPlugin IsNvidiaPlugin; typedef struct _IsNvidiaPluginClass IsNvidiaPluginClass; typedef struct _IsNvidiaPluginPrivate IsNvidiaPluginPrivate; struct _IsNvidiaPluginClass { PeasExtensionBaseClass parent_class; }; struct _IsNvidiaPlugin { PeasExtensionBase parent; IsNvidiaPluginPrivate *priv; }; GType is_nvidia_plugin_get_type(void) G_GNUC_CONST; G_MODULE_EXPORT void peas_register_types(PeasObjectModule *module); G_END_DECLS #endif /* __IS_NVIDIA_PLUGIN_H__ */ indicator-sensors-1.1/plugins/nvidia/nvidia.plugin000066400000000000000000000004361356741033200224550ustar00rootroot00000000000000[Plugin] Module=libnvidia IAge=2 Name=NVidia Description=Provides sensors from NVidia GPUs Authors=Alex Murray Copyright=Copyright © 2011-2019 Alex Murray Website=http://github.com/alexmurray/indicator-sensors Help=http://github.com/alexmurray/indicator-sensorsindicator-sensors-1.1/plugins/udisks/000077500000000000000000000000001356741033200200105ustar00rootroot00000000000000indicator-sensors-1.1/plugins/udisks/Makefile.am000066400000000000000000000011101356741033200220350ustar00rootroot00000000000000plugindir = $(libdir)/$(PACKAGE)/plugins/udisks AM_CPPFLAGS = \ -I$(top_srcdir) \ $(GLIB_CFLAGS) \ $(GTK_CFLAGS) \ $(APPINDICATOR_CFLAGS) \ $(LIBPEAS_CFLAGS) \ $(GIO_CFLAGS) \ $(LIBATASMART_CFLAGS) \ $(DEBUG_CFLAGS) plugin_LTLIBRARIES = libudisks.la libudisks_la_SOURCES = \ is-udisks-plugin.h \ is-udisks-plugin.c libudisks_la_LDFLAGS = $(PLUGIN_LIBTOOL_FLAGS) libudisks_la_LIBADD = \ $(GLIB_LIBS) \ $(GTK_LIBS) \ $(APPINDICATOR_LIBS) \ $(LIBPEAS_LIBS) \ $(GIO_LIBS) \ $(LIBATASMART_LIBS) plugin_DATA = udisks.plugin EXTRA_DIST = $(plugin_DATA) indicator-sensors-1.1/plugins/udisks/is-udisks-plugin.c000066400000000000000000000301331356741033200233630ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #ifdef HAVE_CONFIG_H #include #endif #include "is-udisks-plugin.h" #include #include #include #include #include #include #define UDISKS_BUS_NAME "org.freedesktop.UDisks" #define UDISKS_INTERFACE_NAME "org.freedesktop.UDisks" #define UDISKS_OBJECT_PATH "/org/freedesktop/UDisks" #define UDISKS_DEVICE_INTERFACE_NAME "org.freedesktop.UDisks.Device" #define UDISKS_PATH_PREFIX "udisks" static void peas_activatable_iface_init(PeasActivatableInterface *iface); G_DEFINE_DYNAMIC_TYPE_EXTENDED(IsUdisksPlugin, is_udisks_plugin, PEAS_TYPE_EXTENSION_BASE, 0, G_IMPLEMENT_INTERFACE_DYNAMIC(PEAS_TYPE_ACTIVATABLE, peas_activatable_iface_init)); enum { PROP_OBJECT = 1, }; struct _IsUdisksPluginPrivate { IsApplication *application; GHashTable *sensors; GDBusConnection *connection; }; static void is_udisks_plugin_finalize(GObject *object); static void is_udisks_plugin_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { IsUdisksPlugin *plugin = IS_UDISKS_PLUGIN(object); switch (prop_id) { case PROP_OBJECT: plugin->priv->application = IS_APPLICATION(g_value_dup_object(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void is_udisks_plugin_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { IsUdisksPlugin *plugin = IS_UDISKS_PLUGIN(object); switch (prop_id) { case PROP_OBJECT: g_value_set_object(value, plugin->priv->application); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void is_udisks_plugin_init(IsUdisksPlugin *self) { IsUdisksPluginPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE(self, IS_TYPE_UDISKS_PLUGIN, IsUdisksPluginPrivate); self->priv = priv; } static void is_udisks_plugin_finalize(GObject *object) { IsUdisksPlugin *self = (IsUdisksPlugin *)object; IsUdisksPluginPrivate *priv = self->priv; if (priv->application) { g_object_unref(priv->application); priv->application = NULL; } G_OBJECT_CLASS(is_udisks_plugin_parent_class)->finalize(object); } static void update_sensor_value(IsTemperatureSensor *sensor, IsUdisksPlugin *self) { IsUdisksPluginPrivate *priv; gchar *device, *path; GDBusProxy *proxy; GVariant *var; GError *error = NULL; SkDisk *sk_disk; const gchar *blob; gsize len; guint64 temperature; gdouble value; const gchar * const options[] = { "nowakeup", NULL }; priv = self->priv; device = g_path_get_basename(is_sensor_get_path(IS_SENSOR(sensor))); path = g_strdup_printf("%s/devices/%s", UDISKS_OBJECT_PATH, device); proxy = g_dbus_proxy_new_sync(priv->connection, G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS, NULL, UDISKS_BUS_NAME, path, UDISKS_DEVICE_INTERFACE_NAME, NULL, &error); g_free(path); g_free(device); if (!proxy) { g_prefix_error(&error, _("Error reading new SMART data for sensor %s"), is_sensor_get_path(IS_SENSOR(sensor))); is_sensor_set_error(IS_SENSOR(sensor), error->message); g_error_free(error); goto out; } /* update smart data */ var = g_variant_new_strv(options, 0); var = g_dbus_proxy_call_sync(proxy, "DriveAtaSmartRefreshData", g_variant_new_tuple(&var, 1), G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); if (!var) { g_prefix_error(&error, _("Error refreshing SMART data for sensor %s"), is_sensor_get_path(IS_SENSOR(sensor))); is_sensor_set_error(IS_SENSOR(sensor), error->message); g_error_free(error); g_object_unref(proxy); goto out; } g_variant_unref(var); var = g_dbus_proxy_get_cached_property(proxy, "DriveAtaSmartBlob"); if (!var) { is_debug("udisks", "unable to get atasmartblob for sensor %s", is_sensor_get_path(IS_SENSOR(sensor))); g_object_unref(proxy); goto out; } g_object_unref(proxy); /* can't unref var until done with blob */ blob = g_variant_get_fixed_array(var, &len, sizeof(gchar)); if (!blob) { /* this can occur if udisks doesn't update immediately, * ignore */ g_variant_unref(var); goto out; } sk_disk_open(NULL, &sk_disk); sk_disk_set_blob(sk_disk, blob, len); if (sk_disk_smart_get_temperature(sk_disk, &temperature) < 0) { is_debug("udisks", "Error getting temperature from AtaSmartBlob for sensor %s", is_sensor_get_path(IS_SENSOR(sensor))); sk_disk_free(sk_disk); g_variant_unref(var); /* TODO: emit error */ goto out; } sk_disk_free(sk_disk); g_variant_unref(var); /* Temperature is in mK, so convert it to K first */ temperature /= 1000; value = (gdouble)temperature - 273.15; is_temperature_sensor_set_celsius_value(sensor, value); is_sensor_set_error(IS_SENSOR(sensor), NULL); out: return; } static void is_udisks_plugin_activate(PeasActivatable *activatable) { IsUdisksPlugin *self = IS_UDISKS_PLUGIN(activatable); IsUdisksPluginPrivate *priv = self->priv; GDBusProxy *proxy; GError *error = NULL; GVariant *container, *paths; GVariantIter iter; gchar *path; priv->connection = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error); if (!priv->connection) { is_warning("udisks", "Failed to open connection to system dbus: %s", error->message); g_error_free(error); goto out; } /* This is the proxy which is only used once during the enumeration of * the device object paths */ proxy = g_dbus_proxy_new_sync(priv->connection, G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES | G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS, NULL, UDISKS_BUS_NAME, UDISKS_OBJECT_PATH, UDISKS_INTERFACE_NAME, NULL, &error); if (!proxy) { is_warning("udisks", "Error getting proxy to udisks on system bus: %s", error->message); g_error_free(error); goto out; } /* The object paths of the disks are enumerated and placed in an array * of object paths */ container = g_dbus_proxy_call_sync(proxy, "EnumerateDevices", NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); if (!container) { is_warning("udisks", "Failed to enumerate disk devices: %s", error->message); g_error_free(error); g_object_unref(proxy); goto out; } paths = g_variant_get_child_value(container, 0); g_variant_unref(container); g_variant_iter_init(&iter, paths); while (g_variant_iter_loop(&iter, "o", &path)) { /* This proxy is used to get the required data in order to build * up the list of sensors */ GDBusProxy *sensor_proxy; GVariant *model, *smart_available; IsSensor *sensor; gchar *name, *sensor_path; sensor_proxy = g_dbus_proxy_new_sync(priv->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, UDISKS_BUS_NAME, path, UDISKS_DEVICE_INTERFACE_NAME, NULL, &error); if (!sensor_proxy) { is_debug("udisks", "error getting sensor proxy for disk %s: %s", path, error->message); g_clear_error(&error); g_object_unref(sensor_proxy); continue; } smart_available = g_dbus_proxy_get_cached_property(sensor_proxy, "DriveAtaSmartIsAvailable"); if (!smart_available) { is_debug("udisks", "error getting smart status for disk %s", path); g_object_unref(sensor_proxy); continue; } if (!g_variant_get_boolean(smart_available)) { is_debug("udisks", "drive %s does not support SMART monitoring, ignoring...", path); g_variant_unref(smart_available); g_object_unref(sensor_proxy); continue; } g_variant_unref(smart_available); model = g_dbus_proxy_get_cached_property(sensor_proxy, "DriveModel"); if (!model) { is_debug("udisks", "error getting drive model for disk %s", path); g_clear_error(&error); g_object_unref(sensor_proxy); continue; } name = g_path_get_basename(path); sensor_path = g_strdup_printf(UDISKS_PATH_PREFIX "/%s", name); sensor = is_temperature_sensor_new(sensor_path); is_sensor_set_label(sensor, g_variant_get_string(model, NULL)); is_sensor_set_digits(sensor, 0); is_sensor_set_icon(sensor, IS_STOCK_DISK); /* only update every minute to avoid waking disk too much */ is_sensor_set_update_interval(sensor, 60); g_signal_connect(sensor, "update-value", G_CALLBACK(update_sensor_value), self); is_manager_add_sensor(is_application_get_manager(priv->application), sensor); g_free(sensor_path); g_free(name); g_object_unref(sensor); g_object_unref(sensor_proxy); } g_variant_unref(paths); g_object_unref(proxy); out: return; } static void is_udisks_plugin_deactivate(PeasActivatable *activatable) { IsUdisksPlugin *self = IS_UDISKS_PLUGIN(activatable); IsUdisksPluginPrivate *priv = self->priv; IsManager *manager; if (priv->connection) { g_object_unref(priv->connection); } manager = is_application_get_manager(priv->application); is_manager_remove_paths_with_prefix(manager, UDISKS_PATH_PREFIX); } static void is_udisks_plugin_class_init(IsUdisksPluginClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS(klass); g_type_class_add_private(klass, sizeof(IsUdisksPluginPrivate)); gobject_class->get_property = is_udisks_plugin_get_property; gobject_class->set_property = is_udisks_plugin_set_property; gobject_class->finalize = is_udisks_plugin_finalize; g_object_class_override_property(gobject_class, PROP_OBJECT, "object"); } static void peas_activatable_iface_init(PeasActivatableInterface *iface) { iface->activate = is_udisks_plugin_activate; iface->deactivate = is_udisks_plugin_deactivate; } static void is_udisks_plugin_class_finalize(IsUdisksPluginClass *klass) { /* nothing to do */ } G_MODULE_EXPORT void peas_register_types(PeasObjectModule *module) { is_udisks_plugin_register_type(G_TYPE_MODULE(module)); peas_object_module_register_extension_type(module, PEAS_TYPE_ACTIVATABLE, IS_TYPE_UDISKS_PLUGIN); } indicator-sensors-1.1/plugins/udisks/is-udisks-plugin.h000066400000000000000000000043201356741033200233670ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #ifndef __IS_UDISKS_PLUGIN_H__ #define __IS_UDISKS_PLUGIN_H__ #include G_BEGIN_DECLS #define IS_TYPE_UDISKS_PLUGIN \ (is_udisks_plugin_get_type()) #define IS_UDISKS_PLUGIN(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ IS_TYPE_UDISKS_PLUGIN, \ IsUdisksPlugin)) #define IS_UDISKS_PLUGIN_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ IS_TYPE_UDISKS_PLUGIN, \ IsUdisksPluginClass)) #define IS_IS_UDISKS_PLUGIN(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ IS_TYPE_UDISKS_PLUGIN)) #define IS_IS_UDISKS_PLUGIN_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), \ IS_TYPE_UDISKS_PLUGIN)) #define IS_UDISKS_PLUGIN_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ IS_TYPE_UDISKS_PLUGIN, \ IsUdisksPluginClass)) typedef struct _IsUdisksPlugin IsUdisksPlugin; typedef struct _IsUdisksPluginClass IsUdisksPluginClass; typedef struct _IsUdisksPluginPrivate IsUdisksPluginPrivate; struct _IsUdisksPluginClass { PeasExtensionBaseClass parent_class; }; struct _IsUdisksPlugin { PeasExtensionBase parent; IsUdisksPluginPrivate *priv; }; GType is_udisks_plugin_get_type(void) G_GNUC_CONST; G_MODULE_EXPORT void peas_register_types(PeasObjectModule *module); G_END_DECLS #endif /* __IS_UDISKS_PLUGIN_H__ */ indicator-sensors-1.1/plugins/udisks/udisks.plugin000066400000000000000000000004541356741033200225350ustar00rootroot00000000000000[Plugin] Module=libudisks IAge=2 Name=udisks Description=Provides disk temperature monitoring via udisks Authors=Alex Murray Copyright=Copyright © 2011-2019 Alex Murray Website=http://github.com/alexmurray/indicator-sensors Help=http://github.com/alexmurray/indicator-sensorsindicator-sensors-1.1/plugins/udisks2/000077500000000000000000000000001356741033200200725ustar00rootroot00000000000000indicator-sensors-1.1/plugins/udisks2/Makefile.am000066400000000000000000000011161356741033200221250ustar00rootroot00000000000000plugindir = $(libdir)/$(PACKAGE)/plugins/udisks2 AM_CPPFLAGS = \ -I$(top_srcdir) \ $(GLIB_CFLAGS) \ $(GTK_CFLAGS) \ $(APPINDICATOR_CFLAGS) \ $(LIBPEAS_CFLAGS) \ $(GIO_CFLAGS) \ $(LIBUDISKS2_CFLAGS) \ $(DEBUG_CFLAGS) plugin_LTLIBRARIES = libudisks2.la libudisks2_la_SOURCES = \ is-udisks2-plugin.h \ is-udisks2-plugin.c libudisks2_la_LDFLAGS = $(PLUGIN_LIBTOOL_FLAGS) libudisks2_la_LIBADD = \ $(GLIB_LIBS) \ $(GTK_LIBS) \ $(APPINDICATOR_LIBS) \ $(LIBPEAS_LIBS) \ $(GIO_LIBS) \ $(LIBUDISKS2_LIBS) plugin_DATA = udisks2.plugin EXTRA_DIST = $(plugin_DATA) indicator-sensors-1.1/plugins/udisks2/is-udisks2-plugin.c000066400000000000000000000273521356741033200235400ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #ifdef HAVE_CONFIG_H #include #endif #include "is-udisks2-plugin.h" #include #include #include #include #include #include #include #define UDISKS2_PATH_PREFIX "udisks2" static void peas_activatable_iface_init(PeasActivatableInterface *iface); G_DEFINE_DYNAMIC_TYPE_EXTENDED(IsUDisks2Plugin, is_udisks2_plugin, PEAS_TYPE_EXTENSION_BASE, 0, G_IMPLEMENT_INTERFACE_DYNAMIC(PEAS_TYPE_ACTIVATABLE, peas_activatable_iface_init)); enum { PROP_OBJECT = 1, }; struct _IsUDisks2PluginPrivate { IsApplication *application; UDisksClient *client; GHashTable *sensors; }; static void is_udisks2_plugin_finalize(GObject *object); static void is_udisks2_plugin_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { IsUDisks2Plugin *plugin = IS_UDISKS2_PLUGIN(object); switch (prop_id) { case PROP_OBJECT: plugin->priv->application = IS_APPLICATION(g_value_dup_object(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void is_udisks2_plugin_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { IsUDisks2Plugin *plugin = IS_UDISKS2_PLUGIN(object); switch (prop_id) { case PROP_OBJECT: g_value_set_object(value, plugin->priv->application); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void is_udisks2_plugin_init(IsUDisks2Plugin *self) { IsUDisks2PluginPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE(self, IS_TYPE_UDISKS2_PLUGIN, IsUDisks2PluginPrivate); self->priv = priv; } static void is_udisks2_plugin_finalize(GObject *object) { IsUDisks2Plugin *self = (IsUDisks2Plugin *)object; IsUDisks2PluginPrivate *priv = self->priv; if (priv->application) { g_object_unref(priv->application); priv->application = NULL; } G_OBJECT_CLASS(is_udisks2_plugin_parent_class)->finalize(object); } static void smart_update_ready_cb(GObject *source, GAsyncResult *res, gpointer data) { UDisksDriveAta *drive = UDISKS_DRIVE_ATA(source); IsTemperatureSensor *sensor = IS_TEMPERATURE_SENSOR(data); GError *error = NULL; gboolean ret; gdouble temp_k; ret = udisks_drive_ata_call_smart_update_finish(drive, res, &error); if (!ret) { g_prefix_error(&error, _("Error reading new SMART data for sensor %s"), is_sensor_get_path(IS_SENSOR(sensor))); is_sensor_set_error(IS_SENSOR(sensor), error->message); g_error_free(error); goto out; } /* temperature is in kelvin */ temp_k = udisks_drive_ata_get_smart_temperature(drive); /* convert to celsius and set if is non-zero */ if (fabs(temp_k) > DBL_EPSILON) is_temperature_sensor_set_celsius_value(sensor, temp_k - 273.15); is_sensor_set_error(IS_SENSOR(sensor), NULL); out: return; } static void pm_get_state_ready_cb(GObject *source, GAsyncResult *res, gpointer data) { UDisksDriveAta *drive = UDISKS_DRIVE_ATA(source); IsTemperatureSensor *sensor = IS_TEMPERATURE_SENSOR(data); GError *error = NULL; gboolean ret; guchar state; ret = udisks_drive_ata_call_pm_get_state_finish(drive, &state, res, &error); if (!ret) { g_prefix_error(&error, _("Error reading power management state for sensor %s"), is_sensor_get_path(IS_SENSOR(sensor))); is_sensor_set_error(IS_SENSOR(sensor), error->message); g_error_free(error); goto out; } is_debug("udisks2", "pm_get_state result: 0x%x", state); // drive is spun down if state is 0 - otherwise assume is spun up and // go ahead and query for new SMART properties if (!state) { // standby - disk is idle so don't bother querying is_temperature_sensor_set_celsius_value(sensor, 0); goto out; } is_debug("udisks2", "pm_get_state doing smart update"); udisks_drive_ata_call_smart_update(drive, /* try not to wakeup disk if is spun down */ g_variant_new_parsed("{'nowakeup': %v}", g_variant_new_boolean(TRUE)), NULL, smart_update_ready_cb, sensor); is_sensor_set_error(IS_SENSOR(sensor), NULL); out: return; } static void update_sensor_value(IsTemperatureSensor *sensor, IsUDisks2Plugin *self) { GDBusObjectManager *manager; gchar *path = NULL; GDBusObject *object; UDisksDriveAta *drive = NULL; manager = udisks_client_get_object_manager(self->priv->client); path = g_strdup_printf("/org/freedesktop/UDisks2/drives/%s", /* get id to find on bus as character past / */ g_strrstr(is_sensor_get_path(IS_SENSOR(sensor)), "/") + 1); object = g_dbus_object_manager_get_object(manager, path); if (!object) { is_error("udisks2", "Error looking up drive with path %s", path); goto out; } g_object_get(object, "drive-ata", &drive, NULL); udisks_drive_ata_call_pm_get_state(drive, g_variant_new("a{sv}", NULL), NULL, pm_get_state_ready_cb, sensor); out: g_clear_object(&drive); g_clear_object(&object); g_free(path); return; } static void object_removed_cb(GDBusObjectManager *obj_manager, GDBusObject *object, gpointer data) { IsUDisks2Plugin *self; IsManager *manager; const gchar *id; gchar *path = NULL; self = IS_UDISKS2_PLUGIN(data); id = g_dbus_object_get_object_path(object); /* ignore if is not a drive */ if (!g_str_has_prefix(id, "/org/freedesktop/UDisks2/drives/")) { goto out; } id = g_strrstr(id, "/") + 1; path = g_strdup_printf(UDISKS2_PATH_PREFIX "/%s", id); manager = is_application_get_manager(self->priv->application); is_debug("udisks2", "Removing sensor %s as drive removed", id); is_manager_remove_path(manager, path); out: g_free(path); } static void object_added_cb(GDBusObjectManager *manager, GDBusObject *object, gpointer data) { IsUDisks2Plugin *self; UDisksDrive *drive = NULL; UDisksDriveAta *ata_drive = NULL; const gchar *id; gchar *path = NULL; IsSensor *sensor; self = IS_UDISKS2_PLUGIN(data); id = g_dbus_object_get_object_path(object); /* ignore if is not a drive */ if (!g_str_has_prefix(id, "/org/freedesktop/UDisks2/drives/")) { goto out; } g_object_get(object, "drive", &drive, "drive-ata", &ata_drive, NULL); if (!drive || !ata_drive || !udisks_drive_ata_get_smart_enabled(ata_drive)) { is_debug("udisks2", "Ignoring drive at path %s as not ATA / SMART enabled\n", id); goto out; } id = g_strrstr(id, "/") + 1; path = g_strdup_printf("udisks2/%s", id); sensor = is_temperature_sensor_new(path); is_sensor_set_label(sensor, udisks_drive_get_model(drive)); is_sensor_set_digits(sensor, 0); is_sensor_set_icon(sensor, IS_STOCK_DISK); /* only update every minute to avoid waking disk too much */ is_sensor_set_update_interval(sensor, 60); g_signal_connect(sensor, "update-value", G_CALLBACK(update_sensor_value), self); is_debug("udisks2", "Adding sensor %s as drive added", id); is_manager_add_sensor(is_application_get_manager(self->priv->application), sensor); out: g_free(path); g_clear_object(&drive); g_clear_object(&ata_drive); } static void is_udisks2_plugin_client_ready_cb(GObject *source, GAsyncResult *res, gpointer data) { IsUDisks2Plugin *self = IS_UDISKS2_PLUGIN(data); IsUDisks2PluginPrivate *priv = self->priv; GError *error = NULL; GDBusObjectManager *manager; GList *objects, *_list; priv->client = udisks_client_new_finish(res, &error); if (!priv->client) { is_debug("udisks2", "Error getting udisks2 client: %s", error->message); g_clear_error(&error); goto out; } manager = udisks_client_get_object_manager(priv->client); if (!manager) { is_debug("udisks2", "Unable to get manager from udisks client"); g_clear_object(&priv->client); goto out; } objects = g_dbus_object_manager_get_objects(manager); for (_list = objects; _list != NULL; _list = _list->next) { object_added_cb(manager, G_DBUS_OBJECT(_list->data), self); g_object_unref(G_OBJECT(_list->data)); } g_list_free(objects); g_signal_connect(manager, "object-added", G_CALLBACK(object_added_cb), self); g_signal_connect(manager, "object-removed", G_CALLBACK(object_removed_cb), self); out: return; } static void is_udisks2_plugin_activate(PeasActivatable *activatable) { IsUDisks2Plugin *self = IS_UDISKS2_PLUGIN(activatable); is_debug("udisks2", "Trying to get udisks client"); udisks_client_new(NULL, is_udisks2_plugin_client_ready_cb, self); } static void is_udisks2_plugin_deactivate(PeasActivatable *activatable) { IsUDisks2Plugin *self = IS_UDISKS2_PLUGIN(activatable); IsUDisks2PluginPrivate *priv = self->priv; IsManager *manager; if (priv->client) { g_object_unref(priv->client); } manager = is_application_get_manager(priv->application); is_manager_remove_paths_with_prefix(manager, UDISKS2_PATH_PREFIX); } static void is_udisks2_plugin_class_init(IsUDisks2PluginClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS(klass); g_type_class_add_private(klass, sizeof(IsUDisks2PluginPrivate)); gobject_class->get_property = is_udisks2_plugin_get_property; gobject_class->set_property = is_udisks2_plugin_set_property; gobject_class->finalize = is_udisks2_plugin_finalize; g_object_class_override_property(gobject_class, PROP_OBJECT, "object"); } static void peas_activatable_iface_init(PeasActivatableInterface *iface) { iface->activate = is_udisks2_plugin_activate; iface->deactivate = is_udisks2_plugin_deactivate; } static void is_udisks2_plugin_class_finalize(IsUDisks2PluginClass *klass) { /* nothing to do */ } G_MODULE_EXPORT void peas_register_types(PeasObjectModule *module) { is_udisks2_plugin_register_type(G_TYPE_MODULE(module)); peas_object_module_register_extension_type(module, PEAS_TYPE_ACTIVATABLE, IS_TYPE_UDISKS2_PLUGIN); } indicator-sensors-1.1/plugins/udisks2/is-udisks2-plugin.h000066400000000000000000000043571356741033200235450ustar00rootroot00000000000000/* * Copyright (C) 2011-2019 Alex Murray * * indicator-sensors 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. * * indicator-sensors 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 indicator-sensors. If not, see . */ #ifndef __IS_UDISKS2_PLUGIN_H__ #define __IS_UDISKS2_PLUGIN_H__ #include G_BEGIN_DECLS #define IS_TYPE_UDISKS2_PLUGIN \ (is_udisks2_plugin_get_type()) #define IS_UDISKS2_PLUGIN(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ IS_TYPE_UDISKS2_PLUGIN, \ IsUDisks2Plugin)) #define IS_UDISKS2_PLUGIN_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ IS_TYPE_UDISKS2_PLUGIN, \ IsUDisks2PluginClass)) #define IS_IS_UDISKS2_PLUGIN(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ IS_TYPE_UDISKS2_PLUGIN)) #define IS_IS_UDISKS2_PLUGIN_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), \ IS_TYPE_UDISKS2_PLUGIN)) #define IS_UDISKS2_PLUGIN_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ IS_TYPE_UDISKS2_PLUGIN, \ IsUDisks2PluginClass)) typedef struct _IsUDisks2Plugin IsUDisks2Plugin; typedef struct _IsUDisks2PluginClass IsUDisks2PluginClass; typedef struct _IsUDisks2PluginPrivate IsUDisks2PluginPrivate; struct _IsUDisks2PluginClass { PeasExtensionBaseClass parent_class; }; struct _IsUDisks2Plugin { PeasExtensionBase parent; IsUDisks2PluginPrivate *priv; }; GType is_udisks2_plugin_get_type(void) G_GNUC_CONST; G_MODULE_EXPORT void peas_register_types(PeasObjectModule *module); G_END_DECLS #endif /* __IS_UDISKS2_PLUGIN_H__ */ indicator-sensors-1.1/plugins/udisks2/udisks2.plugin000066400000000000000000000004571356741033200227040ustar00rootroot00000000000000[Plugin] Module=libudisks2 IAge=2 Name=udisks2 Description=Provides disk temperature monitoring via udisks2 Authors=Alex Murray Copyright=Copyright © 2011-2019 Alex Murray Website=http://github.com/alexmurray/indicator-sensors Help=http://github.com/alexmurray/indicator-sensorsindicator-sensors-1.1/po/000077500000000000000000000000001356741033200154435ustar00rootroot00000000000000indicator-sensors-1.1/po/LINGUAS000066400000000000000000000001741356741033200164720ustar00rootroot00000000000000# please keep this list sorted alphabetically ar ca cs de en_GB eo es fr gl he hr hu it ko lt nl pl ro ru sk sr tr uk zh_CN indicator-sensors-1.1/po/POTFILES.in000066400000000000000000000012071356741033200172200ustar00rootroot00000000000000data/indicator-sensors.gschema.xml.in data/indicator-sensors.gschema.xml.in.in data/indicator-sensors.desktop.in data/indicator-sensors.appdata.xml.in indicator-sensors/indicator-sensors.c indicator-sensors/is-application.c indicator-sensors/is-fan-sensor.c indicator-sensors/is-indicator.c indicator-sensors/is-manager.c indicator-sensors/is-preferences-dialog.c indicator-sensors/is-sensor.c indicator-sensors/is-sensor-dialog.c plugins/aticonfig/is-aticonfig-plugin.c plugins/fake/is-fake-plugin.c plugins/libsensors/is-libsensors-plugin.c plugins/nvidia/is-nvidia-plugin.c plugins/udisks/is-udisks-plugin.c plugins/udisks2/is-udisks2-plugin.c indicator-sensors-1.1/po/ar.po000066400000000000000000000204201356741033200164030ustar00rootroot00000000000000# Arabic translation for indicator-sensors # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the indicator-sensors package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: indicator-sensors\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 22:58+1030\n" "PO-Revision-Date: 2012-04-27 22:15+0000\n" "Last-Translator: Hanine HAMZIOUI \n" "Language-Team: Arabic \n" "Language: ar\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-11-02 11:56+0000\n" "X-Generator: Launchpad (build 16820)\n" #: ../data/indicator-sensors.gschema.xml.in.h:1 #: ../data/indicator-sensors.gschema.xml.in.in.h:1 msgid "Primary sensor to display" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:2 #: ../data/indicator-sensors.gschema.xml.in.in.h:2 msgid "" "The primary sensor to display in the indicator, identified by it’s path." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:3 #: ../data/indicator-sensors.gschema.xml.in.in.h:3 msgid "Display flags for the indicator" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:4 #: ../data/indicator-sensors.gschema.xml.in.in.h:4 msgid "The elements used to display the primary sensor within the indicator." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:5 #: ../data/indicator-sensors.gschema.xml.in.in.h:5 msgid "Enabled sensors" msgstr "مستشعرات ممكنة" #: ../data/indicator-sensors.gschema.xml.in.h:6 #: ../data/indicator-sensors.gschema.xml.in.in.h:6 msgid "The list of enabled sensors to monitor, each identified by it’s path." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:7 #: ../data/indicator-sensors.gschema.xml.in.in.h:7 msgid "Seconds to delay hiding / showing alarms" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:8 #: ../data/indicator-sensors.gschema.xml.in.in.h:8 msgid "" "Alarm delay adds some hysteresis so alarms aren't shown for quickly " "fluctuating values." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:9 #: ../data/indicator-sensors.gschema.xml.in.in.h:9 #: ../indicator-sensors/is-preferences-dialog.c:168 msgid "Temperature scale" msgstr "سلم الحرارة" #: ../data/indicator-sensors.gschema.xml.in.h:10 #: ../data/indicator-sensors.gschema.xml.in.in.h:10 msgid "The temperature scale to display temperature sensor values." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:11 #: ../data/indicator-sensors.gschema.xml.in.in.h:11 msgid "Show indicator" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:12 #: ../data/indicator-sensors.gschema.xml.in.in.h:12 msgid "Whether to show the indicator in the notification area." msgstr "" #: ../data/indicator-sensors.desktop.in.h:1 #: ../indicator-sensors/is-application.c:822 msgid "Hardware Sensors Indicator" msgstr "مؤشر مستشعرات الأجهزة" #: ../data/indicator-sensors.desktop.in.h:2 msgid "An indicator for Unity which displays hardware sensor readings" msgstr "مؤشر خاص بيونيتي (Unity) لعرض قراءآت مستشعرات الأجهزة" #: ../data/indicator-sensors.appdata.xml.in.h:1 msgid "" "Hardware Sensors Indicator provides temperature, fan and voltage sensor " "readings within the panel of your desktop." msgstr "" #: ../data/indicator-sensors.appdata.xml.in.h:2 msgid "" "When running GNOME Shell it is recommended to also install the associated " "GNOME Shell extension from extensions.gnome.org - https://extensions.gnome." "org/extension/336/hardware-sensors-indicator/ ." msgstr "" #: ../indicator-sensors/indicator-sensors.c:152 msgid "No Sensors Enabled For Monitoring" msgstr "" #: ../indicator-sensors/indicator-sensors.c:153 msgid "" "Sensors detected but none are enabled for monitoring. To enable monitoring " "of sensors open the Preferences window and select the sensors to monitor" msgstr "" #: ../indicator-sensors/is-application.c:824 msgid "Indicator for GNOME / Unity showing hardware sensors." msgstr "" #: ../indicator-sensors/is-fan-sensor.c:40 msgid " RPM" msgstr "" #: ../indicator-sensors/is-indicator.c:160 msgid "Preferences…" msgstr "التفضيلات…" #: ../indicator-sensors/is-indicator.c:161 msgid "Preferences" msgstr "تفضيلات" #: ../indicator-sensors/is-indicator.c:162 msgid "About…" msgstr "حول البرنامج..." #: ../indicator-sensors/is-indicator.c:163 msgid "About" msgstr "" #: ../indicator-sensors/is-indicator.c:164 #: ../indicator-sensors/is-indicator.c:165 msgid "Quit" msgstr "أُخرج" #: ../indicator-sensors/is-indicator.c:237 msgid "No Sensors" msgstr "لا مستشعرات" #: ../indicator-sensors/is-indicator.c:554 #: ../indicator-sensors/is-indicator.c:680 msgid "No active sensors" msgstr "لا مستشعرات نشيطة" #: ../indicator-sensors/is-manager.c:302 #: ../indicator-sensors/is-sensor-dialog.c:315 msgid "Sensor" msgstr "مستشعر" #: ../indicator-sensors/is-manager.c:310 #: ../indicator-sensors/is-preferences-dialog.c:149 msgid "Icon" msgstr "رمز" #: ../indicator-sensors/is-manager.c:319 #: ../indicator-sensors/is-preferences-dialog.c:154 #: ../indicator-sensors/is-sensor-dialog.c:106 msgid "Label" msgstr "التسمية" #: ../indicator-sensors/is-manager.c:329 msgid "Enabled" msgstr "ممكّن" #: ../indicator-sensors/is-preferences-dialog.c:108 msgid "Hardware Sensors Indicator Preferences" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:127 msgid "General" msgstr "عام" #: ../indicator-sensors/is-preferences-dialog.c:135 msgid "Start automatically on login" msgstr "بدء التشغيل تلقائيا عند تسجيل الدخول" #: ../indicator-sensors/is-preferences-dialog.c:141 msgid "Primary sensor display" msgstr "عرض المستشعر الأساسي" #: ../indicator-sensors/is-preferences-dialog.c:159 msgid "Value" msgstr "القيمة" #: ../indicator-sensors/is-preferences-dialog.c:176 msgid "Celsius (°C)" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:187 msgid "Fahrenheit (°F)" msgstr "فهرنهايت (درجة فهرنهايت)" #: ../indicator-sensors/is-sensor.c:380 msgid "Sensor Alarm" msgstr "" #: ../indicator-sensors/is-sensor-dialog.c:88 msgid " Sensor Properties" msgstr " خصائص المستشعر" #: ../indicator-sensors/is-sensor-dialog.c:115 msgid "Alarm" msgstr "منبه" #: ../indicator-sensors/is-sensor-dialog.c:123 msgid "Disabled" msgstr "مُعطَّل" #: ../indicator-sensors/is-sensor-dialog.c:126 msgid "Below" msgstr "أقل من" #: ../indicator-sensors/is-sensor-dialog.c:129 msgid "Above" msgstr "فوق" #: ../indicator-sensors/is-sensor-dialog.c:147 msgid "Low value" msgstr "قيمة منخفضة" #: ../indicator-sensors/is-sensor-dialog.c:166 msgid "High value" msgstr "قيمة مرتفعة" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:159 #, c-format msgid "Error reading temperature value for GPU %d" msgstr "" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:198 #, c-format msgid "Error reading fanspeed value for GPU %d" msgstr "" #: ../plugins/aticonfig/is-aticonfig-plugin.c:337 msgid "Temperature" msgstr "درجة الحرارة" #: ../plugins/aticonfig/is-aticonfig-plugin.c:355 msgid "Fan" msgstr "المروحة" #. first placeholder is sensor name, #. * second is error message #: ../plugins/libsensors/is-libsensors-plugin.c:174 #, c-format msgid "Error getting sensor value for sensor %s: %s [%d]" msgstr "" #. translators: V is the unit for Voltage, replace with #. appropriate unit #: ../plugins/libsensors/is-libsensors-plugin.c:315 msgid "V" msgstr "فولت" #: ../plugins/libsensors/is-libsensors-plugin.c:375 msgid "No Sensors Detected" msgstr "" #: ../plugins/libsensors/is-libsensors-plugin.c:376 #, c-format msgid "" "Try running the command 'sensors-detect' from the command-line and " "restarting %s" msgstr "" #. first placeholder is #. * sensor name #: ../plugins/nvidia/is-nvidia-plugin.c:192 #, c-format msgid "Error getting sensor value for sensor %s" msgstr "" #: ../plugins/udisks/is-udisks-plugin.c:149 #: ../plugins/udisks2/is-udisks2-plugin.c:126 #, c-format msgid "Error reading new SMART data for sensor %s" msgstr "" #: ../plugins/udisks/is-udisks-plugin.c:165 #, c-format msgid "Error refreshing SMART data for sensor %s" msgstr "" indicator-sensors-1.1/po/ca.po000066400000000000000000000175601356741033200163770ustar00rootroot00000000000000# Catalan translation for indicator-sensors # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the indicator-sensors package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: indicator-sensors\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 22:58+1030\n" "PO-Revision-Date: 2013-08-06 19:27+0000\n" "Last-Translator: pataquets \n" "Language-Team: Catalan \n" "Language: ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-11-02 11:56+0000\n" "X-Generator: Launchpad (build 16820)\n" #: ../data/indicator-sensors.gschema.xml.in.h:1 #: ../data/indicator-sensors.gschema.xml.in.in.h:1 msgid "Primary sensor to display" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:2 #: ../data/indicator-sensors.gschema.xml.in.in.h:2 msgid "" "The primary sensor to display in the indicator, identified by it’s path." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:3 #: ../data/indicator-sensors.gschema.xml.in.in.h:3 msgid "Display flags for the indicator" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:4 #: ../data/indicator-sensors.gschema.xml.in.in.h:4 msgid "The elements used to display the primary sensor within the indicator." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:5 #: ../data/indicator-sensors.gschema.xml.in.in.h:5 msgid "Enabled sensors" msgstr "Sensors activats" #: ../data/indicator-sensors.gschema.xml.in.h:6 #: ../data/indicator-sensors.gschema.xml.in.in.h:6 msgid "The list of enabled sensors to monitor, each identified by it’s path." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:7 #: ../data/indicator-sensors.gschema.xml.in.in.h:7 msgid "Seconds to delay hiding / showing alarms" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:8 #: ../data/indicator-sensors.gschema.xml.in.in.h:8 msgid "" "Alarm delay adds some hysteresis so alarms aren't shown for quickly " "fluctuating values." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:9 #: ../data/indicator-sensors.gschema.xml.in.in.h:9 #: ../indicator-sensors/is-preferences-dialog.c:168 msgid "Temperature scale" msgstr "Escala de temperatures" #: ../data/indicator-sensors.gschema.xml.in.h:10 #: ../data/indicator-sensors.gschema.xml.in.in.h:10 msgid "The temperature scale to display temperature sensor values." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:11 #: ../data/indicator-sensors.gschema.xml.in.in.h:11 msgid "Show indicator" msgstr "Mostra indicador" #: ../data/indicator-sensors.gschema.xml.in.h:12 #: ../data/indicator-sensors.gschema.xml.in.in.h:12 msgid "Whether to show the indicator in the notification area." msgstr "" #: ../data/indicator-sensors.desktop.in.h:1 #: ../indicator-sensors/is-application.c:822 msgid "Hardware Sensors Indicator" msgstr "" #: ../data/indicator-sensors.desktop.in.h:2 msgid "An indicator for Unity which displays hardware sensor readings" msgstr "" #: ../data/indicator-sensors.appdata.xml.in.h:1 msgid "" "Hardware Sensors Indicator provides temperature, fan and voltage sensor " "readings within the panel of your desktop." msgstr "" #: ../data/indicator-sensors.appdata.xml.in.h:2 msgid "" "When running GNOME Shell it is recommended to also install the associated " "GNOME Shell extension from extensions.gnome.org - https://extensions.gnome." "org/extension/336/hardware-sensors-indicator/ ." msgstr "" #: ../indicator-sensors/indicator-sensors.c:152 msgid "No Sensors Enabled For Monitoring" msgstr "" #: ../indicator-sensors/indicator-sensors.c:153 msgid "" "Sensors detected but none are enabled for monitoring. To enable monitoring " "of sensors open the Preferences window and select the sensors to monitor" msgstr "" #: ../indicator-sensors/is-application.c:824 msgid "Indicator for GNOME / Unity showing hardware sensors." msgstr "" #: ../indicator-sensors/is-fan-sensor.c:40 msgid " RPM" msgstr " RPM" #: ../indicator-sensors/is-indicator.c:160 msgid "Preferences…" msgstr "Preferències…" #: ../indicator-sensors/is-indicator.c:161 msgid "Preferences" msgstr "Preferències" #: ../indicator-sensors/is-indicator.c:162 msgid "About…" msgstr "" #: ../indicator-sensors/is-indicator.c:163 msgid "About" msgstr "Quant a" #: ../indicator-sensors/is-indicator.c:164 #: ../indicator-sensors/is-indicator.c:165 msgid "Quit" msgstr "Surt" #: ../indicator-sensors/is-indicator.c:237 msgid "No Sensors" msgstr "No hi ha sensors" #: ../indicator-sensors/is-indicator.c:554 #: ../indicator-sensors/is-indicator.c:680 msgid "No active sensors" msgstr "No hi ha sensors actius" #: ../indicator-sensors/is-manager.c:302 #: ../indicator-sensors/is-sensor-dialog.c:315 msgid "Sensor" msgstr "Sensor" #: ../indicator-sensors/is-manager.c:310 #: ../indicator-sensors/is-preferences-dialog.c:149 msgid "Icon" msgstr "Icona" #: ../indicator-sensors/is-manager.c:319 #: ../indicator-sensors/is-preferences-dialog.c:154 #: ../indicator-sensors/is-sensor-dialog.c:106 msgid "Label" msgstr "Etiqueta" #: ../indicator-sensors/is-manager.c:329 msgid "Enabled" msgstr "Activat" #: ../indicator-sensors/is-preferences-dialog.c:108 msgid "Hardware Sensors Indicator Preferences" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:127 msgid "General" msgstr "General" #: ../indicator-sensors/is-preferences-dialog.c:135 msgid "Start automatically on login" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:141 msgid "Primary sensor display" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:159 msgid "Value" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:176 msgid "Celsius (°C)" msgstr "Celsius (°C)" #: ../indicator-sensors/is-preferences-dialog.c:187 msgid "Fahrenheit (°F)" msgstr "Fahrenheit (°F)" #: ../indicator-sensors/is-sensor.c:380 msgid "Sensor Alarm" msgstr "" #: ../indicator-sensors/is-sensor-dialog.c:88 msgid " Sensor Properties" msgstr "" #: ../indicator-sensors/is-sensor-dialog.c:115 msgid "Alarm" msgstr "Alarma" #: ../indicator-sensors/is-sensor-dialog.c:123 msgid "Disabled" msgstr "Desactivat" #: ../indicator-sensors/is-sensor-dialog.c:126 msgid "Below" msgstr "Per sota" #: ../indicator-sensors/is-sensor-dialog.c:129 msgid "Above" msgstr "Per damunt" #: ../indicator-sensors/is-sensor-dialog.c:147 msgid "Low value" msgstr "" #: ../indicator-sensors/is-sensor-dialog.c:166 msgid "High value" msgstr "" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:159 #, c-format msgid "Error reading temperature value for GPU %d" msgstr "" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:198 #, c-format msgid "Error reading fanspeed value for GPU %d" msgstr "" #: ../plugins/aticonfig/is-aticonfig-plugin.c:337 msgid "Temperature" msgstr "Temperatura" #: ../plugins/aticonfig/is-aticonfig-plugin.c:355 msgid "Fan" msgstr "Ventilador" #. first placeholder is sensor name, #. * second is error message #: ../plugins/libsensors/is-libsensors-plugin.c:174 #, c-format msgid "Error getting sensor value for sensor %s: %s [%d]" msgstr "" #. translators: V is the unit for Voltage, replace with #. appropriate unit #: ../plugins/libsensors/is-libsensors-plugin.c:315 msgid "V" msgstr "V" #: ../plugins/libsensors/is-libsensors-plugin.c:375 msgid "No Sensors Detected" msgstr "" #: ../plugins/libsensors/is-libsensors-plugin.c:376 #, c-format msgid "" "Try running the command 'sensors-detect' from the command-line and " "restarting %s" msgstr "" #. first placeholder is #. * sensor name #: ../plugins/nvidia/is-nvidia-plugin.c:192 #, c-format msgid "Error getting sensor value for sensor %s" msgstr "" #: ../plugins/udisks/is-udisks-plugin.c:149 #: ../plugins/udisks2/is-udisks2-plugin.c:126 #, c-format msgid "Error reading new SMART data for sensor %s" msgstr "" #: ../plugins/udisks/is-udisks-plugin.c:165 #, c-format msgid "Error refreshing SMART data for sensor %s" msgstr "" indicator-sensors-1.1/po/cs.po000066400000000000000000000224131356741033200164120ustar00rootroot00000000000000# Czech translation for indicator-sensors # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the indicator-sensors package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: indicator-sensors\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 22:58+1030\n" "PO-Revision-Date: 2013-08-29 15:29+0000\n" "Last-Translator: Michal Lelek \n" "Language-Team: Czech \n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-11-02 11:56+0000\n" "X-Generator: Launchpad (build 16820)\n" #: ../data/indicator-sensors.gschema.xml.in.h:1 #: ../data/indicator-sensors.gschema.xml.in.in.h:1 msgid "Primary sensor to display" msgstr "Hlavní senzor k zobrazení" #: ../data/indicator-sensors.gschema.xml.in.h:2 #: ../data/indicator-sensors.gschema.xml.in.in.h:2 msgid "" "The primary sensor to display in the indicator, identified by it’s path." msgstr "" "Hlavní senzor k zobrazení v indikátoru, každý je identifikován vlastní " "hlavičkou." #: ../data/indicator-sensors.gschema.xml.in.h:3 #: ../data/indicator-sensors.gschema.xml.in.in.h:3 msgid "Display flags for the indicator" msgstr "Zobrazení příznaků pro indikátor" #: ../data/indicator-sensors.gschema.xml.in.h:4 #: ../data/indicator-sensors.gschema.xml.in.in.h:4 msgid "The elements used to display the primary sensor within the indicator." msgstr "Tyto prvky slouží k zobrazení hlavního senzoru uvnitř indikátoru." #: ../data/indicator-sensors.gschema.xml.in.h:5 #: ../data/indicator-sensors.gschema.xml.in.in.h:5 msgid "Enabled sensors" msgstr "Povolit senzory" #: ../data/indicator-sensors.gschema.xml.in.h:6 #: ../data/indicator-sensors.gschema.xml.in.in.h:6 msgid "The list of enabled sensors to monitor, each identified by it’s path." msgstr "" "Seznam povolených senzorů k monitorování, každý je identifikován vlastní " "hlavičkou." #: ../data/indicator-sensors.gschema.xml.in.h:7 #: ../data/indicator-sensors.gschema.xml.in.in.h:7 msgid "Seconds to delay hiding / showing alarms" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:8 #: ../data/indicator-sensors.gschema.xml.in.in.h:8 msgid "" "Alarm delay adds some hysteresis so alarms aren't shown for quickly " "fluctuating values." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:9 #: ../data/indicator-sensors.gschema.xml.in.in.h:9 #: ../indicator-sensors/is-preferences-dialog.c:168 msgid "Temperature scale" msgstr "Teplotní stupnice" #: ../data/indicator-sensors.gschema.xml.in.h:10 #: ../data/indicator-sensors.gschema.xml.in.in.h:10 msgid "The temperature scale to display temperature sensor values." msgstr "Teplotní stupnice ke zobrazení teplotních hodnot senzoru." #: ../data/indicator-sensors.gschema.xml.in.h:11 #: ../data/indicator-sensors.gschema.xml.in.in.h:11 msgid "Show indicator" msgstr "Zobrazit indikátor" #: ../data/indicator-sensors.gschema.xml.in.h:12 #: ../data/indicator-sensors.gschema.xml.in.in.h:12 msgid "Whether to show the indicator in the notification area." msgstr "Zobrazení indikátoru v oznamovací oblasti." #: ../data/indicator-sensors.desktop.in.h:1 #: ../indicator-sensors/is-application.c:822 msgid "Hardware Sensors Indicator" msgstr "Indikátor hardwarových senzorů" #: ../data/indicator-sensors.desktop.in.h:2 msgid "An indicator for Unity which displays hardware sensor readings" msgstr "Indikátor pro Unity, který zobrazuje hodnoty hardwarových senzorů" #: ../data/indicator-sensors.appdata.xml.in.h:1 msgid "" "Hardware Sensors Indicator provides temperature, fan and voltage sensor " "readings within the panel of your desktop." msgstr "" #: ../data/indicator-sensors.appdata.xml.in.h:2 msgid "" "When running GNOME Shell it is recommended to also install the associated " "GNOME Shell extension from extensions.gnome.org - https://extensions.gnome." "org/extension/336/hardware-sensors-indicator/ ." msgstr "" #: ../indicator-sensors/indicator-sensors.c:152 msgid "No Sensors Enabled For Monitoring" msgstr "Žádné senzory nejsou povoleny pro monitorování" #: ../indicator-sensors/indicator-sensors.c:153 msgid "" "Sensors detected but none are enabled for monitoring. To enable monitoring " "of sensors open the Preferences window and select the sensors to monitor" msgstr "" "Senzory jsou detekovány, ale žádný není povolen pro monitorování. Pro " "povolení senzorů otevřete nabídku s nastavením a vyberte požadovaný senzor" #: ../indicator-sensors/is-application.c:824 msgid "Indicator for GNOME / Unity showing hardware sensors." msgstr "Indikátor pro GNOME / Unity zobrazující hardwarové senzory." #: ../indicator-sensors/is-fan-sensor.c:40 msgid " RPM" msgstr " RPM" #: ../indicator-sensors/is-indicator.c:160 msgid "Preferences…" msgstr "Předvolby…" #: ../indicator-sensors/is-indicator.c:161 msgid "Preferences" msgstr "Předvolby" #: ../indicator-sensors/is-indicator.c:162 msgid "About…" msgstr "O aplikaci..." #: ../indicator-sensors/is-indicator.c:163 msgid "About" msgstr "O aplikaci" #: ../indicator-sensors/is-indicator.c:164 #: ../indicator-sensors/is-indicator.c:165 msgid "Quit" msgstr "Ukončit" #: ../indicator-sensors/is-indicator.c:237 msgid "No Sensors" msgstr "Žádný senzor" #: ../indicator-sensors/is-indicator.c:554 #: ../indicator-sensors/is-indicator.c:680 msgid "No active sensors" msgstr "Žádné aktivní senzory" #: ../indicator-sensors/is-manager.c:302 #: ../indicator-sensors/is-sensor-dialog.c:315 msgid "Sensor" msgstr "Senzor" #: ../indicator-sensors/is-manager.c:310 #: ../indicator-sensors/is-preferences-dialog.c:149 msgid "Icon" msgstr "Ikona" #: ../indicator-sensors/is-manager.c:319 #: ../indicator-sensors/is-preferences-dialog.c:154 #: ../indicator-sensors/is-sensor-dialog.c:106 msgid "Label" msgstr "Označení" #: ../indicator-sensors/is-manager.c:329 msgid "Enabled" msgstr "Povoleno" #: ../indicator-sensors/is-preferences-dialog.c:108 msgid "Hardware Sensors Indicator Preferences" msgstr "Predvolby indikátora hardvérových senzorov" #: ../indicator-sensors/is-preferences-dialog.c:127 msgid "General" msgstr "Obecné" #: ../indicator-sensors/is-preferences-dialog.c:135 msgid "Start automatically on login" msgstr "Spustit při přihlášení" #: ../indicator-sensors/is-preferences-dialog.c:141 msgid "Primary sensor display" msgstr "Primární zobrazení senzoru" #: ../indicator-sensors/is-preferences-dialog.c:159 msgid "Value" msgstr "Hodnota" #: ../indicator-sensors/is-preferences-dialog.c:176 msgid "Celsius (°C)" msgstr "Celsia (°C)" #: ../indicator-sensors/is-preferences-dialog.c:187 msgid "Fahrenheit (°F)" msgstr "Fahrenheita (°F)" #: ../indicator-sensors/is-sensor.c:380 msgid "Sensor Alarm" msgstr "Alarm senzoru" #: ../indicator-sensors/is-sensor-dialog.c:88 msgid " Sensor Properties" msgstr " Vlastnosti senzorů" #: ../indicator-sensors/is-sensor-dialog.c:115 msgid "Alarm" msgstr "Alarm" #: ../indicator-sensors/is-sensor-dialog.c:123 msgid "Disabled" msgstr "Zakázáno" #: ../indicator-sensors/is-sensor-dialog.c:126 msgid "Below" msgstr "Nižší než" #: ../indicator-sensors/is-sensor-dialog.c:129 msgid "Above" msgstr "Vyšší než" #: ../indicator-sensors/is-sensor-dialog.c:147 msgid "Low value" msgstr "Nejnižší hodnota" #: ../indicator-sensors/is-sensor-dialog.c:166 msgid "High value" msgstr "Nejvyšší hodnota" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:159 #, c-format msgid "Error reading temperature value for GPU %d" msgstr "Chyba při získávání informací o teplotě GPU %d" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:198 #, c-format msgid "Error reading fanspeed value for GPU %d" msgstr "Chyba při získávání hodnot pro rychlost větráčku GPU %d" #: ../plugins/aticonfig/is-aticonfig-plugin.c:337 msgid "Temperature" msgstr "Teplota" #: ../plugins/aticonfig/is-aticonfig-plugin.c:355 msgid "Fan" msgstr "Větrák" #. first placeholder is sensor name, #. * second is error message #: ../plugins/libsensors/is-libsensors-plugin.c:174 #, c-format msgid "Error getting sensor value for sensor %s: %s [%d]" msgstr "Chyby při získávání hodnoty ze senzoru %s: %s [%d]" #. translators: V is the unit for Voltage, replace with #. appropriate unit #: ../plugins/libsensors/is-libsensors-plugin.c:315 msgid "V" msgstr "V" #: ../plugins/libsensors/is-libsensors-plugin.c:375 msgid "No Sensors Detected" msgstr "Žádné senzory nejsou detekovány" #: ../plugins/libsensors/is-libsensors-plugin.c:376 #, c-format msgid "" "Try running the command 'sensors-detect' from the command-line and " "restarting %s" msgstr "Spusťte příkaz 'sensors-detect' z příkazové řádky a restartujte %s" #. first placeholder is #. * sensor name #: ../plugins/nvidia/is-nvidia-plugin.c:192 #, c-format msgid "Error getting sensor value for sensor %s" msgstr "Chyba při získávání hodnoty ze senzoru %s" #: ../plugins/udisks/is-udisks-plugin.c:149 #: ../plugins/udisks2/is-udisks2-plugin.c:126 #, c-format msgid "Error reading new SMART data for sensor %s" msgstr "Chyba při čtení SMART dat u senzoru %s" #: ../plugins/udisks/is-udisks-plugin.c:165 #, c-format msgid "Error refreshing SMART data for sensor %s" msgstr "Chyba při znovu načítání SMART dat u senzoru %s" indicator-sensors-1.1/po/de.po000066400000000000000000000203741356741033200164010ustar00rootroot00000000000000# German translation for indicator-sensors # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the indicator-sensors package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: indicator-sensors\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 22:58+1030\n" "PO-Revision-Date: 2012-02-29 14:53+0000\n" "Last-Translator: Jan Simon \n" "Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-11-02 11:56+0000\n" "X-Generator: Launchpad (build 16820)\n" #: ../data/indicator-sensors.gschema.xml.in.h:1 #: ../data/indicator-sensors.gschema.xml.in.in.h:1 msgid "Primary sensor to display" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:2 #: ../data/indicator-sensors.gschema.xml.in.in.h:2 msgid "" "The primary sensor to display in the indicator, identified by it’s path." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:3 #: ../data/indicator-sensors.gschema.xml.in.in.h:3 msgid "Display flags for the indicator" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:4 #: ../data/indicator-sensors.gschema.xml.in.in.h:4 msgid "The elements used to display the primary sensor within the indicator." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:5 #: ../data/indicator-sensors.gschema.xml.in.in.h:5 msgid "Enabled sensors" msgstr "Aktivierte Module" #: ../data/indicator-sensors.gschema.xml.in.h:6 #: ../data/indicator-sensors.gschema.xml.in.in.h:6 msgid "The list of enabled sensors to monitor, each identified by it’s path." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:7 #: ../data/indicator-sensors.gschema.xml.in.in.h:7 msgid "Seconds to delay hiding / showing alarms" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:8 #: ../data/indicator-sensors.gschema.xml.in.in.h:8 msgid "" "Alarm delay adds some hysteresis so alarms aren't shown for quickly " "fluctuating values." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:9 #: ../data/indicator-sensors.gschema.xml.in.in.h:9 #: ../indicator-sensors/is-preferences-dialog.c:168 msgid "Temperature scale" msgstr "Temperaturskala" #: ../data/indicator-sensors.gschema.xml.in.h:10 #: ../data/indicator-sensors.gschema.xml.in.in.h:10 msgid "The temperature scale to display temperature sensor values." msgstr "" "Die Temperaturskala für die Anzeige der Werte des Temperatur-" "Systeminformations-Moduls." #: ../data/indicator-sensors.gschema.xml.in.h:11 #: ../data/indicator-sensors.gschema.xml.in.in.h:11 msgid "Show indicator" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:12 #: ../data/indicator-sensors.gschema.xml.in.in.h:12 msgid "Whether to show the indicator in the notification area." msgstr "" #: ../data/indicator-sensors.desktop.in.h:1 #: ../indicator-sensors/is-application.c:822 msgid "Hardware Sensors Indicator" msgstr "Status-Applet zur Anzeige von Systeminformation." #: ../data/indicator-sensors.desktop.in.h:2 msgid "An indicator for Unity which displays hardware sensor readings" msgstr "Ein Status-Applet für Unity, das Systeminformationen anzeigt." #: ../data/indicator-sensors.appdata.xml.in.h:1 msgid "" "Hardware Sensors Indicator provides temperature, fan and voltage sensor " "readings within the panel of your desktop." msgstr "" #: ../data/indicator-sensors.appdata.xml.in.h:2 msgid "" "When running GNOME Shell it is recommended to also install the associated " "GNOME Shell extension from extensions.gnome.org - https://extensions.gnome." "org/extension/336/hardware-sensors-indicator/ ." msgstr "" #: ../indicator-sensors/indicator-sensors.c:152 msgid "No Sensors Enabled For Monitoring" msgstr "" #: ../indicator-sensors/indicator-sensors.c:153 msgid "" "Sensors detected but none are enabled for monitoring. To enable monitoring " "of sensors open the Preferences window and select the sensors to monitor" msgstr "" #: ../indicator-sensors/is-application.c:824 msgid "Indicator for GNOME / Unity showing hardware sensors." msgstr "" #: ../indicator-sensors/is-fan-sensor.c:40 msgid " RPM" msgstr "" #: ../indicator-sensors/is-indicator.c:160 msgid "Preferences…" msgstr "Einstellungen…" #: ../indicator-sensors/is-indicator.c:161 msgid "Preferences" msgstr "Einstellungen" #: ../indicator-sensors/is-indicator.c:162 msgid "About…" msgstr "" #: ../indicator-sensors/is-indicator.c:163 msgid "About" msgstr "" #: ../indicator-sensors/is-indicator.c:164 #: ../indicator-sensors/is-indicator.c:165 msgid "Quit" msgstr "Programm beenden" #: ../indicator-sensors/is-indicator.c:237 msgid "No Sensors" msgstr "Keine Sensoren" #: ../indicator-sensors/is-indicator.c:554 #: ../indicator-sensors/is-indicator.c:680 msgid "No active sensors" msgstr "Keine aktiven Systeminformations-Module" #: ../indicator-sensors/is-manager.c:302 #: ../indicator-sensors/is-sensor-dialog.c:315 msgid "Sensor" msgstr "Sensor" #: ../indicator-sensors/is-manager.c:310 #: ../indicator-sensors/is-preferences-dialog.c:149 msgid "Icon" msgstr "Symbol" #: ../indicator-sensors/is-manager.c:319 #: ../indicator-sensors/is-preferences-dialog.c:154 #: ../indicator-sensors/is-sensor-dialog.c:106 msgid "Label" msgstr "Beschriftung" #: ../indicator-sensors/is-manager.c:329 msgid "Enabled" msgstr "Aktiviert" #: ../indicator-sensors/is-preferences-dialog.c:108 msgid "Hardware Sensors Indicator Preferences" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:127 msgid "General" msgstr "Allgemein" #: ../indicator-sensors/is-preferences-dialog.c:135 msgid "Start automatically on login" msgstr "Beim Einloggen automatisch starten" #: ../indicator-sensors/is-preferences-dialog.c:141 msgid "Primary sensor display" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:159 msgid "Value" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:176 msgid "Celsius (°C)" msgstr "Celsius (°C)" #: ../indicator-sensors/is-preferences-dialog.c:187 msgid "Fahrenheit (°F)" msgstr "Fahrenheit (°F)" #: ../indicator-sensors/is-sensor.c:380 msgid "Sensor Alarm" msgstr "Sensor-Alarm" #: ../indicator-sensors/is-sensor-dialog.c:88 msgid " Sensor Properties" msgstr "" #: ../indicator-sensors/is-sensor-dialog.c:115 msgid "Alarm" msgstr "Erinnerung" #: ../indicator-sensors/is-sensor-dialog.c:123 msgid "Disabled" msgstr "Deaktiviert" #: ../indicator-sensors/is-sensor-dialog.c:126 msgid "Below" msgstr "Unter" #: ../indicator-sensors/is-sensor-dialog.c:129 msgid "Above" msgstr "Über" #: ../indicator-sensors/is-sensor-dialog.c:147 msgid "Low value" msgstr "" #: ../indicator-sensors/is-sensor-dialog.c:166 msgid "High value" msgstr "" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:159 #, c-format msgid "Error reading temperature value for GPU %d" msgstr "" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:198 #, c-format msgid "Error reading fanspeed value for GPU %d" msgstr "" #: ../plugins/aticonfig/is-aticonfig-plugin.c:337 msgid "Temperature" msgstr "Temperatur" #: ../plugins/aticonfig/is-aticonfig-plugin.c:355 msgid "Fan" msgstr "Lüfter" #. first placeholder is sensor name, #. * second is error message #: ../plugins/libsensors/is-libsensors-plugin.c:174 #, c-format msgid "Error getting sensor value for sensor %s: %s [%d]" msgstr "" #. translators: V is the unit for Voltage, replace with #. appropriate unit #: ../plugins/libsensors/is-libsensors-plugin.c:315 msgid "V" msgstr "V" #: ../plugins/libsensors/is-libsensors-plugin.c:375 msgid "No Sensors Detected" msgstr "" #: ../plugins/libsensors/is-libsensors-plugin.c:376 #, c-format msgid "" "Try running the command 'sensors-detect' from the command-line and " "restarting %s" msgstr "" #. first placeholder is #. * sensor name #: ../plugins/nvidia/is-nvidia-plugin.c:192 #, c-format msgid "Error getting sensor value for sensor %s" msgstr "Fehler bei dem Versuch die Werte von %s zu holen." #: ../plugins/udisks/is-udisks-plugin.c:149 #: ../plugins/udisks2/is-udisks2-plugin.c:126 #, c-format msgid "Error reading new SMART data for sensor %s" msgstr "Fehler bei dem Versuch neue SMART-Werte von %s zu lesen." #: ../plugins/udisks/is-udisks-plugin.c:165 #, c-format msgid "Error refreshing SMART data for sensor %s" msgstr "Fehler beim Aktualisieren der SMART-Werte von %s" indicator-sensors-1.1/po/en_GB.po000066400000000000000000000207231356741033200167610ustar00rootroot00000000000000# English (United Kingdom) translation for indicator-sensors # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the indicator-sensors package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: indicator-sensors\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 22:58+1030\n" "PO-Revision-Date: 2011-12-14 14:14+0000\n" "Last-Translator: Alfredo Hernández \n" "Language-Team: English (United Kingdom) \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-11-02 11:56+0000\n" "X-Generator: Launchpad (build 16820)\n" #: ../data/indicator-sensors.gschema.xml.in.h:1 #: ../data/indicator-sensors.gschema.xml.in.in.h:1 msgid "Primary sensor to display" msgstr "Primary sensor to display" #: ../data/indicator-sensors.gschema.xml.in.h:2 #: ../data/indicator-sensors.gschema.xml.in.in.h:2 msgid "" "The primary sensor to display in the indicator, identified by it’s path." msgstr "" "The primary sensor to display in the indicator, identified by it’s path." #: ../data/indicator-sensors.gschema.xml.in.h:3 #: ../data/indicator-sensors.gschema.xml.in.in.h:3 msgid "Display flags for the indicator" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:4 #: ../data/indicator-sensors.gschema.xml.in.in.h:4 msgid "The elements used to display the primary sensor within the indicator." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:5 #: ../data/indicator-sensors.gschema.xml.in.in.h:5 msgid "Enabled sensors" msgstr "Enabled sensors" #: ../data/indicator-sensors.gschema.xml.in.h:6 #: ../data/indicator-sensors.gschema.xml.in.in.h:6 msgid "The list of enabled sensors to monitor, each identified by it’s path." msgstr "The list of enabled sensors to monitor, each identified by it’s path." #: ../data/indicator-sensors.gschema.xml.in.h:7 #: ../data/indicator-sensors.gschema.xml.in.in.h:7 msgid "Seconds to delay hiding / showing alarms" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:8 #: ../data/indicator-sensors.gschema.xml.in.in.h:8 msgid "" "Alarm delay adds some hysteresis so alarms aren't shown for quickly " "fluctuating values." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:9 #: ../data/indicator-sensors.gschema.xml.in.in.h:9 #: ../indicator-sensors/is-preferences-dialog.c:168 msgid "Temperature scale" msgstr "Temperature scale" #: ../data/indicator-sensors.gschema.xml.in.h:10 #: ../data/indicator-sensors.gschema.xml.in.in.h:10 msgid "The temperature scale to display temperature sensor values." msgstr "The temperature scale to display temperature sensor values." #: ../data/indicator-sensors.gschema.xml.in.h:11 #: ../data/indicator-sensors.gschema.xml.in.in.h:11 msgid "Show indicator" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:12 #: ../data/indicator-sensors.gschema.xml.in.in.h:12 msgid "Whether to show the indicator in the notification area." msgstr "" #: ../data/indicator-sensors.desktop.in.h:1 #: ../indicator-sensors/is-application.c:822 msgid "Hardware Sensors Indicator" msgstr "Hardware Sensors Indicator" #: ../data/indicator-sensors.desktop.in.h:2 msgid "An indicator for Unity which displays hardware sensor readings" msgstr "An indicator for Unity which displays hardware sensor readings" #: ../data/indicator-sensors.appdata.xml.in.h:1 msgid "" "Hardware Sensors Indicator provides temperature, fan and voltage sensor " "readings within the panel of your desktop." msgstr "" #: ../data/indicator-sensors.appdata.xml.in.h:2 msgid "" "When running GNOME Shell it is recommended to also install the associated " "GNOME Shell extension from extensions.gnome.org - https://extensions.gnome." "org/extension/336/hardware-sensors-indicator/ ." msgstr "" #: ../indicator-sensors/indicator-sensors.c:152 msgid "No Sensors Enabled For Monitoring" msgstr "" #: ../indicator-sensors/indicator-sensors.c:153 msgid "" "Sensors detected but none are enabled for monitoring. To enable monitoring " "of sensors open the Preferences window and select the sensors to monitor" msgstr "" #: ../indicator-sensors/is-application.c:824 msgid "Indicator for GNOME / Unity showing hardware sensors." msgstr "" #: ../indicator-sensors/is-fan-sensor.c:40 msgid " RPM" msgstr "" #: ../indicator-sensors/is-indicator.c:160 msgid "Preferences…" msgstr "Preferences…" #: ../indicator-sensors/is-indicator.c:161 msgid "Preferences" msgstr "" #: ../indicator-sensors/is-indicator.c:162 msgid "About…" msgstr "" #: ../indicator-sensors/is-indicator.c:163 msgid "About" msgstr "" #: ../indicator-sensors/is-indicator.c:164 #: ../indicator-sensors/is-indicator.c:165 msgid "Quit" msgstr "Quit" #: ../indicator-sensors/is-indicator.c:237 msgid "No Sensors" msgstr "No Sensors" #: ../indicator-sensors/is-indicator.c:554 #: ../indicator-sensors/is-indicator.c:680 msgid "No active sensors" msgstr "No active sensors" #: ../indicator-sensors/is-manager.c:302 #: ../indicator-sensors/is-sensor-dialog.c:315 msgid "Sensor" msgstr "Sensor" #: ../indicator-sensors/is-manager.c:310 #: ../indicator-sensors/is-preferences-dialog.c:149 msgid "Icon" msgstr "" #: ../indicator-sensors/is-manager.c:319 #: ../indicator-sensors/is-preferences-dialog.c:154 #: ../indicator-sensors/is-sensor-dialog.c:106 msgid "Label" msgstr "Label" #: ../indicator-sensors/is-manager.c:329 msgid "Enabled" msgstr "Enabled" #: ../indicator-sensors/is-preferences-dialog.c:108 msgid "Hardware Sensors Indicator Preferences" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:127 msgid "General" msgstr "General" #: ../indicator-sensors/is-preferences-dialog.c:135 msgid "Start automatically on login" msgstr "Start automatically on login" #: ../indicator-sensors/is-preferences-dialog.c:141 msgid "Primary sensor display" msgstr "Primary sensor display" #: ../indicator-sensors/is-preferences-dialog.c:159 msgid "Value" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:176 msgid "Celsius (°C)" msgstr "Celsius (°C)" #: ../indicator-sensors/is-preferences-dialog.c:187 msgid "Fahrenheit (°F)" msgstr "Fahrenheit (°F)" #: ../indicator-sensors/is-sensor.c:380 msgid "Sensor Alarm" msgstr "Sensor Alarm" #: ../indicator-sensors/is-sensor-dialog.c:88 msgid " Sensor Properties" msgstr " Sensor Properties" #: ../indicator-sensors/is-sensor-dialog.c:115 msgid "Alarm" msgstr "Alarm" #: ../indicator-sensors/is-sensor-dialog.c:123 msgid "Disabled" msgstr "Disabled" #: ../indicator-sensors/is-sensor-dialog.c:126 msgid "Below" msgstr "Below" #: ../indicator-sensors/is-sensor-dialog.c:129 msgid "Above" msgstr "Above" #: ../indicator-sensors/is-sensor-dialog.c:147 msgid "Low value" msgstr "" #: ../indicator-sensors/is-sensor-dialog.c:166 msgid "High value" msgstr "" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:159 #, c-format msgid "Error reading temperature value for GPU %d" msgstr "Error reading temperature value for GPU %d" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:198 #, c-format msgid "Error reading fanspeed value for GPU %d" msgstr "Error reading fanspeed value for GPU %d" #: ../plugins/aticonfig/is-aticonfig-plugin.c:337 msgid "Temperature" msgstr "Temperature" #: ../plugins/aticonfig/is-aticonfig-plugin.c:355 msgid "Fan" msgstr "Fan" #. first placeholder is sensor name, #. * second is error message #: ../plugins/libsensors/is-libsensors-plugin.c:174 #, c-format msgid "Error getting sensor value for sensor %s: %s [%d]" msgstr "Error getting sensor value for sensor %s: %s [%d]" #. translators: V is the unit for Voltage, replace with #. appropriate unit #: ../plugins/libsensors/is-libsensors-plugin.c:315 msgid "V" msgstr "V" #: ../plugins/libsensors/is-libsensors-plugin.c:375 msgid "No Sensors Detected" msgstr "" #: ../plugins/libsensors/is-libsensors-plugin.c:376 #, c-format msgid "" "Try running the command 'sensors-detect' from the command-line and " "restarting %s" msgstr "" #. first placeholder is #. * sensor name #: ../plugins/nvidia/is-nvidia-plugin.c:192 #, c-format msgid "Error getting sensor value for sensor %s" msgstr "Error getting sensor value for sensor %s" #: ../plugins/udisks/is-udisks-plugin.c:149 #: ../plugins/udisks2/is-udisks2-plugin.c:126 #, c-format msgid "Error reading new SMART data for sensor %s" msgstr "Error reading new SMART data for sensor %s" #: ../plugins/udisks/is-udisks-plugin.c:165 #, c-format msgid "Error refreshing SMART data for sensor %s" msgstr "Error refreshing SMART data for sensor %s" indicator-sensors-1.1/po/eo.po000066400000000000000000000171731356741033200164170ustar00rootroot00000000000000# Esperanto translation for indicator-sensors # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the indicator-sensors package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: indicator-sensors\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 22:58+1030\n" "PO-Revision-Date: 2011-04-29 13:55+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Esperanto \n" "Language: eo\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-11-02 11:56+0000\n" "X-Generator: Launchpad (build 16820)\n" #: ../data/indicator-sensors.gschema.xml.in.h:1 #: ../data/indicator-sensors.gschema.xml.in.in.h:1 msgid "Primary sensor to display" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:2 #: ../data/indicator-sensors.gschema.xml.in.in.h:2 msgid "" "The primary sensor to display in the indicator, identified by it’s path." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:3 #: ../data/indicator-sensors.gschema.xml.in.in.h:3 msgid "Display flags for the indicator" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:4 #: ../data/indicator-sensors.gschema.xml.in.in.h:4 msgid "The elements used to display the primary sensor within the indicator." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:5 #: ../data/indicator-sensors.gschema.xml.in.in.h:5 msgid "Enabled sensors" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:6 #: ../data/indicator-sensors.gschema.xml.in.in.h:6 msgid "The list of enabled sensors to monitor, each identified by it’s path." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:7 #: ../data/indicator-sensors.gschema.xml.in.in.h:7 msgid "Seconds to delay hiding / showing alarms" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:8 #: ../data/indicator-sensors.gschema.xml.in.in.h:8 msgid "" "Alarm delay adds some hysteresis so alarms aren't shown for quickly " "fluctuating values." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:9 #: ../data/indicator-sensors.gschema.xml.in.in.h:9 #: ../indicator-sensors/is-preferences-dialog.c:168 msgid "Temperature scale" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:10 #: ../data/indicator-sensors.gschema.xml.in.in.h:10 msgid "The temperature scale to display temperature sensor values." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:11 #: ../data/indicator-sensors.gschema.xml.in.in.h:11 msgid "Show indicator" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:12 #: ../data/indicator-sensors.gschema.xml.in.in.h:12 msgid "Whether to show the indicator in the notification area." msgstr "" #: ../data/indicator-sensors.desktop.in.h:1 #: ../indicator-sensors/is-application.c:822 msgid "Hardware Sensors Indicator" msgstr "" #: ../data/indicator-sensors.desktop.in.h:2 msgid "An indicator for Unity which displays hardware sensor readings" msgstr "" #: ../data/indicator-sensors.appdata.xml.in.h:1 msgid "" "Hardware Sensors Indicator provides temperature, fan and voltage sensor " "readings within the panel of your desktop." msgstr "" #: ../data/indicator-sensors.appdata.xml.in.h:2 msgid "" "When running GNOME Shell it is recommended to also install the associated " "GNOME Shell extension from extensions.gnome.org - https://extensions.gnome." "org/extension/336/hardware-sensors-indicator/ ." msgstr "" #: ../indicator-sensors/indicator-sensors.c:152 msgid "No Sensors Enabled For Monitoring" msgstr "" #: ../indicator-sensors/indicator-sensors.c:153 msgid "" "Sensors detected but none are enabled for monitoring. To enable monitoring " "of sensors open the Preferences window and select the sensors to monitor" msgstr "" #: ../indicator-sensors/is-application.c:824 msgid "Indicator for GNOME / Unity showing hardware sensors." msgstr "" #: ../indicator-sensors/is-fan-sensor.c:40 msgid " RPM" msgstr "" #: ../indicator-sensors/is-indicator.c:160 msgid "Preferences…" msgstr "" #: ../indicator-sensors/is-indicator.c:161 msgid "Preferences" msgstr "" #: ../indicator-sensors/is-indicator.c:162 msgid "About…" msgstr "" #: ../indicator-sensors/is-indicator.c:163 msgid "About" msgstr "" #: ../indicator-sensors/is-indicator.c:164 #: ../indicator-sensors/is-indicator.c:165 msgid "Quit" msgstr "" #: ../indicator-sensors/is-indicator.c:237 msgid "No Sensors" msgstr "" #: ../indicator-sensors/is-indicator.c:554 #: ../indicator-sensors/is-indicator.c:680 msgid "No active sensors" msgstr "" #: ../indicator-sensors/is-manager.c:302 #: ../indicator-sensors/is-sensor-dialog.c:315 msgid "Sensor" msgstr "" #: ../indicator-sensors/is-manager.c:310 #: ../indicator-sensors/is-preferences-dialog.c:149 msgid "Icon" msgstr "" #: ../indicator-sensors/is-manager.c:319 #: ../indicator-sensors/is-preferences-dialog.c:154 #: ../indicator-sensors/is-sensor-dialog.c:106 msgid "Label" msgstr "" #: ../indicator-sensors/is-manager.c:329 msgid "Enabled" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:108 msgid "Hardware Sensors Indicator Preferences" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:127 msgid "General" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:135 msgid "Start automatically on login" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:141 msgid "Primary sensor display" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:159 msgid "Value" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:176 msgid "Celsius (°C)" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:187 msgid "Fahrenheit (°F)" msgstr "" #: ../indicator-sensors/is-sensor.c:380 msgid "Sensor Alarm" msgstr "" #: ../indicator-sensors/is-sensor-dialog.c:88 msgid " Sensor Properties" msgstr "" #: ../indicator-sensors/is-sensor-dialog.c:115 msgid "Alarm" msgstr "" #: ../indicator-sensors/is-sensor-dialog.c:123 msgid "Disabled" msgstr "" #: ../indicator-sensors/is-sensor-dialog.c:126 msgid "Below" msgstr "" #: ../indicator-sensors/is-sensor-dialog.c:129 msgid "Above" msgstr "" #: ../indicator-sensors/is-sensor-dialog.c:147 msgid "Low value" msgstr "" #: ../indicator-sensors/is-sensor-dialog.c:166 msgid "High value" msgstr "" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:159 #, c-format msgid "Error reading temperature value for GPU %d" msgstr "" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:198 #, c-format msgid "Error reading fanspeed value for GPU %d" msgstr "" #: ../plugins/aticonfig/is-aticonfig-plugin.c:337 msgid "Temperature" msgstr "" #: ../plugins/aticonfig/is-aticonfig-plugin.c:355 msgid "Fan" msgstr "" #. first placeholder is sensor name, #. * second is error message #: ../plugins/libsensors/is-libsensors-plugin.c:174 #, c-format msgid "Error getting sensor value for sensor %s: %s [%d]" msgstr "" #. translators: V is the unit for Voltage, replace with #. appropriate unit #: ../plugins/libsensors/is-libsensors-plugin.c:315 msgid "V" msgstr "" #: ../plugins/libsensors/is-libsensors-plugin.c:375 msgid "No Sensors Detected" msgstr "" #: ../plugins/libsensors/is-libsensors-plugin.c:376 #, c-format msgid "" "Try running the command 'sensors-detect' from the command-line and " "restarting %s" msgstr "" #. first placeholder is #. * sensor name #: ../plugins/nvidia/is-nvidia-plugin.c:192 #, c-format msgid "Error getting sensor value for sensor %s" msgstr "" #: ../plugins/udisks/is-udisks-plugin.c:149 #: ../plugins/udisks2/is-udisks2-plugin.c:126 #, c-format msgid "Error reading new SMART data for sensor %s" msgstr "" #: ../plugins/udisks/is-udisks-plugin.c:165 #, c-format msgid "Error refreshing SMART data for sensor %s" msgstr "" indicator-sensors-1.1/po/es.po000066400000000000000000000224521356741033200164170ustar00rootroot00000000000000# Spanish translation for indicator-sensors # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the indicator-sensors package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: indicator-sensors\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 22:58+1030\n" "PO-Revision-Date: 2013-08-05 13:36+0000\n" "Last-Translator: pataquets \n" "Language-Team: Spanish \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-11-02 11:56+0000\n" "X-Generator: Launchpad (build 16820)\n" #: ../data/indicator-sensors.gschema.xml.in.h:1 #: ../data/indicator-sensors.gschema.xml.in.in.h:1 msgid "Primary sensor to display" msgstr "Sensor primario para mostrar" #: ../data/indicator-sensors.gschema.xml.in.h:2 #: ../data/indicator-sensors.gschema.xml.in.in.h:2 msgid "" "The primary sensor to display in the indicator, identified by it’s path." msgstr "" "El sensor primario a mostrar en el indicador, identificado por su ruta." #: ../data/indicator-sensors.gschema.xml.in.h:3 #: ../data/indicator-sensors.gschema.xml.in.in.h:3 msgid "Display flags for the indicator" msgstr "Mostrar marcas para el indicador" #: ../data/indicator-sensors.gschema.xml.in.h:4 #: ../data/indicator-sensors.gschema.xml.in.in.h:4 msgid "The elements used to display the primary sensor within the indicator." msgstr "Los elementos usados para mostrar el sensor primario en el indicador." #: ../data/indicator-sensors.gschema.xml.in.h:5 #: ../data/indicator-sensors.gschema.xml.in.in.h:5 msgid "Enabled sensors" msgstr "Sensores activos" #: ../data/indicator-sensors.gschema.xml.in.h:6 #: ../data/indicator-sensors.gschema.xml.in.in.h:6 msgid "The list of enabled sensors to monitor, each identified by it’s path." msgstr "" "Lista de sensores habilitados para monitorizar, cada uno identificado por su " "ruta." #: ../data/indicator-sensors.gschema.xml.in.h:7 #: ../data/indicator-sensors.gschema.xml.in.in.h:7 msgid "Seconds to delay hiding / showing alarms" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:8 #: ../data/indicator-sensors.gschema.xml.in.in.h:8 msgid "" "Alarm delay adds some hysteresis so alarms aren't shown for quickly " "fluctuating values." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:9 #: ../data/indicator-sensors.gschema.xml.in.in.h:9 #: ../indicator-sensors/is-preferences-dialog.c:168 msgid "Temperature scale" msgstr "Escala de temperatura" #: ../data/indicator-sensors.gschema.xml.in.h:10 #: ../data/indicator-sensors.gschema.xml.in.in.h:10 msgid "The temperature scale to display temperature sensor values." msgstr "" "Escala de temperatura para mostrar los valores de temperatura de los " "sensores." #: ../data/indicator-sensors.gschema.xml.in.h:11 #: ../data/indicator-sensors.gschema.xml.in.in.h:11 msgid "Show indicator" msgstr "Mostrar indicador" #: ../data/indicator-sensors.gschema.xml.in.h:12 #: ../data/indicator-sensors.gschema.xml.in.in.h:12 msgid "Whether to show the indicator in the notification area." msgstr "Si se muestra el indicador en el área de notificación." #: ../data/indicator-sensors.desktop.in.h:1 #: ../indicator-sensors/is-application.c:822 msgid "Hardware Sensors Indicator" msgstr "Indicador de sensores de hardware" #: ../data/indicator-sensors.desktop.in.h:2 msgid "An indicator for Unity which displays hardware sensor readings" msgstr "" "Un indicador para Unity que muestra las lecturas de los sensores de hardware" #: ../data/indicator-sensors.appdata.xml.in.h:1 msgid "" "Hardware Sensors Indicator provides temperature, fan and voltage sensor " "readings within the panel of your desktop." msgstr "" #: ../data/indicator-sensors.appdata.xml.in.h:2 msgid "" "When running GNOME Shell it is recommended to also install the associated " "GNOME Shell extension from extensions.gnome.org - https://extensions.gnome." "org/extension/336/hardware-sensors-indicator/ ." msgstr "" #: ../indicator-sensors/indicator-sensors.c:152 msgid "No Sensors Enabled For Monitoring" msgstr "No hay sensores activados para monitorear" #: ../indicator-sensors/indicator-sensors.c:153 msgid "" "Sensors detected but none are enabled for monitoring. To enable monitoring " "of sensors open the Preferences window and select the sensors to monitor" msgstr "" "Los sensores son detectados pero no están activados para el monitoreo. Para " "activar el control de sensores abre la ventana de Preferencias y selecciona " "los sensores para monitorear" #: ../indicator-sensors/is-application.c:824 msgid "Indicator for GNOME / Unity showing hardware sensors." msgstr "Indicador para GNOME / Unity mostrando sensores de hardware." #: ../indicator-sensors/is-fan-sensor.c:40 msgid " RPM" msgstr " RPM" #: ../indicator-sensors/is-indicator.c:160 msgid "Preferences…" msgstr "Preferencias…" #: ../indicator-sensors/is-indicator.c:161 msgid "Preferences" msgstr "Preferencias" #: ../indicator-sensors/is-indicator.c:162 msgid "About…" msgstr "Acerca de…" #: ../indicator-sensors/is-indicator.c:163 msgid "About" msgstr "Acerca de" #: ../indicator-sensors/is-indicator.c:164 #: ../indicator-sensors/is-indicator.c:165 msgid "Quit" msgstr "" #: ../indicator-sensors/is-indicator.c:237 msgid "No Sensors" msgstr "No hay sensores" #: ../indicator-sensors/is-indicator.c:554 #: ../indicator-sensors/is-indicator.c:680 msgid "No active sensors" msgstr "No hay sensores activos" #: ../indicator-sensors/is-manager.c:302 #: ../indicator-sensors/is-sensor-dialog.c:315 msgid "Sensor" msgstr "Sensor" #: ../indicator-sensors/is-manager.c:310 #: ../indicator-sensors/is-preferences-dialog.c:149 msgid "Icon" msgstr "Icono" #: ../indicator-sensors/is-manager.c:319 #: ../indicator-sensors/is-preferences-dialog.c:154 #: ../indicator-sensors/is-sensor-dialog.c:106 msgid "Label" msgstr "Etiqueta" #: ../indicator-sensors/is-manager.c:329 msgid "Enabled" msgstr "Activado" #: ../indicator-sensors/is-preferences-dialog.c:108 msgid "Hardware Sensors Indicator Preferences" msgstr "Preferencias del indicador de sensores de hardware" #: ../indicator-sensors/is-preferences-dialog.c:127 msgid "General" msgstr "General" #: ../indicator-sensors/is-preferences-dialog.c:135 msgid "Start automatically on login" msgstr "Abrir automáticamente al iniciar sesión" #: ../indicator-sensors/is-preferences-dialog.c:141 msgid "Primary sensor display" msgstr "Pantalla del sensor principal" #: ../indicator-sensors/is-preferences-dialog.c:159 msgid "Value" msgstr "Valor" #: ../indicator-sensors/is-preferences-dialog.c:176 msgid "Celsius (°C)" msgstr "Celsius (°C)" #: ../indicator-sensors/is-preferences-dialog.c:187 msgid "Fahrenheit (°F)" msgstr "Fahrenheit (°F)" #: ../indicator-sensors/is-sensor.c:380 msgid "Sensor Alarm" msgstr "Alarma del sensor" #: ../indicator-sensors/is-sensor-dialog.c:88 msgid " Sensor Properties" msgstr " Propiedades del sensor" #: ../indicator-sensors/is-sensor-dialog.c:115 msgid "Alarm" msgstr "Alarma" #: ../indicator-sensors/is-sensor-dialog.c:123 msgid "Disabled" msgstr "Desactivado" #: ../indicator-sensors/is-sensor-dialog.c:126 msgid "Below" msgstr "Abajo" #: ../indicator-sensors/is-sensor-dialog.c:129 msgid "Above" msgstr "Arriba" #: ../indicator-sensors/is-sensor-dialog.c:147 msgid "Low value" msgstr "Valor mínimo" #: ../indicator-sensors/is-sensor-dialog.c:166 msgid "High value" msgstr "Valor máximo" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:159 #, c-format msgid "Error reading temperature value for GPU %d" msgstr "Error leyendo el valor de la temperatura de la GPU %d" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:198 #, c-format msgid "Error reading fanspeed value for GPU %d" msgstr "Error leyendo el valor de la velocidad del ventilador de la GPU %d" #: ../plugins/aticonfig/is-aticonfig-plugin.c:337 msgid "Temperature" msgstr "Temperatura" #: ../plugins/aticonfig/is-aticonfig-plugin.c:355 msgid "Fan" msgstr "Ventilador" #. first placeholder is sensor name, #. * second is error message #: ../plugins/libsensors/is-libsensors-plugin.c:174 #, c-format msgid "Error getting sensor value for sensor %s: %s [%d]" msgstr "Error en el sensor obteniendo los valores del sensor %s: %s [%d]" #. translators: V is the unit for Voltage, replace with #. appropriate unit #: ../plugins/libsensors/is-libsensors-plugin.c:315 msgid "V" msgstr "V" #: ../plugins/libsensors/is-libsensors-plugin.c:375 msgid "No Sensors Detected" msgstr "No hay sensores detectados" #: ../plugins/libsensors/is-libsensors-plugin.c:376 #, c-format msgid "" "Try running the command 'sensors-detect' from the command-line and " "restarting %s" msgstr "" "Intente ejecutar el comando 'sensors-detect' desde la línea de comandos y " "reiniciar %s" #. first placeholder is #. * sensor name #: ../plugins/nvidia/is-nvidia-plugin.c:192 #, c-format msgid "Error getting sensor value for sensor %s" msgstr "Error obteniendo el valor del sensor %s" #: ../plugins/udisks/is-udisks-plugin.c:149 #: ../plugins/udisks2/is-udisks2-plugin.c:126 #, c-format msgid "Error reading new SMART data for sensor %s" msgstr "Error leyendo los nuevos datos SMART del sensor %s" #: ../plugins/udisks/is-udisks-plugin.c:165 #, c-format msgid "Error refreshing SMART data for sensor %s" msgstr "Error actualizando los datos SMART del sensor %s" indicator-sensors-1.1/po/fr.po000066400000000000000000000225201356741033200164130ustar00rootroot00000000000000# French translation for indicator-sensors # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the indicator-sensors package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: indicator-sensors\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 22:58+1030\n" "PO-Revision-Date: 2012-12-10 21:52+0000\n" "Last-Translator: Thibault D \n" "Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-11-02 11:56+0000\n" "X-Generator: Launchpad (build 16820)\n" #: ../data/indicator-sensors.gschema.xml.in.h:1 #: ../data/indicator-sensors.gschema.xml.in.in.h:1 msgid "Primary sensor to display" msgstr "Capteur primaire à afficher" #: ../data/indicator-sensors.gschema.xml.in.h:2 #: ../data/indicator-sensors.gschema.xml.in.in.h:2 msgid "" "The primary sensor to display in the indicator, identified by it’s path." msgstr "" "The senseur primaire à afficher dans l'indicateur, identifié par son chemin." #: ../data/indicator-sensors.gschema.xml.in.h:3 #: ../data/indicator-sensors.gschema.xml.in.in.h:3 msgid "Display flags for the indicator" msgstr "Afficher les drapeaux indicateurs pour l'indicateur" #: ../data/indicator-sensors.gschema.xml.in.h:4 #: ../data/indicator-sensors.gschema.xml.in.in.h:4 msgid "The elements used to display the primary sensor within the indicator." msgstr "" "Les éléments utilisés pour afficher le capteur principal au sein de " "l'indicateur" #: ../data/indicator-sensors.gschema.xml.in.h:5 #: ../data/indicator-sensors.gschema.xml.in.in.h:5 msgid "Enabled sensors" msgstr "Senseurs activés" #: ../data/indicator-sensors.gschema.xml.in.h:6 #: ../data/indicator-sensors.gschema.xml.in.in.h:6 msgid "The list of enabled sensors to monitor, each identified by it’s path." msgstr "" "La liste des senseurs activés à monitorer, chacun identifié par son chemin." #: ../data/indicator-sensors.gschema.xml.in.h:7 #: ../data/indicator-sensors.gschema.xml.in.in.h:7 msgid "Seconds to delay hiding / showing alarms" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:8 #: ../data/indicator-sensors.gschema.xml.in.in.h:8 msgid "" "Alarm delay adds some hysteresis so alarms aren't shown for quickly " "fluctuating values." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:9 #: ../data/indicator-sensors.gschema.xml.in.in.h:9 #: ../indicator-sensors/is-preferences-dialog.c:168 msgid "Temperature scale" msgstr "Échelle de température" #: ../data/indicator-sensors.gschema.xml.in.h:10 #: ../data/indicator-sensors.gschema.xml.in.in.h:10 msgid "The temperature scale to display temperature sensor values." msgstr "L'échelle de température à afficher pour les capteur de température." #: ../data/indicator-sensors.gschema.xml.in.h:11 #: ../data/indicator-sensors.gschema.xml.in.in.h:11 msgid "Show indicator" msgstr "Afficher l'indicateur" #: ../data/indicator-sensors.gschema.xml.in.h:12 #: ../data/indicator-sensors.gschema.xml.in.in.h:12 msgid "Whether to show the indicator in the notification area." msgstr "Afficher ou non l'indicateur dans la zone de notification" #: ../data/indicator-sensors.desktop.in.h:1 #: ../indicator-sensors/is-application.c:822 msgid "Hardware Sensors Indicator" msgstr "Indicateur de capteurs matériel" #: ../data/indicator-sensors.desktop.in.h:2 msgid "An indicator for Unity which displays hardware sensor readings" msgstr "Indicateur Unity qui affiche les données des capteurs matériel." #: ../data/indicator-sensors.appdata.xml.in.h:1 msgid "" "Hardware Sensors Indicator provides temperature, fan and voltage sensor " "readings within the panel of your desktop." msgstr "" #: ../data/indicator-sensors.appdata.xml.in.h:2 msgid "" "When running GNOME Shell it is recommended to also install the associated " "GNOME Shell extension from extensions.gnome.org - https://extensions.gnome." "org/extension/336/hardware-sensors-indicator/ ." msgstr "" #: ../indicator-sensors/indicator-sensors.c:152 msgid "No Sensors Enabled For Monitoring" msgstr "Aucun capteur n'est supervisé" #: ../indicator-sensors/indicator-sensors.c:153 msgid "" "Sensors detected but none are enabled for monitoring. To enable monitoring " "of sensors open the Preferences window and select the sensors to monitor" msgstr "" "Des capteurs sont détectés mais ne sont pas supervisés. Pour les superviser, " "ouvrez la fenêtre des préférences et sélectionnez les capteurs à superviser." #: ../indicator-sensors/is-application.c:824 msgid "Indicator for GNOME / Unity showing hardware sensors." msgstr "Indicateur pour GNOME / Unity affichant des capteurs matériels." #: ../indicator-sensors/is-fan-sensor.c:40 msgid " RPM" msgstr " RPM" #: ../indicator-sensors/is-indicator.c:160 msgid "Preferences…" msgstr "Préférences…" #: ../indicator-sensors/is-indicator.c:161 msgid "Preferences" msgstr "Préférences" #: ../indicator-sensors/is-indicator.c:162 msgid "About…" msgstr "A propos" #: ../indicator-sensors/is-indicator.c:163 msgid "About" msgstr "À propos de" #: ../indicator-sensors/is-indicator.c:164 #: ../indicator-sensors/is-indicator.c:165 msgid "Quit" msgstr "Quitter" #: ../indicator-sensors/is-indicator.c:237 msgid "No Sensors" msgstr "Capteurs indisponibles" #: ../indicator-sensors/is-indicator.c:554 #: ../indicator-sensors/is-indicator.c:680 msgid "No active sensors" msgstr "Aucun Capteur activé" #: ../indicator-sensors/is-manager.c:302 #: ../indicator-sensors/is-sensor-dialog.c:315 msgid "Sensor" msgstr "Capteur" #: ../indicator-sensors/is-manager.c:310 #: ../indicator-sensors/is-preferences-dialog.c:149 msgid "Icon" msgstr "Icone" #: ../indicator-sensors/is-manager.c:319 #: ../indicator-sensors/is-preferences-dialog.c:154 #: ../indicator-sensors/is-sensor-dialog.c:106 msgid "Label" msgstr "Étiquette" #: ../indicator-sensors/is-manager.c:329 msgid "Enabled" msgstr "Activé" #: ../indicator-sensors/is-preferences-dialog.c:108 msgid "Hardware Sensors Indicator Preferences" msgstr "Préférences de l'indicateur de capteurs matériels" #: ../indicator-sensors/is-preferences-dialog.c:127 msgid "General" msgstr "Général." #: ../indicator-sensors/is-preferences-dialog.c:135 msgid "Start automatically on login" msgstr "Démarrage à la connexion" #: ../indicator-sensors/is-preferences-dialog.c:141 msgid "Primary sensor display" msgstr "Afficher le capteur primaire" #: ../indicator-sensors/is-preferences-dialog.c:159 msgid "Value" msgstr "Valeur" #: ../indicator-sensors/is-preferences-dialog.c:176 msgid "Celsius (°C)" msgstr "Celsius (°C)" #: ../indicator-sensors/is-preferences-dialog.c:187 msgid "Fahrenheit (°F)" msgstr "Fahrenheit (°F)" #: ../indicator-sensors/is-sensor.c:380 msgid "Sensor Alarm" msgstr "Alarme des capteurs" #: ../indicator-sensors/is-sensor-dialog.c:88 msgid " Sensor Properties" msgstr " Propriétés du capteur" #: ../indicator-sensors/is-sensor-dialog.c:115 msgid "Alarm" msgstr "Alarme" #: ../indicator-sensors/is-sensor-dialog.c:123 msgid "Disabled" msgstr "Désactivé" #: ../indicator-sensors/is-sensor-dialog.c:126 msgid "Below" msgstr "Ci-dessous" #: ../indicator-sensors/is-sensor-dialog.c:129 msgid "Above" msgstr "Ci-dessus" #: ../indicator-sensors/is-sensor-dialog.c:147 msgid "Low value" msgstr "Faible valeur" #: ../indicator-sensors/is-sensor-dialog.c:166 msgid "High value" msgstr "Haute valeur" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:159 #, c-format msgid "Error reading temperature value for GPU %d" msgstr "Erreur de lecture de la température du GPU %d" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:198 #, c-format msgid "Error reading fanspeed value for GPU %d" msgstr "Erreur de lecture de la température du ventilateur pour le GPU %d" #: ../plugins/aticonfig/is-aticonfig-plugin.c:337 msgid "Temperature" msgstr "Température" #: ../plugins/aticonfig/is-aticonfig-plugin.c:355 msgid "Fan" msgstr "Ventilateur" #. first placeholder is sensor name, #. * second is error message #: ../plugins/libsensors/is-libsensors-plugin.c:174 #, c-format msgid "Error getting sensor value for sensor %s: %s [%d]" msgstr "Erreur à l'obtention des valeur du capteur %s: %s [%d]" #. translators: V is the unit for Voltage, replace with #. appropriate unit #: ../plugins/libsensors/is-libsensors-plugin.c:315 msgid "V" msgstr "Volt" #: ../plugins/libsensors/is-libsensors-plugin.c:375 msgid "No Sensors Detected" msgstr "Aucun capteur détecté" #: ../plugins/libsensors/is-libsensors-plugin.c:376 #, c-format msgid "" "Try running the command 'sensors-detect' from the command-line and " "restarting %s" msgstr "" "Essayez d’exécuter la commande 'sensors-detect' depuis la ligne de commande " "et de redémarrez %s" #. first placeholder is #. * sensor name #: ../plugins/nvidia/is-nvidia-plugin.c:192 #, c-format msgid "Error getting sensor value for sensor %s" msgstr "Erreur à l'obtention des données du capteur %s" #: ../plugins/udisks/is-udisks-plugin.c:149 #: ../plugins/udisks2/is-udisks2-plugin.c:126 #, c-format msgid "Error reading new SMART data for sensor %s" msgstr "Erreur à la lecture des nouvelles données du capteur SMART %s" #: ../plugins/udisks/is-udisks-plugin.c:165 #, c-format msgid "Error refreshing SMART data for sensor %s" msgstr "Erreur au rafraîchissement des données du capteur SMART %s" indicator-sensors-1.1/po/gl.po000066400000000000000000000212311356741033200164040ustar00rootroot00000000000000# Galician translation for indicator-sensors # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the indicator-sensors package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: indicator-sensors\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 22:58+1030\n" "PO-Revision-Date: 2011-11-07 23:03+0000\n" "Last-Translator: Fran Diéguez \n" "Language-Team: Galician \n" "Language: gl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-11-02 11:56+0000\n" "X-Generator: Launchpad (build 16820)\n" #: ../data/indicator-sensors.gschema.xml.in.h:1 #: ../data/indicator-sensors.gschema.xml.in.in.h:1 msgid "Primary sensor to display" msgstr "Sensor primario a visualizar" #: ../data/indicator-sensors.gschema.xml.in.h:2 #: ../data/indicator-sensors.gschema.xml.in.in.h:2 msgid "" "The primary sensor to display in the indicator, identified by it’s path." msgstr "O sensor primario a mostrar no indicador, identificado pola súa ruta." #: ../data/indicator-sensors.gschema.xml.in.h:3 #: ../data/indicator-sensors.gschema.xml.in.in.h:3 msgid "Display flags for the indicator" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:4 #: ../data/indicator-sensors.gschema.xml.in.in.h:4 msgid "The elements used to display the primary sensor within the indicator." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:5 #: ../data/indicator-sensors.gschema.xml.in.in.h:5 msgid "Enabled sensors" msgstr "Sensores activados" #: ../data/indicator-sensors.gschema.xml.in.h:6 #: ../data/indicator-sensors.gschema.xml.in.in.h:6 msgid "The list of enabled sensors to monitor, each identified by it’s path." msgstr "" "A lista de sensores activados a monitorizar, cada un identificado con unha " "ruta." #: ../data/indicator-sensors.gschema.xml.in.h:7 #: ../data/indicator-sensors.gschema.xml.in.in.h:7 msgid "Seconds to delay hiding / showing alarms" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:8 #: ../data/indicator-sensors.gschema.xml.in.in.h:8 msgid "" "Alarm delay adds some hysteresis so alarms aren't shown for quickly " "fluctuating values." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:9 #: ../data/indicator-sensors.gschema.xml.in.in.h:9 #: ../indicator-sensors/is-preferences-dialog.c:168 msgid "Temperature scale" msgstr "Escala de temperatura" #: ../data/indicator-sensors.gschema.xml.in.h:10 #: ../data/indicator-sensors.gschema.xml.in.in.h:10 msgid "The temperature scale to display temperature sensor values." msgstr "" "A escala de temperatura para visualizar os valores de sensores de " "temperatura." #: ../data/indicator-sensors.gschema.xml.in.h:11 #: ../data/indicator-sensors.gschema.xml.in.in.h:11 msgid "Show indicator" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:12 #: ../data/indicator-sensors.gschema.xml.in.in.h:12 msgid "Whether to show the indicator in the notification area." msgstr "" #: ../data/indicator-sensors.desktop.in.h:1 #: ../indicator-sensors/is-application.c:822 msgid "Hardware Sensors Indicator" msgstr "Indicador dos sensores de hardware" #: ../data/indicator-sensors.desktop.in.h:2 msgid "An indicator for Unity which displays hardware sensor readings" msgstr "" "Un indicador para Unity que mostra as lecturas dos sensores de hardware" #: ../data/indicator-sensors.appdata.xml.in.h:1 msgid "" "Hardware Sensors Indicator provides temperature, fan and voltage sensor " "readings within the panel of your desktop." msgstr "" #: ../data/indicator-sensors.appdata.xml.in.h:2 msgid "" "When running GNOME Shell it is recommended to also install the associated " "GNOME Shell extension from extensions.gnome.org - https://extensions.gnome." "org/extension/336/hardware-sensors-indicator/ ." msgstr "" #: ../indicator-sensors/indicator-sensors.c:152 msgid "No Sensors Enabled For Monitoring" msgstr "" #: ../indicator-sensors/indicator-sensors.c:153 msgid "" "Sensors detected but none are enabled for monitoring. To enable monitoring " "of sensors open the Preferences window and select the sensors to monitor" msgstr "" #: ../indicator-sensors/is-application.c:824 msgid "Indicator for GNOME / Unity showing hardware sensors." msgstr "" #: ../indicator-sensors/is-fan-sensor.c:40 msgid " RPM" msgstr "" #: ../indicator-sensors/is-indicator.c:160 msgid "Preferences…" msgstr "Preferencias..." #: ../indicator-sensors/is-indicator.c:161 msgid "Preferences" msgstr "" #: ../indicator-sensors/is-indicator.c:162 msgid "About…" msgstr "" #: ../indicator-sensors/is-indicator.c:163 msgid "About" msgstr "" #: ../indicator-sensors/is-indicator.c:164 #: ../indicator-sensors/is-indicator.c:165 msgid "Quit" msgstr "Saír" #: ../indicator-sensors/is-indicator.c:237 msgid "No Sensors" msgstr "Sen sensores" #: ../indicator-sensors/is-indicator.c:554 #: ../indicator-sensors/is-indicator.c:680 msgid "No active sensors" msgstr "Non hai sensores activos" #: ../indicator-sensors/is-manager.c:302 #: ../indicator-sensors/is-sensor-dialog.c:315 msgid "Sensor" msgstr "Sensor" #: ../indicator-sensors/is-manager.c:310 #: ../indicator-sensors/is-preferences-dialog.c:149 msgid "Icon" msgstr "" #: ../indicator-sensors/is-manager.c:319 #: ../indicator-sensors/is-preferences-dialog.c:154 #: ../indicator-sensors/is-sensor-dialog.c:106 msgid "Label" msgstr "Etiqueta" #: ../indicator-sensors/is-manager.c:329 msgid "Enabled" msgstr "Activado" #: ../indicator-sensors/is-preferences-dialog.c:108 msgid "Hardware Sensors Indicator Preferences" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:127 msgid "General" msgstr "Xeral" #: ../indicator-sensors/is-preferences-dialog.c:135 msgid "Start automatically on login" msgstr "Iniciar automaticamente ao inicio" #: ../indicator-sensors/is-preferences-dialog.c:141 msgid "Primary sensor display" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:159 msgid "Value" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:176 msgid "Celsius (°C)" msgstr "Celsius (°C)" #: ../indicator-sensors/is-preferences-dialog.c:187 msgid "Fahrenheit (°F)" msgstr "Fahrenheit (°F)" #: ../indicator-sensors/is-sensor.c:380 msgid "Sensor Alarm" msgstr "Alarma de sensor" #: ../indicator-sensors/is-sensor-dialog.c:88 msgid " Sensor Properties" msgstr " Propiedades de sensores" #: ../indicator-sensors/is-sensor-dialog.c:115 msgid "Alarm" msgstr "Alarma" #: ../indicator-sensors/is-sensor-dialog.c:123 msgid "Disabled" msgstr "Desactivada" #: ../indicator-sensors/is-sensor-dialog.c:126 msgid "Below" msgstr "Baixar" #: ../indicator-sensors/is-sensor-dialog.c:129 msgid "Above" msgstr "Subir" #: ../indicator-sensors/is-sensor-dialog.c:147 msgid "Low value" msgstr "" #: ../indicator-sensors/is-sensor-dialog.c:166 msgid "High value" msgstr "" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:159 #, c-format msgid "Error reading temperature value for GPU %d" msgstr "Produciuse un erro ao ler o valor de temperatura para a GPU %d" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:198 #, c-format msgid "Error reading fanspeed value for GPU %d" msgstr "" "Produciuse un erro ao ler o valor de velocidade dos ventiladores para a GPU " "%d" #: ../plugins/aticonfig/is-aticonfig-plugin.c:337 msgid "Temperature" msgstr "Temperatura" #: ../plugins/aticonfig/is-aticonfig-plugin.c:355 msgid "Fan" msgstr "Ventilador" #. first placeholder is sensor name, #. * second is error message #: ../plugins/libsensors/is-libsensors-plugin.c:174 #, c-format msgid "Error getting sensor value for sensor %s: %s [%d]" msgstr "" "Produciuse un erro ao obter o valor do sensor para o sensor %s: %s [%d]" #. translators: V is the unit for Voltage, replace with #. appropriate unit #: ../plugins/libsensors/is-libsensors-plugin.c:315 msgid "V" msgstr "V" #: ../plugins/libsensors/is-libsensors-plugin.c:375 msgid "No Sensors Detected" msgstr "" #: ../plugins/libsensors/is-libsensors-plugin.c:376 #, c-format msgid "" "Try running the command 'sensors-detect' from the command-line and " "restarting %s" msgstr "" #. first placeholder is #. * sensor name #: ../plugins/nvidia/is-nvidia-plugin.c:192 #, c-format msgid "Error getting sensor value for sensor %s" msgstr "Produciuse un erro ao obter o valor do sensor para o sensor %s" #: ../plugins/udisks/is-udisks-plugin.c:149 #: ../plugins/udisks2/is-udisks2-plugin.c:126 #, c-format msgid "Error reading new SMART data for sensor %s" msgstr "Produciuse un erro ao ler os datos SMART novos para o sensor %s" #: ../plugins/udisks/is-udisks-plugin.c:165 #, c-format msgid "Error refreshing SMART data for sensor %s" msgstr "Produciuse un erro ao actualizr os datos SMART para o sensor %s" indicator-sensors-1.1/po/he.po000066400000000000000000000220361356741033200164020ustar00rootroot00000000000000# Hebrew translation for indicator-sensors # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the indicator-sensors package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: indicator-sensors\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 22:58+1030\n" "PO-Revision-Date: 2013-06-07 16:18+0000\n" "Last-Translator: mosko \n" "Language-Team: Hebrew \n" "Language: he\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-11-02 11:56+0000\n" "X-Generator: Launchpad (build 16820)\n" #: ../data/indicator-sensors.gschema.xml.in.h:1 #: ../data/indicator-sensors.gschema.xml.in.in.h:1 msgid "Primary sensor to display" msgstr "חיישן ראשי להצגה" #: ../data/indicator-sensors.gschema.xml.in.h:2 #: ../data/indicator-sensors.gschema.xml.in.in.h:2 msgid "" "The primary sensor to display in the indicator, identified by it’s path." msgstr "החיישן הראשי שיוצג באינדיקטור, מזוהה על-פי הנתיב שלו." #: ../data/indicator-sensors.gschema.xml.in.h:3 #: ../data/indicator-sensors.gschema.xml.in.in.h:3 msgid "Display flags for the indicator" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:4 #: ../data/indicator-sensors.gschema.xml.in.in.h:4 msgid "The elements used to display the primary sensor within the indicator." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:5 #: ../data/indicator-sensors.gschema.xml.in.in.h:5 msgid "Enabled sensors" msgstr "חיישנים זמינים" #: ../data/indicator-sensors.gschema.xml.in.h:6 #: ../data/indicator-sensors.gschema.xml.in.in.h:6 msgid "The list of enabled sensors to monitor, each identified by it’s path." msgstr "רשימת החיישנים הזמינים לפיקוח, כל אחד מזוהה על-פי הנתיב שלו." #: ../data/indicator-sensors.gschema.xml.in.h:7 #: ../data/indicator-sensors.gschema.xml.in.in.h:7 msgid "Seconds to delay hiding / showing alarms" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:8 #: ../data/indicator-sensors.gschema.xml.in.in.h:8 msgid "" "Alarm delay adds some hysteresis so alarms aren't shown for quickly " "fluctuating values." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:9 #: ../data/indicator-sensors.gschema.xml.in.in.h:9 #: ../indicator-sensors/is-preferences-dialog.c:168 msgid "Temperature scale" msgstr "סולם טמפרטורה" #: ../data/indicator-sensors.gschema.xml.in.h:10 #: ../data/indicator-sensors.gschema.xml.in.in.h:10 msgid "The temperature scale to display temperature sensor values." msgstr "סולם הטמפרטורה בו יוצגו ערכי חיישן הטמפרטורה." #: ../data/indicator-sensors.gschema.xml.in.h:11 #: ../data/indicator-sensors.gschema.xml.in.in.h:11 msgid "Show indicator" msgstr "הצג אינדיקטור" #: ../data/indicator-sensors.gschema.xml.in.h:12 #: ../data/indicator-sensors.gschema.xml.in.in.h:12 msgid "Whether to show the indicator in the notification area." msgstr "" #: ../data/indicator-sensors.desktop.in.h:1 #: ../indicator-sensors/is-application.c:822 msgid "Hardware Sensors Indicator" msgstr "אינדיקטור חיישני חומרה" #: ../data/indicator-sensors.desktop.in.h:2 msgid "An indicator for Unity which displays hardware sensor readings" msgstr "אינדיקטור ל-Unity שמציג קריאות חיישן חומרה" #: ../data/indicator-sensors.appdata.xml.in.h:1 msgid "" "Hardware Sensors Indicator provides temperature, fan and voltage sensor " "readings within the panel of your desktop." msgstr "" #: ../data/indicator-sensors.appdata.xml.in.h:2 msgid "" "When running GNOME Shell it is recommended to also install the associated " "GNOME Shell extension from extensions.gnome.org - https://extensions.gnome." "org/extension/336/hardware-sensors-indicator/ ." msgstr "" #: ../indicator-sensors/indicator-sensors.c:152 msgid "No Sensors Enabled For Monitoring" msgstr "אין חיישנים זמינים לפיקוח" #: ../indicator-sensors/indicator-sensors.c:153 msgid "" "Sensors detected but none are enabled for monitoring. To enable monitoring " "of sensors open the Preferences window and select the sensors to monitor" msgstr "" #: ../indicator-sensors/is-application.c:824 msgid "Indicator for GNOME / Unity showing hardware sensors." msgstr "אינדיקטור ל-GNOME / Unity המציג חיישני חומרה." #: ../indicator-sensors/is-fan-sensor.c:40 msgid " RPM" msgstr " סל\"ד" #: ../indicator-sensors/is-indicator.c:160 msgid "Preferences…" msgstr "העדפות..." #: ../indicator-sensors/is-indicator.c:161 msgid "Preferences" msgstr "העדפות" #: ../indicator-sensors/is-indicator.c:162 msgid "About…" msgstr "אודות..." #: ../indicator-sensors/is-indicator.c:163 msgid "About" msgstr "אודות" #: ../indicator-sensors/is-indicator.c:164 #: ../indicator-sensors/is-indicator.c:165 msgid "Quit" msgstr "יציאה" #: ../indicator-sensors/is-indicator.c:237 msgid "No Sensors" msgstr "אין חיישנים" #: ../indicator-sensors/is-indicator.c:554 #: ../indicator-sensors/is-indicator.c:680 msgid "No active sensors" msgstr "אין חיישנים פעילים" #: ../indicator-sensors/is-manager.c:302 #: ../indicator-sensors/is-sensor-dialog.c:315 msgid "Sensor" msgstr "חיישן" #: ../indicator-sensors/is-manager.c:310 #: ../indicator-sensors/is-preferences-dialog.c:149 msgid "Icon" msgstr "סמל" #: ../indicator-sensors/is-manager.c:319 #: ../indicator-sensors/is-preferences-dialog.c:154 #: ../indicator-sensors/is-sensor-dialog.c:106 msgid "Label" msgstr "תווית" #: ../indicator-sensors/is-manager.c:329 msgid "Enabled" msgstr "זמין" #: ../indicator-sensors/is-preferences-dialog.c:108 msgid "Hardware Sensors Indicator Preferences" msgstr "העדפות אינדיקטור חיישני חומרה" #: ../indicator-sensors/is-preferences-dialog.c:127 msgid "General" msgstr "כללי" #: ../indicator-sensors/is-preferences-dialog.c:135 msgid "Start automatically on login" msgstr "הפעל אוטומטית בעת התחברות" #: ../indicator-sensors/is-preferences-dialog.c:141 msgid "Primary sensor display" msgstr "תצוגת חיישן ראשית" #: ../indicator-sensors/is-preferences-dialog.c:159 msgid "Value" msgstr "ערך" #: ../indicator-sensors/is-preferences-dialog.c:176 msgid "Celsius (°C)" msgstr "צלזיוס (°C)" #: ../indicator-sensors/is-preferences-dialog.c:187 msgid "Fahrenheit (°F)" msgstr "פרנהייט (°F)" #: ../indicator-sensors/is-sensor.c:380 msgid "Sensor Alarm" msgstr "התרעת חיישן" #: ../indicator-sensors/is-sensor-dialog.c:88 msgid " Sensor Properties" msgstr " מאפייני חיישן" #: ../indicator-sensors/is-sensor-dialog.c:115 msgid "Alarm" msgstr "התרעה" #: ../indicator-sensors/is-sensor-dialog.c:123 msgid "Disabled" msgstr "לא זמין" #: ../indicator-sensors/is-sensor-dialog.c:126 msgid "Below" msgstr "מתחת" #: ../indicator-sensors/is-sensor-dialog.c:129 msgid "Above" msgstr "מעל" #: ../indicator-sensors/is-sensor-dialog.c:147 msgid "Low value" msgstr "ערך תחתון" #: ../indicator-sensors/is-sensor-dialog.c:166 msgid "High value" msgstr "ערך עליון" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:159 #, c-format msgid "Error reading temperature value for GPU %d" msgstr "שגיאה בקריאת ערך הטמפרטורה עבור GPU %d" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:198 #, c-format msgid "Error reading fanspeed value for GPU %d" msgstr "שגיאה בקריאת מהירות המאוורר עבור GPU %d" #: ../plugins/aticonfig/is-aticonfig-plugin.c:337 msgid "Temperature" msgstr "טמפרטורה" #: ../plugins/aticonfig/is-aticonfig-plugin.c:355 msgid "Fan" msgstr "מאוורר" #. first placeholder is sensor name, #. * second is error message #: ../plugins/libsensors/is-libsensors-plugin.c:174 #, c-format msgid "Error getting sensor value for sensor %s: %s [%d]" msgstr "" #. translators: V is the unit for Voltage, replace with #. appropriate unit #: ../plugins/libsensors/is-libsensors-plugin.c:315 msgid "V" msgstr "" #: ../plugins/libsensors/is-libsensors-plugin.c:375 msgid "No Sensors Detected" msgstr "לא זוהו חיישנים" #: ../plugins/libsensors/is-libsensors-plugin.c:376 #, c-format msgid "" "Try running the command 'sensors-detect' from the command-line and " "restarting %s" msgstr "נסה להריץ את הפקודה 'sensors-detect' משורת הפקודה ולהפעיל מחדש את %s" #. first placeholder is #. * sensor name #: ../plugins/nvidia/is-nvidia-plugin.c:192 #, c-format msgid "Error getting sensor value for sensor %s" msgstr "שגיאה בהשגת ערך החיישן עבור חיישן %s" #: ../plugins/udisks/is-udisks-plugin.c:149 #: ../plugins/udisks2/is-udisks2-plugin.c:126 #, c-format msgid "Error reading new SMART data for sensor %s" msgstr "" #: ../plugins/udisks/is-udisks-plugin.c:165 #, c-format msgid "Error refreshing SMART data for sensor %s" msgstr "" indicator-sensors-1.1/po/hr.po000066400000000000000000000211751356741033200164220ustar00rootroot00000000000000# Croatian translation for indicator-sensors # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the indicator-sensors package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: indicator-sensors\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 22:58+1030\n" "PO-Revision-Date: 2012-06-02 10:37+0000\n" "Last-Translator: gogo \n" "Language-Team: Croatian \n" "Language: hr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-11-02 11:56+0000\n" "X-Generator: Launchpad (build 16820)\n" #: ../data/indicator-sensors.gschema.xml.in.h:1 #: ../data/indicator-sensors.gschema.xml.in.in.h:1 msgid "Primary sensor to display" msgstr "Glavni senzor za prikazati" #: ../data/indicator-sensors.gschema.xml.in.h:2 #: ../data/indicator-sensors.gschema.xml.in.in.h:2 msgid "" "The primary sensor to display in the indicator, identified by it’s path." msgstr "Glavni senzor prikazan u indikatoru, identificiran svojom putanjom." #: ../data/indicator-sensors.gschema.xml.in.h:3 #: ../data/indicator-sensors.gschema.xml.in.in.h:3 msgid "Display flags for the indicator" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:4 #: ../data/indicator-sensors.gschema.xml.in.in.h:4 msgid "The elements used to display the primary sensor within the indicator." msgstr "Elementi koji se koriste za prikaz glavnog senzora unutar indikatora." #: ../data/indicator-sensors.gschema.xml.in.h:5 #: ../data/indicator-sensors.gschema.xml.in.in.h:5 msgid "Enabled sensors" msgstr "Omogući senzore" #: ../data/indicator-sensors.gschema.xml.in.h:6 #: ../data/indicator-sensors.gschema.xml.in.in.h:6 msgid "The list of enabled sensors to monitor, each identified by it’s path." msgstr "" "Popis omogućenih senzora za nadzor, svaki identificiran svojom putanjom." #: ../data/indicator-sensors.gschema.xml.in.h:7 #: ../data/indicator-sensors.gschema.xml.in.in.h:7 msgid "Seconds to delay hiding / showing alarms" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:8 #: ../data/indicator-sensors.gschema.xml.in.in.h:8 msgid "" "Alarm delay adds some hysteresis so alarms aren't shown for quickly " "fluctuating values." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:9 #: ../data/indicator-sensors.gschema.xml.in.in.h:9 #: ../indicator-sensors/is-preferences-dialog.c:168 msgid "Temperature scale" msgstr "Temperaturni raspon" #: ../data/indicator-sensors.gschema.xml.in.h:10 #: ../data/indicator-sensors.gschema.xml.in.in.h:10 msgid "The temperature scale to display temperature sensor values." msgstr "Temperaturni raspon za prikaz senzora temp. vrijednosti." #: ../data/indicator-sensors.gschema.xml.in.h:11 #: ../data/indicator-sensors.gschema.xml.in.in.h:11 msgid "Show indicator" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:12 #: ../data/indicator-sensors.gschema.xml.in.in.h:12 msgid "Whether to show the indicator in the notification area." msgstr "" #: ../data/indicator-sensors.desktop.in.h:1 #: ../indicator-sensors/is-application.c:822 msgid "Hardware Sensors Indicator" msgstr "Indikator senzora hardvera" #: ../data/indicator-sensors.desktop.in.h:2 msgid "An indicator for Unity which displays hardware sensor readings" msgstr "Indikator za Unity koji prikazuje očitanja senzora hardvera" #: ../data/indicator-sensors.appdata.xml.in.h:1 msgid "" "Hardware Sensors Indicator provides temperature, fan and voltage sensor " "readings within the panel of your desktop." msgstr "" #: ../data/indicator-sensors.appdata.xml.in.h:2 msgid "" "When running GNOME Shell it is recommended to also install the associated " "GNOME Shell extension from extensions.gnome.org - https://extensions.gnome." "org/extension/336/hardware-sensors-indicator/ ." msgstr "" #: ../indicator-sensors/indicator-sensors.c:152 msgid "No Sensors Enabled For Monitoring" msgstr "" #: ../indicator-sensors/indicator-sensors.c:153 msgid "" "Sensors detected but none are enabled for monitoring. To enable monitoring " "of sensors open the Preferences window and select the sensors to monitor" msgstr "" #: ../indicator-sensors/is-application.c:824 msgid "Indicator for GNOME / Unity showing hardware sensors." msgstr "" #: ../indicator-sensors/is-fan-sensor.c:40 msgid " RPM" msgstr "" #: ../indicator-sensors/is-indicator.c:160 msgid "Preferences…" msgstr "Osobitosti..." #: ../indicator-sensors/is-indicator.c:161 msgid "Preferences" msgstr "Osobitosti" #: ../indicator-sensors/is-indicator.c:162 msgid "About…" msgstr "O programu..." #: ../indicator-sensors/is-indicator.c:163 msgid "About" msgstr "" #: ../indicator-sensors/is-indicator.c:164 #: ../indicator-sensors/is-indicator.c:165 msgid "Quit" msgstr "Zatvori" #: ../indicator-sensors/is-indicator.c:237 msgid "No Sensors" msgstr "Nema senzora" #: ../indicator-sensors/is-indicator.c:554 #: ../indicator-sensors/is-indicator.c:680 msgid "No active sensors" msgstr "Nema aktivnih senzora" #: ../indicator-sensors/is-manager.c:302 #: ../indicator-sensors/is-sensor-dialog.c:315 msgid "Sensor" msgstr "Senzor" #: ../indicator-sensors/is-manager.c:310 #: ../indicator-sensors/is-preferences-dialog.c:149 msgid "Icon" msgstr "Ikona" #: ../indicator-sensors/is-manager.c:319 #: ../indicator-sensors/is-preferences-dialog.c:154 #: ../indicator-sensors/is-sensor-dialog.c:106 msgid "Label" msgstr "" #: ../indicator-sensors/is-manager.c:329 msgid "Enabled" msgstr "Omogućeno" #: ../indicator-sensors/is-preferences-dialog.c:108 msgid "Hardware Sensors Indicator Preferences" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:127 msgid "General" msgstr "Općenito" #: ../indicator-sensors/is-preferences-dialog.c:135 msgid "Start automatically on login" msgstr "Pokreni automatski prilikom prijave" #: ../indicator-sensors/is-preferences-dialog.c:141 msgid "Primary sensor display" msgstr "Glavni prikaz senzora" #: ../indicator-sensors/is-preferences-dialog.c:159 msgid "Value" msgstr "Vrijednost" #: ../indicator-sensors/is-preferences-dialog.c:176 msgid "Celsius (°C)" msgstr "Celzij (°C)" #: ../indicator-sensors/is-preferences-dialog.c:187 msgid "Fahrenheit (°F)" msgstr "Fahrenheit (°F)" #: ../indicator-sensors/is-sensor.c:380 msgid "Sensor Alarm" msgstr "Senzor alarma" #: ../indicator-sensors/is-sensor-dialog.c:88 msgid " Sensor Properties" msgstr " Svojstva senzora" #: ../indicator-sensors/is-sensor-dialog.c:115 msgid "Alarm" msgstr "Alarm" #: ../indicator-sensors/is-sensor-dialog.c:123 msgid "Disabled" msgstr "Onemogućeno" #: ../indicator-sensors/is-sensor-dialog.c:126 msgid "Below" msgstr "Ispod" #: ../indicator-sensors/is-sensor-dialog.c:129 msgid "Above" msgstr "Iznad" #: ../indicator-sensors/is-sensor-dialog.c:147 msgid "Low value" msgstr "Niža vrijednost" #: ../indicator-sensors/is-sensor-dialog.c:166 msgid "High value" msgstr "Viša vrijednost" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:159 #, c-format msgid "Error reading temperature value for GPU %d" msgstr "Greška čitanja vrijednosti temp. za GPU %d" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:198 #, c-format msgid "Error reading fanspeed value for GPU %d" msgstr "Greška čitanja brzine ventilatora. za GPU %d" #: ../plugins/aticonfig/is-aticonfig-plugin.c:337 msgid "Temperature" msgstr "Temperatura" #: ../plugins/aticonfig/is-aticonfig-plugin.c:355 msgid "Fan" msgstr "Ventilator" #. first placeholder is sensor name, #. * second is error message #: ../plugins/libsensors/is-libsensors-plugin.c:174 #, c-format msgid "Error getting sensor value for sensor %s: %s [%d]" msgstr "Greška dobivanja vrijednosti senzora za senzor %s: %s [%d]" #. translators: V is the unit for Voltage, replace with #. appropriate unit #: ../plugins/libsensors/is-libsensors-plugin.c:315 msgid "V" msgstr "V" #: ../plugins/libsensors/is-libsensors-plugin.c:375 msgid "No Sensors Detected" msgstr "" #: ../plugins/libsensors/is-libsensors-plugin.c:376 #, c-format msgid "" "Try running the command 'sensors-detect' from the command-line and " "restarting %s" msgstr "" #. first placeholder is #. * sensor name #: ../plugins/nvidia/is-nvidia-plugin.c:192 #, c-format msgid "Error getting sensor value for sensor %s" msgstr "Greška dobivanja vrijednosti senzora za senzor %s" #: ../plugins/udisks/is-udisks-plugin.c:149 #: ../plugins/udisks2/is-udisks2-plugin.c:126 #, c-format msgid "Error reading new SMART data for sensor %s" msgstr "Greška čitanja novih SMART podataka za senzor %s" #: ../plugins/udisks/is-udisks-plugin.c:165 #, c-format msgid "Error refreshing SMART data for sensor %s" msgstr "Greška osvježavanja SMART podataka za senzor %s" indicator-sensors-1.1/po/hu.po000066400000000000000000000214171356741033200164240ustar00rootroot00000000000000# Hungarian translation for indicator-sensors # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the indicator-sensors package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: indicator-sensors\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 22:58+1030\n" "PO-Revision-Date: 2012-03-25 18:05+0000\n" "Last-Translator: Bence Lukács \n" "Language-Team: Hungarian \n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-11-02 11:56+0000\n" "X-Generator: Launchpad (build 16820)\n" #: ../data/indicator-sensors.gschema.xml.in.h:1 #: ../data/indicator-sensors.gschema.xml.in.in.h:1 msgid "Primary sensor to display" msgstr "Elsődleges szenzor megjelenítése" #: ../data/indicator-sensors.gschema.xml.in.h:2 #: ../data/indicator-sensors.gschema.xml.in.in.h:2 msgid "" "The primary sensor to display in the indicator, identified by it’s path." msgstr "" "Az elsődleges szenzor megjelenítése az indikátorban, az útvonala alapján " "azonosítva" #: ../data/indicator-sensors.gschema.xml.in.h:3 #: ../data/indicator-sensors.gschema.xml.in.in.h:3 msgid "Display flags for the indicator" msgstr "Feliratok megjelenítése az indikátornál" #: ../data/indicator-sensors.gschema.xml.in.h:4 #: ../data/indicator-sensors.gschema.xml.in.in.h:4 msgid "The elements used to display the primary sensor within the indicator." msgstr "Elsődleges szenzor megjelenítése az indikátoron." #: ../data/indicator-sensors.gschema.xml.in.h:5 #: ../data/indicator-sensors.gschema.xml.in.in.h:5 msgid "Enabled sensors" msgstr "Engedélyezett szenzorok" #: ../data/indicator-sensors.gschema.xml.in.h:6 #: ../data/indicator-sensors.gschema.xml.in.in.h:6 msgid "The list of enabled sensors to monitor, each identified by it’s path." msgstr "Az ellenőrzött szenzorok listája, útvonaluk alapján azonosítva." #: ../data/indicator-sensors.gschema.xml.in.h:7 #: ../data/indicator-sensors.gschema.xml.in.in.h:7 msgid "Seconds to delay hiding / showing alarms" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:8 #: ../data/indicator-sensors.gschema.xml.in.in.h:8 msgid "" "Alarm delay adds some hysteresis so alarms aren't shown for quickly " "fluctuating values." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:9 #: ../data/indicator-sensors.gschema.xml.in.in.h:9 #: ../indicator-sensors/is-preferences-dialog.c:168 msgid "Temperature scale" msgstr "Hőmérsékleti skála" #: ../data/indicator-sensors.gschema.xml.in.h:10 #: ../data/indicator-sensors.gschema.xml.in.in.h:10 msgid "The temperature scale to display temperature sensor values." msgstr "A hőmérsékleti skála megjelenítése a szenzor értékében." #: ../data/indicator-sensors.gschema.xml.in.h:11 #: ../data/indicator-sensors.gschema.xml.in.in.h:11 msgid "Show indicator" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:12 #: ../data/indicator-sensors.gschema.xml.in.in.h:12 msgid "Whether to show the indicator in the notification area." msgstr "" #: ../data/indicator-sensors.desktop.in.h:1 #: ../indicator-sensors/is-application.c:822 msgid "Hardware Sensors Indicator" msgstr "Hardver-szenzor indikátor" #: ../data/indicator-sensors.desktop.in.h:2 msgid "An indicator for Unity which displays hardware sensor readings" msgstr "Egy indikátor a Unityhez, ami megmutatja a hardver-szenzor adatait." #: ../data/indicator-sensors.appdata.xml.in.h:1 msgid "" "Hardware Sensors Indicator provides temperature, fan and voltage sensor " "readings within the panel of your desktop." msgstr "" #: ../data/indicator-sensors.appdata.xml.in.h:2 msgid "" "When running GNOME Shell it is recommended to also install the associated " "GNOME Shell extension from extensions.gnome.org - https://extensions.gnome." "org/extension/336/hardware-sensors-indicator/ ." msgstr "" #: ../indicator-sensors/indicator-sensors.c:152 msgid "No Sensors Enabled For Monitoring" msgstr "" #: ../indicator-sensors/indicator-sensors.c:153 msgid "" "Sensors detected but none are enabled for monitoring. To enable monitoring " "of sensors open the Preferences window and select the sensors to monitor" msgstr "" #: ../indicator-sensors/is-application.c:824 msgid "Indicator for GNOME / Unity showing hardware sensors." msgstr "" #: ../indicator-sensors/is-fan-sensor.c:40 msgid " RPM" msgstr "" #: ../indicator-sensors/is-indicator.c:160 msgid "Preferences…" msgstr "Beállítások…" #: ../indicator-sensors/is-indicator.c:161 msgid "Preferences" msgstr "Beállítások" #: ../indicator-sensors/is-indicator.c:162 msgid "About…" msgstr "Névjegy..." #: ../indicator-sensors/is-indicator.c:163 msgid "About" msgstr "" #: ../indicator-sensors/is-indicator.c:164 #: ../indicator-sensors/is-indicator.c:165 msgid "Quit" msgstr "Kilépés" #: ../indicator-sensors/is-indicator.c:237 msgid "No Sensors" msgstr "Nincs szenzor" #: ../indicator-sensors/is-indicator.c:554 #: ../indicator-sensors/is-indicator.c:680 msgid "No active sensors" msgstr "Nincs aktív szenzor" #: ../indicator-sensors/is-manager.c:302 #: ../indicator-sensors/is-sensor-dialog.c:315 msgid "Sensor" msgstr "Szenzor" #: ../indicator-sensors/is-manager.c:310 #: ../indicator-sensors/is-preferences-dialog.c:149 msgid "Icon" msgstr "Ikon" #: ../indicator-sensors/is-manager.c:319 #: ../indicator-sensors/is-preferences-dialog.c:154 #: ../indicator-sensors/is-sensor-dialog.c:106 msgid "Label" msgstr "Címke" #: ../indicator-sensors/is-manager.c:329 msgid "Enabled" msgstr "Engedélyezve" #: ../indicator-sensors/is-preferences-dialog.c:108 msgid "Hardware Sensors Indicator Preferences" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:127 msgid "General" msgstr "Általános" #: ../indicator-sensors/is-preferences-dialog.c:135 msgid "Start automatically on login" msgstr "Automatikus indulás bejelentkezéskor" #: ../indicator-sensors/is-preferences-dialog.c:141 msgid "Primary sensor display" msgstr "Elsődleges szenzor megjelenítése" #: ../indicator-sensors/is-preferences-dialog.c:159 msgid "Value" msgstr "Érték" #: ../indicator-sensors/is-preferences-dialog.c:176 msgid "Celsius (°C)" msgstr "Celsius (°C)" #: ../indicator-sensors/is-preferences-dialog.c:187 msgid "Fahrenheit (°F)" msgstr "Fahrenheit (°F)" #: ../indicator-sensors/is-sensor.c:380 msgid "Sensor Alarm" msgstr "Szenzor riasztás" #: ../indicator-sensors/is-sensor-dialog.c:88 msgid " Sensor Properties" msgstr " Szenzor tulajdonságai" #: ../indicator-sensors/is-sensor-dialog.c:115 msgid "Alarm" msgstr "Riasztás" #: ../indicator-sensors/is-sensor-dialog.c:123 msgid "Disabled" msgstr "Letiltva" #: ../indicator-sensors/is-sensor-dialog.c:126 msgid "Below" msgstr "alatta" #: ../indicator-sensors/is-sensor-dialog.c:129 msgid "Above" msgstr "felette" #: ../indicator-sensors/is-sensor-dialog.c:147 msgid "Low value" msgstr "Alacsony érték" #: ../indicator-sensors/is-sensor-dialog.c:166 msgid "High value" msgstr "Magas érték" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:159 #, c-format msgid "Error reading temperature value for GPU %d" msgstr "%d GPU hőmérsékletének beolvasása meghiúsult" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:198 #, c-format msgid "Error reading fanspeed value for GPU %d" msgstr "%d GPU ventillátor sebességének beolvasása meghiúsult" #: ../plugins/aticonfig/is-aticonfig-plugin.c:337 msgid "Temperature" msgstr "Hőmérséklet" #: ../plugins/aticonfig/is-aticonfig-plugin.c:355 msgid "Fan" msgstr "Ventilátor" #. first placeholder is sensor name, #. * second is error message #: ../plugins/libsensors/is-libsensors-plugin.c:174 #, c-format msgid "Error getting sensor value for sensor %s: %s [%d]" msgstr "%s: %s szenzor értékének beolvasása meghiúsult [%d]" #. translators: V is the unit for Voltage, replace with #. appropriate unit #: ../plugins/libsensors/is-libsensors-plugin.c:315 msgid "V" msgstr "V" #: ../plugins/libsensors/is-libsensors-plugin.c:375 msgid "No Sensors Detected" msgstr "" #: ../plugins/libsensors/is-libsensors-plugin.c:376 #, c-format msgid "" "Try running the command 'sensors-detect' from the command-line and " "restarting %s" msgstr "" #. first placeholder is #. * sensor name #: ../plugins/nvidia/is-nvidia-plugin.c:192 #, c-format msgid "Error getting sensor value for sensor %s" msgstr "%s szenzor értékének beolvasása meghiúsult" #: ../plugins/udisks/is-udisks-plugin.c:149 #: ../plugins/udisks2/is-udisks2-plugin.c:126 #, c-format msgid "Error reading new SMART data for sensor %s" msgstr "%s szenzor új SMART adatainak beolvasása meghiúsult" #: ../plugins/udisks/is-udisks-plugin.c:165 #, c-format msgid "Error refreshing SMART data for sensor %s" msgstr "%s szenzor SMART adatainak frissítése meghiúsult" indicator-sensors-1.1/po/indicator-sensors.pot000066400000000000000000000205761356741033200216470ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-10-23 22:58+1030\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../data/indicator-sensors.gschema.xml.in.h:1 #: ../data/indicator-sensors.gschema.xml.in.in.h:1 msgid "Primary sensor to display" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:2 #: ../data/indicator-sensors.gschema.xml.in.in.h:2 msgid "" "The primary sensor to display in the indicator, identified by it’s path." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:3 #: ../data/indicator-sensors.gschema.xml.in.in.h:3 msgid "Display flags for the indicator" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:4 #: ../data/indicator-sensors.gschema.xml.in.in.h:4 msgid "The elements used to display the primary sensor within the indicator." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:5 #: ../data/indicator-sensors.gschema.xml.in.in.h:5 msgid "Enabled sensors" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:6 #: ../data/indicator-sensors.gschema.xml.in.in.h:6 msgid "The list of enabled sensors to monitor, each identified by it’s path." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:7 #: ../data/indicator-sensors.gschema.xml.in.in.h:7 msgid "Seconds to delay hiding / showing alarms" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:8 #: ../data/indicator-sensors.gschema.xml.in.in.h:8 msgid "" "Alarm delay adds some hysteresis so alarms aren't shown for quickly " "fluctuating values." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:9 #: ../data/indicator-sensors.gschema.xml.in.in.h:9 #: ../indicator-sensors/is-preferences-dialog.c:183 msgid "Temperature scale" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:10 #: ../data/indicator-sensors.gschema.xml.in.in.h:10 msgid "The temperature scale to display temperature sensor values." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:11 #: ../data/indicator-sensors.gschema.xml.in.in.h:11 msgid "Show indicator" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:12 #: ../data/indicator-sensors.gschema.xml.in.in.h:12 msgid "Whether to show the indicator in the notification area." msgstr "" #: ../data/indicator-sensors.desktop.in.h:1 #: ../indicator-sensors/is-application.c:861 msgid "Hardware Sensors Indicator" msgstr "" #: ../data/indicator-sensors.desktop.in.h:2 msgid "An indicator for Unity which displays hardware sensor readings" msgstr "" #: ../data/indicator-sensors.appdata.xml.in.h:1 msgid "" "Hardware Sensors Indicator provides temperature, fan and voltage sensor " "readings within the panel of your desktop." msgstr "" #: ../data/indicator-sensors.appdata.xml.in.h:2 msgid "" "When running GNOME Shell it is recommended to also install the associated " "GNOME Shell extension from extensions.gnome.org - https://extensions.gnome." "org/extension/336/hardware-sensors-indicator/ ." msgstr "" #: ../indicator-sensors/indicator-sensors.c:194 msgid "No Sensors Enabled For Monitoring" msgstr "" #: ../indicator-sensors/indicator-sensors.c:195 msgid "" "Sensors detected but none are enabled for monitoring. To enable monitoring " "of sensors open the Preferences window and select the sensors to monitor" msgstr "" #: ../indicator-sensors/is-application.c:863 msgid "Indicator for GNOME / Unity showing hardware sensors." msgstr "" #: ../indicator-sensors/is-fan-sensor.c:41 msgid " RPM" msgstr "" #: ../indicator-sensors/is-indicator.c:165 msgid "Preferences…" msgstr "" #: ../indicator-sensors/is-indicator.c:166 #: ../indicator-sensors/is-preferences-dialog.c:212 msgid "Preferences" msgstr "" #: ../indicator-sensors/is-indicator.c:169 msgid "About…" msgstr "" #: ../indicator-sensors/is-indicator.c:170 msgid "About" msgstr "" #: ../indicator-sensors/is-indicator.c:173 msgid "_Quit" msgstr "" #: ../indicator-sensors/is-indicator.c:174 msgid "Quit" msgstr "" #: ../indicator-sensors/is-indicator.c:248 msgid "No Sensors" msgstr "" #: ../indicator-sensors/is-indicator.c:570 #: ../indicator-sensors/is-indicator.c:704 msgid "No active sensors" msgstr "" #: ../indicator-sensors/is-manager.c:311 #: ../indicator-sensors/is-sensor-dialog.c:318 msgid "Sensor" msgstr "" #: ../indicator-sensors/is-manager.c:319 #: ../indicator-sensors/is-preferences-dialog.c:164 msgid "Icon" msgstr "" #: ../indicator-sensors/is-manager.c:328 #: ../indicator-sensors/is-preferences-dialog.c:169 #: ../indicator-sensors/is-sensor-dialog.c:107 msgid "Label" msgstr "" #: ../indicator-sensors/is-manager.c:338 msgid "Enabled" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:124 msgid "Hardware Sensors Indicator Preferences" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:127 msgid "_Properties" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:132 #: ../indicator-sensors/is-sensor-dialog.c:93 msgid "_Close" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:142 msgid "General" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:150 msgid "Start automatically on login" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:156 msgid "Primary sensor display" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:174 msgid "Value" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:191 msgid "Celsius (°C)" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:202 msgid "Fahrenheit (°F)" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:222 msgid "Plugins" msgstr "" #: ../indicator-sensors/is-sensor.c:387 msgid "Sensor Alarm" msgstr "" #: ../indicator-sensors/is-sensor.c:953 msgid "Sensor Error" msgstr "" #: ../indicator-sensors/is-sensor-dialog.c:89 msgid " Sensor Properties" msgstr "" #: ../indicator-sensors/is-sensor-dialog.c:116 msgid "Alarm" msgstr "" #: ../indicator-sensors/is-sensor-dialog.c:124 msgid "Disabled" msgstr "" #: ../indicator-sensors/is-sensor-dialog.c:127 msgid "Below" msgstr "" #: ../indicator-sensors/is-sensor-dialog.c:130 msgid "Above" msgstr "" #: ../indicator-sensors/is-sensor-dialog.c:148 msgid "Low value" msgstr "" #: ../indicator-sensors/is-sensor-dialog.c:167 msgid "High value" msgstr "" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:170 #, c-format msgid "Error reading temperature value for GPU %d" msgstr "" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:211 #, c-format msgid "Error reading fanspeed value for GPU %d" msgstr "" #: ../plugins/aticonfig/is-aticonfig-plugin.c:370 msgid "Temperature" msgstr "" #: ../plugins/aticonfig/is-aticonfig-plugin.c:391 msgid "Fan" msgstr "" #: ../plugins/fake/is-fake-plugin.c:148 #, c-format msgid "Fake Fan %d" msgstr "" #: ../plugins/fake/is-fake-plugin.c:156 #, c-format msgid "Fake CPU %d" msgstr "" #. first placeholder is sensor name, #. * second is error message #: ../plugins/libsensors/is-libsensors-plugin.c:185 #, c-format msgid "Error getting sensor value for sensor %s: %s [%d]" msgstr "" #. translators: V is the unit for Voltage, replace with #. appropriate unit #: ../plugins/libsensors/is-libsensors-plugin.c:340 msgid "V" msgstr "" #: ../plugins/libsensors/is-libsensors-plugin.c:404 msgid "No Sensors Detected" msgstr "" #: ../plugins/libsensors/is-libsensors-plugin.c:405 #, c-format msgid "" "Try running the command 'sensors-detect' from the command-line and " "restarting %s" msgstr "" #. first placeholder is #. * sensor name #: ../plugins/nvidia/is-nvidia-plugin.c:211 #, c-format msgid "Error getting sensor value for sensor %s" msgstr "" #: ../plugins/udisks/is-udisks-plugin.c:157 #: ../plugins/udisks2/is-udisks2-plugin.c:133 #, c-format msgid "Error reading new SMART data for sensor %s" msgstr "" #: ../plugins/udisks/is-udisks-plugin.c:173 #, c-format msgid "Error refreshing SMART data for sensor %s" msgstr "" #: ../plugins/udisks2/is-udisks2-plugin.c:166 #, c-format msgid "Error reading power management state for sensor %s" msgstr "" #. first placeholder is sensor name #: ../plugins/udisks2/is-udisks2-plugin.c:184 #, c-format msgid "Error getting sensor value for disk sensor %s: disk is idle" msgstr "" indicator-sensors-1.1/po/it.po000066400000000000000000000214141356741033200164210ustar00rootroot00000000000000# Italian translation for indicator-sensors # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the indicator-sensors package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: indicator-sensors\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 22:58+1030\n" "PO-Revision-Date: 2012-07-07 16:43+0000\n" "Last-Translator: Gianfranco Frisani \n" "Language-Team: Italian \n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-11-02 11:56+0000\n" "X-Generator: Launchpad (build 16820)\n" #: ../data/indicator-sensors.gschema.xml.in.h:1 #: ../data/indicator-sensors.gschema.xml.in.in.h:1 msgid "Primary sensor to display" msgstr "Sensore primario da mostrare" #: ../data/indicator-sensors.gschema.xml.in.h:2 #: ../data/indicator-sensors.gschema.xml.in.in.h:2 msgid "" "The primary sensor to display in the indicator, identified by it’s path." msgstr "" "Il sensore primario da mostrare nell'indicatore, identificato dal suo " "percorso." #: ../data/indicator-sensors.gschema.xml.in.h:3 #: ../data/indicator-sensors.gschema.xml.in.in.h:3 msgid "Display flags for the indicator" msgstr "Visualizza i contrassegni per l'indicatore" #: ../data/indicator-sensors.gschema.xml.in.h:4 #: ../data/indicator-sensors.gschema.xml.in.in.h:4 msgid "The elements used to display the primary sensor within the indicator." msgstr "" "Elementi usati per mostrare il sensore primario all'interno dell'indicator." #: ../data/indicator-sensors.gschema.xml.in.h:5 #: ../data/indicator-sensors.gschema.xml.in.in.h:5 msgid "Enabled sensors" msgstr "Sensori abilitati" #: ../data/indicator-sensors.gschema.xml.in.h:6 #: ../data/indicator-sensors.gschema.xml.in.in.h:6 msgid "The list of enabled sensors to monitor, each identified by it’s path." msgstr "" "Lista dei sensori abilitati da monitorare, ognuno identificato dal suo " "percorso." #: ../data/indicator-sensors.gschema.xml.in.h:7 #: ../data/indicator-sensors.gschema.xml.in.in.h:7 msgid "Seconds to delay hiding / showing alarms" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:8 #: ../data/indicator-sensors.gschema.xml.in.in.h:8 msgid "" "Alarm delay adds some hysteresis so alarms aren't shown for quickly " "fluctuating values." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:9 #: ../data/indicator-sensors.gschema.xml.in.in.h:9 #: ../indicator-sensors/is-preferences-dialog.c:168 msgid "Temperature scale" msgstr "Scala termica" #: ../data/indicator-sensors.gschema.xml.in.h:10 #: ../data/indicator-sensors.gschema.xml.in.in.h:10 msgid "The temperature scale to display temperature sensor values." msgstr "Scala termica usata per mostrare i valori dei sensori." #: ../data/indicator-sensors.gschema.xml.in.h:11 #: ../data/indicator-sensors.gschema.xml.in.in.h:11 msgid "Show indicator" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:12 #: ../data/indicator-sensors.gschema.xml.in.in.h:12 msgid "Whether to show the indicator in the notification area." msgstr "" #: ../data/indicator-sensors.desktop.in.h:1 #: ../indicator-sensors/is-application.c:822 msgid "Hardware Sensors Indicator" msgstr "Hardware Sensors Indicator" #: ../data/indicator-sensors.desktop.in.h:2 msgid "An indicator for Unity which displays hardware sensor readings" msgstr "Un indicator per Unity che mostra i valori dei sensori hardware" #: ../data/indicator-sensors.appdata.xml.in.h:1 msgid "" "Hardware Sensors Indicator provides temperature, fan and voltage sensor " "readings within the panel of your desktop." msgstr "" #: ../data/indicator-sensors.appdata.xml.in.h:2 msgid "" "When running GNOME Shell it is recommended to also install the associated " "GNOME Shell extension from extensions.gnome.org - https://extensions.gnome." "org/extension/336/hardware-sensors-indicator/ ." msgstr "" #: ../indicator-sensors/indicator-sensors.c:152 msgid "No Sensors Enabled For Monitoring" msgstr "" #: ../indicator-sensors/indicator-sensors.c:153 msgid "" "Sensors detected but none are enabled for monitoring. To enable monitoring " "of sensors open the Preferences window and select the sensors to monitor" msgstr "" #: ../indicator-sensors/is-application.c:824 msgid "Indicator for GNOME / Unity showing hardware sensors." msgstr "" #: ../indicator-sensors/is-fan-sensor.c:40 msgid " RPM" msgstr "" #: ../indicator-sensors/is-indicator.c:160 msgid "Preferences…" msgstr "Preferenze…" #: ../indicator-sensors/is-indicator.c:161 msgid "Preferences" msgstr "Preferenze" #: ../indicator-sensors/is-indicator.c:162 msgid "About…" msgstr "Informazioni..." #: ../indicator-sensors/is-indicator.c:163 msgid "About" msgstr "" #: ../indicator-sensors/is-indicator.c:164 #: ../indicator-sensors/is-indicator.c:165 msgid "Quit" msgstr "Esci" #: ../indicator-sensors/is-indicator.c:237 msgid "No Sensors" msgstr "Nessun sensore presente" #: ../indicator-sensors/is-indicator.c:554 #: ../indicator-sensors/is-indicator.c:680 msgid "No active sensors" msgstr "Nessun sensore attivo" #: ../indicator-sensors/is-manager.c:302 #: ../indicator-sensors/is-sensor-dialog.c:315 msgid "Sensor" msgstr "Sensore" #: ../indicator-sensors/is-manager.c:310 #: ../indicator-sensors/is-preferences-dialog.c:149 msgid "Icon" msgstr "Icona" #: ../indicator-sensors/is-manager.c:319 #: ../indicator-sensors/is-preferences-dialog.c:154 #: ../indicator-sensors/is-sensor-dialog.c:106 msgid "Label" msgstr "Etichetta" #: ../indicator-sensors/is-manager.c:329 msgid "Enabled" msgstr "Attivo" #: ../indicator-sensors/is-preferences-dialog.c:108 msgid "Hardware Sensors Indicator Preferences" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:127 msgid "General" msgstr "Generale" #: ../indicator-sensors/is-preferences-dialog.c:135 msgid "Start automatically on login" msgstr "Avvia automaticamente all'accesso" #: ../indicator-sensors/is-preferences-dialog.c:141 msgid "Primary sensor display" msgstr "Del sensore primario visualizza" #: ../indicator-sensors/is-preferences-dialog.c:159 msgid "Value" msgstr "Valore" #: ../indicator-sensors/is-preferences-dialog.c:176 msgid "Celsius (°C)" msgstr "Celsius (°C)" #: ../indicator-sensors/is-preferences-dialog.c:187 msgid "Fahrenheit (°F)" msgstr "Fahrenheit (°F)" #: ../indicator-sensors/is-sensor.c:380 msgid "Sensor Alarm" msgstr "Allarme del sensore" #: ../indicator-sensors/is-sensor-dialog.c:88 msgid " Sensor Properties" msgstr " Proprietà del sensore" #: ../indicator-sensors/is-sensor-dialog.c:115 msgid "Alarm" msgstr "Avviso" #: ../indicator-sensors/is-sensor-dialog.c:123 msgid "Disabled" msgstr "Disattivato" #: ../indicator-sensors/is-sensor-dialog.c:126 msgid "Below" msgstr "Inferiore" #: ../indicator-sensors/is-sensor-dialog.c:129 msgid "Above" msgstr "Superiore" #: ../indicator-sensors/is-sensor-dialog.c:147 msgid "Low value" msgstr "Valore basso" #: ../indicator-sensors/is-sensor-dialog.c:166 msgid "High value" msgstr "Valore alto" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:159 #, c-format msgid "Error reading temperature value for GPU %d" msgstr "Errore nella lettura della temperatura per la GPU %d" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:198 #, c-format msgid "Error reading fanspeed value for GPU %d" msgstr "Errore nella lettura della velocità della ventola per la GPU %d" #: ../plugins/aticonfig/is-aticonfig-plugin.c:337 msgid "Temperature" msgstr "Temperatura" #: ../plugins/aticonfig/is-aticonfig-plugin.c:355 msgid "Fan" msgstr "Ventola" #. first placeholder is sensor name, #. * second is error message #: ../plugins/libsensors/is-libsensors-plugin.c:174 #, c-format msgid "Error getting sensor value for sensor %s: %s [%d]" msgstr "Impossibile ottenere il valore per il sensore %s: %s [%d]" #. translators: V is the unit for Voltage, replace with #. appropriate unit #: ../plugins/libsensors/is-libsensors-plugin.c:315 msgid "V" msgstr "V" #: ../plugins/libsensors/is-libsensors-plugin.c:375 msgid "No Sensors Detected" msgstr "" #: ../plugins/libsensors/is-libsensors-plugin.c:376 #, c-format msgid "" "Try running the command 'sensors-detect' from the command-line and " "restarting %s" msgstr "" #. first placeholder is #. * sensor name #: ../plugins/nvidia/is-nvidia-plugin.c:192 #, c-format msgid "Error getting sensor value for sensor %s" msgstr "Impossibile ottenere il valore per il sensore %s" #: ../plugins/udisks/is-udisks-plugin.c:149 #: ../plugins/udisks2/is-udisks2-plugin.c:126 #, c-format msgid "Error reading new SMART data for sensor %s" msgstr "Errore nella lettura dei dati SMART per il sensore %s" #: ../plugins/udisks/is-udisks-plugin.c:165 #, c-format msgid "Error refreshing SMART data for sensor %s" msgstr "Errore nell'aggiornare di dati SMART per il sensore %s" indicator-sensors-1.1/po/ko.po000066400000000000000000000235261356741033200164240ustar00rootroot00000000000000# Korean translation for indicator-sensors # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the indicator-sensors package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: indicator-sensors\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 22:58+1030\n" "PO-Revision-Date: 2013-09-30 10:21+0000\n" "Last-Translator: Kim Boram \n" "Language-Team: Korean \n" "Language: ko\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-11-02 11:56+0000\n" "X-Generator: Launchpad (build 16820)\n" #: ../data/indicator-sensors.gschema.xml.in.h:1 #: ../data/indicator-sensors.gschema.xml.in.in.h:1 msgid "Primary sensor to display" msgstr "표시할 주 센서" #: ../data/indicator-sensors.gschema.xml.in.h:2 #: ../data/indicator-sensors.gschema.xml.in.in.h:2 msgid "" "The primary sensor to display in the indicator, identified by it’s path." msgstr "경로로 구분한 알리미에 표시할 주 센서를 설정합니다." #: ../data/indicator-sensors.gschema.xml.in.h:3 #: ../data/indicator-sensors.gschema.xml.in.in.h:3 msgid "Display flags for the indicator" msgstr "알리미의 플래그를 표시합니다." #: ../data/indicator-sensors.gschema.xml.in.h:4 #: ../data/indicator-sensors.gschema.xml.in.in.h:4 msgid "The elements used to display the primary sensor within the indicator." msgstr "알리미에 표시할 주 센서에 사용하는 요소입니다." #: ../data/indicator-sensors.gschema.xml.in.h:5 #: ../data/indicator-sensors.gschema.xml.in.in.h:5 msgid "Enabled sensors" msgstr "센서 사용" #: ../data/indicator-sensors.gschema.xml.in.h:6 #: ../data/indicator-sensors.gschema.xml.in.in.h:6 msgid "The list of enabled sensors to monitor, each identified by it’s path." msgstr "경로로 구분하는 감시하도록 설정한 센서의 목록입니다." #: ../data/indicator-sensors.gschema.xml.in.h:7 #: ../data/indicator-sensors.gschema.xml.in.in.h:7 msgid "Seconds to delay hiding / showing alarms" msgstr "숨길 때와 경고 메시지를 표시할 때의 지연 시간" #: ../data/indicator-sensors.gschema.xml.in.h:8 #: ../data/indicator-sensors.gschema.xml.in.in.h:8 msgid "" "Alarm delay adds some hysteresis so alarms aren't shown for quickly " "fluctuating values." msgstr "" "경고 메시지를 표시하는 시간을 지연해 온도가 빠르게 변할 때 메시지가 끊임없이 " "나타나는 것을 막습니다." #: ../data/indicator-sensors.gschema.xml.in.h:9 #: ../data/indicator-sensors.gschema.xml.in.in.h:9 #: ../indicator-sensors/is-preferences-dialog.c:168 msgid "Temperature scale" msgstr "온도 단위" #: ../data/indicator-sensors.gschema.xml.in.h:10 #: ../data/indicator-sensors.gschema.xml.in.in.h:10 msgid "The temperature scale to display temperature sensor values." msgstr "센서의 온도 값을 표시할 단위를 설정합니다." #: ../data/indicator-sensors.gschema.xml.in.h:11 #: ../data/indicator-sensors.gschema.xml.in.in.h:11 msgid "Show indicator" msgstr "알리미 보이기" #: ../data/indicator-sensors.gschema.xml.in.h:12 #: ../data/indicator-sensors.gschema.xml.in.in.h:12 msgid "Whether to show the indicator in the notification area." msgstr "알림 영역에 알리미를 표시할지 설정합니다." #: ../data/indicator-sensors.desktop.in.h:1 #: ../indicator-sensors/is-application.c:822 msgid "Hardware Sensors Indicator" msgstr "하드웨어 센서 알리미" #: ../data/indicator-sensors.desktop.in.h:2 msgid "An indicator for Unity which displays hardware sensor readings" msgstr "하드웨어 센서를 읽은 값을 표시하는 유니티용 알리미" #: ../data/indicator-sensors.appdata.xml.in.h:1 msgid "" "Hardware Sensors Indicator provides temperature, fan and voltage sensor " "readings within the panel of your desktop." msgstr "" "하드웨어 센서 알리미는 데스크톱 패널에 온도와 팬, 전압 값을 읽어 표시합니다." #: ../data/indicator-sensors.appdata.xml.in.h:2 msgid "" "When running GNOME Shell it is recommended to also install the associated " "GNOME Shell extension from extensions.gnome.org - https://extensions.gnome." "org/extension/336/hardware-sensors-indicator/ ." msgstr "" "그놈 쉘을 사용할 때는 그놈 확장 기능 사이트(https://extensions.gnome.org/" "extension/336/hardware-sensors-indicator/)에서 센서 알리미의 그놈 쉘 용 확장 " "기능을 설치해주십시오." #: ../indicator-sensors/indicator-sensors.c:152 msgid "No Sensors Enabled For Monitoring" msgstr "감시하도록 설정한 센서가 없습니다." #: ../indicator-sensors/indicator-sensors.c:153 msgid "" "Sensors detected but none are enabled for monitoring. To enable monitoring " "of sensors open the Preferences window and select the sensors to monitor" msgstr "" "센서를 발견했습니다. 하지만 감시할 센서로 설정한 센서가 없습니다. 감시할 센서" "를 설정하려면 기본 설정 창을 연 후 감시할 센서를 선택해주십시오." #: ../indicator-sensors/is-application.c:824 msgid "Indicator for GNOME / Unity showing hardware sensors." msgstr "그놈 / 유니티 용 하드웨어 센서 알리미입니다." #: ../indicator-sensors/is-fan-sensor.c:40 msgid " RPM" msgstr " RPM" #: ../indicator-sensors/is-indicator.c:160 msgid "Preferences…" msgstr "기본 설정…" #: ../indicator-sensors/is-indicator.c:161 msgid "Preferences" msgstr "기본 설정" #: ../indicator-sensors/is-indicator.c:162 msgid "About…" msgstr "정보…" #: ../indicator-sensors/is-indicator.c:163 msgid "About" msgstr "정보" #: ../indicator-sensors/is-indicator.c:164 #: ../indicator-sensors/is-indicator.c:165 msgid "Quit" msgstr "끝내기" #: ../indicator-sensors/is-indicator.c:237 msgid "No Sensors" msgstr "센서 없음" #: ../indicator-sensors/is-indicator.c:554 #: ../indicator-sensors/is-indicator.c:680 msgid "No active sensors" msgstr "감시 할 센서 없음" #: ../indicator-sensors/is-manager.c:302 #: ../indicator-sensors/is-sensor-dialog.c:315 msgid "Sensor" msgstr "센서" #: ../indicator-sensors/is-manager.c:310 #: ../indicator-sensors/is-preferences-dialog.c:149 msgid "Icon" msgstr "아이콘" #: ../indicator-sensors/is-manager.c:319 #: ../indicator-sensors/is-preferences-dialog.c:154 #: ../indicator-sensors/is-sensor-dialog.c:106 msgid "Label" msgstr "이름" #: ../indicator-sensors/is-manager.c:329 msgid "Enabled" msgstr "사용" #: ../indicator-sensors/is-preferences-dialog.c:108 msgid "Hardware Sensors Indicator Preferences" msgstr "하드웨어 센서 알리미 기본 설정" #: ../indicator-sensors/is-preferences-dialog.c:127 msgid "General" msgstr "일반" #: ../indicator-sensors/is-preferences-dialog.c:135 msgid "Start automatically on login" msgstr "로그인할 때 자동으로 시작" #: ../indicator-sensors/is-preferences-dialog.c:141 msgid "Primary sensor display" msgstr "주 센서에 표시할 항목" #: ../indicator-sensors/is-preferences-dialog.c:159 msgid "Value" msgstr "값" #: ../indicator-sensors/is-preferences-dialog.c:176 msgid "Celsius (°C)" msgstr "섭씨 (°C)" #: ../indicator-sensors/is-preferences-dialog.c:187 msgid "Fahrenheit (°F)" msgstr "화씨 (°F)" #: ../indicator-sensors/is-sensor.c:380 msgid "Sensor Alarm" msgstr "센서 경고" #: ../indicator-sensors/is-sensor-dialog.c:88 msgid " Sensor Properties" msgstr " 센서 속성" #: ../indicator-sensors/is-sensor-dialog.c:115 msgid "Alarm" msgstr "경고" #: ../indicator-sensors/is-sensor-dialog.c:123 msgid "Disabled" msgstr "사용 안 함" #: ../indicator-sensors/is-sensor-dialog.c:126 msgid "Below" msgstr "설정한 값 미만" #: ../indicator-sensors/is-sensor-dialog.c:129 msgid "Above" msgstr "설정한 값 초과" #: ../indicator-sensors/is-sensor-dialog.c:147 msgid "Low value" msgstr "최저 값" #: ../indicator-sensors/is-sensor-dialog.c:166 msgid "High value" msgstr "최고 값" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:159 #, c-format msgid "Error reading temperature value for GPU %d" msgstr "GPU %d의 온도 값을 읽을 수 없습니다." #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:198 #, c-format msgid "Error reading fanspeed value for GPU %d" msgstr "GPU %d의 팬 속도 값을 읽을 수 없습니다." #: ../plugins/aticonfig/is-aticonfig-plugin.c:337 msgid "Temperature" msgstr "온도" #: ../plugins/aticonfig/is-aticonfig-plugin.c:355 msgid "Fan" msgstr "팬" #. first placeholder is sensor name, #. * second is error message #: ../plugins/libsensors/is-libsensors-plugin.c:174 #, c-format msgid "Error getting sensor value for sensor %s: %s [%d]" msgstr "센서 %s에서 센서 값을 가져올 수 없습니다: %s [%d]" #. translators: V is the unit for Voltage, replace with #. appropriate unit #: ../plugins/libsensors/is-libsensors-plugin.c:315 msgid "V" msgstr "V" #: ../plugins/libsensors/is-libsensors-plugin.c:375 msgid "No Sensors Detected" msgstr "발견한 센서가 없습니다." #: ../plugins/libsensors/is-libsensors-plugin.c:376 #, c-format msgid "" "Try running the command 'sensors-detect' from the command-line and " "restarting %s" msgstr "명령줄에서 'sensors-detect' 명령을 실행한 후 %s을(를) 다시 시작합니다." #. first placeholder is #. * sensor name #: ../plugins/nvidia/is-nvidia-plugin.c:192 #, c-format msgid "Error getting sensor value for sensor %s" msgstr "센서 %s의 값을 가져오는 중 오류가 발생했습니다." #: ../plugins/udisks/is-udisks-plugin.c:149 #: ../plugins/udisks2/is-udisks2-plugin.c:126 #, c-format msgid "Error reading new SMART data for sensor %s" msgstr "센서 %s의 새 SMART 데이터를 읽는 중 오류 발생" #: ../plugins/udisks/is-udisks-plugin.c:165 #, c-format msgid "Error refreshing SMART data for sensor %s" msgstr "센서 %s의 새 SMART 데이터를 다시 읽는 중 오류 발생" indicator-sensors-1.1/po/lt.po000066400000000000000000000210211356741033200164160ustar00rootroot00000000000000# Lithuanian translation for indicator-sensors # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the indicator-sensors package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: indicator-sensors\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 22:58+1030\n" "PO-Revision-Date: 2012-12-07 10:26+0000\n" "Last-Translator: Mantas Kriaučiūnas \n" "Language-Team: Lithuanian \n" "Language: lt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-11-02 11:56+0000\n" "X-Generator: Launchpad (build 16820)\n" #: ../data/indicator-sensors.gschema.xml.in.h:1 #: ../data/indicator-sensors.gschema.xml.in.in.h:1 msgid "Primary sensor to display" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:2 #: ../data/indicator-sensors.gschema.xml.in.in.h:2 msgid "" "The primary sensor to display in the indicator, identified by it’s path." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:3 #: ../data/indicator-sensors.gschema.xml.in.in.h:3 msgid "Display flags for the indicator" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:4 #: ../data/indicator-sensors.gschema.xml.in.in.h:4 msgid "The elements used to display the primary sensor within the indicator." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:5 #: ../data/indicator-sensors.gschema.xml.in.in.h:5 msgid "Enabled sensors" msgstr "Įjungti davikliai" #: ../data/indicator-sensors.gschema.xml.in.h:6 #: ../data/indicator-sensors.gschema.xml.in.in.h:6 msgid "The list of enabled sensors to monitor, each identified by it’s path." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:7 #: ../data/indicator-sensors.gschema.xml.in.in.h:7 msgid "Seconds to delay hiding / showing alarms" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:8 #: ../data/indicator-sensors.gschema.xml.in.in.h:8 msgid "" "Alarm delay adds some hysteresis so alarms aren't shown for quickly " "fluctuating values." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:9 #: ../data/indicator-sensors.gschema.xml.in.in.h:9 #: ../indicator-sensors/is-preferences-dialog.c:168 msgid "Temperature scale" msgstr "Temperatūros vienetai" #: ../data/indicator-sensors.gschema.xml.in.h:10 #: ../data/indicator-sensors.gschema.xml.in.in.h:10 msgid "The temperature scale to display temperature sensor values." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:11 #: ../data/indicator-sensors.gschema.xml.in.in.h:11 msgid "Show indicator" msgstr "Rodyti daviklių indikatorių" #: ../data/indicator-sensors.gschema.xml.in.h:12 #: ../data/indicator-sensors.gschema.xml.in.in.h:12 msgid "Whether to show the indicator in the notification area." msgstr "" #: ../data/indicator-sensors.desktop.in.h:1 #: ../indicator-sensors/is-application.c:822 msgid "Hardware Sensors Indicator" msgstr "Kompiuterio temperatūros ir kt. indikatorius" #: ../data/indicator-sensors.desktop.in.h:2 msgid "An indicator for Unity which displays hardware sensor readings" msgstr "" #: ../data/indicator-sensors.appdata.xml.in.h:1 msgid "" "Hardware Sensors Indicator provides temperature, fan and voltage sensor " "readings within the panel of your desktop." msgstr "" #: ../data/indicator-sensors.appdata.xml.in.h:2 msgid "" "When running GNOME Shell it is recommended to also install the associated " "GNOME Shell extension from extensions.gnome.org - https://extensions.gnome." "org/extension/336/hardware-sensors-indicator/ ." msgstr "" #: ../indicator-sensors/indicator-sensors.c:152 msgid "No Sensors Enabled For Monitoring" msgstr "Pasirinkite rodomus daviklius" #: ../indicator-sensors/indicator-sensors.c:153 msgid "" "Sensors detected but none are enabled for monitoring. To enable monitoring " "of sensors open the Preferences window and select the sensors to monitor" msgstr "" "Temperatūros (ar kiti) davikliai aptikti, bet nei vienas nepasirinktas " "stebėjimui. Atverkite „Nustatymų“ langą ir pasirinkite (įjunkite) daviklius, " "kuriuos norite stebėti" #: ../indicator-sensors/is-application.c:824 msgid "Indicator for GNOME / Unity showing hardware sensors." msgstr "" "Kompiuterio temperatūros ir kt. daviklių indikatorius GNOME bei Unity " "aplinkoms." #: ../indicator-sensors/is-fan-sensor.c:40 msgid " RPM" msgstr "" #: ../indicator-sensors/is-indicator.c:160 msgid "Preferences…" msgstr "Nustatymai…" #: ../indicator-sensors/is-indicator.c:161 msgid "Preferences" msgstr "Nustatymai" #: ../indicator-sensors/is-indicator.c:162 msgid "About…" msgstr "Apie…" #: ../indicator-sensors/is-indicator.c:163 msgid "About" msgstr "Apie" #: ../indicator-sensors/is-indicator.c:164 #: ../indicator-sensors/is-indicator.c:165 msgid "Quit" msgstr "Baigti" #: ../indicator-sensors/is-indicator.c:237 msgid "No Sensors" msgstr "Nėra daviklių" #: ../indicator-sensors/is-indicator.c:554 #: ../indicator-sensors/is-indicator.c:680 msgid "No active sensors" msgstr "Nepasirinktas daviklis" #: ../indicator-sensors/is-manager.c:302 #: ../indicator-sensors/is-sensor-dialog.c:315 msgid "Sensor" msgstr "Daviklis" #: ../indicator-sensors/is-manager.c:310 #: ../indicator-sensors/is-preferences-dialog.c:149 msgid "Icon" msgstr "Piktograma" #: ../indicator-sensors/is-manager.c:319 #: ../indicator-sensors/is-preferences-dialog.c:154 #: ../indicator-sensors/is-sensor-dialog.c:106 msgid "Label" msgstr "Pavadinimas" #: ../indicator-sensors/is-manager.c:329 msgid "Enabled" msgstr "Įjungtas" #: ../indicator-sensors/is-preferences-dialog.c:108 msgid "Hardware Sensors Indicator Preferences" msgstr "Kompiuterio daviklių indikatoriaus nustatymai" #: ../indicator-sensors/is-preferences-dialog.c:127 msgid "General" msgstr "Bendri" #: ../indicator-sensors/is-preferences-dialog.c:135 msgid "Start automatically on login" msgstr "Pasileisti automatiškai prisijungus naudotojui" #: ../indicator-sensors/is-preferences-dialog.c:141 msgid "Primary sensor display" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:159 msgid "Value" msgstr "Reikšmė" #: ../indicator-sensors/is-preferences-dialog.c:176 msgid "Celsius (°C)" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:187 msgid "Fahrenheit (°F)" msgstr "" #: ../indicator-sensors/is-sensor.c:380 msgid "Sensor Alarm" msgstr "Daviklio perspėjimas" #: ../indicator-sensors/is-sensor-dialog.c:88 msgid " Sensor Properties" msgstr " Daviklio savybės" #: ../indicator-sensors/is-sensor-dialog.c:115 msgid "Alarm" msgstr "Perspėjimas" #: ../indicator-sensors/is-sensor-dialog.c:123 msgid "Disabled" msgstr "Išjungtas" #: ../indicator-sensors/is-sensor-dialog.c:126 msgid "Below" msgstr "Žemiau" #: ../indicator-sensors/is-sensor-dialog.c:129 msgid "Above" msgstr "Virš" #: ../indicator-sensors/is-sensor-dialog.c:147 msgid "Low value" msgstr "Mažiausia reikšmė" #: ../indicator-sensors/is-sensor-dialog.c:166 msgid "High value" msgstr "Aukščiausia reikšmė" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:159 #, c-format msgid "Error reading temperature value for GPU %d" msgstr "" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:198 #, c-format msgid "Error reading fanspeed value for GPU %d" msgstr "" #: ../plugins/aticonfig/is-aticonfig-plugin.c:337 msgid "Temperature" msgstr "Temperatūra" #: ../plugins/aticonfig/is-aticonfig-plugin.c:355 msgid "Fan" msgstr "Vėdintuvas" #. first placeholder is sensor name, #. * second is error message #: ../plugins/libsensors/is-libsensors-plugin.c:174 #, c-format msgid "Error getting sensor value for sensor %s: %s [%d]" msgstr "Klaida gaunant duomenis iš daviklio „%s“: %s [%d]" #. translators: V is the unit for Voltage, replace with #. appropriate unit #: ../plugins/libsensors/is-libsensors-plugin.c:315 msgid "V" msgstr "" #: ../plugins/libsensors/is-libsensors-plugin.c:375 msgid "No Sensors Detected" msgstr "Neaptiktas joks daviklis" #: ../plugins/libsensors/is-libsensors-plugin.c:376 #, c-format msgid "" "Try running the command 'sensors-detect' from the command-line and " "restarting %s" msgstr "" #. first placeholder is #. * sensor name #: ../plugins/nvidia/is-nvidia-plugin.c:192 #, c-format msgid "Error getting sensor value for sensor %s" msgstr "Klaida gaunant duomenis iš daviklio „%s“" #: ../plugins/udisks/is-udisks-plugin.c:149 #: ../plugins/udisks2/is-udisks2-plugin.c:126 #, c-format msgid "Error reading new SMART data for sensor %s" msgstr "" #: ../plugins/udisks/is-udisks-plugin.c:165 #, c-format msgid "Error refreshing SMART data for sensor %s" msgstr "" indicator-sensors-1.1/po/nl.po000066400000000000000000000222231356741033200164150ustar00rootroot00000000000000# Dutch translation for indicator-sensors # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the indicator-sensors package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: indicator-sensors\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 22:58+1030\n" "PO-Revision-Date: 2013-02-01 20:23+0000\n" "Last-Translator: Sam Segers \n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-11-02 11:56+0000\n" "X-Generator: Launchpad (build 16820)\n" #: ../data/indicator-sensors.gschema.xml.in.h:1 #: ../data/indicator-sensors.gschema.xml.in.in.h:1 msgid "Primary sensor to display" msgstr "Hoofdsensor om weer te geven" #: ../data/indicator-sensors.gschema.xml.in.h:2 #: ../data/indicator-sensors.gschema.xml.in.in.h:2 msgid "" "The primary sensor to display in the indicator, identified by it’s path." msgstr "" "De hoofdsensor om weer te geven in de indicator, geïdentificeerd door zijn " "pad." #: ../data/indicator-sensors.gschema.xml.in.h:3 #: ../data/indicator-sensors.gschema.xml.in.in.h:3 msgid "Display flags for the indicator" msgstr "Toon vlaggen voor de indicator" #: ../data/indicator-sensors.gschema.xml.in.h:4 #: ../data/indicator-sensors.gschema.xml.in.in.h:4 msgid "The elements used to display the primary sensor within the indicator." msgstr "De elementen gebruikt om de hoofdsensor weer te geven in de indicator." #: ../data/indicator-sensors.gschema.xml.in.h:5 #: ../data/indicator-sensors.gschema.xml.in.in.h:5 msgid "Enabled sensors" msgstr "Ingeschakelde sensoren" #: ../data/indicator-sensors.gschema.xml.in.h:6 #: ../data/indicator-sensors.gschema.xml.in.in.h:6 msgid "The list of enabled sensors to monitor, each identified by it’s path." msgstr "" "De lijst van geschikte sensoren om te controleren, elk geïdentificeerd door " "zijn pad." #: ../data/indicator-sensors.gschema.xml.in.h:7 #: ../data/indicator-sensors.gschema.xml.in.in.h:7 msgid "Seconds to delay hiding / showing alarms" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:8 #: ../data/indicator-sensors.gschema.xml.in.in.h:8 msgid "" "Alarm delay adds some hysteresis so alarms aren't shown for quickly " "fluctuating values." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:9 #: ../data/indicator-sensors.gschema.xml.in.in.h:9 #: ../indicator-sensors/is-preferences-dialog.c:168 msgid "Temperature scale" msgstr "Temperatuurschaal" #: ../data/indicator-sensors.gschema.xml.in.h:10 #: ../data/indicator-sensors.gschema.xml.in.in.h:10 msgid "The temperature scale to display temperature sensor values." msgstr "De temperatuurschaal om temperatuursensorwaarden weer te geven." #: ../data/indicator-sensors.gschema.xml.in.h:11 #: ../data/indicator-sensors.gschema.xml.in.in.h:11 msgid "Show indicator" msgstr "Laat indicator zien" #: ../data/indicator-sensors.gschema.xml.in.h:12 #: ../data/indicator-sensors.gschema.xml.in.in.h:12 msgid "Whether to show the indicator in the notification area." msgstr "Laat de indicator zien in de notificatie" #: ../data/indicator-sensors.desktop.in.h:1 #: ../indicator-sensors/is-application.c:822 msgid "Hardware Sensors Indicator" msgstr "Hardwaresensorsindicator" #: ../data/indicator-sensors.desktop.in.h:2 msgid "An indicator for Unity which displays hardware sensor readings" msgstr "Een indicator voor Unity die hardwaresensorwaarden weergeeft" #: ../data/indicator-sensors.appdata.xml.in.h:1 msgid "" "Hardware Sensors Indicator provides temperature, fan and voltage sensor " "readings within the panel of your desktop." msgstr "" #: ../data/indicator-sensors.appdata.xml.in.h:2 msgid "" "When running GNOME Shell it is recommended to also install the associated " "GNOME Shell extension from extensions.gnome.org - https://extensions.gnome." "org/extension/336/hardware-sensors-indicator/ ." msgstr "" #: ../indicator-sensors/indicator-sensors.c:152 msgid "No Sensors Enabled For Monitoring" msgstr "Geen Sensoren Ingeschakeld Voor Monitoring" #: ../indicator-sensors/indicator-sensors.c:153 msgid "" "Sensors detected but none are enabled for monitoring. To enable monitoring " "of sensors open the Preferences window and select the sensors to monitor" msgstr "" "Sensoren gedetecteerd maar er zijn geen ingeschakeld voor monitoring. Open " "de instellingen om monitoring van sensoren in te schakelen" #: ../indicator-sensors/is-application.c:824 msgid "Indicator for GNOME / Unity showing hardware sensors." msgstr "Indicator voor GNOME / Unity voor het weergeven van hardwaresensoren" #: ../indicator-sensors/is-fan-sensor.c:40 msgid " RPM" msgstr " RPM" #: ../indicator-sensors/is-indicator.c:160 msgid "Preferences…" msgstr "Voorkeuren…" #: ../indicator-sensors/is-indicator.c:161 msgid "Preferences" msgstr "Voorkeuren" #: ../indicator-sensors/is-indicator.c:162 msgid "About…" msgstr "Over..." #: ../indicator-sensors/is-indicator.c:163 msgid "About" msgstr "Over" #: ../indicator-sensors/is-indicator.c:164 #: ../indicator-sensors/is-indicator.c:165 msgid "Quit" msgstr "Afsluiten" #: ../indicator-sensors/is-indicator.c:237 msgid "No Sensors" msgstr "Geen sensoren" #: ../indicator-sensors/is-indicator.c:554 #: ../indicator-sensors/is-indicator.c:680 msgid "No active sensors" msgstr "Geen actieve sensoren" #: ../indicator-sensors/is-manager.c:302 #: ../indicator-sensors/is-sensor-dialog.c:315 msgid "Sensor" msgstr "Sensor" #: ../indicator-sensors/is-manager.c:310 #: ../indicator-sensors/is-preferences-dialog.c:149 msgid "Icon" msgstr "Pictogram" #: ../indicator-sensors/is-manager.c:319 #: ../indicator-sensors/is-preferences-dialog.c:154 #: ../indicator-sensors/is-sensor-dialog.c:106 msgid "Label" msgstr "Label" #: ../indicator-sensors/is-manager.c:329 msgid "Enabled" msgstr "Ingeschakeld" #: ../indicator-sensors/is-preferences-dialog.c:108 msgid "Hardware Sensors Indicator Preferences" msgstr "Hardwaresensoren Indicatie Instellingen" #: ../indicator-sensors/is-preferences-dialog.c:127 msgid "General" msgstr "Algemeen" #: ../indicator-sensors/is-preferences-dialog.c:135 msgid "Start automatically on login" msgstr "Automatisch starten bij het inloggen" #: ../indicator-sensors/is-preferences-dialog.c:141 msgid "Primary sensor display" msgstr "Hoordsensorscherm" #: ../indicator-sensors/is-preferences-dialog.c:159 msgid "Value" msgstr "Waarde" #: ../indicator-sensors/is-preferences-dialog.c:176 msgid "Celsius (°C)" msgstr "Celsius (°C)" #: ../indicator-sensors/is-preferences-dialog.c:187 msgid "Fahrenheit (°F)" msgstr "Fahrenheit (°F)" #: ../indicator-sensors/is-sensor.c:380 msgid "Sensor Alarm" msgstr "Sensoralarm" #: ../indicator-sensors/is-sensor-dialog.c:88 msgid " Sensor Properties" msgstr " Sensoreigenschappen" #: ../indicator-sensors/is-sensor-dialog.c:115 msgid "Alarm" msgstr "Alarm" #: ../indicator-sensors/is-sensor-dialog.c:123 msgid "Disabled" msgstr "Uitgeschakeld" #: ../indicator-sensors/is-sensor-dialog.c:126 msgid "Below" msgstr "Onder" #: ../indicator-sensors/is-sensor-dialog.c:129 msgid "Above" msgstr "Boven" #: ../indicator-sensors/is-sensor-dialog.c:147 msgid "Low value" msgstr "Lage waarde" #: ../indicator-sensors/is-sensor-dialog.c:166 msgid "High value" msgstr "Hoge waarde" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:159 #, c-format msgid "Error reading temperature value for GPU %d" msgstr "Error bij het lezen van temperatuur van GPU %d" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:198 #, c-format msgid "Error reading fanspeed value for GPU %d" msgstr "Error bij het lezen van fansnelheid van GPU %d" #: ../plugins/aticonfig/is-aticonfig-plugin.c:337 msgid "Temperature" msgstr "Temperatuur" #: ../plugins/aticonfig/is-aticonfig-plugin.c:355 msgid "Fan" msgstr "Fan" #. first placeholder is sensor name, #. * second is error message #: ../plugins/libsensors/is-libsensors-plugin.c:174 #, c-format msgid "Error getting sensor value for sensor %s: %s [%d]" msgstr "Error bij lezen van sensorwaarde van sensor %s: %s [%d]" #. translators: V is the unit for Voltage, replace with #. appropriate unit #: ../plugins/libsensors/is-libsensors-plugin.c:315 msgid "V" msgstr "V" #: ../plugins/libsensors/is-libsensors-plugin.c:375 msgid "No Sensors Detected" msgstr "Geen Sensoren Gedetecteerd" #: ../plugins/libsensors/is-libsensors-plugin.c:376 #, c-format msgid "" "Try running the command 'sensors-detect' from the command-line and " "restarting %s" msgstr "" "Probeer het comando 'sensor-detect' uit te voeren vanuit een terminalvenster " "en %s te herstarten" #. first placeholder is #. * sensor name #: ../plugins/nvidia/is-nvidia-plugin.c:192 #, c-format msgid "Error getting sensor value for sensor %s" msgstr "Error bij lezen van sensorwaarde van sensor %s" #: ../plugins/udisks/is-udisks-plugin.c:149 #: ../plugins/udisks2/is-udisks2-plugin.c:126 #, c-format msgid "Error reading new SMART data for sensor %s" msgstr "Error bij lezen van nieuw SMART-data van sensor %s" #: ../plugins/udisks/is-udisks-plugin.c:165 #, c-format msgid "Error refreshing SMART data for sensor %s" msgstr "Error bij herladen van SMART-data van sensor %s" indicator-sensors-1.1/po/pl.po000066400000000000000000000223671356741033200164300ustar00rootroot00000000000000# Polish translation for indicator-sensors # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the indicator-sensors package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: indicator-sensors\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 22:58+1030\n" "PO-Revision-Date: 2012-11-03 12:48+0000\n" "Last-Translator: Krzysiek Karolak \n" "Language-Team: Polish \n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-11-02 11:56+0000\n" "X-Generator: Launchpad (build 16820)\n" #: ../data/indicator-sensors.gschema.xml.in.h:1 #: ../data/indicator-sensors.gschema.xml.in.in.h:1 msgid "Primary sensor to display" msgstr "Główny czujnik do wyświetlenia" #: ../data/indicator-sensors.gschema.xml.in.h:2 #: ../data/indicator-sensors.gschema.xml.in.in.h:2 msgid "" "The primary sensor to display in the indicator, identified by it’s path." msgstr "" "Główny czujnik do wyświetlania we wskaźniku, identyfikowany przez jego " "ścieżkę." #: ../data/indicator-sensors.gschema.xml.in.h:3 #: ../data/indicator-sensors.gschema.xml.in.in.h:3 msgid "Display flags for the indicator" msgstr "Wyświetlaj znaczniki dla wskaźnika" #: ../data/indicator-sensors.gschema.xml.in.h:4 #: ../data/indicator-sensors.gschema.xml.in.in.h:4 msgid "The elements used to display the primary sensor within the indicator." msgstr "Elementy używane do wyświetlania głównego czujnika bez wskaźnika." #: ../data/indicator-sensors.gschema.xml.in.h:5 #: ../data/indicator-sensors.gschema.xml.in.in.h:5 msgid "Enabled sensors" msgstr "Włączone czujniki" #: ../data/indicator-sensors.gschema.xml.in.h:6 #: ../data/indicator-sensors.gschema.xml.in.in.h:6 msgid "The list of enabled sensors to monitor, each identified by it’s path." msgstr "" "Lista włączonych czujników do monitorowania, każdy identyfikowany jest przez " "jego ścieżkę." #: ../data/indicator-sensors.gschema.xml.in.h:7 #: ../data/indicator-sensors.gschema.xml.in.in.h:7 msgid "Seconds to delay hiding / showing alarms" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:8 #: ../data/indicator-sensors.gschema.xml.in.in.h:8 msgid "" "Alarm delay adds some hysteresis so alarms aren't shown for quickly " "fluctuating values." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:9 #: ../data/indicator-sensors.gschema.xml.in.in.h:9 #: ../indicator-sensors/is-preferences-dialog.c:168 msgid "Temperature scale" msgstr "Skala temperatury" #: ../data/indicator-sensors.gschema.xml.in.h:10 #: ../data/indicator-sensors.gschema.xml.in.in.h:10 msgid "The temperature scale to display temperature sensor values." msgstr "Skala temperatury do wyświetlania wartości temperatury czujników." #: ../data/indicator-sensors.gschema.xml.in.h:11 #: ../data/indicator-sensors.gschema.xml.in.in.h:11 msgid "Show indicator" msgstr "Pokaż wskaźnik" #: ../data/indicator-sensors.gschema.xml.in.h:12 #: ../data/indicator-sensors.gschema.xml.in.in.h:12 msgid "Whether to show the indicator in the notification area." msgstr "Czy pokazywać wskaźnik w obszarze powiadomień." #: ../data/indicator-sensors.desktop.in.h:1 #: ../indicator-sensors/is-application.c:822 msgid "Hardware Sensors Indicator" msgstr "Hardware Sensors Indicator" #: ../data/indicator-sensors.desktop.in.h:2 msgid "An indicator for Unity which displays hardware sensor readings" msgstr "Wskaźnik dla interfejsu Unity, pokazujący odczyty czujników sprzętu" #: ../data/indicator-sensors.appdata.xml.in.h:1 msgid "" "Hardware Sensors Indicator provides temperature, fan and voltage sensor " "readings within the panel of your desktop." msgstr "" #: ../data/indicator-sensors.appdata.xml.in.h:2 msgid "" "When running GNOME Shell it is recommended to also install the associated " "GNOME Shell extension from extensions.gnome.org - https://extensions.gnome." "org/extension/336/hardware-sensors-indicator/ ." msgstr "" #: ../indicator-sensors/indicator-sensors.c:152 msgid "No Sensors Enabled For Monitoring" msgstr "Brak Czujników włączonych do monitorowania" #: ../indicator-sensors/indicator-sensors.c:153 msgid "" "Sensors detected but none are enabled for monitoring. To enable monitoring " "of sensors open the Preferences window and select the sensors to monitor" msgstr "" "Czujniki zostały wykryte, ale żadne nie są włączone do monitorowania. Aby " "włączyć monitorowanie czujników, otwórz okno Preferencje i wybierz czujniki " "do monitorowania." #: ../indicator-sensors/is-application.c:824 msgid "Indicator for GNOME / Unity showing hardware sensors." msgstr "Wskaźnik dla GNOME / Unity pokazujący czujniki sprzętu." #: ../indicator-sensors/is-fan-sensor.c:40 msgid " RPM" msgstr " RPM" #: ../indicator-sensors/is-indicator.c:160 msgid "Preferences…" msgstr "Preferencje…" #: ../indicator-sensors/is-indicator.c:161 msgid "Preferences" msgstr "Preferencje" #: ../indicator-sensors/is-indicator.c:162 msgid "About…" msgstr "O programie..." #: ../indicator-sensors/is-indicator.c:163 msgid "About" msgstr "O programie" #: ../indicator-sensors/is-indicator.c:164 #: ../indicator-sensors/is-indicator.c:165 msgid "Quit" msgstr "Wyjdź" #: ../indicator-sensors/is-indicator.c:237 msgid "No Sensors" msgstr "Brak czujników" #: ../indicator-sensors/is-indicator.c:554 #: ../indicator-sensors/is-indicator.c:680 msgid "No active sensors" msgstr "Brak aktywnych czujników" #: ../indicator-sensors/is-manager.c:302 #: ../indicator-sensors/is-sensor-dialog.c:315 msgid "Sensor" msgstr "Czujnik" #: ../indicator-sensors/is-manager.c:310 #: ../indicator-sensors/is-preferences-dialog.c:149 msgid "Icon" msgstr "Ikona" #: ../indicator-sensors/is-manager.c:319 #: ../indicator-sensors/is-preferences-dialog.c:154 #: ../indicator-sensors/is-sensor-dialog.c:106 msgid "Label" msgstr "Etykieta" #: ../indicator-sensors/is-manager.c:329 msgid "Enabled" msgstr "Włączony" #: ../indicator-sensors/is-preferences-dialog.c:108 msgid "Hardware Sensors Indicator Preferences" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:127 msgid "General" msgstr "Ogólne" #: ../indicator-sensors/is-preferences-dialog.c:135 msgid "Start automatically on login" msgstr "Uruchamiaj automatycznie przy logowaniu" #: ../indicator-sensors/is-preferences-dialog.c:141 msgid "Primary sensor display" msgstr "Główny wyświetlany czujnik" #: ../indicator-sensors/is-preferences-dialog.c:159 msgid "Value" msgstr "Wartość" #: ../indicator-sensors/is-preferences-dialog.c:176 msgid "Celsius (°C)" msgstr "Celsjusza (°C)" #: ../indicator-sensors/is-preferences-dialog.c:187 msgid "Fahrenheit (°F)" msgstr "Fahrenheita (°F)" #: ../indicator-sensors/is-sensor.c:380 msgid "Sensor Alarm" msgstr "Alarm Czujników" #: ../indicator-sensors/is-sensor-dialog.c:88 msgid " Sensor Properties" msgstr " Właściwości czujników" #: ../indicator-sensors/is-sensor-dialog.c:115 msgid "Alarm" msgstr "Alarm" #: ../indicator-sensors/is-sensor-dialog.c:123 msgid "Disabled" msgstr "Wyłączony" #: ../indicator-sensors/is-sensor-dialog.c:126 msgid "Below" msgstr "Poniżej" #: ../indicator-sensors/is-sensor-dialog.c:129 msgid "Above" msgstr "Powyżej" #: ../indicator-sensors/is-sensor-dialog.c:147 msgid "Low value" msgstr "Niska wartość" #: ../indicator-sensors/is-sensor-dialog.c:166 msgid "High value" msgstr "Wysoka wartość" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:159 #, c-format msgid "Error reading temperature value for GPU %d" msgstr "Błąd odczytu wartości temperatury dla GPU %d" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:198 #, c-format msgid "Error reading fanspeed value for GPU %d" msgstr "Błąd odczytu prędkości wentylatora dla GPU %d" #: ../plugins/aticonfig/is-aticonfig-plugin.c:337 msgid "Temperature" msgstr "Temperatura" #: ../plugins/aticonfig/is-aticonfig-plugin.c:355 msgid "Fan" msgstr "Wentylator" #. first placeholder is sensor name, #. * second is error message #: ../plugins/libsensors/is-libsensors-plugin.c:174 #, c-format msgid "Error getting sensor value for sensor %s: %s [%d]" msgstr "Błąd przy otrzymywaniu wartości czujnika %s: %s [%d]" #. translators: V is the unit for Voltage, replace with #. appropriate unit #: ../plugins/libsensors/is-libsensors-plugin.c:315 msgid "V" msgstr "V" #: ../plugins/libsensors/is-libsensors-plugin.c:375 msgid "No Sensors Detected" msgstr "Nie wykryto czujników" #: ../plugins/libsensors/is-libsensors-plugin.c:376 #, c-format msgid "" "Try running the command 'sensors-detect' from the command-line and " "restarting %s" msgstr "" "Spróbuj uruchomić komendę 'sensors-detect' z linii poleceń i zrestartować %s" #. first placeholder is #. * sensor name #: ../plugins/nvidia/is-nvidia-plugin.c:192 #, c-format msgid "Error getting sensor value for sensor %s" msgstr "Błąd przy otrzymywaniu wartości czujnika %s" #: ../plugins/udisks/is-udisks-plugin.c:149 #: ../plugins/udisks2/is-udisks2-plugin.c:126 #, c-format msgid "Error reading new SMART data for sensor %s" msgstr "Błąd odczytu nowych danych SMART dla czujnika %s" #: ../plugins/udisks/is-udisks-plugin.c:165 #, c-format msgid "Error refreshing SMART data for sensor %s" msgstr "Błąd odświeżania danych SMART dla czujnika %s" indicator-sensors-1.1/po/ro.po000066400000000000000000000222371356741033200164310ustar00rootroot00000000000000# Romanian translation for indicator-sensors # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the indicator-sensors package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: indicator-sensors\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 22:58+1030\n" "PO-Revision-Date: 2012-12-09 14:15+0000\n" "Last-Translator: Vlad Paul Paval \n" "Language-Team: Romanian \n" "Language: ro\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-11-02 11:56+0000\n" "X-Generator: Launchpad (build 16820)\n" #: ../data/indicator-sensors.gschema.xml.in.h:1 #: ../data/indicator-sensors.gschema.xml.in.in.h:1 msgid "Primary sensor to display" msgstr "Senzorul principal de afișat" #: ../data/indicator-sensors.gschema.xml.in.h:2 #: ../data/indicator-sensors.gschema.xml.in.in.h:2 msgid "" "The primary sensor to display in the indicator, identified by it’s path." msgstr "Senzorul principal de afișat în indicator, identificat prin calea lui." #: ../data/indicator-sensors.gschema.xml.in.h:3 #: ../data/indicator-sensors.gschema.xml.in.in.h:3 msgid "Display flags for the indicator" msgstr "Afișare marcaje pentru indicator" #: ../data/indicator-sensors.gschema.xml.in.h:4 #: ../data/indicator-sensors.gschema.xml.in.in.h:4 msgid "The elements used to display the primary sensor within the indicator." msgstr "Elementele utilizate la afișarea senzorului principal în indicator." #: ../data/indicator-sensors.gschema.xml.in.h:5 #: ../data/indicator-sensors.gschema.xml.in.in.h:5 msgid "Enabled sensors" msgstr "Senzori activați" #: ../data/indicator-sensors.gschema.xml.in.h:6 #: ../data/indicator-sensors.gschema.xml.in.in.h:6 msgid "The list of enabled sensors to monitor, each identified by it’s path." msgstr "Lista senzorilor activați, fiecare cu calea către el." #: ../data/indicator-sensors.gschema.xml.in.h:7 #: ../data/indicator-sensors.gschema.xml.in.in.h:7 msgid "Seconds to delay hiding / showing alarms" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:8 #: ../data/indicator-sensors.gschema.xml.in.in.h:8 msgid "" "Alarm delay adds some hysteresis so alarms aren't shown for quickly " "fluctuating values." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:9 #: ../data/indicator-sensors.gschema.xml.in.in.h:9 #: ../indicator-sensors/is-preferences-dialog.c:168 msgid "Temperature scale" msgstr "Scară temperatură" #: ../data/indicator-sensors.gschema.xml.in.h:10 #: ../data/indicator-sensors.gschema.xml.in.in.h:10 msgid "The temperature scale to display temperature sensor values." msgstr "Scara de temperatură pentru afișarea valorilor senzorilor." #: ../data/indicator-sensors.gschema.xml.in.h:11 #: ../data/indicator-sensors.gschema.xml.in.in.h:11 msgid "Show indicator" msgstr "Arată indicatorul" #: ../data/indicator-sensors.gschema.xml.in.h:12 #: ../data/indicator-sensors.gschema.xml.in.in.h:12 msgid "Whether to show the indicator in the notification area." msgstr "Afișare indicator în zona de notificare." #: ../data/indicator-sensors.desktop.in.h:1 #: ../indicator-sensors/is-application.c:822 msgid "Hardware Sensors Indicator" msgstr "Indicator pentru senzori hardware" #: ../data/indicator-sensors.desktop.in.h:2 msgid "An indicator for Unity which displays hardware sensor readings" msgstr "Un indicator pentru Unity care afișează valorile senzorilor hardware" #: ../data/indicator-sensors.appdata.xml.in.h:1 msgid "" "Hardware Sensors Indicator provides temperature, fan and voltage sensor " "readings within the panel of your desktop." msgstr "" #: ../data/indicator-sensors.appdata.xml.in.h:2 msgid "" "When running GNOME Shell it is recommended to also install the associated " "GNOME Shell extension from extensions.gnome.org - https://extensions.gnome." "org/extension/336/hardware-sensors-indicator/ ." msgstr "" #: ../indicator-sensors/indicator-sensors.c:152 msgid "No Sensors Enabled For Monitoring" msgstr "Niciun senzor activat pentru monitorizare" #: ../indicator-sensors/indicator-sensors.c:153 msgid "" "Sensors detected but none are enabled for monitoring. To enable monitoring " "of sensors open the Preferences window and select the sensors to monitor" msgstr "" "S-au detectat senzori dar nicunul nu este activat pentru monitorizare. " "Pentru activarea senzorilor accesați meniul Preferințe și alegeți senzorii " "doriți" #: ../indicator-sensors/is-application.c:824 msgid "Indicator for GNOME / Unity showing hardware sensors." msgstr "Indicator pentru GNOME/Unity care afișează senzori hardware." #: ../indicator-sensors/is-fan-sensor.c:40 msgid " RPM" msgstr " RPM" #: ../indicator-sensors/is-indicator.c:160 msgid "Preferences…" msgstr "Preferințe..." #: ../indicator-sensors/is-indicator.c:161 msgid "Preferences" msgstr "Preferințe" #: ../indicator-sensors/is-indicator.c:162 msgid "About…" msgstr "Despre..." #: ../indicator-sensors/is-indicator.c:163 msgid "About" msgstr "Despre" #: ../indicator-sensors/is-indicator.c:164 #: ../indicator-sensors/is-indicator.c:165 msgid "Quit" msgstr "Ieșire" #: ../indicator-sensors/is-indicator.c:237 msgid "No Sensors" msgstr "Niciun senzor" #: ../indicator-sensors/is-indicator.c:554 #: ../indicator-sensors/is-indicator.c:680 msgid "No active sensors" msgstr "Niciun senzor activ" #: ../indicator-sensors/is-manager.c:302 #: ../indicator-sensors/is-sensor-dialog.c:315 msgid "Sensor" msgstr "Senzor" #: ../indicator-sensors/is-manager.c:310 #: ../indicator-sensors/is-preferences-dialog.c:149 msgid "Icon" msgstr "Pictogramă" #: ../indicator-sensors/is-manager.c:319 #: ../indicator-sensors/is-preferences-dialog.c:154 #: ../indicator-sensors/is-sensor-dialog.c:106 msgid "Label" msgstr "Etichetă" #: ../indicator-sensors/is-manager.c:329 msgid "Enabled" msgstr "Activat" #: ../indicator-sensors/is-preferences-dialog.c:108 msgid "Hardware Sensors Indicator Preferences" msgstr "Preferințe indicator senzori hardware" #: ../indicator-sensors/is-preferences-dialog.c:127 msgid "General" msgstr "General" #: ../indicator-sensors/is-preferences-dialog.c:135 msgid "Start automatically on login" msgstr "Pornire automată la autentificare" #: ../indicator-sensors/is-preferences-dialog.c:141 msgid "Primary sensor display" msgstr "Afișare senzor principal" #: ../indicator-sensors/is-preferences-dialog.c:159 msgid "Value" msgstr "Valoare" #: ../indicator-sensors/is-preferences-dialog.c:176 msgid "Celsius (°C)" msgstr "Celsius (°C)" #: ../indicator-sensors/is-preferences-dialog.c:187 msgid "Fahrenheit (°F)" msgstr "Fahrenheit (°F)" #: ../indicator-sensors/is-sensor.c:380 msgid "Sensor Alarm" msgstr "Alarmă senzor" #: ../indicator-sensors/is-sensor-dialog.c:88 msgid " Sensor Properties" msgstr " Proprietăți senzor" #: ../indicator-sensors/is-sensor-dialog.c:115 msgid "Alarm" msgstr "Alarmă" #: ../indicator-sensors/is-sensor-dialog.c:123 msgid "Disabled" msgstr "Dezactivat" #: ../indicator-sensors/is-sensor-dialog.c:126 msgid "Below" msgstr "Dedesubt" #: ../indicator-sensors/is-sensor-dialog.c:129 msgid "Above" msgstr "Deasupra" #: ../indicator-sensors/is-sensor-dialog.c:147 msgid "Low value" msgstr "Valoare minimă" #: ../indicator-sensors/is-sensor-dialog.c:166 msgid "High value" msgstr "Valoare maximă" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:159 #, c-format msgid "Error reading temperature value for GPU %d" msgstr "Eroare la citirea valorii temperaturii pentru GPU %d" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:198 #, c-format msgid "Error reading fanspeed value for GPU %d" msgstr "Eroare la citirea valorii turației ventilatorului pentru GPU %d" #: ../plugins/aticonfig/is-aticonfig-plugin.c:337 msgid "Temperature" msgstr "Temperatură" #: ../plugins/aticonfig/is-aticonfig-plugin.c:355 msgid "Fan" msgstr "Ventilator" #. first placeholder is sensor name, #. * second is error message #: ../plugins/libsensors/is-libsensors-plugin.c:174 #, c-format msgid "Error getting sensor value for sensor %s: %s [%d]" msgstr "Eroare la citirea valorii senzorului %s: %s [%d]" #. translators: V is the unit for Voltage, replace with #. appropriate unit #: ../plugins/libsensors/is-libsensors-plugin.c:315 msgid "V" msgstr "V" #: ../plugins/libsensors/is-libsensors-plugin.c:375 msgid "No Sensors Detected" msgstr "Nicun senzor detectat" #: ../plugins/libsensors/is-libsensors-plugin.c:376 #, c-format msgid "" "Try running the command 'sensors-detect' from the command-line and " "restarting %s" msgstr "Rulați comanda „sensors-detect” din linia de comandă și reporniți %s" #. first placeholder is #. * sensor name #: ../plugins/nvidia/is-nvidia-plugin.c:192 #, c-format msgid "Error getting sensor value for sensor %s" msgstr "Eroare la citirea valorii senzorului %s" #: ../plugins/udisks/is-udisks-plugin.c:149 #: ../plugins/udisks2/is-udisks2-plugin.c:126 #, c-format msgid "Error reading new SMART data for sensor %s" msgstr "Eroare la citirea noilor date SMART pentru senzorului %s" #: ../plugins/udisks/is-udisks-plugin.c:165 #, c-format msgid "Error refreshing SMART data for sensor %s" msgstr "Eroare la actualizarea datelor SMART pentru senzorul %s" indicator-sensors-1.1/po/ru.po000066400000000000000000000233471356741033200164420ustar00rootroot00000000000000# Russian translation for indicator-sensors # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the indicator-sensors package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: indicator-sensors\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 22:58+1030\n" "PO-Revision-Date: 2013-01-21 08:37+0000\n" "Last-Translator: Eugene Marshal \n" "Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-11-02 11:56+0000\n" "X-Generator: Launchpad (build 16820)\n" #: ../data/indicator-sensors.gschema.xml.in.h:1 #: ../data/indicator-sensors.gschema.xml.in.in.h:1 msgid "Primary sensor to display" msgstr "Первичный датчик для отображения" #: ../data/indicator-sensors.gschema.xml.in.h:2 #: ../data/indicator-sensors.gschema.xml.in.in.h:2 msgid "" "The primary sensor to display in the indicator, identified by it’s path." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:3 #: ../data/indicator-sensors.gschema.xml.in.in.h:3 msgid "Display flags for the indicator" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:4 #: ../data/indicator-sensors.gschema.xml.in.in.h:4 msgid "The elements used to display the primary sensor within the indicator." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:5 #: ../data/indicator-sensors.gschema.xml.in.in.h:5 msgid "Enabled sensors" msgstr "Активные датчики" #: ../data/indicator-sensors.gschema.xml.in.h:6 #: ../data/indicator-sensors.gschema.xml.in.in.h:6 msgid "The list of enabled sensors to monitor, each identified by it’s path." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:7 #: ../data/indicator-sensors.gschema.xml.in.in.h:7 msgid "Seconds to delay hiding / showing alarms" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:8 #: ../data/indicator-sensors.gschema.xml.in.in.h:8 msgid "" "Alarm delay adds some hysteresis so alarms aren't shown for quickly " "fluctuating values." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:9 #: ../data/indicator-sensors.gschema.xml.in.in.h:9 #: ../indicator-sensors/is-preferences-dialog.c:168 msgid "Temperature scale" msgstr "Температурная шкала" #: ../data/indicator-sensors.gschema.xml.in.h:10 #: ../data/indicator-sensors.gschema.xml.in.in.h:10 msgid "The temperature scale to display temperature sensor values." msgstr "Температурная шкала измерения показаний датчиков" #: ../data/indicator-sensors.gschema.xml.in.h:11 #: ../data/indicator-sensors.gschema.xml.in.in.h:11 msgid "Show indicator" msgstr "Показать индикатор" #: ../data/indicator-sensors.gschema.xml.in.h:12 #: ../data/indicator-sensors.gschema.xml.in.in.h:12 msgid "Whether to show the indicator in the notification area." msgstr "" #: ../data/indicator-sensors.desktop.in.h:1 #: ../indicator-sensors/is-application.c:822 msgid "Hardware Sensors Indicator" msgstr "Индикатор аппаратных датчиков" #: ../data/indicator-sensors.desktop.in.h:2 msgid "An indicator for Unity which displays hardware sensor readings" msgstr "Индикатор показаний аппаратных датчиков для Unity" #: ../data/indicator-sensors.appdata.xml.in.h:1 msgid "" "Hardware Sensors Indicator provides temperature, fan and voltage sensor " "readings within the panel of your desktop." msgstr "" #: ../data/indicator-sensors.appdata.xml.in.h:2 msgid "" "When running GNOME Shell it is recommended to also install the associated " "GNOME Shell extension from extensions.gnome.org - https://extensions.gnome." "org/extension/336/hardware-sensors-indicator/ ." msgstr "" #: ../indicator-sensors/indicator-sensors.c:152 msgid "No Sensors Enabled For Monitoring" msgstr "Наблюдение за датчиками отключено" #: ../indicator-sensors/indicator-sensors.c:153 msgid "" "Sensors detected but none are enabled for monitoring. To enable monitoring " "of sensors open the Preferences window and select the sensors to monitor" msgstr "" "Датчики обнаружены, но наблюдение ни за одним не включено. Чтобы включить " "наблюдение, откройте окно «Параметры» и отметьте необходимые датчики" #: ../indicator-sensors/is-application.c:824 msgid "Indicator for GNOME / Unity showing hardware sensors." msgstr "Индикатор аппаратных датчиков для GNOME / Unity." #: ../indicator-sensors/is-fan-sensor.c:40 msgid " RPM" msgstr " об./мин." #: ../indicator-sensors/is-indicator.c:160 msgid "Preferences…" msgstr "Параметры..." #: ../indicator-sensors/is-indicator.c:161 msgid "Preferences" msgstr "Настройки" #: ../indicator-sensors/is-indicator.c:162 msgid "About…" msgstr "Сведения..." #: ../indicator-sensors/is-indicator.c:163 msgid "About" msgstr "" #: ../indicator-sensors/is-indicator.c:164 #: ../indicator-sensors/is-indicator.c:165 msgid "Quit" msgstr "Выход" #: ../indicator-sensors/is-indicator.c:237 msgid "No Sensors" msgstr "Нет датчиков" #: ../indicator-sensors/is-indicator.c:554 #: ../indicator-sensors/is-indicator.c:680 msgid "No active sensors" msgstr "Нет активных датчиков" #: ../indicator-sensors/is-manager.c:302 #: ../indicator-sensors/is-sensor-dialog.c:315 msgid "Sensor" msgstr "Датчик" #: ../indicator-sensors/is-manager.c:310 #: ../indicator-sensors/is-preferences-dialog.c:149 msgid "Icon" msgstr "Пиктограмма" #: ../indicator-sensors/is-manager.c:319 #: ../indicator-sensors/is-preferences-dialog.c:154 #: ../indicator-sensors/is-sensor-dialog.c:106 msgid "Label" msgstr "Метка" #: ../indicator-sensors/is-manager.c:329 msgid "Enabled" msgstr "Вкл." #: ../indicator-sensors/is-preferences-dialog.c:108 msgid "Hardware Sensors Indicator Preferences" msgstr "Параметры индикатора датчиков оборудования" #: ../indicator-sensors/is-preferences-dialog.c:127 msgid "General" msgstr "Основное" #: ../indicator-sensors/is-preferences-dialog.c:135 msgid "Start automatically on login" msgstr "Запускать автоматически при входе в систему" #: ../indicator-sensors/is-preferences-dialog.c:141 msgid "Primary sensor display" msgstr "Вид первичного датчика" #: ../indicator-sensors/is-preferences-dialog.c:159 msgid "Value" msgstr "Значение" #: ../indicator-sensors/is-preferences-dialog.c:176 msgid "Celsius (°C)" msgstr "Цельсия" #: ../indicator-sensors/is-preferences-dialog.c:187 msgid "Fahrenheit (°F)" msgstr "Фаренгейта" #: ../indicator-sensors/is-sensor.c:380 msgid "Sensor Alarm" msgstr "Уровень тревоги" #: ../indicator-sensors/is-sensor-dialog.c:88 msgid " Sensor Properties" msgstr " Свойства Датчика" #: ../indicator-sensors/is-sensor-dialog.c:115 msgid "Alarm" msgstr "Тревога" #: ../indicator-sensors/is-sensor-dialog.c:123 msgid "Disabled" msgstr "Отключено" #: ../indicator-sensors/is-sensor-dialog.c:126 msgid "Below" msgstr "Ниже" #: ../indicator-sensors/is-sensor-dialog.c:129 msgid "Above" msgstr "Выше" #: ../indicator-sensors/is-sensor-dialog.c:147 msgid "Low value" msgstr "Нижнее значение" #: ../indicator-sensors/is-sensor-dialog.c:166 msgid "High value" msgstr "Верхнее значение" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:159 #, c-format msgid "Error reading temperature value for GPU %d" msgstr "Ошибка при чтении значения температуры для ГПУ %d" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:198 #, c-format msgid "Error reading fanspeed value for GPU %d" msgstr "Ошибка при чтении значения скорости вращения вентилятора для ГПУ %d" #: ../plugins/aticonfig/is-aticonfig-plugin.c:337 msgid "Temperature" msgstr "Температура" #: ../plugins/aticonfig/is-aticonfig-plugin.c:355 msgid "Fan" msgstr "Вентилятор" #. first placeholder is sensor name, #. * second is error message #: ../plugins/libsensors/is-libsensors-plugin.c:174 #, c-format msgid "Error getting sensor value for sensor %s: %s [%d]" msgstr "Ошибка получения значения датчика %s: %s [%d]" #. translators: V is the unit for Voltage, replace with #. appropriate unit #: ../plugins/libsensors/is-libsensors-plugin.c:315 msgid "V" msgstr "В" #: ../plugins/libsensors/is-libsensors-plugin.c:375 msgid "No Sensors Detected" msgstr "Датчики не обнаружены" #: ../plugins/libsensors/is-libsensors-plugin.c:376 #, c-format msgid "" "Try running the command 'sensors-detect' from the command-line and " "restarting %s" msgstr "" "Попробуйте выполнить команду 'sensors-detect' из командной строки и " "перезапустить %s" #. first placeholder is #. * sensor name #: ../plugins/nvidia/is-nvidia-plugin.c:192 #, c-format msgid "Error getting sensor value for sensor %s" msgstr "Ошибка получения значения датчика %s" #: ../plugins/udisks/is-udisks-plugin.c:149 #: ../plugins/udisks2/is-udisks2-plugin.c:126 #, c-format msgid "Error reading new SMART data for sensor %s" msgstr "Ошибка чтения данных SMART датчика %s" #: ../plugins/udisks/is-udisks-plugin.c:165 #, c-format msgid "Error refreshing SMART data for sensor %s" msgstr "Ошибка обновления данных SMART датчика %s" indicator-sensors-1.1/po/sk.po000066400000000000000000000223361356741033200164260ustar00rootroot00000000000000# Slovak translation for indicator-sensors # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the indicator-sensors package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: indicator-sensors\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 22:58+1030\n" "PO-Revision-Date: 2013-04-08 18:27+0000\n" "Last-Translator: Eduard Hummel <22edel22@gmail.com>\n" "Language-Team: Slovak \n" "Language: sk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-11-02 11:56+0000\n" "X-Generator: Launchpad (build 16820)\n" #: ../data/indicator-sensors.gschema.xml.in.h:1 #: ../data/indicator-sensors.gschema.xml.in.in.h:1 msgid "Primary sensor to display" msgstr "Hlavný snímač na displeji" #: ../data/indicator-sensors.gschema.xml.in.h:2 #: ../data/indicator-sensors.gschema.xml.in.in.h:2 msgid "" "The primary sensor to display in the indicator, identified by it’s path." msgstr "" "Hlavný senzor pre zobrazenie v indikátoru, každý je identifikovaný vlastnou " "hlavičkou." #: ../data/indicator-sensors.gschema.xml.in.h:3 #: ../data/indicator-sensors.gschema.xml.in.in.h:3 msgid "Display flags for the indicator" msgstr "Zobrazenie znamenia pre indikátor" #: ../data/indicator-sensors.gschema.xml.in.h:4 #: ../data/indicator-sensors.gschema.xml.in.in.h:4 msgid "The elements used to display the primary sensor within the indicator." msgstr "Základné zobrazenie hlavného snímača podľa indikátora." #: ../data/indicator-sensors.gschema.xml.in.h:5 #: ../data/indicator-sensors.gschema.xml.in.in.h:5 msgid "Enabled sensors" msgstr "Povolené snimače" #: ../data/indicator-sensors.gschema.xml.in.h:6 #: ../data/indicator-sensors.gschema.xml.in.in.h:6 msgid "The list of enabled sensors to monitor, each identified by it’s path." msgstr "" "Zoznam povolených senzorov na monitorovanie, každý je identifikovaný svojim " "miestom." #: ../data/indicator-sensors.gschema.xml.in.h:7 #: ../data/indicator-sensors.gschema.xml.in.in.h:7 msgid "Seconds to delay hiding / showing alarms" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:8 #: ../data/indicator-sensors.gschema.xml.in.in.h:8 msgid "" "Alarm delay adds some hysteresis so alarms aren't shown for quickly " "fluctuating values." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:9 #: ../data/indicator-sensors.gschema.xml.in.in.h:9 #: ../indicator-sensors/is-preferences-dialog.c:168 msgid "Temperature scale" msgstr "Nameraná teplota" #: ../data/indicator-sensors.gschema.xml.in.h:10 #: ../data/indicator-sensors.gschema.xml.in.in.h:10 msgid "The temperature scale to display temperature sensor values." msgstr "Zobrazenie hodnoty teploty senzorov." #: ../data/indicator-sensors.gschema.xml.in.h:11 #: ../data/indicator-sensors.gschema.xml.in.in.h:11 msgid "Show indicator" msgstr "Zobrazenie indikátora" #: ../data/indicator-sensors.gschema.xml.in.h:12 #: ../data/indicator-sensors.gschema.xml.in.in.h:12 msgid "Whether to show the indicator in the notification area." msgstr "Zobrazenie indikátora v oznamovacej oblasti." #: ../data/indicator-sensors.desktop.in.h:1 #: ../indicator-sensors/is-application.c:822 msgid "Hardware Sensors Indicator" msgstr "Indikátor snímača hardvéru" #: ../data/indicator-sensors.desktop.in.h:2 msgid "An indicator for Unity which displays hardware sensor readings" msgstr "Unity indikátor, ktorý zobrazuje hodnoty senzorov" #: ../data/indicator-sensors.appdata.xml.in.h:1 msgid "" "Hardware Sensors Indicator provides temperature, fan and voltage sensor " "readings within the panel of your desktop." msgstr "" #: ../data/indicator-sensors.appdata.xml.in.h:2 msgid "" "When running GNOME Shell it is recommended to also install the associated " "GNOME Shell extension from extensions.gnome.org - https://extensions.gnome." "org/extension/336/hardware-sensors-indicator/ ." msgstr "" #: ../indicator-sensors/indicator-sensors.c:152 msgid "No Sensors Enabled For Monitoring" msgstr "Nie sú povolené žiadne senzory pre monitorovanie" #: ../indicator-sensors/indicator-sensors.c:153 msgid "" "Sensors detected but none are enabled for monitoring. To enable monitoring " "of sensors open the Preferences window and select the sensors to monitor" msgstr "" "Senzory sú detekované, ale žiadny nieje povolený pre monitorovanie. Pre " "povolenie senzorov otvorte ponuku s nastavením a vyberte požadovaný senzor" #: ../indicator-sensors/is-application.c:824 msgid "Indicator for GNOME / Unity showing hardware sensors." msgstr "Indikátor pre GNOME / Unity zobrazujúcí hardvérové senzory." #: ../indicator-sensors/is-fan-sensor.c:40 msgid " RPM" msgstr " RPM" #: ../indicator-sensors/is-indicator.c:160 msgid "Preferences…" msgstr "Nastavenie..." #: ../indicator-sensors/is-indicator.c:161 msgid "Preferences" msgstr "Nastavenia" #: ../indicator-sensors/is-indicator.c:162 msgid "About…" msgstr "O mne..." #: ../indicator-sensors/is-indicator.c:163 msgid "About" msgstr "O programe" #: ../indicator-sensors/is-indicator.c:164 #: ../indicator-sensors/is-indicator.c:165 msgid "Quit" msgstr "Ukončiť" #: ../indicator-sensors/is-indicator.c:237 msgid "No Sensors" msgstr "Bez snímača" #: ../indicator-sensors/is-indicator.c:554 #: ../indicator-sensors/is-indicator.c:680 msgid "No active sensors" msgstr "Neaktivované snímače" #: ../indicator-sensors/is-manager.c:302 #: ../indicator-sensors/is-sensor-dialog.c:315 msgid "Sensor" msgstr "Snímač" #: ../indicator-sensors/is-manager.c:310 #: ../indicator-sensors/is-preferences-dialog.c:149 msgid "Icon" msgstr "Ikona" #: ../indicator-sensors/is-manager.c:319 #: ../indicator-sensors/is-preferences-dialog.c:154 #: ../indicator-sensors/is-sensor-dialog.c:106 msgid "Label" msgstr "Označenie" #: ../indicator-sensors/is-manager.c:329 msgid "Enabled" msgstr "Aktivovaný" #: ../indicator-sensors/is-preferences-dialog.c:108 msgid "Hardware Sensors Indicator Preferences" msgstr "Predvoľby Indikátora Hardvérových Senzorov" #: ../indicator-sensors/is-preferences-dialog.c:127 msgid "General" msgstr "Všeobecné" #: ../indicator-sensors/is-preferences-dialog.c:135 msgid "Start automatically on login" msgstr "Zapnúť automaticky pri prihlásení" #: ../indicator-sensors/is-preferences-dialog.c:141 msgid "Primary sensor display" msgstr "Základný snímač displeja" #: ../indicator-sensors/is-preferences-dialog.c:159 msgid "Value" msgstr "Hodnota" #: ../indicator-sensors/is-preferences-dialog.c:176 msgid "Celsius (°C)" msgstr "Celzia (°C)" #: ../indicator-sensors/is-preferences-dialog.c:187 msgid "Fahrenheit (°F)" msgstr "Fahrenheit (°F)" #: ../indicator-sensors/is-sensor.c:380 msgid "Sensor Alarm" msgstr "Snímač signalizácie" #: ../indicator-sensors/is-sensor-dialog.c:88 msgid " Sensor Properties" msgstr " Vlastnosti snímača" #: ../indicator-sensors/is-sensor-dialog.c:115 msgid "Alarm" msgstr "Signalizácia" #: ../indicator-sensors/is-sensor-dialog.c:123 msgid "Disabled" msgstr "Zakázaný" #: ../indicator-sensors/is-sensor-dialog.c:126 msgid "Below" msgstr "Nižšie" #: ../indicator-sensors/is-sensor-dialog.c:129 msgid "Above" msgstr "Vyššie" #: ../indicator-sensors/is-sensor-dialog.c:147 msgid "Low value" msgstr "Najnižšia hodnota" #: ../indicator-sensors/is-sensor-dialog.c:166 msgid "High value" msgstr "Najvyššia hodnota" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:159 #, c-format msgid "Error reading temperature value for GPU %d" msgstr "Chybné načítanie hodnoty teploty pre GPU %d" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:198 #, c-format msgid "Error reading fanspeed value for GPU %d" msgstr "Chybné načítanie hodnoty otáčok ventilátora pre GPU %d" #: ../plugins/aticonfig/is-aticonfig-plugin.c:337 msgid "Temperature" msgstr "Teplota" #: ../plugins/aticonfig/is-aticonfig-plugin.c:355 msgid "Fan" msgstr "Ventilátor" #. first placeholder is sensor name, #. * second is error message #: ../plugins/libsensors/is-libsensors-plugin.c:174 #, c-format msgid "Error getting sensor value for sensor %s: %s [%d]" msgstr "Chyba pri získavaní hodnoty zo senzoru %s: %s [%d]" #. translators: V is the unit for Voltage, replace with #. appropriate unit #: ../plugins/libsensors/is-libsensors-plugin.c:315 msgid "V" msgstr "Volt" #: ../plugins/libsensors/is-libsensors-plugin.c:375 msgid "No Sensors Detected" msgstr "Nie sú detekované žiadne senzory" #: ../plugins/libsensors/is-libsensors-plugin.c:376 #, c-format msgid "" "Try running the command 'sensors-detect' from the command-line and " "restarting %s" msgstr "Spustite príkaz 'sensors-detect' v príkazovom riadku a reštartujte %s" #. first placeholder is #. * sensor name #: ../plugins/nvidia/is-nvidia-plugin.c:192 #, c-format msgid "Error getting sensor value for sensor %s" msgstr "Chyba pri získavaný hodnoty zo senzoru %s" #: ../plugins/udisks/is-udisks-plugin.c:149 #: ../plugins/udisks2/is-udisks2-plugin.c:126 #, c-format msgid "Error reading new SMART data for sensor %s" msgstr "Chyba pri načítaný SMART dát zo senzoru %s" #: ../plugins/udisks/is-udisks-plugin.c:165 #, c-format msgid "Error refreshing SMART data for sensor %s" msgstr "Chyba pri načítaný SMART dát pre senzor %s" indicator-sensors-1.1/po/sr.po000066400000000000000000000176301356741033200164360ustar00rootroot00000000000000# Serbian translation for indicator-sensors # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the indicator-sensors package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: indicator-sensors\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 22:58+1030\n" "PO-Revision-Date: 2011-07-23 23:15+0000\n" "Last-Translator: Мирослав Николић \n" "Language-Team: Serbian \n" "Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-11-02 11:56+0000\n" "X-Generator: Launchpad (build 16820)\n" #: ../data/indicator-sensors.gschema.xml.in.h:1 #: ../data/indicator-sensors.gschema.xml.in.in.h:1 msgid "Primary sensor to display" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:2 #: ../data/indicator-sensors.gschema.xml.in.in.h:2 msgid "" "The primary sensor to display in the indicator, identified by it’s path." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:3 #: ../data/indicator-sensors.gschema.xml.in.in.h:3 msgid "Display flags for the indicator" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:4 #: ../data/indicator-sensors.gschema.xml.in.in.h:4 msgid "The elements used to display the primary sensor within the indicator." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:5 #: ../data/indicator-sensors.gschema.xml.in.in.h:5 msgid "Enabled sensors" msgstr "Омогућени сензори" #: ../data/indicator-sensors.gschema.xml.in.h:6 #: ../data/indicator-sensors.gschema.xml.in.in.h:6 msgid "The list of enabled sensors to monitor, each identified by it’s path." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:7 #: ../data/indicator-sensors.gschema.xml.in.in.h:7 msgid "Seconds to delay hiding / showing alarms" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:8 #: ../data/indicator-sensors.gschema.xml.in.in.h:8 msgid "" "Alarm delay adds some hysteresis so alarms aren't shown for quickly " "fluctuating values." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:9 #: ../data/indicator-sensors.gschema.xml.in.in.h:9 #: ../indicator-sensors/is-preferences-dialog.c:168 msgid "Temperature scale" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:10 #: ../data/indicator-sensors.gschema.xml.in.in.h:10 msgid "The temperature scale to display temperature sensor values." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:11 #: ../data/indicator-sensors.gschema.xml.in.in.h:11 msgid "Show indicator" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:12 #: ../data/indicator-sensors.gschema.xml.in.in.h:12 msgid "Whether to show the indicator in the notification area." msgstr "" #: ../data/indicator-sensors.desktop.in.h:1 #: ../indicator-sensors/is-application.c:822 msgid "Hardware Sensors Indicator" msgstr "" #: ../data/indicator-sensors.desktop.in.h:2 msgid "An indicator for Unity which displays hardware sensor readings" msgstr "" #: ../data/indicator-sensors.appdata.xml.in.h:1 msgid "" "Hardware Sensors Indicator provides temperature, fan and voltage sensor " "readings within the panel of your desktop." msgstr "" #: ../data/indicator-sensors.appdata.xml.in.h:2 msgid "" "When running GNOME Shell it is recommended to also install the associated " "GNOME Shell extension from extensions.gnome.org - https://extensions.gnome." "org/extension/336/hardware-sensors-indicator/ ." msgstr "" #: ../indicator-sensors/indicator-sensors.c:152 msgid "No Sensors Enabled For Monitoring" msgstr "" #: ../indicator-sensors/indicator-sensors.c:153 msgid "" "Sensors detected but none are enabled for monitoring. To enable monitoring " "of sensors open the Preferences window and select the sensors to monitor" msgstr "" #: ../indicator-sensors/is-application.c:824 msgid "Indicator for GNOME / Unity showing hardware sensors." msgstr "" #: ../indicator-sensors/is-fan-sensor.c:40 msgid " RPM" msgstr "" #: ../indicator-sensors/is-indicator.c:160 msgid "Preferences…" msgstr "" #: ../indicator-sensors/is-indicator.c:161 msgid "Preferences" msgstr "" #: ../indicator-sensors/is-indicator.c:162 msgid "About…" msgstr "" #: ../indicator-sensors/is-indicator.c:163 msgid "About" msgstr "" #: ../indicator-sensors/is-indicator.c:164 #: ../indicator-sensors/is-indicator.c:165 msgid "Quit" msgstr "" #: ../indicator-sensors/is-indicator.c:237 msgid "No Sensors" msgstr "Нема сензора" #: ../indicator-sensors/is-indicator.c:554 #: ../indicator-sensors/is-indicator.c:680 msgid "No active sensors" msgstr "Нема активних сензора" #: ../indicator-sensors/is-manager.c:302 #: ../indicator-sensors/is-sensor-dialog.c:315 msgid "Sensor" msgstr "Сензор" #: ../indicator-sensors/is-manager.c:310 #: ../indicator-sensors/is-preferences-dialog.c:149 msgid "Icon" msgstr "" #: ../indicator-sensors/is-manager.c:319 #: ../indicator-sensors/is-preferences-dialog.c:154 #: ../indicator-sensors/is-sensor-dialog.c:106 msgid "Label" msgstr "Етикета" #: ../indicator-sensors/is-manager.c:329 msgid "Enabled" msgstr "Укључено" #: ../indicator-sensors/is-preferences-dialog.c:108 msgid "Hardware Sensors Indicator Preferences" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:127 msgid "General" msgstr "Опште" #: ../indicator-sensors/is-preferences-dialog.c:135 msgid "Start automatically on login" msgstr "Покрени приликом пријављивања" #: ../indicator-sensors/is-preferences-dialog.c:141 msgid "Primary sensor display" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:159 msgid "Value" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:176 msgid "Celsius (°C)" msgstr "Целзијус (°C)" #: ../indicator-sensors/is-preferences-dialog.c:187 msgid "Fahrenheit (°F)" msgstr "Фаренхајт (°F)" #: ../indicator-sensors/is-sensor.c:380 msgid "Sensor Alarm" msgstr "" #: ../indicator-sensors/is-sensor-dialog.c:88 msgid " Sensor Properties" msgstr "" #: ../indicator-sensors/is-sensor-dialog.c:115 msgid "Alarm" msgstr "" #: ../indicator-sensors/is-sensor-dialog.c:123 msgid "Disabled" msgstr "" #: ../indicator-sensors/is-sensor-dialog.c:126 msgid "Below" msgstr "" #: ../indicator-sensors/is-sensor-dialog.c:129 msgid "Above" msgstr "" #: ../indicator-sensors/is-sensor-dialog.c:147 msgid "Low value" msgstr "" #: ../indicator-sensors/is-sensor-dialog.c:166 msgid "High value" msgstr "" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:159 #, c-format msgid "Error reading temperature value for GPU %d" msgstr "" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:198 #, c-format msgid "Error reading fanspeed value for GPU %d" msgstr "" #: ../plugins/aticonfig/is-aticonfig-plugin.c:337 msgid "Temperature" msgstr "" #: ../plugins/aticonfig/is-aticonfig-plugin.c:355 msgid "Fan" msgstr "" #. first placeholder is sensor name, #. * second is error message #: ../plugins/libsensors/is-libsensors-plugin.c:174 #, c-format msgid "Error getting sensor value for sensor %s: %s [%d]" msgstr "" #. translators: V is the unit for Voltage, replace with #. appropriate unit #: ../plugins/libsensors/is-libsensors-plugin.c:315 msgid "V" msgstr "" #: ../plugins/libsensors/is-libsensors-plugin.c:375 msgid "No Sensors Detected" msgstr "" #: ../plugins/libsensors/is-libsensors-plugin.c:376 #, c-format msgid "" "Try running the command 'sensors-detect' from the command-line and " "restarting %s" msgstr "" #. first placeholder is #. * sensor name #: ../plugins/nvidia/is-nvidia-plugin.c:192 #, c-format msgid "Error getting sensor value for sensor %s" msgstr "" #: ../plugins/udisks/is-udisks-plugin.c:149 #: ../plugins/udisks2/is-udisks2-plugin.c:126 #, c-format msgid "Error reading new SMART data for sensor %s" msgstr "" #: ../plugins/udisks/is-udisks-plugin.c:165 #, c-format msgid "Error refreshing SMART data for sensor %s" msgstr "" indicator-sensors-1.1/po/tr.po000066400000000000000000000215201356741033200164300ustar00rootroot00000000000000# Turkish translation for indicator-sensors # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the indicator-sensors package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: indicator-sensors\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 22:58+1030\n" "PO-Revision-Date: 2012-09-30 17:09+0000\n" "Last-Translator: Şâkir Aşçı \n" "Language-Team: Turkish \n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-11-02 11:56+0000\n" "X-Generator: Launchpad (build 16820)\n" #: ../data/indicator-sensors.gschema.xml.in.h:1 #: ../data/indicator-sensors.gschema.xml.in.in.h:1 msgid "Primary sensor to display" msgstr "Gösterilecek birincil algılayıcı" #: ../data/indicator-sensors.gschema.xml.in.h:2 #: ../data/indicator-sensors.gschema.xml.in.in.h:2 msgid "" "The primary sensor to display in the indicator, identified by it’s path." msgstr "" "Göstergede görüntülenecek birincil algılayıcı; kendi yoluyla tanımlanır." #: ../data/indicator-sensors.gschema.xml.in.h:3 #: ../data/indicator-sensors.gschema.xml.in.in.h:3 msgid "Display flags for the indicator" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:4 #: ../data/indicator-sensors.gschema.xml.in.in.h:4 msgid "The elements used to display the primary sensor within the indicator." msgstr "Göstergedeki birincil algılayıcıyı görüntülemekte kullanılan ögeler." #: ../data/indicator-sensors.gschema.xml.in.h:5 #: ../data/indicator-sensors.gschema.xml.in.in.h:5 msgid "Enabled sensors" msgstr "Etkin algılayıcılar" #: ../data/indicator-sensors.gschema.xml.in.h:6 #: ../data/indicator-sensors.gschema.xml.in.in.h:6 msgid "The list of enabled sensors to monitor, each identified by it’s path." msgstr "" "Görüntülenecek etkin algılayıcıların listesi; her biri kendi yoluyla " "tanımlanır." #: ../data/indicator-sensors.gschema.xml.in.h:7 #: ../data/indicator-sensors.gschema.xml.in.in.h:7 msgid "Seconds to delay hiding / showing alarms" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:8 #: ../data/indicator-sensors.gschema.xml.in.in.h:8 msgid "" "Alarm delay adds some hysteresis so alarms aren't shown for quickly " "fluctuating values." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:9 #: ../data/indicator-sensors.gschema.xml.in.in.h:9 #: ../indicator-sensors/is-preferences-dialog.c:168 msgid "Temperature scale" msgstr "Sıcaklık ölçeği" #: ../data/indicator-sensors.gschema.xml.in.h:10 #: ../data/indicator-sensors.gschema.xml.in.in.h:10 msgid "The temperature scale to display temperature sensor values." msgstr "Sıcaklık algılayıcı değerlerini görüntülemek için sıcaklık ölçeği." #: ../data/indicator-sensors.gschema.xml.in.h:11 #: ../data/indicator-sensors.gschema.xml.in.in.h:11 msgid "Show indicator" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:12 #: ../data/indicator-sensors.gschema.xml.in.in.h:12 msgid "Whether to show the indicator in the notification area." msgstr "" #: ../data/indicator-sensors.desktop.in.h:1 #: ../indicator-sensors/is-application.c:822 msgid "Hardware Sensors Indicator" msgstr "Donanım Algılayıcı Göstergesi" #: ../data/indicator-sensors.desktop.in.h:2 msgid "An indicator for Unity which displays hardware sensor readings" msgstr "Unity için donanım algılayıcı okumalarını bildiren bir gösterge" #: ../data/indicator-sensors.appdata.xml.in.h:1 msgid "" "Hardware Sensors Indicator provides temperature, fan and voltage sensor " "readings within the panel of your desktop." msgstr "" #: ../data/indicator-sensors.appdata.xml.in.h:2 msgid "" "When running GNOME Shell it is recommended to also install the associated " "GNOME Shell extension from extensions.gnome.org - https://extensions.gnome." "org/extension/336/hardware-sensors-indicator/ ." msgstr "" #: ../indicator-sensors/indicator-sensors.c:152 msgid "No Sensors Enabled For Monitoring" msgstr "" #: ../indicator-sensors/indicator-sensors.c:153 msgid "" "Sensors detected but none are enabled for monitoring. To enable monitoring " "of sensors open the Preferences window and select the sensors to monitor" msgstr "" #: ../indicator-sensors/is-application.c:824 msgid "Indicator for GNOME / Unity showing hardware sensors." msgstr "" #: ../indicator-sensors/is-fan-sensor.c:40 msgid " RPM" msgstr "" #: ../indicator-sensors/is-indicator.c:160 msgid "Preferences…" msgstr "Tercihler..." #: ../indicator-sensors/is-indicator.c:161 msgid "Preferences" msgstr "Tercihler" #: ../indicator-sensors/is-indicator.c:162 msgid "About…" msgstr "Hakkında..." #: ../indicator-sensors/is-indicator.c:163 msgid "About" msgstr "" #: ../indicator-sensors/is-indicator.c:164 #: ../indicator-sensors/is-indicator.c:165 msgid "Quit" msgstr "Çık" #: ../indicator-sensors/is-indicator.c:237 msgid "No Sensors" msgstr "Algılayıcı yok" #: ../indicator-sensors/is-indicator.c:554 #: ../indicator-sensors/is-indicator.c:680 msgid "No active sensors" msgstr "Etkin algılayıcı yok" #: ../indicator-sensors/is-manager.c:302 #: ../indicator-sensors/is-sensor-dialog.c:315 msgid "Sensor" msgstr "Algılayıcı" #: ../indicator-sensors/is-manager.c:310 #: ../indicator-sensors/is-preferences-dialog.c:149 msgid "Icon" msgstr "Simge" #: ../indicator-sensors/is-manager.c:319 #: ../indicator-sensors/is-preferences-dialog.c:154 #: ../indicator-sensors/is-sensor-dialog.c:106 msgid "Label" msgstr "Etiket" #: ../indicator-sensors/is-manager.c:329 msgid "Enabled" msgstr "Etkin" #: ../indicator-sensors/is-preferences-dialog.c:108 msgid "Hardware Sensors Indicator Preferences" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:127 msgid "General" msgstr "Genel" #: ../indicator-sensors/is-preferences-dialog.c:135 msgid "Start automatically on login" msgstr "Başlangıçta otomatik olarak çalıştır" #: ../indicator-sensors/is-preferences-dialog.c:141 msgid "Primary sensor display" msgstr "Birincil algılayıcı görünümü" #: ../indicator-sensors/is-preferences-dialog.c:159 msgid "Value" msgstr "Değer" #: ../indicator-sensors/is-preferences-dialog.c:176 msgid "Celsius (°C)" msgstr "Celsius (°C)" #: ../indicator-sensors/is-preferences-dialog.c:187 msgid "Fahrenheit (°F)" msgstr "Fahrenheit (°F)" #: ../indicator-sensors/is-sensor.c:380 msgid "Sensor Alarm" msgstr "Algılayıcı Uyarıcısı" #: ../indicator-sensors/is-sensor-dialog.c:88 msgid " Sensor Properties" msgstr " Algılayıcı Özellikleri" #: ../indicator-sensors/is-sensor-dialog.c:115 msgid "Alarm" msgstr "Uyarıcı" #: ../indicator-sensors/is-sensor-dialog.c:123 msgid "Disabled" msgstr "Devre Dışı" #: ../indicator-sensors/is-sensor-dialog.c:126 msgid "Below" msgstr "Alt sınır" #: ../indicator-sensors/is-sensor-dialog.c:129 msgid "Above" msgstr "Üst sınır" #: ../indicator-sensors/is-sensor-dialog.c:147 msgid "Low value" msgstr "Düşük değer" #: ../indicator-sensors/is-sensor-dialog.c:166 msgid "High value" msgstr "Yüksek değer" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:159 #, c-format msgid "Error reading temperature value for GPU %d" msgstr "%d ekran kartının sıcaklık değerinin okunmasında hatâ" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:198 #, c-format msgid "Error reading fanspeed value for GPU %d" msgstr "%d ekran kartının fan hızı değerinin okunmasında hatâ" #: ../plugins/aticonfig/is-aticonfig-plugin.c:337 msgid "Temperature" msgstr "Sıcaklık" #: ../plugins/aticonfig/is-aticonfig-plugin.c:355 msgid "Fan" msgstr "Fan" #. first placeholder is sensor name, #. * second is error message #: ../plugins/libsensors/is-libsensors-plugin.c:174 #, c-format msgid "Error getting sensor value for sensor %s: %s [%d]" msgstr "%s algılayısı değerinin algılanmasında hatâ: %s [%d]" #. translators: V is the unit for Voltage, replace with #. appropriate unit #: ../plugins/libsensors/is-libsensors-plugin.c:315 msgid "V" msgstr "V" #: ../plugins/libsensors/is-libsensors-plugin.c:375 msgid "No Sensors Detected" msgstr "" #: ../plugins/libsensors/is-libsensors-plugin.c:376 #, c-format msgid "" "Try running the command 'sensors-detect' from the command-line and " "restarting %s" msgstr "" #. first placeholder is #. * sensor name #: ../plugins/nvidia/is-nvidia-plugin.c:192 #, c-format msgid "Error getting sensor value for sensor %s" msgstr "%s algılayısının değerinin algılasınmasında hatâ" #: ../plugins/udisks/is-udisks-plugin.c:149 #: ../plugins/udisks2/is-udisks2-plugin.c:126 #, c-format msgid "Error reading new SMART data for sensor %s" msgstr "%s algılayıcısının SMART verisinin okunmasında hatâ" #: ../plugins/udisks/is-udisks-plugin.c:165 #, c-format msgid "Error refreshing SMART data for sensor %s" msgstr "%s algılayıcısının SMART verisinin yenilenmesinde hatâ" indicator-sensors-1.1/po/uk.po000066400000000000000000000202001356741033200164140ustar00rootroot00000000000000# Ukrainian translation for indicator-sensors # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the indicator-sensors package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: indicator-sensors\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 22:58+1030\n" "PO-Revision-Date: 2011-09-27 06:36+0000\n" "Last-Translator: Евгений \n" "Language-Team: Ukrainian \n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-11-02 11:56+0000\n" "X-Generator: Launchpad (build 16820)\n" #: ../data/indicator-sensors.gschema.xml.in.h:1 #: ../data/indicator-sensors.gschema.xml.in.in.h:1 msgid "Primary sensor to display" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:2 #: ../data/indicator-sensors.gschema.xml.in.in.h:2 msgid "" "The primary sensor to display in the indicator, identified by it’s path." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:3 #: ../data/indicator-sensors.gschema.xml.in.in.h:3 msgid "Display flags for the indicator" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:4 #: ../data/indicator-sensors.gschema.xml.in.in.h:4 msgid "The elements used to display the primary sensor within the indicator." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:5 #: ../data/indicator-sensors.gschema.xml.in.in.h:5 msgid "Enabled sensors" msgstr "Увімкнені датчики" #: ../data/indicator-sensors.gschema.xml.in.h:6 #: ../data/indicator-sensors.gschema.xml.in.in.h:6 msgid "The list of enabled sensors to monitor, each identified by it’s path." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:7 #: ../data/indicator-sensors.gschema.xml.in.in.h:7 msgid "Seconds to delay hiding / showing alarms" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:8 #: ../data/indicator-sensors.gschema.xml.in.in.h:8 msgid "" "Alarm delay adds some hysteresis so alarms aren't shown for quickly " "fluctuating values." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:9 #: ../data/indicator-sensors.gschema.xml.in.in.h:9 #: ../indicator-sensors/is-preferences-dialog.c:168 msgid "Temperature scale" msgstr "Температурна шкала" #: ../data/indicator-sensors.gschema.xml.in.h:10 #: ../data/indicator-sensors.gschema.xml.in.in.h:10 msgid "The temperature scale to display temperature sensor values." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:11 #: ../data/indicator-sensors.gschema.xml.in.in.h:11 msgid "Show indicator" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:12 #: ../data/indicator-sensors.gschema.xml.in.in.h:12 msgid "Whether to show the indicator in the notification area." msgstr "" #: ../data/indicator-sensors.desktop.in.h:1 #: ../indicator-sensors/is-application.c:822 msgid "Hardware Sensors Indicator" msgstr "Індикатор апаратних датчиків" #: ../data/indicator-sensors.desktop.in.h:2 msgid "An indicator for Unity which displays hardware sensor readings" msgstr "Індикатор показань апаратних датчиків для Unity" #: ../data/indicator-sensors.appdata.xml.in.h:1 msgid "" "Hardware Sensors Indicator provides temperature, fan and voltage sensor " "readings within the panel of your desktop." msgstr "" #: ../data/indicator-sensors.appdata.xml.in.h:2 msgid "" "When running GNOME Shell it is recommended to also install the associated " "GNOME Shell extension from extensions.gnome.org - https://extensions.gnome." "org/extension/336/hardware-sensors-indicator/ ." msgstr "" #: ../indicator-sensors/indicator-sensors.c:152 msgid "No Sensors Enabled For Monitoring" msgstr "" #: ../indicator-sensors/indicator-sensors.c:153 msgid "" "Sensors detected but none are enabled for monitoring. To enable monitoring " "of sensors open the Preferences window and select the sensors to monitor" msgstr "" #: ../indicator-sensors/is-application.c:824 msgid "Indicator for GNOME / Unity showing hardware sensors." msgstr "" #: ../indicator-sensors/is-fan-sensor.c:40 msgid " RPM" msgstr "" #: ../indicator-sensors/is-indicator.c:160 msgid "Preferences…" msgstr "" #: ../indicator-sensors/is-indicator.c:161 msgid "Preferences" msgstr "" #: ../indicator-sensors/is-indicator.c:162 msgid "About…" msgstr "" #: ../indicator-sensors/is-indicator.c:163 msgid "About" msgstr "" #: ../indicator-sensors/is-indicator.c:164 #: ../indicator-sensors/is-indicator.c:165 msgid "Quit" msgstr "Вийти" #: ../indicator-sensors/is-indicator.c:237 msgid "No Sensors" msgstr "Нема датчиків" #: ../indicator-sensors/is-indicator.c:554 #: ../indicator-sensors/is-indicator.c:680 msgid "No active sensors" msgstr "Немає активних датчиків" #: ../indicator-sensors/is-manager.c:302 #: ../indicator-sensors/is-sensor-dialog.c:315 msgid "Sensor" msgstr "Датчик" #: ../indicator-sensors/is-manager.c:310 #: ../indicator-sensors/is-preferences-dialog.c:149 msgid "Icon" msgstr "" #: ../indicator-sensors/is-manager.c:319 #: ../indicator-sensors/is-preferences-dialog.c:154 #: ../indicator-sensors/is-sensor-dialog.c:106 msgid "Label" msgstr "Мітка" #: ../indicator-sensors/is-manager.c:329 msgid "Enabled" msgstr "Увімкнено" #: ../indicator-sensors/is-preferences-dialog.c:108 msgid "Hardware Sensors Indicator Preferences" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:127 msgid "General" msgstr "Загальні налаштування" #: ../indicator-sensors/is-preferences-dialog.c:135 msgid "Start automatically on login" msgstr "Запускати автоматично при вході в систему" #: ../indicator-sensors/is-preferences-dialog.c:141 msgid "Primary sensor display" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:159 msgid "Value" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:176 msgid "Celsius (°C)" msgstr "" #: ../indicator-sensors/is-preferences-dialog.c:187 msgid "Fahrenheit (°F)" msgstr "" #: ../indicator-sensors/is-sensor.c:380 msgid "Sensor Alarm" msgstr "" #: ../indicator-sensors/is-sensor-dialog.c:88 msgid " Sensor Properties" msgstr "" #: ../indicator-sensors/is-sensor-dialog.c:115 msgid "Alarm" msgstr "" #: ../indicator-sensors/is-sensor-dialog.c:123 msgid "Disabled" msgstr "" #: ../indicator-sensors/is-sensor-dialog.c:126 msgid "Below" msgstr "" #: ../indicator-sensors/is-sensor-dialog.c:129 msgid "Above" msgstr "" #: ../indicator-sensors/is-sensor-dialog.c:147 msgid "Low value" msgstr "" #: ../indicator-sensors/is-sensor-dialog.c:166 msgid "High value" msgstr "" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:159 #, c-format msgid "Error reading temperature value for GPU %d" msgstr "" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:198 #, c-format msgid "Error reading fanspeed value for GPU %d" msgstr "" #: ../plugins/aticonfig/is-aticonfig-plugin.c:337 msgid "Temperature" msgstr "" #: ../plugins/aticonfig/is-aticonfig-plugin.c:355 msgid "Fan" msgstr "" #. first placeholder is sensor name, #. * second is error message #: ../plugins/libsensors/is-libsensors-plugin.c:174 #, c-format msgid "Error getting sensor value for sensor %s: %s [%d]" msgstr "" #. translators: V is the unit for Voltage, replace with #. appropriate unit #: ../plugins/libsensors/is-libsensors-plugin.c:315 msgid "V" msgstr "" #: ../plugins/libsensors/is-libsensors-plugin.c:375 msgid "No Sensors Detected" msgstr "" #: ../plugins/libsensors/is-libsensors-plugin.c:376 #, c-format msgid "" "Try running the command 'sensors-detect' from the command-line and " "restarting %s" msgstr "" #. first placeholder is #. * sensor name #: ../plugins/nvidia/is-nvidia-plugin.c:192 #, c-format msgid "Error getting sensor value for sensor %s" msgstr "Помилка отримання значення для датчика %s" #: ../plugins/udisks/is-udisks-plugin.c:149 #: ../plugins/udisks2/is-udisks2-plugin.c:126 #, c-format msgid "Error reading new SMART data for sensor %s" msgstr "" #: ../plugins/udisks/is-udisks-plugin.c:165 #, c-format msgid "Error refreshing SMART data for sensor %s" msgstr "" indicator-sensors-1.1/po/zh_CN.po000066400000000000000000000210071356741033200170040ustar00rootroot00000000000000# Chinese (Simplified) translation for indicator-sensors # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the indicator-sensors package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: indicator-sensors\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 22:58+1030\n" "PO-Revision-Date: 2013-08-24 20:56+0000\n" "Last-Translator: Xiaoxing Ye \n" "Language-Team: Chinese (Simplified) \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-11-02 11:56+0000\n" "X-Generator: Launchpad (build 16820)\n" #: ../data/indicator-sensors.gschema.xml.in.h:1 #: ../data/indicator-sensors.gschema.xml.in.in.h:1 msgid "Primary sensor to display" msgstr "主传感器显示" #: ../data/indicator-sensors.gschema.xml.in.h:2 #: ../data/indicator-sensors.gschema.xml.in.in.h:2 msgid "" "The primary sensor to display in the indicator, identified by it’s path." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:3 #: ../data/indicator-sensors.gschema.xml.in.in.h:3 msgid "Display flags for the indicator" msgstr "为这个指示器显示标志" #: ../data/indicator-sensors.gschema.xml.in.h:4 #: ../data/indicator-sensors.gschema.xml.in.in.h:4 msgid "The elements used to display the primary sensor within the indicator." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:5 #: ../data/indicator-sensors.gschema.xml.in.in.h:5 msgid "Enabled sensors" msgstr "已启用的传感器" #: ../data/indicator-sensors.gschema.xml.in.h:6 #: ../data/indicator-sensors.gschema.xml.in.in.h:6 msgid "The list of enabled sensors to monitor, each identified by it’s path." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:7 #: ../data/indicator-sensors.gschema.xml.in.in.h:7 msgid "Seconds to delay hiding / showing alarms" msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:8 #: ../data/indicator-sensors.gschema.xml.in.in.h:8 msgid "" "Alarm delay adds some hysteresis so alarms aren't shown for quickly " "fluctuating values." msgstr "" #: ../data/indicator-sensors.gschema.xml.in.h:9 #: ../data/indicator-sensors.gschema.xml.in.in.h:9 #: ../indicator-sensors/is-preferences-dialog.c:168 msgid "Temperature scale" msgstr "温度缩放" #: ../data/indicator-sensors.gschema.xml.in.h:10 #: ../data/indicator-sensors.gschema.xml.in.in.h:10 msgid "The temperature scale to display temperature sensor values." msgstr "用于显示温度传感器值的温度单位。" #: ../data/indicator-sensors.gschema.xml.in.h:11 #: ../data/indicator-sensors.gschema.xml.in.in.h:11 msgid "Show indicator" msgstr "显示指示器" #: ../data/indicator-sensors.gschema.xml.in.h:12 #: ../data/indicator-sensors.gschema.xml.in.in.h:12 msgid "Whether to show the indicator in the notification area." msgstr "在通知区域显示指示器" #: ../data/indicator-sensors.desktop.in.h:1 #: ../indicator-sensors/is-application.c:822 msgid "Hardware Sensors Indicator" msgstr "硬件传感指示器" #: ../data/indicator-sensors.desktop.in.h:2 msgid "An indicator for Unity which displays hardware sensor readings" msgstr "用于在 Unity 显示硬件传感器读数的指示器" #: ../data/indicator-sensors.appdata.xml.in.h:1 msgid "" "Hardware Sensors Indicator provides temperature, fan and voltage sensor " "readings within the panel of your desktop." msgstr "" #: ../data/indicator-sensors.appdata.xml.in.h:2 msgid "" "When running GNOME Shell it is recommended to also install the associated " "GNOME Shell extension from extensions.gnome.org - https://extensions.gnome." "org/extension/336/hardware-sensors-indicator/ ." msgstr "" #: ../indicator-sensors/indicator-sensors.c:152 msgid "No Sensors Enabled For Monitoring" msgstr "没有启用任何传感器" #: ../indicator-sensors/indicator-sensors.c:153 msgid "" "Sensors detected but none are enabled for monitoring. To enable monitoring " "of sensors open the Preferences window and select the sensors to monitor" msgstr "" "已侦测到传感器,但没有正在监控的。要启用传感器的监控功能,打开偏好窗口并选择" "要监控的传感器。" #: ../indicator-sensors/is-application.c:824 msgid "Indicator for GNOME / Unity showing hardware sensors." msgstr "用于GNOME / Unity 显示硬件传感器信息的指示器。" #: ../indicator-sensors/is-fan-sensor.c:40 msgid " RPM" msgstr " 转每分" #: ../indicator-sensors/is-indicator.c:160 msgid "Preferences…" msgstr "首选项..." #: ../indicator-sensors/is-indicator.c:161 msgid "Preferences" msgstr "首选项" #: ../indicator-sensors/is-indicator.c:162 msgid "About…" msgstr "关于..." #: ../indicator-sensors/is-indicator.c:163 msgid "About" msgstr "关于" #: ../indicator-sensors/is-indicator.c:164 #: ../indicator-sensors/is-indicator.c:165 msgid "Quit" msgstr "退出" #: ../indicator-sensors/is-indicator.c:237 msgid "No Sensors" msgstr "没有传感器" #: ../indicator-sensors/is-indicator.c:554 #: ../indicator-sensors/is-indicator.c:680 msgid "No active sensors" msgstr "没有活跃的传感器" #: ../indicator-sensors/is-manager.c:302 #: ../indicator-sensors/is-sensor-dialog.c:315 msgid "Sensor" msgstr "传感器" #: ../indicator-sensors/is-manager.c:310 #: ../indicator-sensors/is-preferences-dialog.c:149 msgid "Icon" msgstr "图标" #: ../indicator-sensors/is-manager.c:319 #: ../indicator-sensors/is-preferences-dialog.c:154 #: ../indicator-sensors/is-sensor-dialog.c:106 msgid "Label" msgstr "标签" #: ../indicator-sensors/is-manager.c:329 msgid "Enabled" msgstr "已启用" #: ../indicator-sensors/is-preferences-dialog.c:108 msgid "Hardware Sensors Indicator Preferences" msgstr "硬件传感器指示器偏好设定" #: ../indicator-sensors/is-preferences-dialog.c:127 msgid "General" msgstr "一般" #: ../indicator-sensors/is-preferences-dialog.c:135 msgid "Start automatically on login" msgstr "在登入时自动启动" #: ../indicator-sensors/is-preferences-dialog.c:141 msgid "Primary sensor display" msgstr "需显示的主传感器" #: ../indicator-sensors/is-preferences-dialog.c:159 msgid "Value" msgstr "值" #: ../indicator-sensors/is-preferences-dialog.c:176 msgid "Celsius (°C)" msgstr "摄氏度 (°C)" #: ../indicator-sensors/is-preferences-dialog.c:187 msgid "Fahrenheit (°F)" msgstr "华氏度 (°F)" #: ../indicator-sensors/is-sensor.c:380 msgid "Sensor Alarm" msgstr "传感器警报" #: ../indicator-sensors/is-sensor-dialog.c:88 msgid " Sensor Properties" msgstr " 传感器属性" #: ../indicator-sensors/is-sensor-dialog.c:115 msgid "Alarm" msgstr "警告" #: ../indicator-sensors/is-sensor-dialog.c:123 msgid "Disabled" msgstr "已禁用" #: ../indicator-sensors/is-sensor-dialog.c:126 msgid "Below" msgstr "之下" #: ../indicator-sensors/is-sensor-dialog.c:129 msgid "Above" msgstr "之上" #: ../indicator-sensors/is-sensor-dialog.c:147 msgid "Low value" msgstr "低值" #: ../indicator-sensors/is-sensor-dialog.c:166 msgid "High value" msgstr "" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:159 #, c-format msgid "Error reading temperature value for GPU %d" msgstr "" #. first placeholder is sensor name #: ../plugins/aticonfig/is-aticonfig-plugin.c:198 #, c-format msgid "Error reading fanspeed value for GPU %d" msgstr "" #: ../plugins/aticonfig/is-aticonfig-plugin.c:337 msgid "Temperature" msgstr "温度" #: ../plugins/aticonfig/is-aticonfig-plugin.c:355 msgid "Fan" msgstr "风扇" #. first placeholder is sensor name, #. * second is error message #: ../plugins/libsensors/is-libsensors-plugin.c:174 #, c-format msgid "Error getting sensor value for sensor %s: %s [%d]" msgstr "" #. translators: V is the unit for Voltage, replace with #. appropriate unit #: ../plugins/libsensors/is-libsensors-plugin.c:315 msgid "V" msgstr "伏" #: ../plugins/libsensors/is-libsensors-plugin.c:375 msgid "No Sensors Detected" msgstr "未检测到传感器" #: ../plugins/libsensors/is-libsensors-plugin.c:376 #, c-format msgid "" "Try running the command 'sensors-detect' from the command-line and " "restarting %s" msgstr "尝试在终端运行命令 'sensors-detect' 并重新启动%s" #. first placeholder is #. * sensor name #: ../plugins/nvidia/is-nvidia-plugin.c:192 #, c-format msgid "Error getting sensor value for sensor %s" msgstr "" #: ../plugins/udisks/is-udisks-plugin.c:149 #: ../plugins/udisks2/is-udisks2-plugin.c:126 #, c-format msgid "Error reading new SMART data for sensor %s" msgstr "" #: ../plugins/udisks/is-udisks-plugin.c:165 #, c-format msgid "Error refreshing SMART data for sensor %s" msgstr "" indicator-sensors-1.1/screenshot.png000066400000000000000000001051731356741033200177170ustar00rootroot00000000000000PNG  IHDR2Y4+bKGD pHYs  tIME 6& IDATxwц˧ H` & &G# & 0&l06d&Y` BdQ@,PNvclS86ELOwUoUW״?0TW&AH:BnBkӂtK BJК4-Fg}wwF~~&@REuI2a`!:}wZh0[Ղ42({t?NZSfHi&P9gA -T{t폿NBJYlP!gCGg#!$6!r]k[o!2*lkLIj=#1 0fNܱ5]$2D9wԷ)mm-Y }1$h΅ XkM, Q@ڽFXrD/j…5:_g6%W;\ϻ(t*ņ}{-ah @b#qꂺj$ײBIke>>2Ŵc $p"s?1),wûQM%4H& \@wA*_Y(Ak;{L$V M+ 莭;՘&zH)I;@۱ E pUݘE(GÈ2#λTc@+*@Pe38BkzـD_lu2k]D{J MmiXgUPQ-M F@# "k$ؠRЭ6^8R8%5xc\p󾪧hX3Z;3Js ʤK\p 0,Mh<`Nr Eu&PVVg^x%vPϨh8AAp{WaDN'W9wm|74kx, LSd{6 P ! Z3~ eyCR(ذ9ǗOA^1ќk61 gft&)Df43grh"LRk( >Oձ}g{c?D)+ew\J.ȩ¤ISx| zi As‰gEHr^GXB F`]>oK[iNe4DٮHl`?Z>y.k{k"eww^h )0L M;_WZw~#@.03rDΝF]D ,2C!Dc9sTuЬQ%l7m-W\y9oQQU=Uo/Eo}a0`]jXjg}&{cYh0q܅o71oQNfMF2b5J+=hR-h z1tY.}o,2Sb uVd]w=K.͎͉"=`~Ҋne,tL0lRYFg,YF+MUU ,fi}~AuuG׸_~>rL"ӀaɄ־?N#Q2{tTDH12-DFwX4YSKo[B8y)m󷠛`) @UUQ+!FN &48 ^x)K_xoݚ+Vy75Ƶtyr~KD.HS<N{fdQ䣔h/.GL475cSN >x?n?(ˌR 4zdذ޽gI!=x'#imiu̅Yj+/^B~3suSEkU=zF698C67iv$/^_ͦG+~ś MO&.+WsʿBb-@Oϟ<:Dqَ.)K&8d%464ͶoDZ1~tэr;fNpc̝+2jrheYXB`UVE4sw!B:bI[ccT޸>‹0zIȃu6ʢ-S9,*i8iI[i>Ow`~BϞ=Xd '~[og}r衇0sLG Dk>H.h2۲(,{n`̚51a—<|?0M7݄Ǝ!w#2BhFi>qwr}O:=C=cQ3i.ݿ^xf;xvz;gPNF٨:EۚMP8FƳ۵lB=P@i ڒg;a&c|@Cc#l= i z}KEE9-t\uꋫ8.\üEgw*hFؚ7 H]\"?C9w;ukO \^dT)&\84HoǮWWp&KGUGrf/3uZ57ǜgy7&,M7D܃.fVZ%Z 'Сg圇}'2+f/99йcVUVd2zlmS^^'|ƶcnv0wgK)Η^)UsU3 J)4ޣ;Rn7dm4{4gQ#J2?scwvhaڲff:ggk+9SV~RZayN>s~0|v~\J̉?f{q7ߌWGᅬtɀ\&Abw}w+;ÈgB X|Ձ3C@O2CD!7[Nⷖd\ĩ5%ߟ Λ3 h6Mؐ1-h>90),6.^L]٬Š&{q[:dm#JqιC#_cceCk22֤&??#1;yQηp >>3gi T*a޽pXi v?Y/>lҷ߻X#e=S8W θfNib!l^LJ#OL ٓOGÝD8f!&3pD?NfΜK}7a#@fŵFX\F"&z;hGO>TWW֜~ǀZ~ RHLSzU$)(Cf llIyeғs֡\;n]7gl/Wqm#xs9 u'ޟG#` eE>Z]mΜs G?w܊uRQQ_ˁ;nϴrZkIo6c^{%}ƨnҰ>均gڝ}j:p4 ƜLi-gb*Q"ir!]a) BBz{}SS^p }>ϛ7/>{3e,%p*́3sG9d [ss JTP^*-M-46DۼԷvr1'h:zz5'Ʋ9'm||{zGnqGMͨ8OL&=;.Wikk4L Dv`ЬsZS[So;e٫q$(qDz;x}QNmm94mHѼ< tviG+?<L`HmD'1 5-]\GmYJB~2i7444Hqs>fٳ-jM"D"akw`}3M+OL'?-74-sM'֛_f6M줠s9m<~4Z`3 k'&r~I!BgE,1.oO-[AV|~ć.]q8|sǝ?gb |z Sho܍Y6!RۭX% rEZcYi3: &wu;],qO@,eNI"N6[8K3r{sJ+Ph=uލU+W٫'-rLG+^b0s,G˳708p?pGy RXOi6g*ߑ*ʘ"QF쏲,D$C"{|KZy5?E90MRmm\tŠmUL@@()95 (PJ39\yKXdkTxN͉$ɢ:isi Ӵc3/GeḶьB@>H̗C<$&"%&%B\\'iLJ9D_dTjSgr]D\Cxh܃osb#Ysx&]D p?\ %",hRE`/:'Prq})N#r͂go(#iKRMؙ< xJ)L $Lʵh w $ ` )п#iłIB.B{;+ŷD$Y MxP̑JԅVyzKPC`zux*L$I&w],"4|n@ q@(eCwrqiQ25>jޜK3n?CLڑRLD_9(beHxH0҅g YglB> ,27.*NNL{gBS1[)l\5a4R]٥R|q&Y T}6Gz+r*YK ;&.L _r\}:hxnBNI _jԬ<`x)tDٞ!t`rEh|":D% #IE<[kV{9ތ|稔ym? pat3||)AS.; lηWիɮţڳu:-mB݅R^^gNcPQQNSSs]Wo$;+H hih%EXN!klǻ|DќO!Bf׃ IDAT9iDq@B[1~9M9AOTr$ߠ(ب@U"Lm" ɢHN6ӻLJ C*yX\RT_{92`=|\;{f/ ,Tsi$S'YhLf=QVԤIa` ;߈ k-G HLEh AX^#7@RՂҤҭYB5aP]Sżxťee'K.aITZbN[ٚD&ٞ[s1/fR ƗdI5U'/) LK1pP/TY/V42+t$QfpT]ɝ Meʪz!t! ;LbP+煛J 0HFJˡZj, 477pD@a$IeU͝I]]}L@6o]*M[ln3H+k(4'FEx~Ap]n|L+)9IQqy?A wZ|7y4V4S5͋f"tXg-|OS ZD6,uH)&B([uptF`p!@h `JB(,!mn"g62c>ia(L21uD â,Etv`H~%Xڶ|fAr>9RKtl/ ұG!B빆О2w\~DڥE9xįd/r%'aɔІT`ow@(d/:~~שwZzk #fAݐ=ڭ#J 6O0~\nS[$22`$+p˶/d;d2'(:N3ctZZZڱiSf̶#C79;6$JC0Q̈́T.=ʐn]b\ ʆ!j;}$dsAyk,3A!%s+KYt'#5TUqDiA6 ҭ-,AkI5˗JPM L,$ ͭEjQs e2A'›6ݑo{fN/մJZZ=w-^YǛ&@0/S?ñ%v|3oqgrc4(g zSUSESCSN4M#[}q$QiuJ4lŊûwf@JV\E =U~I~RkxwֿEp L78޽{ӭKc*aM')%fM$vԳ8W&#$LzOmױue-EtKdioL&iim^C@ބ麄 WѩanQ.\Hk[sd`[PSh5ݜ9U`}tϩ3ŮD<ėoFƹ2O0sv2t>³ߤH#e,^43 . (/<a>MʄIYuw _pL#]^tX(JۑpQ*3-LV$HN{U([Vv^ h]hnnXXcxuZ)v>S40y'3*3G RXͫśU pBI;(G HƽX{&z D x֗ÌyEt3I-4iKP T?.N`9r$z*An1eyIysF /N.J]h8pҺkrzZ+@̞"|>,(!py{ R+R[CfvU%Gq:#u/wlDhVj9).\pZ`|H2@^hnԸm]jVjW}""y⺚f(>ÙI{'9J4mL;#&Bi"Bڴmti $b5>Jh0 o ò)R[:a$k)g '  a$VjI onHY $JXl?jmZ^q"ZͨVz W 'NbDx*wPjhYS*;,&pKJm]mRnM\1#zjłF~ZIh]Oye~VyF5N7tO&M%ߕ¨q)՟S;[q}Y^~mF"#;QɮYf%1u6-&q GWOI(~'=-cXuywqsySroXM n,YYwTN灯2u3s^W6tW<{bU}OxO;[f-WN@ ⨻Fg7qm#xk~y yxbZ:9Sƭ{vv{\O>UĹ؁8QD;6F-.[olk$G9?ssI`[Pu&.`M ^!߸ޞ|';zɡE(.a;6p\| H11wc1ez ߷ 1.ng/ ) ^yGڇzPP9",%g9b5r&Us묩)ޔK >ؚsۻZa˭`|;om8Ɍls^^g̤S:k^\}n#[35]<|>ɓ?3q罖2B]LMN9ٞ9_}ޜ8d7ngHw[JD p(Am$_2n0) utd&bWLX\V?يlv2ou?Cwqmlv-~5+bQ89sKɩtNEWoezCkE|}ѓpfrx]/dGvƤ?ąZU8x(Jh>]pʅem;)l۬"=5]݆`l!?q[۱]Lb6ʅY+ciL:VsLYݸ𥱌c^wT 9w2k8sÝ,K7fV,oZs|:tcWCe~ecɵs. Ү7N(A {}'B>vF;d~'Q-tSHm ;WkGqt7b>|3>A';5&'޺Cۓ+q?=wߩlc䷕cG(0֢hg/ GJ̩'K51tQZZ\ ^LԻlB ,K҂6))I)M{¾F `l ƪDk5a鸏jO`Wx#9n i;&G+Zc\{ >6rJ \ͧ~7IfskEr;$:Cw̄ltm7{!$c9XZ934RGi|J+\fVNGB[t*#492"T -)[ǝ%d|t841q4b[5Pw1g :B, WL m^sy:LH S`&$fY"!kʥ2&yLc}Y"/|r=wgʫŹCroȕsLzgr옹e[GѽL ]Q{ ;pukԫcKMnkVp堥D2ËJ@!1@ ;+9{/񈗥8Oqj-|{,rQ/3>8xq1\hV߄jQEiǦLږb{73'lwBȷ+NZʔ+.O⚄#(+KCqEZ^Sf{(%[|/t`fa0E "P,W.wR[,i5ho3:9VT0i*+Ҵ)EE/N5u,kfy~|I66M"B6[oKc}stre YV吩@KZc6f2:-|uĹ6 )TK7}Ii %3A e5pDYTp׸{~+ю@9̥ݾ6(xLNZz:ǫ;+Yn Y[bbHbfxfcGߥ1mQisDЈ(RN u F: \"0QYj'`-f:}JƑ3ao/:egM L yKkJm 7.U|Ait2NJJ-(@j|`=*!aI*R+5}`DKa8 Q% )R[HR4ҁᒴf!Y$wP묎GKޝR+'"Zf/ 0epd(eM:bU\HV2oJ:A/ Y5;oQP[>,N߹c+<;->NlǑ6 ި*QǪ2Ŭ%mG8@畜mq^ݟ:3_()\z)w-_Unt_\pV$d?\wXw_gY}=wwy$*I׏M1œSv |Y*~tq]o8/WpFSyt*꒽pآT֖m?sh0hG~~\cY4bvIE[|F}7V$ۖ) f+ki=IWmF?cc媝fM։x^g{WdI~ ֙.8 j4"$px3'KeK*u __#pxn6SFyh1|\nt"++}N '~gUVEgڷ1){JN]&OҰl3Z6j!}TX!-KG)%8ܓqhD%"R`rA>plGP5}|R;Xe{qIEnm]Cen~vy_na =n=ZTYud~${,hui⻉$91?X`}0fmA;eu_ssBW'rޛŁI je4SbiH$H$j?iLn.K:0$R5Sإks^_ZL]]&V%VIVmIV-Fcx#o^v<^%+!*+oi. KOogܗim^ #HDk~4O62P*%@t|Gu]W7V}E[+$)++ykJ-3ɒU9#"vLs|( $W)мV|s< < ӟ1)\ cNKmڏ2Вy'Ҕji"J;E-'0APVQH`ا'/s4-oF0r+89Xuy}jgl?mu/9p@֓*PEydHZd<-!*5;$9oN _ta~ye\hK+l|w>?#9G? IDAT>«B"*h8P) cB3*yh e`c戇xq{Cz.ͬJMeEqRJ~U>d~wMoLc};LGXѴ|]16`eZ@|.h9ّ>1g{`6y+cxe|pFp*g^xUޙmnvqSrLeIJRE޵ *:9R3 N~;v&:"}ŌuݒG1q>8zV˛<_#CTQw8ր˜⦧g[qL.~>L;H-`֘y櫒kr[yeTmalZ#}߼ U h5Hr:V.\ʊTiM5 kdJm<-X2wK\ݴ~jH&RP!Ag 7*%?*R[/Xn\BiABJ@+vnę[7A"/[5:룥ahQR+u+(tHBd3|Usڸ٨ ?Y@k ,)BaWh 4ClZu*%>֤rZgj愯gb)EZ)l el40IvvuLbRjоmJgxHxn`m-wM"˒^FSi V5R-,Xʎ%R,k֦&a Q`Rkز O]*aZ8C&ʒZSO߅ RdZ+Hchjce]+ WҊe@hҘZb])w@bw=s"Lsq&qRTVWj,oڵw]ΝZj'#E͂L2KWІ})%JLv@H )Q#)ʦ`)jQdM6"%˛,VQnZ`j6Ctk)J˂v$4k H~H!$*x{3߃5 C˛Zol%)iL FIA2IKW6ӳkrٞ&Nz2q&Z8NGȔt.3鼀kIfޡ}f6_C3w*+F9J BEt6 ,rJ&@ fE}}SMXh^Z,Z 孤Z0J)œ.֮` \/~!pPY^km˽h\PWUQ휠h-:PvtV%2.mwC,kMDa#`ɲVR)kS":ߺ`u-2Ikk=v63(ֶF**1̪<dzƝEaVaaVM4IKsOZtRdy3"QmֱI4fUgbd] tf <>Zi6SҥJ}EeU ( Pt^8 kiI) L!UdBXh +4U`55/:)5> ѹ#ZJX ʷ+ aT8,dlKӤ0>_XfҞ}PmW g-Rҥbh1s]įE^ ļ6W kv-ƹ3:޿S5_c"$eX \OęBR?ٝie)C.XS ~ k#YGfX:T KYTTV!͊,IӴ4x#˟>wG5&ˀJ3KmieZGev HZѩ|}/fFSYYH$Q*x8BJhiC::H4_xsUxpi ڲ,k9ZDVkiz8*aTTU2@XtUh,g XQ2̏:S)MI2HZFMm":A :8"Ȏq~Bk4HIz-Z! JTeVI€.~pWJjk+QڎҰ^)ҭ9]#hMA_-J.-. xe @:I!̂c:Ll45Q @ I,`AGkG<2 ­|v8鹖55ccv;zxجj-7 ~B]R.AX4zyu|̾nara55Z0G;;~5gySX*˅E'34:LS XkrGc 9 VaZZQFKRS 6? &qeB[-[AјBZ)ZZ@y:0~{x_E?E5$a[qWr߰uVtF8c85tǟs#r/5ݻtW-A޳9emt?߸yw~F?x"}}Sxu VF.AO=,.<}cN?f0=EXsޓ@Cu{ۆSL Vp(ȟc"PD(~\~۱@H }$Xœyo pѣK֝LLߩs~H`.R~QںNs%?+G|ޔ^PwSVH%רFu2tcʿ9^C0p |x=YQC%N亀4BqׇprihO{t7Lv>߾2 MӔx L81 )m c?ǣ֛^`Jf\b)̬,ZiУW;,†?i eesCض#|ӭk%U Go9kO00 ^>uݻdӷvnt :߇?4}}͝!tD'i3iY \g{Rٶ*HN(ϼ9|ӽk>˵SYS\7O&h~<>م.],5<=_pڐ)l݀ n<𣇣zþ1lM|qkΛsY_8 *oz ۝*X)Hsɲ%,z.*ې Z,[,;̯oʝ9k9Mm @mH[֊,j466idc#ų&OFաt% M𣴎t0WIX :KY"^oĕ,$vb}nl[ˏ#pt}53W1;Knpu.Ss6\yL ai4ctm@F9eViFY(P5 mƼi%+7 ">|nB[#xH&ע{y )UTaFib$es#LYFYo a1U2.+zsWX |oT 6."._'Dӽ_]7΢ibZ  Fݏbf1YҍNd E_DtJDarXj@v][.(l{B $ױiQza1*ff Z1eޖPjqJ'20> $K?ߙPk}cA뾼>(I#Ӗ!bD{;qOjj8Q| AͲHbCPrcUB,…W%Xb+Beۗ0]}O*5ud d+ "5_0GIڳ,Qx-7b߉[@RR}Y7FKA>8:}srh )9Vae?&BŒ바pYY! Hf>56yõ 7MKUI>iGv8z&8c@F1T3vi->HVZ&íNJYе dm0,lxl\|3hZtw4Ja׾$h?#KTٟ K6~ByM:˲ c"c`dt_Y* EXAuN-eݺ βsPc]}5A+)^X@I¯GP1Z8iׄI+$P@lH߭$کb[Ao:\/-З,B͆r%>2EoXc\Jj3MKP\؊ b#!rSaX8WVKK<FFDZU;Vui9"ғ,}GVk/FTX[- 5蛓gž^BVm #xwu hãXDl=َ,[}ĺK<"+TIp_|$ ^=yo)Y""VX#i LM }6EVB.jl`۔(Y|D"`₴iʗ0]dY1طgOXF â JP"i ZdsRVQ?͡&[:K_Nh9?.Mh((W|q$2͸'[,D捬ާ,+TDqupSX8X0b(DD$J꫺eT*mi?MUp_QU? -Y~D9頗3b`CjcZ ̡\ Hxz~}ҥuۄY HKCe] EPR9&YiL4|$R~5Qi``'ch$+ D39()*Z?Q,q:BXdkjAV[>DiIKyB]FidD@)rγgc4 3X{mYI9nJO7H#+]n<*Ӎ I#}n` ԰\mFOBṅ4H# (%KɞKFnBg[KiFI&t3j*F/1EYpuѭ4kFR/#1Ua p4 bt^TpiA)FiOLגaCU_O e;Eo.t#+u9GouH; ˖ՌCxP;>鴩BRe~3.ko۾w?f5Vb#K$uW 46}9#7sѩ s<=lO#7Xص}Eɉ?ws,Fw+e(X;}N{pHL)fG2v5#~7~F&[=D^q=oJ}¯pwo};|6n|U ~57#^ %m۷o\}S p ܲvrrϴijνٲVngikGg\q-lc+?Η\x"ȌJ[_M]4޸QFpukISLiAyO0ܷw\'O>&/1L|ι|GF;o<'lS~}w35|/<\p$Oǜ\iyɻd5LcWf>'1y8[Gf/d:DlKW݅^ LWb`pUlx7p-(Swo~ !3WqG6[?p'_N{suۣrzߺε^z͖ǭ퍾i3pee[(CJ- >w:o:i<}x#?x3[N #O~eײv5ȓ3Goz/pm|˾ʱ_Gs竷Mﰍb!;%<rZ<戨EE"ذNGD֊gڟ${w_yug'?GAjRNo\t.._.,Gw@2ۯ HZv CN: 8 :LA7b_PYA]н_г?o9t{+yg\}`H,g|'N98&}W>ixc=W~ovy>͹GE*Nx|rŹDO$}s"HDc`Vk1<4p384%M~U34.צ5c)Qq%( پJN_Π ]x?u՟0 IDAT ?ڇ拰O{>߽Wo|)Gvgyo͟u7]\}1M:/>I085.1N$pJw, `t}h?Ag8?`+A=S]h阵VQ|c2ÎG&`U"^{c~>C^XLE2 Pi˷3Hs^+hf=.sӎcbT=Bdڿ@/آn8t40EG*ݜL|L;HU5v5Y6I$ʶQ3SIKeZ9SDsILo>ܧl8j'kb`ׄT$ 32X.H"PM%Ho.+A̜~U0VàvYr iҏ@3T)wLgr_JNT% ڶF,bMvIp˅^@@?@HLs"ؖwA- d`V 3I 2&]&Q>m 8`=.װpq"|^s]J żQ۪MYł C VXဵXɚA:4;kS56\M%\SV|7|:VƠꃆgxR/Yb>n65DiXI/2N/< |equ6.eP$&[x. }@&>.ճ9㙫cJ#Kkt|r"/bpVӕ,71\W}%O47.=y&v9AhQhSñZMDUDw$ [>͢[%L IG]Ől;b:1wK`4~_u&n|xY'F 0poa˶[޿]l3)L:1[ٺfNYcOx3onq컾Ýb۸fok4BGJ?5ݡ5Q)y¸}$_N\m|`K^vr_q֣9 s.7_ۜs{= 4< Ki{o!I >( [7_piz"!f9>3#m4-;4)_ݯ}!pu!/߻' \`{پ1lc4k<4`UE[W ML&Y4_Tx' Tۿ[oۍ{̱G=g 77`cnNZO;4ϤL_{7]"& ǟJ6v7|ʞΙ߽V|Gf`5>อ6.Fz`/KD;orAEϻ݂FkV2|2Ulį' d\3x 0se՜p~pNyγn.Cz"C_vC*7_…;O9l|;뮽Ç^R^t҉ध.1[9xKI/=#y姹gsi=*U5z@,Fz3( h]$3bbKA4'ׇy99#,r9'𵇲iq׸wUb|[KW1ۮo\yys/u>9}}>}Um7`NsŅo㼏Ľtэ|RPJ3O cLkD).&]93b8睲-{q M "sۚH#,=x&MUN߃r&h}3/R!%^"k6уtgmdY ȂNEo YJQg$6YT9bqr)q,x)7S>fkenQTw( 'nj,$%W iec$9+"ۉ`Py^خBLZkFzINzpak LU7lFV.t{/2Nu&"I\ID/bQ<3F' ,YGH$H؅":&ѫ*fKTtZ.I#CIxj`&*{@ Jp<idiHɶFCM"c6"%(nhGy^qc6iTp`eߍ{F).F95-ݭ b HX5-F7j@l*aώ6f/}2$7IP#K6җwJ$ 6U5sF`v?xզSlKpφA:gxXݓF022VQoNk]s@B_64puWP8NF3'vX8أ0X .qxlbvcIW]i iOL'bPpuA-cgӆ8hۓp,>3#!/䭗}󏸛_q3k~s/ww|=l;grL, &4=vz$cE!JTBsXˡA`B#y'LZXZܵ`zc5œs'0;b$!iSwQ~.#%go]|ׯ;WywNN] ]/>a7sIx[<%qǾ;ܹ.oKOEKG"K<HgQu7.,mۇ}]Z`-5$jj M)hg:EOƷsl,/~9uq1ܽ|מʯdx#Ki{_qU=Ad7%RT }`AFF1m3 0 CWVAa8.88㸨̱#{2s7 h2qm3]]q O:yd{پno1N<%j¿KK%ѱMMh1'HHA [5 0 ܠÝw`d4ݍ0axlof*5p]44Vj''m!s;xe39f9Ū{'_Ibz̪ $N-4 *!err2de%{kips,_ؒc'z9~p0อ{yBwu7:D _!^wTfoS'K@.Cz"C5G0=-LD~N{`YfS7)$8I}sw}rs /Gm'sk_}6vυ\u羇1s OaK.vl#ش뫉&+~7˜рeuV/&bw~?}s>+ њ{{>೷<*}}>}Um7͏+.|}4&妋n!,2/g̀%U\;eޚMV42s<端sں6r`qO;}Sŭ*$ϪSξE ${o1*t{w=sOS\eu;ֲ0̿tV$FeŒ ;Yi-|/ꋞ Ni޵}M tefK3d0}L#_f6 z'2vZV^)5i2"?IutP8ϤoipFHGQ $&[mm4yeGQ&!:$){IH۪4H#KkFw4]% 'Vl3 kDv;18W 0Fo**[)x-@4iHogi%t | fO4H#p COJq*n4y0f&oĦ Bg/d3EcW)F9Hp%"ᙖdl=nu6h̉N!BmFidIKs'M34BR䀭N_hK5M#(ζ_Yĥ1qi_C`B !EED;\ H#FR> 0n H#K e:< \6z FYD t~GnT3eI,eUmmO0<s~&UA7Y@gټz ;3ELT K$.k_D7)M싾JnԜm!X夆yw)QȮI;-;ǜXZ8̪خI֯1ẍ %fYW@VT &aFlZ; Ye$tg⒩mdPRU7c0"6[( E`ήQ'<_p1*ujHb.;M=&ݩG^Fw0 !<$xj3sXe&?2BԆ}^E6Rqv;ׅUe!Lk7ǺkGaH CB FȏbCl*iŞlO|@Ăx>=q8QWhJ #1|OK= ]T|Ѐƌ,.؈YEm _Hps4R4ˎH `U~Rl,l䙐YP |%gĈ#fbva0Vڮм4ӦΝٰa4|JFj}TfK BqB3l4FHxaXQ7!u$>fBeǣ/{23l\=qm 8*A-haBT)@`ꟌIRIMw0kiCWጬu v_Q嶰VwԲ[.8gbbm3!eV{c<#xSmC~?g`sC=919{pM\(z7c36 ڨ\L]`"'bqOnSq1Fp֬a^/h@,wMx|~Ja&\ٵovwN(H4 ︒$ǹFO qشz U<Zi)IT545LCR'P"vY_2xy(D==qLAAUql0[OvD0UԤ$-1xFA`JyT/ .n-:,z%J0_D  ST ׍P *6P)F䭄@TvSRQ%jE9#?1y0Ƥ7[-2‚߅>DO| ɂ& `bOZGT-$3!xQ賓"5Hm"ḧl:E\5T~%sf"suĂG N8~kfV\ZĖp4"?VQ|il^3-4@ Vv]Yc h SlԤ󎐲sfό15㴆Fbv hB0cދ$=ô'Gc,7_Xzgi SI8U|-H 1ArAgݙDlZ 4 ў4sjMr#et;T9@yjBg A4MI6N;me4r R-ɈL{G=Z.z*6c[?dž \1j >5 XKh Pi!ưs ~aJ'u˦fu(Ll8U972[9 ;9> I';yϱaZ7j]TQ𸵑'oX1׎Zӣf]Q~BG\huY9uր_[8v kFi\Bs40z9-[q -FZgUP'`G"Au3D-Va\x"89|yUdhv֨ON;_ABK:<`a DoInIE-GHNׯóq@|i cAdT&Q@;ͭd.aD S;kC1A>V'΁0ӷᆖ aHDL~,J?~$f%֭biа #%2xX Mg[/Lq -u-H|56Q] ٷb q'88GQ]O0a+X;1Uy&q9W"v͋(M,*۵Fχ]M`wph t^UvzdOiGG$28MO` "6  Ή;Kj1᡾p IP>iQj=sg} ssL=-.'.NMTI'#'𓢁xR *cLe;q19dp$0ZTB}y #J~p`. ywp@L-\vdngLaFWlˎ7&x<%J E)pty'1|iKAa"Ak6Rv3ơXHn\iт蠛%cnL'q%J,o':}9HI&7.T8bm` `&Y2t'-&Z7&ry;<&uJE18a6"( ڻE&='`9o vP&7Ig rg͝ZN\>O2GApU[pU**Я/#68&N.@9:) $]I@B@؊[k'byܒL$p7=m*@9lFzyZ6]Fv;?Te*|IS!eCiaUqR[0'.} a(u+3Dó [`EŎ31NVJͼS 0]r1E%]n ʢIE 蔇?; \1KW>zX/xp])H-SXE[ g%ziR9hE KӅ}kvXlPZT2;8-i q;/*nrڛiWu}~m2`Ʋ+C2-rhZSV_{>RfJGPN.J(6}!霌7Y'ZHV-0Hl̮_>HkݿplQdoH2S ȉXv 4sXM2 /YMcWXJ{Չu˞J޳"]P5CݦwK q.ՙ3ML{iṶWhw^*2C:9tTԘM-PGZuvǮQIIENDB`indicator-sensors-1.1/snap/000077500000000000000000000000001356741033200157665ustar00rootroot00000000000000indicator-sensors-1.1/snap/snapcraft.yaml000066400000000000000000000063011356741033200206330ustar00rootroot00000000000000name: indicator-sensors version: git summary: Provide hardware sensors readings in your desktop panel description: | Application indicator to display and monitor the readings from various hardware sensors (temperature, fan speeds, voltages etc) in the desktop panel base: core18 grade: stable confinement: strict icon: icons/hicolor/256x256/apps/indicator-sensors.png license: GPL-3.0+ slots: # for GtkApplication registration indicator-sensors: interface: dbus bus: session name: com.github.alexmurray.IndicatorSensors plugs: gnome-3-28-1804: interface: content target: $SNAP/gnome-platform default-provider: gnome-3-28-1804:gnome-3-28-1804 gtk-3-themes: interface: content target: $SNAP/share/themes default-provider: gtk-common-themes:gtk-3-themes icon-themes: interface: content target: $SNAP/share/icons default-provider: gtk-common-themes:icon-themes sound-themes: interface: content target: $SNAP/share/sounds default-provider: gtk-common-themes:sounds-themes environment: XDG_DATA_DIRS: $SNAP/share:$XDG_DATA_DIRS apps: indicator-sensors: command: desktop-launch indicator-sensors plugs: - x11 - unity7 - desktop - wayland - gsettings - udisks2 - hardware-observe desktop: usr/share/applications/indicator-sensors.desktop # snapcraft doesn't know about the autostart field passthrough: autostart: indicator-sensors.desktop parts: indicator-sensors: after: [desktop-gnome-platform] source: . source-type: git plugin: autotools configflags: [--prefix=/snap/indicator-sensors/current/usr] organize: snap/indicator-sensors/current/usr: usr build-packages: - intltool - gnome-common - libglib2.0-dev - libgdk-pixbuf2.0-0 - libgtk-3-dev - libpeas-dev - libnotify-dev - libappindicator3-dev - libsensors4-dev - gobject-introspection - libgirepository1.0-dev - libudisks2-dev - try: [ libxnvctrl-dev ] override-prime: | set -eu snapcraftctl prime # Fix-up application icon lookup sed -i.bak -e 's|^Icon=.*|Icon=${SNAP}/meta/gui/icon.png|g' usr/share/applications/indicator-sensors.desktop desktop-gnome-platform: source: https://github.com/ubuntu/snapcraft-desktop-helpers.git source-subdir: gtk plugin: make make-parameters: ["FLAVOR=gtk3"] build-packages: - build-essential - libgtk-3-dev override-build: | snapcraftctl build mkdir -pv $SNAPCRAFT_PART_INSTALL/gnome-platform libraries: plugin: nil stage-packages: - libsensors4 - libappindicator3-1 - libudisks2-0 - libnotify4 - libpeas-1.0-0 - try: [ libxnvctrl0 ] prime: # include only what we need which is not in the desktop-gnome-platform to # keep the snap size as small as possible - etc/sensors3.conf - etc/sensors.d/* - usr/lib/*/libappindicator3.so.* - usr/lib/*/libdbusmenu-glib.so.* - usr/lib/*/libdbusmenu-gtk3.so.* - usr/lib/*/libindicator3.so.* - usr/lib/*/libsensors.so.* - usr/lib/*/libudisks2.so.* - usr/lib/*/libXNVCtrl.so.*