2009-09-19 Sancho Lerena
* pandora_applet: Delete old GTK/Applet, not used anymore and incompatible with 3.x branch. Old code remains in 2.x branch. git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1957 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
|
@ -1 +0,0 @@
|
|||
Esteban Sanchez <estebans@artica.es>
|
|
@ -1,92 +0,0 @@
|
|||
GNU GENERAL PUBLIC LICENSE
|
||||
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and modification follow.
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
|
@ -1,49 +0,0 @@
|
|||
2006-12-12 Esteban Sanchez <estebans@artica.es>
|
||||
|
||||
* configure.in: Version 1.2.0.
|
||||
|
||||
2006-12-12 Esteban Sanchez <estebans@artica.es>
|
||||
|
||||
* src/pandora_status.[ch]: pandora_status_set_* removed and replaced
|
||||
by an unique pandora_status_set_all function. Added a new signal
|
||||
throwed for each status property when it changes. Added a new signal
|
||||
throwed when there is an incidence (any of the values changed to bad
|
||||
or good.
|
||||
|
||||
* src/pandora-status-checker.c: Error message when SQL connects failed
|
||||
rewritten. Fixed the return of a gboolean value on functions that
|
||||
returns PandoraState. Check code replaced with the new functions.
|
||||
|
||||
* src/pandora-info-window.c: Listen to new signals of PandoraStatus
|
||||
object. Style correction.
|
||||
|
||||
* src/pandora-applet.c: Listen to new "incidence" signal of
|
||||
PandoraStatus object. Callback rewritten. Removed unused function.
|
||||
|
||||
2006-12-12 Esteban Sanchez <estebans@artica.es>
|
||||
|
||||
* src/pandora-status-checker.c: Wait one second before starting to
|
||||
check the status.
|
||||
|
||||
* src/pandora-applet.c: Updated credits. Hide the applet before
|
||||
destroying it.
|
||||
|
||||
* COPYING, INSTALL: Updated to correct files.
|
||||
|
||||
2006-08-31 Esteban Sanchez <estebans@artica.es>
|
||||
|
||||
* data/pandora-applet-*.png: Updated and changed its colors.
|
||||
|
||||
* src/pandora-applet.c: Restart the status checker when the settings
|
||||
are updated.
|
||||
|
||||
* src/pandora-setup-dialog.c, src/pandora-setup.c: Memory leaks fixed.
|
||||
|
||||
* src/pandora-status-checker.h: Enumerator moved to source file.
|
||||
|
||||
* src/pandora-status-checker.c: The stop function now works. Memory
|
||||
leaks fixed. Code cleanup.
|
||||
|
||||
2006-08-31 Esteban Sanchez <estebans@artica.es>
|
||||
|
||||
* Initial import.
|
|
@ -1,23 +0,0 @@
|
|||
Simply run:
|
||||
|
||||
./configure
|
||||
make
|
||||
make install (as root)
|
||||
|
||||
Once installed, simply run it with and configure it to suit your system:
|
||||
|
||||
pandora-applet
|
||||
|
||||
If you want to run this applet every time you login, add it to your session
|
||||
manager (KDE, GNOME or whatever). Read your desktop manual if you don't know
|
||||
how to do it.
|
||||
|
||||
To compile the applet, you will need:
|
||||
|
||||
glib >= 2.6
|
||||
gtk2.0 >= 2.8
|
||||
gthread >= 2.6
|
||||
libxml2
|
||||
mysqlclient C library
|
||||
|
||||
If you have any problem, post it at http://openideas.info
|
|
@ -1,6 +0,0 @@
|
|||
SUBDIRS=src data
|
||||
|
||||
|
||||
EXTRA_DIST = \
|
||||
autogen.sh \
|
||||
acinclude.m4
|
|
@ -1,19 +0,0 @@
|
|||
============
|
||||
Version 1.2
|
||||
============
|
||||
|
||||
First public release.
|
||||
|
||||
Features
|
||||
* Check Pandora Free Monitoring System to allow the administrator a
|
||||
quick reaction to some incidence.
|
||||
* Alerts of alerts fired, servers down and agents down.
|
||||
* Easy configuration dialog.
|
||||
* It works under GNOME, KDE and any desktop that complies f.d.o.
|
||||
systray specifications.
|
||||
|
||||
Dependencies:
|
||||
|
||||
* GTK+ >= 2.8.0
|
||||
* Libxml2
|
||||
* Libmysqlclient
|
|
@ -1,94 +0,0 @@
|
|||
dnl @synopsis CHECK_MYSQL_DB
|
||||
dnl
|
||||
dnl This macro tries to find the headers and librariess for the
|
||||
dnl MySQL database to build client applications.
|
||||
dnl
|
||||
dnl If includes are found, the variable MYSQL_INC will be set. If
|
||||
dnl libraries are found, the variable MYSQL_LIB will be set. if no check
|
||||
dnl was successful, the script exits with a error message.
|
||||
dnl
|
||||
dnl @category InstalledPackages
|
||||
dnl @author Harald Welte <laforge@gnumonks.org>
|
||||
dnl @version 2006-01-07
|
||||
dnl @license AllPermissive
|
||||
|
||||
AC_DEFUN([CHECK_MYSQL_DB], [
|
||||
|
||||
AC_ARG_WITH(mysql,
|
||||
[ --with-mysql=PREFIX Prefix of your MySQL installation],
|
||||
[my_prefix=$withval], [my_prefix=])
|
||||
AC_ARG_WITH(mysql-inc,
|
||||
[ --with-mysql-inc=PATH Path to the include directory of MySQL],
|
||||
[my_inc=$withval], [my_inc=])
|
||||
AC_ARG_WITH(mysql-lib,
|
||||
[ --with-mysql-lib=PATH Path to the libraries of MySQL],
|
||||
[my_lib=$withval], [my_lib=])
|
||||
|
||||
|
||||
AC_SUBST(MYSQL_INC)
|
||||
AC_SUBST(MYSQL_LIB)
|
||||
|
||||
if test "$my_prefix" != "no"; then
|
||||
|
||||
AC_MSG_CHECKING([for MySQL mysql_config program])
|
||||
for d in $my_prefix/bin /usr/bin /usr/local/bin /usr/local/mysql/bin /opt/mysql/bin /opt/packages/mysql/bin
|
||||
do
|
||||
if test -x $d/mysql_config
|
||||
then
|
||||
AC_MSG_RESULT(found mysql_config in $d)
|
||||
MYSQL_INC=$($d/mysql_config --include)
|
||||
MYSQL_LIB=$($d/mysql_config --libs)
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if test "$MYSQL_INC" = ""; then
|
||||
AC_MSG_RESULT(mysql_config not found)
|
||||
if test "$my_prefix" != ""; then
|
||||
AC_MSG_CHECKING([for MySQL includes in $my_prefix/include])
|
||||
if test -f "$my_prefix/include/mysql.h" ; then
|
||||
MYSQL_INC="-I$my_prefix/include"
|
||||
AC_MSG_RESULT([yes])
|
||||
else
|
||||
AC_MSG_ERROR(mysql.h not found)
|
||||
fi
|
||||
AC_MSG_CHECKING([for MySQL libraries in $my_prefix/lib])
|
||||
if test -f "$my_prefix/lib/libmysql.so" ; then
|
||||
MYSQL_LIB="-L$my_prefix/lib -lmysqlclient"
|
||||
AC_MSG_RESULT([yes])
|
||||
else
|
||||
AC_MSG_ERROR(libmysqlclient.so not found)
|
||||
fi
|
||||
else
|
||||
if test "$my_inc" != ""; then
|
||||
AC_MSG_CHECKING([for MySQL includes in $my_inc])
|
||||
if test -f "$my_inc/mysql.h" ; then
|
||||
MYSQL_INC="-I$my_inc"
|
||||
AC_MSG_RESULT([yes])
|
||||
else
|
||||
AC_MSG_ERROR(mysql.h not found)
|
||||
fi
|
||||
fi
|
||||
if test "$my_lib" != ""; then
|
||||
AC_MSG_CHECKING([for MySQL libraries in $my_lib])
|
||||
if test -f "$my_lib/libmysqlclient.so" ; then
|
||||
MYSQL_LIB="-L$my_lib -lmysqlclient"
|
||||
AC_MSG_RESULT([yes])
|
||||
else
|
||||
AC_MSG_ERROR(libmysqlclient.so not found)
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
if test "$MYSQL_INC" = "" ; then
|
||||
AC_CHECK_HEADER([mysql.h], [], AC_MSG_ERROR(mysql.h not found))
|
||||
fi
|
||||
if test "$MYSQL_LIB" = "" ; then
|
||||
AC_CHECK_LIB(mysqlclient, mysql_close, [], AC_MSG_ERROR(libmysqlclient.so not found))
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
])
|
|
@ -1,45 +0,0 @@
|
|||
#! /bin/sh
|
||||
|
||||
# $Id: autogen.sh,v 1.4 2002/12/02 01:39:49 murrayc Exp $
|
||||
#
|
||||
# Copyright (c) 2002 Daniel Elstner <daniel.elstner@gmx.net>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License VERSION 2 as
|
||||
# published by the Free Software Foundation. You are not allowed to
|
||||
# use any other version of the license; unless you got the explicit
|
||||
# permission from the author to do so.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
dir=`echo "$0" | sed 's,[^/]*$,,'`
|
||||
test "x${dir}" = "x" && dir='.'
|
||||
|
||||
if test "x`cd "${dir}" 2>/dev/null && pwd`" != "x`pwd`"
|
||||
then
|
||||
echo "This script must be executed directly from the source directory."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
rm -f config.cache acconfig.h
|
||||
|
||||
echo "- Running aclocal." && \
|
||||
aclocal && \
|
||||
echo "- Running autoconf." && \
|
||||
autoconf && \
|
||||
echo "- Running autoheader." && \
|
||||
autoheader && \
|
||||
echo "- Running automake." && \
|
||||
automake --add-missing --gnu && \
|
||||
echo && \
|
||||
./configure "$@" && exit 0
|
||||
|
||||
exit 1
|
||||
|
|
@ -1,52 +0,0 @@
|
|||
AC_PREREQ(2.59)
|
||||
|
||||
AC_INIT([pandora-applet], [1.2.0], [http://sourceforge.net/tracker/?group_id=155200&atid=794852], [pandora_applet])
|
||||
AC_CONFIG_SRCDIR([src/main.c])
|
||||
AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
|
||||
|
||||
AC_SUBST(ACLOCAL_AMFLAGS, "$ACLOCAL_FLAGS")
|
||||
|
||||
AM_CONFIG_HEADER(config.h)
|
||||
AM_MAINTAINER_MODE
|
||||
|
||||
AC_ISC_POSIX
|
||||
AC_PROG_CC
|
||||
AM_PROG_CC_STDC
|
||||
AC_STDC_HEADERS
|
||||
|
||||
GLIB_REQUIRED=2.6.0
|
||||
GTK_REQUIRED=2.8.0
|
||||
|
||||
PKG_CHECK_MODULES(PANDORA,
|
||||
glib-2.0 >= $GLIB_REQUIRED
|
||||
gtk+-2.0 >= $GTK_REQUIRED
|
||||
gthread-2.0
|
||||
libxml-2.0)
|
||||
|
||||
CHECK_MYSQL_DB
|
||||
|
||||
GETTEXT_PACKAGE=pandora-applet
|
||||
AC_SUBST(GETTEXT_PACKAGE)
|
||||
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE",[The gettext package])
|
||||
ALL_LINGUAS=""
|
||||
AM_GLIB_GNU_GETTEXT
|
||||
|
||||
if test "x${prefix}" = "xNONE"; then
|
||||
AC_DEFINE_UNQUOTED(PIXMAPS_DIR, "${ac_default_prefix}/$DATADIRNAME/${PACKAGE}/pixmaps", [Pixmaps directory])
|
||||
pixmaps_dir="${ac_default_prefix}/$DATADIRNAME/${PACKAGE}/pixmaps"
|
||||
else
|
||||
AC_DEFINE_UNQUOTED(PIXMAPS_DIR, "${prefix}/$DATADIRNAME/${PACKAGE}/pixmaps", [Pixmaps directory])
|
||||
pixmaps_dir="${prefix}/$DATADIRNAME/${PACKAGE}/pixmaps"
|
||||
fi
|
||||
|
||||
AC_SUBST(pixmaps_dir)
|
||||
|
||||
AC_SUBST(PANDORA_CFLAGS)
|
||||
AC_SUBST(PANDORA_LIBS)
|
||||
|
||||
AC_CONFIG_FILES([
|
||||
Makefile
|
||||
src/Makefile
|
||||
data/Makefile])
|
||||
|
||||
AC_OUTPUT
|
|
@ -1,20 +0,0 @@
|
|||
pixmapsdir = $(pixmaps_dir)
|
||||
|
||||
pixmaps_DATA = \
|
||||
pandora-applet-bad.png \
|
||||
pandora-applet-good.png \
|
||||
pandora-applet-unknown.png \
|
||||
pandora-alerts-bad.png \
|
||||
pandora-alerts-ok.png \
|
||||
pandora-alerts-unknown.png \
|
||||
pandora-servers-bad.png \
|
||||
pandora-servers-ok.png \
|
||||
pandora-servers-unknown.png \
|
||||
pandora-agents-bad.png \
|
||||
pandora-agents-ok.png \
|
||||
pandora-agents-unknown.png \
|
||||
pandora.png
|
||||
|
||||
EXTRA_DIST = \
|
||||
$(pixmaps_DATA)
|
||||
|
|
@ -1,116 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="48px"
|
||||
height="48px"
|
||||
id="svg1800"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.43"
|
||||
sodipodi:docbase="/home/esteban/work/src/applet/data"
|
||||
sodipodi:docname="bubble.svg"
|
||||
inkscape:export-filename="/home/esteban/work/src/applet/data/bubble.png"
|
||||
inkscape:export-xdpi="392"
|
||||
inkscape:export-ydpi="392">
|
||||
<defs
|
||||
id="defs3" />
|
||||
<sodipodi:namedview
|
||||
fill="#edd400"
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="0.20392157"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="8"
|
||||
inkscape:cx="14.13602"
|
||||
inkscape:cy="30.31033"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:window-width="1014"
|
||||
inkscape:window-height="693"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="25" />
|
||||
<metadata
|
||||
id="metadata4">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
|
||||
<dc:title>Emblem Important</dc:title>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Jakub Steiner</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>emblem</rdf:li>
|
||||
<rdf:li>photos</rdf:li>
|
||||
<rdf:li>pictures</rdf:li>
|
||||
<rdf:li>raw</rdf:li>
|
||||
<rdf:li>jpeg</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="opacity:1.0000000;fill:#61f500;fill-opacity:1;fill-rule:nonzero;stroke:#22c900;stroke-width:1.55896229;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1"
|
||||
id="path1650"
|
||||
sodipodi:cx="24.130018"
|
||||
sodipodi:cy="23.428040"
|
||||
sodipodi:rx="22.008699"
|
||||
sodipodi:ry="21.213203"
|
||||
d="M 46.138718 23.428040 A 22.008699 21.213203 0 1 1 2.1213188,23.428040 A 22.008699 21.213203 0 1 1 46.138718 23.428040 z"
|
||||
transform="matrix(0.944630,0.000000,0.000000,0.980053,1.504174,-1.556912)" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="opacity:1.0000000;fill:none;fill-opacity:1.0000000;fill-rule:nonzero;stroke:#3efc61;stroke-width:0.98214942;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1"
|
||||
id="path3392"
|
||||
sodipodi:cx="24.130018"
|
||||
sodipodi:cy="23.428040"
|
||||
sodipodi:rx="22.008699"
|
||||
sodipodi:ry="21.213203"
|
||||
d="M 46.138718 23.428040 A 22.008699 21.213203 0 1 1 2.1213188,23.428040 A 22.008699 21.213203 0 1 1 46.138718 23.428040 z"
|
||||
transform="matrix(0.914086,0.000000,0.000000,0.948364,2.380576,-0.905815)" />
|
||||
<path
|
||||
style="fill:#fffeff;fill-opacity:0.21390374;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000"
|
||||
d="M 43.676426,20.476780 C 43.676426,31.307396 37.624257,16.170581 25.001688,20.863168 C 12.279172,25.592912 4.4350535,31.307396 4.4350535,20.476780 C 4.4350535,9.6461627 13.225120,0.85609769 24.055740,0.85609769 C 34.886359,0.85609769 43.676426,9.6461627 43.676426,20.476780 z "
|
||||
id="path3068"
|
||||
sodipodi:nodetypes="czssc" />
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 4.7 KiB |
|
@ -1,213 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="48.000000px"
|
||||
height="48.000000px"
|
||||
id="svg6361"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.43+devel"
|
||||
sodipodi:docbase="/home/tigert/cvs/freedesktop.org/tango-icon-theme/scalable/apps"
|
||||
sodipodi:docname="help-browser.svg"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape">
|
||||
<defs
|
||||
id="defs3">
|
||||
<linearGradient
|
||||
id="linearGradient2431">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2433" />
|
||||
<stop
|
||||
style="stop-color:#b8b8b8;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop2435" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient21644">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop21646" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop21648" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient21644"
|
||||
id="radialGradient21650"
|
||||
cx="25.125"
|
||||
cy="36.75"
|
||||
fx="25.125"
|
||||
fy="36.75"
|
||||
r="15.75"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.595238,3.369686e-16,14.87500)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient2933">
|
||||
<stop
|
||||
id="stop2935"
|
||||
offset="0"
|
||||
style="stop-color:#9cbcde;stop-opacity:1" />
|
||||
<stop
|
||||
id="stop2937"
|
||||
offset="1"
|
||||
style="stop-color:#204a87" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2933"
|
||||
id="radialGradient2207"
|
||||
cx="26.544321"
|
||||
cy="28.458725"
|
||||
fx="26.544321"
|
||||
fy="28.458725"
|
||||
r="22.376116"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.238342,5.954846e-3,-6.507762e-3,1.351272,-6.992513,-9.744842)" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2431"
|
||||
id="radialGradient2437"
|
||||
cx="-19.515638"
|
||||
cy="16.855663"
|
||||
fx="-19.515638"
|
||||
fy="16.855663"
|
||||
r="8.7536434"
|
||||
gradientTransform="matrix(4.445991,-8.852599e-16,1.367217e-15,6.8665,67.25071,-104.6679)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
inkscape:guide-bbox="true"
|
||||
showguides="true"
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="0.15294118"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1"
|
||||
inkscape:cx="25.160747"
|
||||
inkscape:cy="22.523569"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:window-width="1014"
|
||||
inkscape:window-height="1122"
|
||||
inkscape:window-x="178"
|
||||
inkscape:window-y="25"
|
||||
inkscape:showpageshadow="false"
|
||||
fill="#deb887"
|
||||
gridcolor="#7171cd"
|
||||
gridopacity="0.12156863"
|
||||
gridempcolor="#7b7bc3"
|
||||
gridempopacity="0.5372549"
|
||||
gridempspacing="10"
|
||||
stroke="#204a87" />
|
||||
<metadata
|
||||
id="metadata4">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>Help Browser</dc:title>
|
||||
<dc:date>2005-11-06</dc:date>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Tuomas Kuosmanen</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>help</rdf:li>
|
||||
<rdf:li>browser</rdf:li>
|
||||
<rdf:li>documentation</rdf:li>
|
||||
<rdf:li>docs</rdf:li>
|
||||
<rdf:li>man</rdf:li>
|
||||
<rdf:li>info</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
|
||||
<dc:contributor>
|
||||
<cc:Agent>
|
||||
<dc:title>Jakub Steiner, Andreas Nilsson</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:contributor>
|
||||
<dc:source>http://tigert.com</dc:source>
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="opacity:0.63068181;color:#000000;fill:url(#radialGradient21650);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
id="path21642"
|
||||
sodipodi:cx="25.125000"
|
||||
sodipodi:cy="36.750000"
|
||||
sodipodi:rx="15.750000"
|
||||
sodipodi:ry="9.3750000"
|
||||
d="M 40.875000 36.750000 A 15.750000 9.3750000 0 1 1 9.3750000,36.750000 A 15.750000 9.3750000 0 1 1 40.875000 36.750000 z"
|
||||
transform="matrix(1.173803,0.000000,0.000000,0.600000,-5.004403,20.32500)" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:url(#radialGradient2207);fill-opacity:1.0000000;stroke:#204a87"
|
||||
id="path2093"
|
||||
sodipodi:cx="23.909048"
|
||||
sodipodi:cy="23.825787"
|
||||
sodipodi:rx="21.876116"
|
||||
sodipodi:ry="21.876116"
|
||||
d="M 45.785164 23.825787 A 21.876116 21.876116 0 1 1 2.0329323,23.825787 A 21.876116 21.876116 0 1 1 45.785164 23.825787 z"
|
||||
transform="matrix(0.938442,0.000000,0.000000,0.938680,1.564075,1.633906)" />
|
||||
<path
|
||||
transform="matrix(0.855103,0.000000,0.000000,0.855213,3.555288,3.625019)"
|
||||
d="M 45.785164 23.825787 A 21.876116 21.876116 0 1 1 2.0329323,23.825787 A 21.876116 21.876116 0 1 1 45.785164 23.825787 z"
|
||||
sodipodi:ry="21.876116"
|
||||
sodipodi:rx="21.876116"
|
||||
sodipodi:cy="23.825787"
|
||||
sodipodi:cx="23.909048"
|
||||
id="path2209"
|
||||
style="fill:none;fill-opacity:1.0000000;stroke:#ffffff;stroke-width:3.0307744;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000;opacity:0.96022727"
|
||||
sodipodi:type="arc" />
|
||||
<path
|
||||
sodipodi:type="inkscape:offset"
|
||||
inkscape:radius="0.13495015"
|
||||
inkscape:original="M -20.25 6 C -21.298341 6.000026 -22.372769 6.1244771 -23.5 6.34375 C -24.627244 6.563073 -25.886043 6.8832479 -27.25 7.34375 L -27.25 12.5 C -26.100219 11.776335 -24.997109 11.236862 -23.9375 10.875 C -22.877902 10.502213 -21.881822 10.312521 -20.96875 10.3125 C -19.999334 10.312521 -19.259834 10.530174 -18.71875 10.96875 C -18.177686 11.396402 -17.906262 12.013726 -17.90625 12.78125 C -17.906261 13.285654 -18.039408 13.776881 -18.34375 14.28125 C -18.636843 14.785651 -19.107484 15.33609 -19.75 15.90625 L -20.84375 16.84375 C -22.038631 17.918325 -22.815518 18.829509 -23.1875 19.53125 C -23.559495 20.22205 -23.750005 21.007137 -23.75 21.90625 L -23.75 22.71875 L -17.65625 22.71875 L -17.65625 21.96875 C -17.656262 21.475338 -17.517981 21.030712 -17.28125 20.625 C -17.044542 20.208345 -16.547785 19.648586 -15.78125 18.96875 L -14.71875 18.03125 C -13.659161 17.055386 -12.908389 16.156813 -12.46875 15.3125 C -12.029144 14.457253 -11.781268 13.480828 -11.78125 12.40625 C -11.781268 10.311973 -12.525902 8.7417969 -13.96875 7.65625 C -15.41163 6.559783 -17.499549 6.0000261 -20.25 6 z M -23.75 25.15625 L -23.75 31 L -17.65625 31 L -17.65625 25.15625 L -23.75 25.15625 z "
|
||||
xlink:href="#text2215"
|
||||
style="font-size:34.15322876px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:url(#radialGradient2437);fill-opacity:1;stroke:#ffffff;stroke-width:1.09947276px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.78612713;font-family:Bitstream Vera Sans"
|
||||
id="path1554"
|
||||
d="M -20.25,5.875 C -21.309019,5.8750263 -22.397637,5.9982356 -23.53125,6.21875 C -24.664175,6.4391783 -25.911412,6.7562625 -27.28125,7.21875 C -27.291632,7.21754 -27.302118,7.21754 -27.3125,7.21875 C -27.324563,7.2273788 -27.335121,7.237937 -27.34375,7.25 C -27.355813,7.2586288 -27.366371,7.269187 -27.375,7.28125 C -27.37621,7.2916315 -27.37621,7.3021185 -27.375,7.3125 C -27.37621,7.3228815 -27.37621,7.3333685 -27.375,7.34375 L -27.375,12.5 C -27.37621,12.510382 -27.37621,12.520868 -27.375,12.53125 C -27.37621,12.541632 -27.37621,12.552118 -27.375,12.5625 C -27.366371,12.574563 -27.355813,12.585121 -27.34375,12.59375 C -27.335121,12.605813 -27.324563,12.616371 -27.3125,12.625 C -27.302118,12.62621 -27.291632,12.62621 -27.28125,12.625 C -27.270868,12.62621 -27.260382,12.62621 -27.25,12.625 C -27.239618,12.62621 -27.229132,12.62621 -27.21875,12.625 C -27.208368,12.62621 -27.197882,12.62621 -27.1875,12.625 C -26.045062,11.905957 -24.954148,11.357862 -23.90625,11 C -22.858109,10.631244 -21.863134,10.437521 -20.96875,10.4375 C -20.019532,10.437521 -19.323825,10.648045 -18.8125,11.0625 C -18.303777,11.46459 -18.031262,12.04554 -18.03125,12.78125 C -18.03126,13.261907 -18.175438,13.73266 -18.46875,14.21875 C -18.751741,14.705766 -19.209015,15.249245 -19.84375,15.8125 L -20.9375,16.75 C -22.138959,17.83049 -22.926743,18.741022 -23.3125,19.46875 C -23.695613,20.180196 -23.875005,20.988074 -23.875,21.90625 L -23.875,22.71875 C -23.87621,22.729132 -23.87621,22.739618 -23.875,22.75 C -23.87621,22.760382 -23.87621,22.770868 -23.875,22.78125 C -23.866371,22.793313 -23.855813,22.803871 -23.84375,22.8125 C -23.835121,22.824563 -23.824563,22.835121 -23.8125,22.84375 C -23.802118,22.84496 -23.791632,22.84496 -23.78125,22.84375 C -23.770868,22.84496 -23.760382,22.84496 -23.75,22.84375 L -17.65625,22.84375 C -17.645868,22.84496 -17.635382,22.84496 -17.625,22.84375 C -17.614618,22.84496 -17.604132,22.84496 -17.59375,22.84375 C -17.581687,22.835121 -17.571129,22.824563 -17.5625,22.8125 C -17.550437,22.803871 -17.539879,22.793313 -17.53125,22.78125 C -17.53004,22.770868 -17.53004,22.760382 -17.53125,22.75 C -17.53004,22.739618 -17.53004,22.729132 -17.53125,22.71875 L -17.53125,21.96875 C -17.531261,21.500554 -17.38288,21.075901 -17.15625,20.6875 C -16.933955,20.296216 -16.448177,19.737141 -15.6875,19.0625 L -14.625,18.125 C -13.558412,17.14269 -12.794341,16.240346 -12.34375,15.375 C -11.894481,14.500954 -11.656268,13.50158 -11.65625,12.40625 C -11.656268,10.279985 -12.400019,8.6722224 -13.875,7.5625 C -15.350197,6.4414748 -17.48124,5.8750263 -20.25,5.875 z M -23.8125,25.03125 C -23.824563,25.039879 -23.835121,25.050437 -23.84375,25.0625 C -23.855813,25.071129 -23.866371,25.081687 -23.875,25.09375 C -23.87621,25.104132 -23.87621,25.114618 -23.875,25.125 C -23.87621,25.135382 -23.87621,25.145868 -23.875,25.15625 L -23.875,31 C -23.87621,31.010382 -23.87621,31.020868 -23.875,31.03125 C -23.87621,31.041632 -23.87621,31.052118 -23.875,31.0625 C -23.866371,31.074563 -23.855813,31.085121 -23.84375,31.09375 C -23.835121,31.105813 -23.824563,31.116371 -23.8125,31.125 C -23.802118,31.12621 -23.791632,31.12621 -23.78125,31.125 C -23.770868,31.12621 -23.760382,31.12621 -23.75,31.125 L -17.65625,31.125 C -17.645868,31.12621 -17.635382,31.12621 -17.625,31.125 C -17.614618,31.12621 -17.604132,31.12621 -17.59375,31.125 C -17.581687,31.116371 -17.571129,31.105813 -17.5625,31.09375 C -17.550437,31.085121 -17.539879,31.074563 -17.53125,31.0625 C -17.53004,31.052118 -17.53004,31.041632 -17.53125,31.03125 C -17.53004,31.020868 -17.53004,31.010382 -17.53125,31 L -17.53125,25.15625 C -17.53004,25.145868 -17.53004,25.135382 -17.53125,25.125 C -17.53004,25.114618 -17.53004,25.104132 -17.53125,25.09375 C -17.539879,25.081687 -17.550437,25.071129 -17.5625,25.0625 C -17.571129,25.050437 -17.581687,25.039879 -17.59375,25.03125 C -17.604132,25.03004 -17.614618,25.03004 -17.625,25.03125 C -17.635382,25.03004 -17.645868,25.03004 -17.65625,25.03125 L -23.75,25.03125 C -23.760382,25.03004 -23.770868,25.03004 -23.78125,25.03125 C -23.791632,25.03004 -23.802118,25.03004 -23.8125,25.03125 z "
|
||||
transform="matrix(0.849895,0,0,0.835205,41.72981,8.548327)" />
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 957 B |
Before Width: | Height: | Size: 964 B |
Before Width: | Height: | Size: 954 B |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 113 KiB |
|
@ -1,8 +0,0 @@
|
|||
[encoding: UTF-8]
|
||||
# List of source files containing translatable strings.
|
||||
# Please keep this file sorted alphabetically.
|
||||
|
||||
src/main.c
|
||||
src/pandora-applet.c
|
||||
src/pandora-info-window.c
|
||||
src/pandora-setup-dialog.c
|
|
@ -1,20 +0,0 @@
|
|||
|
||||
INCLUDES = $(PANDORA_CFLAGS) \
|
||||
$(MYSQL_INC) \
|
||||
-DGNOMELOCALEDIR=\""$(datadir)/locale"\" \
|
||||
-DGLADEDIR=\""$(gladedir)"\"
|
||||
|
||||
bin_PROGRAMS = pandora-applet
|
||||
|
||||
pandora_applet_SOURCES = main.c \
|
||||
pandora-applet.c pandora-applet.h \
|
||||
pandora-setup.c pandora-setup.h \
|
||||
pandora-status.c pandora-status.h \
|
||||
pandora-status-checker.c pandora-status-checker.h \
|
||||
pandora-info-window.c pandora-info-window.h \
|
||||
pandora-setup-dialog.c pandora-setup-dialog.h \
|
||||
eggtrayicon.c eggtrayicon.h
|
||||
|
||||
pandora_applet_LDADD = $(PANDORA_LIBS) \
|
||||
$(MYSQL_LIB)
|
||||
|
|
@ -1,559 +0,0 @@
|
|||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
|
||||
/* eggtrayicon.c
|
||||
* Copyright (C) 2002 Anders Carlsson <andersca@gnu.org>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
#include <string.h>
|
||||
#include <libintl.h>
|
||||
|
||||
#include "eggtrayicon.h"
|
||||
|
||||
#include <gdkconfig.h>
|
||||
#if defined (GDK_WINDOWING_X11)
|
||||
#include <gdk/gdkx.h>
|
||||
#include <X11/Xatom.h>
|
||||
#elif defined (GDK_WINDOWING_WIN32)
|
||||
#include <gdk/gdkwin32.h>
|
||||
#endif
|
||||
|
||||
#ifndef EGG_COMPILATION
|
||||
#ifndef _
|
||||
#define _(x) dgettext (GETTEXT_PACKAGE, x)
|
||||
#define N_(x) x
|
||||
#endif
|
||||
#else
|
||||
#define _(x) x
|
||||
#define N_(x) x
|
||||
#endif
|
||||
|
||||
#define SYSTEM_TRAY_REQUEST_DOCK 0
|
||||
#define SYSTEM_TRAY_BEGIN_MESSAGE 1
|
||||
#define SYSTEM_TRAY_CANCEL_MESSAGE 2
|
||||
|
||||
#define SYSTEM_TRAY_ORIENTATION_HORZ 0
|
||||
#define SYSTEM_TRAY_ORIENTATION_VERT 1
|
||||
|
||||
enum {
|
||||
PROP_0,
|
||||
PROP_ORIENTATION
|
||||
};
|
||||
|
||||
static GtkPlugClass *parent_class = NULL;
|
||||
|
||||
static void egg_tray_icon_init (EggTrayIcon *icon);
|
||||
static void egg_tray_icon_class_init (EggTrayIconClass *klass);
|
||||
|
||||
static void egg_tray_icon_get_property (GObject *object,
|
||||
guint prop_id,
|
||||
GValue *value,
|
||||
GParamSpec *pspec);
|
||||
|
||||
static void egg_tray_icon_realize (GtkWidget *widget);
|
||||
static void egg_tray_icon_unrealize (GtkWidget *widget);
|
||||
|
||||
static void egg_tray_icon_add (GtkContainer *container,
|
||||
GtkWidget *widget);
|
||||
|
||||
#ifdef GDK_WINDOWING_X11
|
||||
static void egg_tray_icon_update_manager_window (EggTrayIcon *icon,
|
||||
gboolean dock_if_realized);
|
||||
static void egg_tray_icon_manager_window_destroyed (EggTrayIcon *icon);
|
||||
#endif
|
||||
|
||||
GType
|
||||
egg_tray_icon_get_type (void)
|
||||
{
|
||||
static GType our_type = 0;
|
||||
|
||||
if (our_type == 0)
|
||||
{
|
||||
static const GTypeInfo our_info =
|
||||
{
|
||||
sizeof (EggTrayIconClass),
|
||||
(GBaseInitFunc) NULL,
|
||||
(GBaseFinalizeFunc) NULL,
|
||||
(GClassInitFunc) egg_tray_icon_class_init,
|
||||
NULL, /* class_finalize */
|
||||
NULL, /* class_data */
|
||||
sizeof (EggTrayIcon),
|
||||
0, /* n_preallocs */
|
||||
(GInstanceInitFunc) egg_tray_icon_init
|
||||
};
|
||||
|
||||
our_type = g_type_register_static (GTK_TYPE_PLUG, "EggTrayIcon", &our_info, 0);
|
||||
}
|
||||
|
||||
return our_type;
|
||||
}
|
||||
|
||||
static void
|
||||
egg_tray_icon_init (EggTrayIcon *icon)
|
||||
{
|
||||
icon->stamp = 1;
|
||||
icon->orientation = GTK_ORIENTATION_HORIZONTAL;
|
||||
|
||||
gtk_widget_add_events (GTK_WIDGET (icon), GDK_PROPERTY_CHANGE_MASK);
|
||||
}
|
||||
|
||||
static void
|
||||
egg_tray_icon_class_init (EggTrayIconClass *klass)
|
||||
{
|
||||
GObjectClass *gobject_class = (GObjectClass *)klass;
|
||||
GtkWidgetClass *widget_class = (GtkWidgetClass *)klass;
|
||||
GtkContainerClass *container_class = (GtkContainerClass *)klass;
|
||||
|
||||
parent_class = g_type_class_peek_parent (klass);
|
||||
|
||||
gobject_class->get_property = egg_tray_icon_get_property;
|
||||
|
||||
widget_class->realize = egg_tray_icon_realize;
|
||||
widget_class->unrealize = egg_tray_icon_unrealize;
|
||||
|
||||
container_class->add = egg_tray_icon_add;
|
||||
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_ORIENTATION,
|
||||
g_param_spec_enum ("orientation",
|
||||
_("Orientation"),
|
||||
_("The orientation of the tray."),
|
||||
GTK_TYPE_ORIENTATION,
|
||||
GTK_ORIENTATION_HORIZONTAL,
|
||||
G_PARAM_READABLE));
|
||||
|
||||
#if defined (GDK_WINDOWING_X11)
|
||||
/* Nothing */
|
||||
#elif defined (GDK_WINDOWING_WIN32)
|
||||
g_warning ("Port eggtrayicon to Win32");
|
||||
#else
|
||||
g_warning ("Port eggtrayicon to this GTK+ backend");
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
egg_tray_icon_get_property (GObject *object,
|
||||
guint prop_id,
|
||||
GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
EggTrayIcon *icon = EGG_TRAY_ICON (object);
|
||||
|
||||
switch (prop_id)
|
||||
{
|
||||
case PROP_ORIENTATION:
|
||||
g_value_set_enum (value, icon->orientation);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef GDK_WINDOWING_X11
|
||||
|
||||
static void
|
||||
egg_tray_icon_get_orientation_property (EggTrayIcon *icon)
|
||||
{
|
||||
Display *xdisplay;
|
||||
Atom type;
|
||||
int format;
|
||||
union {
|
||||
gulong *prop;
|
||||
guchar *prop_ch;
|
||||
} prop = { NULL };
|
||||
gulong nitems;
|
||||
gulong bytes_after;
|
||||
int error, result;
|
||||
|
||||
g_assert (icon->manager_window != None);
|
||||
|
||||
xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon)));
|
||||
|
||||
gdk_error_trap_push ();
|
||||
type = None;
|
||||
result = XGetWindowProperty (xdisplay,
|
||||
icon->manager_window,
|
||||
icon->orientation_atom,
|
||||
0, G_MAXLONG, FALSE,
|
||||
XA_CARDINAL,
|
||||
&type, &format, &nitems,
|
||||
&bytes_after, &(prop.prop_ch));
|
||||
error = gdk_error_trap_pop ();
|
||||
|
||||
if (error || result != Success)
|
||||
return;
|
||||
|
||||
if (type == XA_CARDINAL)
|
||||
{
|
||||
GtkOrientation orientation;
|
||||
|
||||
orientation = (prop.prop [0] == SYSTEM_TRAY_ORIENTATION_HORZ) ?
|
||||
GTK_ORIENTATION_HORIZONTAL :
|
||||
GTK_ORIENTATION_VERTICAL;
|
||||
|
||||
if (icon->orientation != orientation)
|
||||
{
|
||||
icon->orientation = orientation;
|
||||
|
||||
g_object_notify (G_OBJECT (icon), "orientation");
|
||||
}
|
||||
}
|
||||
|
||||
if (prop.prop)
|
||||
XFree (prop.prop);
|
||||
}
|
||||
|
||||
static GdkFilterReturn
|
||||
egg_tray_icon_manager_filter (GdkXEvent *xevent, GdkEvent *event, gpointer user_data)
|
||||
{
|
||||
EggTrayIcon *icon = user_data;
|
||||
XEvent *xev = (XEvent *)xevent;
|
||||
|
||||
if (xev->xany.type == ClientMessage &&
|
||||
xev->xclient.message_type == icon->manager_atom &&
|
||||
xev->xclient.data.l[1] == icon->selection_atom)
|
||||
{
|
||||
egg_tray_icon_update_manager_window (icon, TRUE);
|
||||
}
|
||||
else if (xev->xany.window == icon->manager_window)
|
||||
{
|
||||
if (xev->xany.type == PropertyNotify &&
|
||||
xev->xproperty.atom == icon->orientation_atom)
|
||||
{
|
||||
egg_tray_icon_get_orientation_property (icon);
|
||||
}
|
||||
if (xev->xany.type == DestroyNotify)
|
||||
{
|
||||
egg_tray_icon_manager_window_destroyed (icon);
|
||||
}
|
||||
}
|
||||
return GDK_FILTER_CONTINUE;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
static void
|
||||
egg_tray_icon_unrealize (GtkWidget *widget)
|
||||
{
|
||||
#ifdef GDK_WINDOWING_X11
|
||||
EggTrayIcon *icon = EGG_TRAY_ICON (widget);
|
||||
GdkWindow *root_window;
|
||||
|
||||
if (icon->manager_window != None)
|
||||
{
|
||||
GdkWindow *gdkwin;
|
||||
|
||||
gdkwin = gdk_window_lookup_for_display (gtk_widget_get_display (widget),
|
||||
icon->manager_window);
|
||||
|
||||
gdk_window_remove_filter (gdkwin, egg_tray_icon_manager_filter, icon);
|
||||
}
|
||||
|
||||
root_window = gdk_screen_get_root_window (gtk_widget_get_screen (widget));
|
||||
|
||||
gdk_window_remove_filter (root_window, egg_tray_icon_manager_filter, icon);
|
||||
|
||||
if (GTK_WIDGET_CLASS (parent_class)->unrealize)
|
||||
(* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef GDK_WINDOWING_X11
|
||||
|
||||
static void
|
||||
egg_tray_icon_send_manager_message (EggTrayIcon *icon,
|
||||
long message,
|
||||
Window window,
|
||||
long data1,
|
||||
long data2,
|
||||
long data3)
|
||||
{
|
||||
XClientMessageEvent ev;
|
||||
Display *display;
|
||||
|
||||
ev.type = ClientMessage;
|
||||
ev.window = window;
|
||||
ev.message_type = icon->system_tray_opcode_atom;
|
||||
ev.format = 32;
|
||||
ev.data.l[0] = gdk_x11_get_server_time (GTK_WIDGET (icon)->window);
|
||||
ev.data.l[1] = message;
|
||||
ev.data.l[2] = data1;
|
||||
ev.data.l[3] = data2;
|
||||
ev.data.l[4] = data3;
|
||||
|
||||
display = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon)));
|
||||
|
||||
gdk_error_trap_push ();
|
||||
XSendEvent (display,
|
||||
icon->manager_window, False, NoEventMask, (XEvent *)&ev);
|
||||
XSync (display, False);
|
||||
gdk_error_trap_pop ();
|
||||
}
|
||||
|
||||
static void
|
||||
egg_tray_icon_send_dock_request (EggTrayIcon *icon)
|
||||
{
|
||||
egg_tray_icon_send_manager_message (icon,
|
||||
SYSTEM_TRAY_REQUEST_DOCK,
|
||||
icon->manager_window,
|
||||
gtk_plug_get_id (GTK_PLUG (icon)),
|
||||
0, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
egg_tray_icon_update_manager_window (EggTrayIcon *icon,
|
||||
gboolean dock_if_realized)
|
||||
{
|
||||
Display *xdisplay;
|
||||
|
||||
if (icon->manager_window != None)
|
||||
return;
|
||||
|
||||
xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon)));
|
||||
|
||||
XGrabServer (xdisplay);
|
||||
|
||||
icon->manager_window = XGetSelectionOwner (xdisplay,
|
||||
icon->selection_atom);
|
||||
|
||||
if (icon->manager_window != None)
|
||||
XSelectInput (xdisplay,
|
||||
icon->manager_window, StructureNotifyMask|PropertyChangeMask);
|
||||
|
||||
XUngrabServer (xdisplay);
|
||||
XFlush (xdisplay);
|
||||
|
||||
if (icon->manager_window != None)
|
||||
{
|
||||
GdkWindow *gdkwin;
|
||||
|
||||
gdkwin = gdk_window_lookup_for_display (gtk_widget_get_display (GTK_WIDGET (icon)),
|
||||
icon->manager_window);
|
||||
|
||||
gdk_window_add_filter (gdkwin, egg_tray_icon_manager_filter, icon);
|
||||
|
||||
if (dock_if_realized && GTK_WIDGET_REALIZED (icon))
|
||||
egg_tray_icon_send_dock_request (icon);
|
||||
|
||||
egg_tray_icon_get_orientation_property (icon);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
egg_tray_icon_manager_window_destroyed (EggTrayIcon *icon)
|
||||
{
|
||||
GdkWindow *gdkwin;
|
||||
|
||||
g_return_if_fail (icon->manager_window != None);
|
||||
|
||||
gdkwin = gdk_window_lookup_for_display (gtk_widget_get_display (GTK_WIDGET (icon)),
|
||||
icon->manager_window);
|
||||
|
||||
gdk_window_remove_filter (gdkwin, egg_tray_icon_manager_filter, icon);
|
||||
|
||||
icon->manager_window = None;
|
||||
|
||||
egg_tray_icon_update_manager_window (icon, TRUE);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
static gboolean
|
||||
transparent_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data)
|
||||
{
|
||||
gdk_window_clear_area (widget->window, event->area.x, event->area.y,
|
||||
event->area.width, event->area.height);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
make_transparent_again (GtkWidget *widget, GtkStyle *previous_style,
|
||||
gpointer user_data)
|
||||
{
|
||||
gdk_window_set_back_pixmap (widget->window, NULL, TRUE);
|
||||
}
|
||||
|
||||
static void
|
||||
make_transparent (GtkWidget *widget, gpointer user_data)
|
||||
{
|
||||
if (GTK_WIDGET_NO_WINDOW (widget) || GTK_WIDGET_APP_PAINTABLE (widget))
|
||||
return;
|
||||
|
||||
gtk_widget_set_app_paintable (widget, TRUE);
|
||||
gtk_widget_set_double_buffered (widget, FALSE);
|
||||
gdk_window_set_back_pixmap (widget->window, NULL, TRUE);
|
||||
g_signal_connect (widget, "expose_event",
|
||||
G_CALLBACK (transparent_expose_event), NULL);
|
||||
g_signal_connect_after (widget, "style_set",
|
||||
G_CALLBACK (make_transparent_again), NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
egg_tray_icon_realize (GtkWidget *widget)
|
||||
{
|
||||
#ifdef GDK_WINDOWING_X11
|
||||
EggTrayIcon *icon = EGG_TRAY_ICON (widget);
|
||||
GdkScreen *screen;
|
||||
GdkDisplay *display;
|
||||
Display *xdisplay;
|
||||
char buffer[256];
|
||||
GdkWindow *root_window;
|
||||
|
||||
if (GTK_WIDGET_CLASS (parent_class)->realize)
|
||||
GTK_WIDGET_CLASS (parent_class)->realize (widget);
|
||||
|
||||
make_transparent (widget, NULL);
|
||||
|
||||
screen = gtk_widget_get_screen (widget);
|
||||
display = gdk_screen_get_display (screen);
|
||||
xdisplay = gdk_x11_display_get_xdisplay (display);
|
||||
|
||||
/* Now see if there's a manager window around */
|
||||
g_snprintf (buffer, sizeof (buffer),
|
||||
"_NET_SYSTEM_TRAY_S%d",
|
||||
gdk_screen_get_number (screen));
|
||||
|
||||
icon->selection_atom = XInternAtom (xdisplay, buffer, False);
|
||||
|
||||
icon->manager_atom = XInternAtom (xdisplay, "MANAGER", False);
|
||||
|
||||
icon->system_tray_opcode_atom = XInternAtom (xdisplay,
|
||||
"_NET_SYSTEM_TRAY_OPCODE",
|
||||
False);
|
||||
|
||||
icon->orientation_atom = XInternAtom (xdisplay,
|
||||
"_NET_SYSTEM_TRAY_ORIENTATION",
|
||||
False);
|
||||
|
||||
egg_tray_icon_update_manager_window (icon, FALSE);
|
||||
egg_tray_icon_send_dock_request (icon);
|
||||
|
||||
root_window = gdk_screen_get_root_window (screen);
|
||||
|
||||
/* Add a root window filter so that we get changes on MANAGER */
|
||||
gdk_window_add_filter (root_window,
|
||||
egg_tray_icon_manager_filter, icon);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
egg_tray_icon_add (GtkContainer *container, GtkWidget *widget)
|
||||
{
|
||||
g_signal_connect (widget, "realize",
|
||||
G_CALLBACK (make_transparent), NULL);
|
||||
GTK_CONTAINER_CLASS (parent_class)->add (container, widget);
|
||||
}
|
||||
|
||||
EggTrayIcon *
|
||||
egg_tray_icon_new_for_screen (GdkScreen *screen, const char *name)
|
||||
{
|
||||
g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
|
||||
|
||||
return g_object_new (EGG_TYPE_TRAY_ICON, "screen", screen, "title", name, NULL);
|
||||
}
|
||||
|
||||
EggTrayIcon*
|
||||
egg_tray_icon_new (const gchar *name)
|
||||
{
|
||||
return g_object_new (EGG_TYPE_TRAY_ICON, "title", name, NULL);
|
||||
}
|
||||
|
||||
guint
|
||||
egg_tray_icon_send_message (EggTrayIcon *icon,
|
||||
gint timeout,
|
||||
const gchar *message,
|
||||
gint len)
|
||||
{
|
||||
guint stamp;
|
||||
|
||||
g_return_val_if_fail (EGG_IS_TRAY_ICON (icon), 0);
|
||||
g_return_val_if_fail (timeout >= 0, 0);
|
||||
g_return_val_if_fail (message != NULL, 0);
|
||||
|
||||
#ifdef GDK_WINDOWING_X11
|
||||
if (icon->manager_window == None)
|
||||
return 0;
|
||||
#endif
|
||||
|
||||
if (len < 0)
|
||||
len = strlen (message);
|
||||
|
||||
stamp = icon->stamp++;
|
||||
|
||||
#ifdef GDK_WINDOWING_X11
|
||||
/* Get ready to send the message */
|
||||
egg_tray_icon_send_manager_message (icon, SYSTEM_TRAY_BEGIN_MESSAGE,
|
||||
icon->manager_window,
|
||||
timeout, len, stamp);
|
||||
|
||||
/* Now to send the actual message */
|
||||
gdk_error_trap_push ();
|
||||
while (len > 0)
|
||||
{
|
||||
XClientMessageEvent ev;
|
||||
Display *xdisplay;
|
||||
|
||||
xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon)));
|
||||
|
||||
ev.type = ClientMessage;
|
||||
ev.window = icon->manager_window;
|
||||
ev.format = 8;
|
||||
ev.message_type = XInternAtom (xdisplay,
|
||||
"_NET_SYSTEM_TRAY_MESSAGE_DATA", False);
|
||||
if (len > 20)
|
||||
{
|
||||
memcpy (&ev.data, message, 20);
|
||||
len -= 20;
|
||||
message += 20;
|
||||
}
|
||||
else
|
||||
{
|
||||
memcpy (&ev.data, message, len);
|
||||
len = 0;
|
||||
}
|
||||
|
||||
XSendEvent (xdisplay,
|
||||
icon->manager_window, False, StructureNotifyMask, (XEvent *)&ev);
|
||||
XSync (xdisplay, False);
|
||||
}
|
||||
gdk_error_trap_pop ();
|
||||
#endif
|
||||
|
||||
return stamp;
|
||||
}
|
||||
|
||||
void
|
||||
egg_tray_icon_cancel_message (EggTrayIcon *icon,
|
||||
guint id)
|
||||
{
|
||||
g_return_if_fail (EGG_IS_TRAY_ICON (icon));
|
||||
g_return_if_fail (id > 0);
|
||||
#ifdef GDK_WINDOWING_X11
|
||||
egg_tray_icon_send_manager_message (icon, SYSTEM_TRAY_CANCEL_MESSAGE,
|
||||
(Window)gtk_plug_get_id (GTK_PLUG (icon)),
|
||||
id, 0, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
GtkOrientation
|
||||
egg_tray_icon_get_orientation (EggTrayIcon *icon)
|
||||
{
|
||||
g_return_val_if_fail (EGG_IS_TRAY_ICON (icon), GTK_ORIENTATION_HORIZONTAL);
|
||||
|
||||
return icon->orientation;
|
||||
}
|
|
@ -1,80 +0,0 @@
|
|||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
|
||||
/* eggtrayicon.h
|
||||
* Copyright (C) 2002 Anders Carlsson <andersca@gnu.org>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef __EGG_TRAY_ICON_H__
|
||||
#define __EGG_TRAY_ICON_H__
|
||||
|
||||
#include <gtk/gtkplug.h>
|
||||
#ifdef GDK_WINDOWING_X11
|
||||
#include <gdk/gdkx.h>
|
||||
#endif
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define EGG_TYPE_TRAY_ICON (egg_tray_icon_get_type ())
|
||||
#define EGG_TRAY_ICON(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EGG_TYPE_TRAY_ICON, EggTrayIcon))
|
||||
#define EGG_TRAY_ICON_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EGG_TYPE_TRAY_ICON, EggTrayIconClass))
|
||||
#define EGG_IS_TRAY_ICON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EGG_TYPE_TRAY_ICON))
|
||||
#define EGG_IS_TRAY_ICON_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EGG_TYPE_TRAY_ICON))
|
||||
#define EGG_TRAY_ICON_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EGG_TYPE_TRAY_ICON, EggTrayIconClass))
|
||||
|
||||
typedef struct _EggTrayIcon EggTrayIcon;
|
||||
typedef struct _EggTrayIconClass EggTrayIconClass;
|
||||
|
||||
struct _EggTrayIcon
|
||||
{
|
||||
GtkPlug parent_instance;
|
||||
|
||||
guint stamp;
|
||||
|
||||
#ifdef GDK_WINDOWING_X11
|
||||
Atom selection_atom;
|
||||
Atom manager_atom;
|
||||
Atom system_tray_opcode_atom;
|
||||
Atom orientation_atom;
|
||||
Window manager_window;
|
||||
#endif
|
||||
GtkOrientation orientation;
|
||||
};
|
||||
|
||||
struct _EggTrayIconClass
|
||||
{
|
||||
GtkPlugClass parent_class;
|
||||
};
|
||||
|
||||
GType egg_tray_icon_get_type (void);
|
||||
|
||||
EggTrayIcon *egg_tray_icon_new_for_screen (GdkScreen *screen,
|
||||
const gchar *name);
|
||||
|
||||
EggTrayIcon *egg_tray_icon_new (const gchar *name);
|
||||
|
||||
guint egg_tray_icon_send_message (EggTrayIcon *icon,
|
||||
gint timeout,
|
||||
const char *message,
|
||||
gint len);
|
||||
void egg_tray_icon_cancel_message (EggTrayIcon *icon,
|
||||
guint id);
|
||||
|
||||
GtkOrientation egg_tray_icon_get_orientation (EggTrayIcon *icon);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __EGG_TRAY_ICON_H__ */
|
|
@ -1,64 +0,0 @@
|
|||
/*
|
||||
Copyright (C) 2006 Artica ST.
|
||||
Written by Esteban Sanchez.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
#include "pandora-applet.h"
|
||||
|
||||
#include <glib.h>
|
||||
#include <glib/gi18n-lib.h>
|
||||
|
||||
void
|
||||
exit_app ()
|
||||
{
|
||||
gtk_main_quit ();
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
PandoraApplet *applet;
|
||||
|
||||
gtk_init (&argc, &argv);
|
||||
|
||||
g_set_application_name (_("Pandora applet"));
|
||||
|
||||
bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR);
|
||||
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
|
||||
textdomain (GETTEXT_PACKAGE);
|
||||
|
||||
/* Init threads */
|
||||
if (!g_thread_supported ()) {
|
||||
g_thread_init (NULL);
|
||||
}
|
||||
|
||||
applet = pandora_applet_new ();
|
||||
|
||||
if (!applet) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
gtk_main ();
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -1,493 +0,0 @@
|
|||
/*
|
||||
Copyright (C) 2006 Artica ST.
|
||||
Written by Esteban Sanchez.
|
||||
|
||||
Based on NetworkManager Wireless Applet
|
||||
GNOME Wireless Applet Authors:
|
||||
* Eskil Heyn Olsen <eskil@eskil.dk>
|
||||
* Bastien Nocera <hadess@hadess.net> (Gnome2 port)
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <glib/gi18n-lib.h>
|
||||
|
||||
#include "pandora-applet.h"
|
||||
#include "pandora-info-window.h"
|
||||
#include "pandora-status-checker.h"
|
||||
#include "pandora-status.h"
|
||||
#include "pandora-setup-dialog.h"
|
||||
#include "pandora-setup.h"
|
||||
|
||||
struct _PandoraAppletPrivate {
|
||||
GtkImage *image;
|
||||
GdkPixbuf *icon_good;
|
||||
GdkPixbuf *icon_bad;
|
||||
GdkPixbuf *icon_unknown;
|
||||
GtkWidget *event_box;
|
||||
GtkWidget *context_menu;
|
||||
|
||||
gchar *userdir;
|
||||
gchar *userfile;
|
||||
|
||||
PandoraInfoWindow *info_window;
|
||||
PandoraSetupDialog *setup_dialog;
|
||||
PandoraSetup *setup;
|
||||
PandoraStatusChecker *checker;
|
||||
PandoraStatus *status;
|
||||
};
|
||||
|
||||
#define PANDORA_APPLET_GET_PRIVATE(object) \
|
||||
(G_TYPE_INSTANCE_GET_PRIVATE ((object), PANDORA_TYPE_APPLET, PandoraAppletPrivate))
|
||||
|
||||
static gboolean pandora_applet_create_setup_file (PandoraApplet *applet);
|
||||
static void pandora_applet_create_user_dir (PandoraApplet *applet);
|
||||
static void pandora_applet_set_image_from_pixbuf (PandoraApplet *applet,
|
||||
GdkPixbuf *icon);
|
||||
static void pandora_applet_set_image_from_stock (PandoraApplet *applet,
|
||||
gchar *stock_id);
|
||||
static gboolean pandora_applet_toplevel_menu_button_press_cb (GtkWidget *widget,
|
||||
GdkEventButton *event,
|
||||
gpointer data);
|
||||
static void pandora_applet_incidence_cb (GObject *object,
|
||||
gint data,
|
||||
gpointer user_data);
|
||||
static GtkWidget *pandora_applet_context_menu_create (PandoraApplet *applet);
|
||||
|
||||
static GObject *pandora_applet_constructor (GType type, guint n_props,
|
||||
GObjectConstructParam *props);
|
||||
static GtkWidget *pandora_applet_get_instance (PandoraApplet *applet);
|
||||
static void pandora_applet_destroy (PandoraApplet *applet);
|
||||
static GType pandora_applet_get_type (void); /* for G_DEFINE_TYPE */
|
||||
|
||||
G_DEFINE_TYPE (PandoraApplet, pandora_applet, EGG_TYPE_TRAY_ICON)
|
||||
|
||||
static void
|
||||
pandora_applet_init (PandoraApplet *applet)
|
||||
{
|
||||
applet->priv = PANDORA_APPLET_GET_PRIVATE (applet);
|
||||
|
||||
applet->priv->icon_good = load_icon_from_disk ("pandora-applet-good.png");
|
||||
applet->priv->icon_bad = load_icon_from_disk ("pandora-applet-bad.png");
|
||||
applet->priv->icon_unknown = load_icon_from_disk ("pandora-applet-unknown.png");
|
||||
|
||||
applet->priv->userdir = g_build_filename (g_get_home_dir (), ".pandora", NULL);
|
||||
applet->priv->userfile = g_build_filename (applet->priv->userdir, "config.xml",
|
||||
NULL);
|
||||
pandora_applet_create_user_dir (applet);
|
||||
|
||||
g_signal_connect (applet, "destroy", G_CALLBACK (pandora_applet_destroy), NULL);
|
||||
|
||||
/* Event box is the main applet widget */
|
||||
applet->priv->event_box = gtk_event_box_new ();
|
||||
gtk_container_set_border_width (GTK_CONTAINER (applet->priv->event_box),
|
||||
0);
|
||||
|
||||
applet->priv->image = GTK_IMAGE (gtk_image_new ());
|
||||
gtk_container_add (GTK_CONTAINER (applet->priv->event_box),
|
||||
GTK_WIDGET (applet->priv->image));
|
||||
gtk_container_add (GTK_CONTAINER (applet), applet->priv->event_box);
|
||||
|
||||
g_signal_connect (applet->priv->event_box, "button_press_event",
|
||||
G_CALLBACK (pandora_applet_toplevel_menu_button_press_cb),
|
||||
applet);
|
||||
|
||||
pandora_applet_set_image_from_pixbuf (applet, applet->priv->icon_unknown);
|
||||
|
||||
applet->priv->context_menu = pandora_applet_context_menu_create (applet);
|
||||
|
||||
/* Init setup */
|
||||
applet->priv->setup = pandora_setup_new (applet->priv->userfile);
|
||||
|
||||
/* Init windows and dialogs */
|
||||
applet->priv->info_window = PANDORA_INFO_WINDOW (pandora_info_window_new ());
|
||||
|
||||
applet->priv->setup_dialog = PANDORA_SETUP_DIALOG (pandora_setup_dialog_new ());
|
||||
pandora_setup_dialog_set_setup (applet->priv->setup_dialog,
|
||||
applet->priv->setup);
|
||||
|
||||
/* Init status and checker */
|
||||
applet->priv->status = PANDORA_STATUS (pandora_status_new ());
|
||||
|
||||
pandora_info_window_set_status (applet->priv->info_window,
|
||||
applet->priv->status);
|
||||
|
||||
applet->priv->checker = pandora_status_checker_new (applet->priv->setup,
|
||||
applet->priv->status);
|
||||
|
||||
gtk_widget_show_all (GTK_WIDGET (applet));
|
||||
|
||||
g_signal_connect (G_OBJECT (applet->priv->status), "incidence",
|
||||
G_CALLBACK (pandora_applet_incidence_cb),
|
||||
(gpointer) applet);
|
||||
|
||||
pandora_status_checker_run (applet->priv->checker);
|
||||
}
|
||||
|
||||
static void
|
||||
pandora_applet_class_init (PandoraAppletClass *klass)
|
||||
{
|
||||
GObjectClass *object_class;
|
||||
|
||||
g_type_class_add_private (klass, sizeof (PandoraAppletPrivate));
|
||||
|
||||
object_class = G_OBJECT_CLASS (klass);
|
||||
object_class->constructor = pandora_applet_constructor;
|
||||
}
|
||||
|
||||
static GObject *
|
||||
pandora_applet_constructor (GType type, guint n_props,
|
||||
GObjectConstructParam *props)
|
||||
{
|
||||
GObject *obj;
|
||||
PandoraApplet *applet;
|
||||
PandoraAppletClass *klass;
|
||||
|
||||
klass = PANDORA_APPLET_CLASS (g_type_class_peek (type));
|
||||
obj = G_OBJECT_CLASS (pandora_applet_parent_class)->constructor (type,
|
||||
n_props,
|
||||
props);
|
||||
applet = PANDORA_APPLET (obj);
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
static GtkWidget *
|
||||
pandora_applet_get_instance (PandoraApplet *applet)
|
||||
{
|
||||
gtk_widget_hide (GTK_WIDGET (applet));
|
||||
|
||||
return GTK_WIDGET (applet);
|
||||
}
|
||||
|
||||
static void
|
||||
pandora_applet_destroy (PandoraApplet *applet)
|
||||
{
|
||||
gtk_widget_hide (GTK_WIDGET (applet));
|
||||
|
||||
gtk_widget_destroy (GTK_WIDGET (applet->priv->info_window));
|
||||
gtk_widget_destroy (GTK_WIDGET (applet->priv->setup_dialog));
|
||||
|
||||
pandora_status_checker_stop (applet->priv->checker);
|
||||
|
||||
exit_app ();
|
||||
}
|
||||
|
||||
PandoraApplet *
|
||||
pandora_applet_new ()
|
||||
{
|
||||
return g_object_new (PANDORA_TYPE_APPLET, "title", "Pandora", NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
pandora_applet_quit_cb (GtkMenuItem *mi, PandoraApplet *applet)
|
||||
{
|
||||
gtk_widget_hide (GTK_WIDGET (applet));
|
||||
gtk_widget_destroy (GTK_WIDGET (applet));
|
||||
}
|
||||
|
||||
static void
|
||||
pandora_applet_about_cb (GtkMenuItem *mi, PandoraApplet *applet)
|
||||
{
|
||||
GdkPixbuf *pixbuf;
|
||||
gchar *pixbuf_path;
|
||||
static const gchar *authors[] =
|
||||
{
|
||||
"Artica Soluciones Tecnológicas:\n",
|
||||
"Esteban Sánchez <estebans@artica.es>",
|
||||
NULL
|
||||
};
|
||||
static const gchar *artists[] =
|
||||
{
|
||||
"Esteban Sánchez <estebans@artica.es>\n"
|
||||
"Icons from Tango Desktop Project <http://tango.freedesktop.org/>",
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
|
||||
pixbuf_path = g_build_filename (PIXMAPS_DIR, "pandora.png", NULL);
|
||||
pixbuf = gdk_pixbuf_new_from_file (pixbuf_path, NULL);
|
||||
g_free (pixbuf_path);
|
||||
|
||||
gtk_show_about_dialog (NULL,
|
||||
"name", _("Pandora Enterprise monitor applet"),
|
||||
"version", VERSION,
|
||||
"copyright", _("Copyright \xc2\xa9 2006 Artica ST.\n"),
|
||||
"comments", _("Notification area applet for monitoring your Pandora system."),
|
||||
"website", "http://pandora.sourceforge.net/",
|
||||
"authors", authors,
|
||||
"artists", artists,
|
||||
"translator-credits", _("translator-credits"),
|
||||
"logo", pixbuf,
|
||||
NULL);
|
||||
|
||||
if (pixbuf) {
|
||||
g_object_unref (pixbuf);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
pandora_applet_show_info_cb (GtkMenuItem *mi, PandoraApplet *applet)
|
||||
{
|
||||
gtk_window_present (GTK_WINDOW (applet->priv->info_window));
|
||||
}
|
||||
|
||||
static void
|
||||
pandora_applet_show_setup_cb (GtkMenuItem *mi, PandoraApplet *applet)
|
||||
{
|
||||
gint result;
|
||||
|
||||
gtk_widget_show_all (GTK_WIDGET (applet->priv->setup_dialog));
|
||||
|
||||
result = gtk_dialog_run (GTK_DIALOG (applet->priv->setup_dialog));
|
||||
|
||||
gtk_widget_hide (GTK_WIDGET (applet->priv->setup_dialog));
|
||||
|
||||
while (gtk_events_pending ())
|
||||
gtk_main_iteration ();
|
||||
|
||||
switch (result) {
|
||||
case GTK_RESPONSE_ACCEPT:
|
||||
pandora_setup_dialog_apply_changes (applet->priv->setup_dialog);
|
||||
pandora_setup_save_to_disk (applet->priv->setup);
|
||||
|
||||
pandora_status_checker_stop (applet->priv->checker);
|
||||
pandora_status_checker_run (applet->priv->checker);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
pandora_applet_incidence_cb (GObject *object,
|
||||
gint data,
|
||||
gpointer user_data)
|
||||
{
|
||||
PandoraState state = data;
|
||||
PandoraApplet *applet = PANDORA_APPLET (user_data);
|
||||
|
||||
switch (state) {
|
||||
case STATE_BAD:
|
||||
pandora_applet_set_image_from_pixbuf (applet, applet->priv->icon_bad);
|
||||
|
||||
break;
|
||||
case STATE_OK:
|
||||
pandora_applet_set_image_from_pixbuf (applet, applet->priv->icon_good);
|
||||
|
||||
break;
|
||||
default:
|
||||
pandora_applet_set_image_from_pixbuf (applet, applet->priv->icon_unknown);
|
||||
}
|
||||
}
|
||||
|
||||
static GtkWidget *
|
||||
pandora_applet_context_menu_create (PandoraApplet *applet)
|
||||
{
|
||||
GtkWidget *menu;
|
||||
GtkWidget *menu_item;
|
||||
GtkWidget *image;
|
||||
|
||||
g_return_val_if_fail (applet != NULL, NULL);
|
||||
|
||||
menu = gtk_menu_new ();
|
||||
|
||||
/* Show status item */
|
||||
menu_item = gtk_image_menu_item_new_with_mnemonic (_("_Show main window"));
|
||||
g_signal_connect (G_OBJECT (menu_item), "activate",
|
||||
G_CALLBACK (pandora_applet_show_info_cb), applet);
|
||||
image = gtk_image_new_from_stock (GTK_STOCK_INFO, GTK_ICON_SIZE_MENU);
|
||||
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item),
|
||||
image);
|
||||
gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
|
||||
|
||||
/* Preferences item */
|
||||
menu_item = gtk_image_menu_item_new_with_mnemonic (_("_Preferences"));
|
||||
g_signal_connect (G_OBJECT (menu_item), "activate",
|
||||
G_CALLBACK (pandora_applet_show_setup_cb), applet);
|
||||
image = gtk_image_new_from_stock (GTK_STOCK_PREFERENCES, GTK_ICON_SIZE_MENU);
|
||||
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item),
|
||||
image);
|
||||
gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
|
||||
|
||||
/* Separator */
|
||||
menu_item = gtk_separator_menu_item_new ();
|
||||
gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
|
||||
gtk_widget_show (menu_item);
|
||||
|
||||
/* About item */
|
||||
menu_item = gtk_image_menu_item_new_with_mnemonic (_("_About"));
|
||||
g_signal_connect (G_OBJECT (menu_item), "activate",
|
||||
G_CALLBACK (pandora_applet_about_cb), applet);
|
||||
image = gtk_image_new_from_stock (GTK_STOCK_ABOUT, GTK_ICON_SIZE_MENU);
|
||||
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), image);
|
||||
gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
|
||||
|
||||
/* Quit item */
|
||||
menu_item = gtk_image_menu_item_new_with_mnemonic (_("_Quit"));
|
||||
g_signal_connect (G_OBJECT (menu_item), "activate",
|
||||
G_CALLBACK (pandora_applet_quit_cb), applet);
|
||||
image = gtk_image_new_from_stock (GTK_STOCK_QUIT, GTK_ICON_SIZE_MENU);
|
||||
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), image);
|
||||
gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
|
||||
|
||||
gtk_widget_show_all (menu);
|
||||
|
||||
return menu;
|
||||
}
|
||||
|
||||
static void
|
||||
pandora_applet_menu_position_func (GtkMenu *menu G_GNUC_UNUSED,
|
||||
int *x, int *y, gboolean *push_in,
|
||||
gpointer user_data)
|
||||
{
|
||||
gint screen_w, screen_h, button_x, button_y, panel_w, panel_h;
|
||||
GtkRequisition requisition;
|
||||
GdkScreen *screen;
|
||||
PandoraApplet *applet = PANDORA_APPLET (user_data);
|
||||
|
||||
screen = gtk_widget_get_screen (applet->priv->event_box);
|
||||
screen_w = gdk_screen_get_width (screen);
|
||||
screen_h = gdk_screen_get_height (screen);
|
||||
|
||||
gdk_window_get_origin (applet->priv->event_box->window, &button_x, &button_y);
|
||||
gtk_window_get_size (GTK_WINDOW (gtk_widget_get_toplevel (applet->priv->event_box)),
|
||||
&panel_w, &panel_h);
|
||||
|
||||
*x = button_x;
|
||||
|
||||
/* Check to see if we would be placing the menu off of the end of the screen. */
|
||||
gtk_widget_size_request (GTK_WIDGET (menu), &requisition);
|
||||
if (button_y + panel_h + requisition.height >= screen_h)
|
||||
*y = button_y - requisition.height;
|
||||
else
|
||||
*y = button_y + panel_h;
|
||||
|
||||
*push_in = TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
pandora_applet_toplevel_menu_button_press_cb (GtkWidget *widget,
|
||||
GdkEventButton *event,
|
||||
gpointer data)
|
||||
{
|
||||
PandoraApplet *applet;
|
||||
|
||||
applet = PANDORA_APPLET (data);
|
||||
|
||||
g_return_val_if_fail (applet != NULL, FALSE);
|
||||
g_return_val_if_fail (PANDORA_IS_APPLET (applet), FALSE);
|
||||
|
||||
switch (event->button) {
|
||||
case 3:
|
||||
gtk_menu_popup (GTK_MENU (applet->priv->context_menu),
|
||||
NULL, NULL,
|
||||
pandora_applet_menu_position_func,
|
||||
applet, event->button, event->time);
|
||||
return TRUE;
|
||||
default:
|
||||
g_signal_stop_emission_by_name (widget, "button_press_event");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
pandora_applet_set_image_from_stock (PandoraApplet *applet,
|
||||
gchar *stock_id)
|
||||
{
|
||||
gtk_image_set_from_stock (GTK_IMAGE (applet->priv->image),
|
||||
stock_id, GTK_ICON_SIZE_MENU);
|
||||
}
|
||||
|
||||
static void
|
||||
pandora_applet_set_image_from_pixbuf (PandoraApplet *applet, GdkPixbuf *icon)
|
||||
{
|
||||
g_return_if_fail (PANDORA_IS_APPLET (applet));
|
||||
g_return_if_fail (icon != NULL);
|
||||
|
||||
gtk_image_set_from_pixbuf (GTK_IMAGE (applet->priv->image), icon);
|
||||
}
|
||||
|
||||
GdkPixbuf *
|
||||
load_icon_from_disk (gchar *icon_name)
|
||||
{
|
||||
GError *err = NULL;
|
||||
gchar *icon_path;
|
||||
GdkPixbuf *pixbuf;
|
||||
|
||||
icon_path = g_build_filename (PIXMAPS_DIR, icon_name, NULL);
|
||||
pixbuf = gdk_pixbuf_new_from_file (icon_path, &err);
|
||||
g_free (icon_path);
|
||||
|
||||
if (pixbuf == NULL) {
|
||||
g_warning ("Icon %s missing: %s", icon_name, err->message);
|
||||
g_error_free (err);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return pixbuf;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
pandora_applet_create_setup_file (PandoraApplet *applet)
|
||||
{
|
||||
const gchar *contents = "<?xml version=\"1.0\"?>\n<config>\n</config>\n";
|
||||
|
||||
#if GTK_CHECK_VERSION(2,8,0)
|
||||
return g_file_set_contents (applet->priv->userfile, contents, -1, NULL);
|
||||
#else
|
||||
gint fd;
|
||||
|
||||
if ((fd = open (applet->priv->userfile, O_CREAT | O_WRONLY, 0644)) < 0) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (write (fd, contents, strlen (contents)) < 0) {
|
||||
close (fd);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (close (fd) < 0) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
pandora_applet_create_user_dir (PandoraApplet *applet)
|
||||
{
|
||||
if (!g_file_test (applet->priv->userdir, G_FILE_TEST_IS_DIR)) {
|
||||
if (g_mkdir (applet->priv->userdir, 0755) != 0) {
|
||||
g_error ("Cannot create user's directory");
|
||||
}
|
||||
}
|
||||
|
||||
if (!g_file_test (applet->priv->userfile, G_FILE_TEST_IS_REGULAR)) {
|
||||
if (!pandora_applet_create_setup_file (applet)) {
|
||||
g_error ("Cannot create user's configuration file");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,56 +0,0 @@
|
|||
/*
|
||||
Copyright (C) 2006 Artica ST.
|
||||
Written by Esteban Sanchez.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef APPLET_H
|
||||
#define APPLET_H
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
#include "eggtrayicon.h"
|
||||
|
||||
#define PANDORA_TYPE_APPLET (pandora_applet_get_type())
|
||||
#define PANDORA_APPLET(object) (G_TYPE_CHECK_INSTANCE_CAST((object), PANDORA_TYPE_APPLET, PandoraApplet))
|
||||
#define PANDORA_APPLET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PANDORA_TYPE_APPLET, PandoraAppletClass))
|
||||
#define PANDORA_IS_APPLET(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), PANDORA_TYPE_APPLET))
|
||||
#define PANDORA_IS_APPLET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PANDORA_TYPE_APPLET))
|
||||
#define PANDORA_APPLET_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), PANDORA_TYPE_APPLET, PandoraAppletClass))
|
||||
|
||||
typedef struct _PandoraAppletPrivate PandoraAppletPrivate;
|
||||
|
||||
typedef struct {
|
||||
EggTrayIconClass parent_class;
|
||||
} PandoraAppletClass;
|
||||
|
||||
/*
|
||||
* Applet instance data
|
||||
*
|
||||
*/
|
||||
typedef struct {
|
||||
EggTrayIcon parent;
|
||||
PandoraAppletPrivate *priv;
|
||||
} PandoraApplet;
|
||||
|
||||
PandoraApplet *pandora_applet_new (void);
|
||||
|
||||
GdkPixbuf *load_icon_from_disk (gchar *icon_name);
|
||||
|
||||
#endif
|
|
@ -1,453 +0,0 @@
|
|||
/*
|
||||
Copyright (C) 2006 Artica ST.
|
||||
Written by Esteban Sanchez.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <glib.h>
|
||||
#include <glib/gi18n.h>
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
#include "pandora-applet.h"
|
||||
#include "pandora-info-window.h"
|
||||
|
||||
struct _PandoraInfoWindowPrivate {
|
||||
GtkWidget *label_alerts;
|
||||
GtkWidget *label_servers;
|
||||
GtkWidget *label_agents;
|
||||
|
||||
GtkImage *image_alerts;
|
||||
GtkImage *image_servers;
|
||||
GtkImage *image_agents;
|
||||
|
||||
GdkPixbuf *pixbuf_alerts_ok;
|
||||
GdkPixbuf *pixbuf_alerts_bad;
|
||||
GdkPixbuf *pixbuf_alerts_unknown;
|
||||
|
||||
GdkPixbuf *pixbuf_servers_ok;
|
||||
GdkPixbuf *pixbuf_servers_bad;
|
||||
GdkPixbuf *pixbuf_servers_unknown;
|
||||
|
||||
GdkPixbuf *pixbuf_agents_ok;
|
||||
GdkPixbuf *pixbuf_agents_bad;
|
||||
GdkPixbuf *pixbuf_agents_unknown;
|
||||
|
||||
PandoraState state_alerts;
|
||||
PandoraState state_servers;
|
||||
PandoraState state_agents;
|
||||
|
||||
PandoraStatus *status;
|
||||
};
|
||||
|
||||
#define PANDORA_INFO_WINDOW_GET_PRIVATE(object) \
|
||||
(G_TYPE_INSTANCE_GET_PRIVATE ((object), PANDORA_INFO_WINDOW_TYPE, \
|
||||
PandoraInfoWindowPrivate))
|
||||
|
||||
static void pandora_info_window_init (PandoraInfoWindow *window);
|
||||
static void pandora_info_window_class_init (PandoraInfoWindowClass *klass);
|
||||
static void pandora_info_window_finalize (GObject *object);
|
||||
|
||||
static gboolean pandora_info_window_delete_cb (GtkWidget *dialog,
|
||||
GdkEvent *event,
|
||||
gpointer data);
|
||||
|
||||
static gboolean pandora_info_window_close_cb (GtkWidget *widget,
|
||||
gpointer data);
|
||||
|
||||
static void pandora_info_window_alerts_changed_cb (GObject *object,
|
||||
gint data,
|
||||
gpointer user_data);
|
||||
|
||||
static void pandora_info_window_agents_changed_cb (GObject *object,
|
||||
gint data,
|
||||
gpointer user_data);
|
||||
|
||||
static void pandora_info_window_servers_changed_cb (GObject *object,
|
||||
gint data,
|
||||
gpointer user_data);
|
||||
|
||||
static void pandora_info_window_status_update_all (PandoraInfoWindow *window);
|
||||
|
||||
static void pandora_info_window_status_update_alerts (PandoraInfoWindow *window,
|
||||
PandoraState state);
|
||||
static void pandora_info_window_status_update_agents (PandoraInfoWindow *window,
|
||||
PandoraState state);
|
||||
static void pandora_info_window_status_update_servers (PandoraInfoWindow *window,
|
||||
PandoraState state);
|
||||
|
||||
GType
|
||||
pandora_info_window_get_type (void)
|
||||
{
|
||||
static GType type = 0;
|
||||
|
||||
if (!type) {
|
||||
static const GTypeInfo info = {
|
||||
sizeof (PandoraInfoWindowClass),
|
||||
(GBaseInitFunc) NULL,
|
||||
(GBaseFinalizeFunc) NULL,
|
||||
(GClassInitFunc) pandora_info_window_class_init,
|
||||
NULL,
|
||||
NULL,
|
||||
sizeof (PandoraInfoWindow),
|
||||
0,
|
||||
(GInstanceInitFunc) pandora_info_window_init
|
||||
};
|
||||
|
||||
type = g_type_register_static (GTK_TYPE_WINDOW, "PandoraInfoWindow",
|
||||
&info, 0);
|
||||
}
|
||||
|
||||
return type;
|
||||
}
|
||||
|
||||
static void
|
||||
pandora_info_window_init (PandoraInfoWindow *window)
|
||||
{
|
||||
GtkWidget *table;
|
||||
GtkWidget *image;
|
||||
GtkWidget *hbutton_box;
|
||||
GtkWidget *button_close;
|
||||
|
||||
window->priv = PANDORA_INFO_WINDOW_GET_PRIVATE (window);
|
||||
|
||||
window->priv->status = NULL;
|
||||
window->priv->state_alerts = STATE_INVALID;
|
||||
window->priv->state_servers = STATE_INVALID;
|
||||
window->priv->state_agents = STATE_INVALID;
|
||||
|
||||
window->priv->pixbuf_alerts_ok = load_icon_from_disk ("pandora-alerts-ok.png");
|
||||
window->priv->pixbuf_alerts_bad = load_icon_from_disk ("pandora-alerts-bad.png");
|
||||
window->priv->pixbuf_alerts_unknown = load_icon_from_disk ("pandora-alerts-unknown.png");
|
||||
window->priv->image_alerts = GTK_IMAGE (gtk_image_new ());
|
||||
|
||||
window->priv->pixbuf_servers_ok = load_icon_from_disk ("pandora-servers-ok.png");
|
||||
window->priv->pixbuf_servers_bad = load_icon_from_disk ("pandora-servers-bad.png");
|
||||
window->priv->pixbuf_servers_unknown = load_icon_from_disk ("pandora-servers-unknown.png");
|
||||
window->priv->image_servers = GTK_IMAGE (gtk_image_new ());
|
||||
|
||||
window->priv->pixbuf_agents_ok = load_icon_from_disk ("pandora-agents-ok.png");
|
||||
window->priv->pixbuf_agents_bad = load_icon_from_disk ("pandora-agents-bad.png");
|
||||
window->priv->pixbuf_agents_unknown = load_icon_from_disk ("pandora-agents-unknown.png");
|
||||
window->priv->image_agents = GTK_IMAGE (gtk_image_new ());
|
||||
|
||||
gtk_window_set_title (GTK_WINDOW (window), _("Pandora status"));
|
||||
gtk_container_set_border_width (GTK_CONTAINER (window), 5);
|
||||
gtk_window_set_icon_name (GTK_WINDOW (window),
|
||||
GTK_STOCK_INFO);
|
||||
|
||||
table = gtk_table_new (4, 2, FALSE);
|
||||
gtk_table_set_row_spacings (GTK_TABLE (table), 5);
|
||||
gtk_table_set_col_spacings (GTK_TABLE (table), 5);
|
||||
|
||||
/* First row */
|
||||
window->priv->label_alerts = gtk_label_new (_("Alerts status."));
|
||||
gtk_misc_set_alignment (GTK_MISC (window->priv->label_alerts), 0, 0.5);
|
||||
|
||||
gtk_image_set_from_pixbuf (window->priv->image_alerts,
|
||||
window->priv->pixbuf_alerts_unknown);
|
||||
|
||||
gtk_table_attach (GTK_TABLE (table), GTK_WIDGET (window->priv->image_alerts),
|
||||
0, 1, 0, 1, GTK_FILL , GTK_FILL, 0, 0);
|
||||
gtk_table_attach (GTK_TABLE (table), window->priv->label_alerts,
|
||||
1, 2, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
|
||||
|
||||
/* Second row */
|
||||
window->priv->label_agents = gtk_label_new (_("Agents status."));
|
||||
gtk_misc_set_alignment (GTK_MISC (window->priv->label_agents), 0, 0.5);
|
||||
|
||||
gtk_image_set_from_pixbuf (window->priv->image_agents,
|
||||
window->priv->pixbuf_agents_unknown);
|
||||
|
||||
gtk_table_attach (GTK_TABLE (table), GTK_WIDGET (window->priv->image_agents),
|
||||
0, 1, 1, 2, GTK_FILL , GTK_FILL, 0, 0);
|
||||
gtk_table_attach (GTK_TABLE (table), window->priv->label_agents,
|
||||
1, 2, 1, 2, GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
|
||||
|
||||
/* Third row */
|
||||
window->priv->label_servers = gtk_label_new (_("Servers status."));
|
||||
gtk_misc_set_alignment (GTK_MISC (window->priv->label_servers), 0, 0.5);
|
||||
|
||||
gtk_image_set_from_pixbuf (window->priv->image_servers,
|
||||
window->priv->pixbuf_servers_unknown);
|
||||
|
||||
gtk_table_attach (GTK_TABLE (table), GTK_WIDGET (window->priv->image_servers),
|
||||
0, 1, 2, 3, GTK_FILL , GTK_FILL, 0, 0);
|
||||
gtk_table_attach (GTK_TABLE (table), window->priv->label_servers,
|
||||
1, 2, 2, 3, GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
|
||||
|
||||
/* Buttons at the bottom */
|
||||
hbutton_box = gtk_hbutton_box_new ();
|
||||
gtk_button_box_set_layout (GTK_BUTTON_BOX (hbutton_box),
|
||||
GTK_BUTTONBOX_END);
|
||||
|
||||
button_close = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
|
||||
g_signal_connect (G_OBJECT (button_close), "clicked",
|
||||
G_CALLBACK (pandora_info_window_close_cb),
|
||||
(gpointer) window);
|
||||
|
||||
gtk_box_pack_start (GTK_BOX (hbutton_box), button_close,
|
||||
FALSE, TRUE, 5);
|
||||
|
||||
gtk_table_attach (GTK_TABLE (table), hbutton_box,
|
||||
0, 2, 3, 4, GTK_FILL, 0, 0, 0);
|
||||
|
||||
gtk_widget_show_all (table);
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (window), table);
|
||||
|
||||
g_signal_connect (G_OBJECT (window), "delete-event",
|
||||
G_CALLBACK (pandora_info_window_delete_cb), NULL);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
pandora_info_window_class_init (PandoraInfoWindowClass *klass)
|
||||
{
|
||||
GObjectClass *object_class;
|
||||
|
||||
g_type_class_add_private (klass, sizeof (PandoraInfoWindowPrivate));
|
||||
|
||||
object_class = G_OBJECT_CLASS (klass);
|
||||
object_class->finalize = pandora_info_window_finalize;
|
||||
}
|
||||
|
||||
static void
|
||||
pandora_info_window_finalize (GObject *object)
|
||||
{
|
||||
PandoraInfoWindow *window = PANDORA_INFO_WINDOW (object);
|
||||
|
||||
if (window->priv->status) {
|
||||
g_object_unref (window->priv->status);
|
||||
window->priv->status = NULL;
|
||||
}
|
||||
|
||||
if (window->priv->pixbuf_alerts_ok) {
|
||||
g_object_unref (window->priv->pixbuf_alerts_ok);
|
||||
window->priv->pixbuf_alerts_ok = NULL;
|
||||
}
|
||||
|
||||
if (window->priv->pixbuf_servers_ok) {
|
||||
g_object_unref (window->priv->pixbuf_servers_ok);
|
||||
window->priv->pixbuf_servers_ok = NULL;
|
||||
}
|
||||
|
||||
if (window->priv->pixbuf_agents_ok) {
|
||||
g_object_unref (window->priv->pixbuf_agents_ok);
|
||||
window->priv->pixbuf_agents_ok = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
pandora_info_window_new (void)
|
||||
{
|
||||
GtkWidget *window;
|
||||
|
||||
window = GTK_WIDGET (g_object_new (PANDORA_INFO_WINDOW_TYPE,
|
||||
"type", GTK_WINDOW_TOPLEVEL,
|
||||
"default-width", 300,
|
||||
"resizable", FALSE,
|
||||
NULL));
|
||||
|
||||
gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);
|
||||
|
||||
return window;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
pandora_info_window_close_cb (GtkWidget *widget,
|
||||
gpointer data)
|
||||
{
|
||||
GtkWidget *window;
|
||||
|
||||
if (data != NULL) {
|
||||
window = GTK_WIDGET (data);
|
||||
gtk_widget_hide (window);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
pandora_info_window_delete_cb (GtkWidget *widget,
|
||||
GdkEvent *event,
|
||||
gpointer data)
|
||||
{
|
||||
gtk_widget_hide (widget);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
pandora_info_window_set_status (PandoraInfoWindow *window,
|
||||
PandoraStatus *status)
|
||||
{
|
||||
if (window->priv->status) {
|
||||
g_object_unref (window->priv->status);
|
||||
}
|
||||
|
||||
window->priv->status = status;
|
||||
|
||||
g_signal_connect (status, "changed_alerts",
|
||||
G_CALLBACK (pandora_info_window_alerts_changed_cb),
|
||||
(gpointer) window);
|
||||
g_signal_connect (status, "changed_agents",
|
||||
G_CALLBACK (pandora_info_window_agents_changed_cb),
|
||||
(gpointer) window);
|
||||
g_signal_connect (status, "changed_servers",
|
||||
G_CALLBACK (pandora_info_window_servers_changed_cb),
|
||||
(gpointer) window);
|
||||
|
||||
pandora_info_window_status_update_all (window);
|
||||
}
|
||||
|
||||
static void
|
||||
pandora_info_window_status_update_alerts (PandoraInfoWindow *window,
|
||||
PandoraState state)
|
||||
{
|
||||
switch (state) {
|
||||
case STATE_BAD:
|
||||
gtk_image_set_from_pixbuf (window->priv->image_alerts,
|
||||
window->priv->pixbuf_alerts_bad);
|
||||
gtk_label_set_text (GTK_LABEL (window->priv->label_alerts),
|
||||
_("There are agents with alerts."));
|
||||
|
||||
break;
|
||||
case STATE_OK:
|
||||
gtk_image_set_from_pixbuf (window->priv->image_alerts,
|
||||
window->priv->pixbuf_alerts_ok);
|
||||
gtk_label_set_text (GTK_LABEL (window->priv->label_alerts),
|
||||
_("There are no alerts."));
|
||||
break;
|
||||
default:
|
||||
gtk_image_set_from_pixbuf (window->priv->image_alerts,
|
||||
window->priv->pixbuf_alerts_unknown);
|
||||
gtk_label_set_text (GTK_LABEL (window->priv->label_alerts),
|
||||
_("Alerts status unknown."));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
pandora_info_window_status_update_agents (PandoraInfoWindow *window,
|
||||
PandoraState state)
|
||||
{
|
||||
switch (state) {
|
||||
case STATE_BAD:
|
||||
gtk_image_set_from_pixbuf (window->priv->image_agents,
|
||||
window->priv->pixbuf_agents_bad);
|
||||
gtk_label_set_text (GTK_LABEL (window->priv->label_agents),
|
||||
_("There are agents down."));
|
||||
|
||||
break;
|
||||
case STATE_OK:
|
||||
gtk_image_set_from_pixbuf (window->priv->image_agents,
|
||||
window->priv->pixbuf_agents_ok);
|
||||
gtk_label_set_text (GTK_LABEL (window->priv->label_agents),
|
||||
_("All the agents are running."));
|
||||
break;
|
||||
default:
|
||||
gtk_image_set_from_pixbuf (window->priv->image_agents,
|
||||
window->priv->pixbuf_agents_unknown);
|
||||
gtk_label_set_text (GTK_LABEL (window->priv->label_agents),
|
||||
_("Agents status unknown."));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
pandora_info_window_status_update_servers (PandoraInfoWindow *window,
|
||||
PandoraState state)
|
||||
{
|
||||
switch (state) {
|
||||
case STATE_BAD:
|
||||
gtk_image_set_from_pixbuf (window->priv->image_servers,
|
||||
window->priv->pixbuf_servers_bad);
|
||||
gtk_label_set_text (GTK_LABEL (window->priv->label_servers),
|
||||
_("There are servers down."));
|
||||
|
||||
break;
|
||||
case STATE_OK:
|
||||
gtk_image_set_from_pixbuf (window->priv->image_servers,
|
||||
window->priv->pixbuf_servers_ok);
|
||||
gtk_label_set_text (GTK_LABEL (window->priv->label_servers),
|
||||
_("All the servers are running."));
|
||||
break;
|
||||
default:
|
||||
gtk_image_set_from_pixbuf (window->priv->image_servers,
|
||||
window->priv->pixbuf_servers_unknown);
|
||||
gtk_label_set_text (GTK_LABEL (window->priv->label_servers),
|
||||
_("Servers status unknown."));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
pandora_info_window_status_update_all (PandoraInfoWindow *window)
|
||||
{
|
||||
PandoraState state;
|
||||
|
||||
if (window->priv->status == NULL) {
|
||||
pandora_info_window_status_update_alerts (window, TRUE);
|
||||
pandora_info_window_status_update_agents (window, TRUE);
|
||||
pandora_info_window_status_update_servers (window, TRUE);
|
||||
} else {
|
||||
state = pandora_status_get_alerts (window->priv->status);
|
||||
pandora_info_window_status_update_alerts (window, state);
|
||||
|
||||
state = pandora_status_get_agents (window->priv->status);
|
||||
pandora_info_window_status_update_agents (window, state);
|
||||
|
||||
state = pandora_status_get_servers (window->priv->status);
|
||||
pandora_info_window_status_update_servers (window, state);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
pandora_info_window_alerts_changed_cb (GObject *object,
|
||||
gint data,
|
||||
gpointer user_data)
|
||||
{
|
||||
PandoraState state = data;
|
||||
PandoraInfoWindow *window = PANDORA_INFO_WINDOW (user_data);
|
||||
|
||||
pandora_info_window_status_update_alerts (window, state);
|
||||
}
|
||||
|
||||
static void
|
||||
pandora_info_window_agents_changed_cb (GObject *object,
|
||||
gint data,
|
||||
gpointer user_data)
|
||||
{
|
||||
PandoraState state = data;
|
||||
PandoraInfoWindow *window = PANDORA_INFO_WINDOW (user_data);
|
||||
|
||||
pandora_info_window_status_update_agents (window, state);
|
||||
}
|
||||
|
||||
static void
|
||||
pandora_info_window_servers_changed_cb (GObject *object,
|
||||
gint data,
|
||||
gpointer user_data)
|
||||
{
|
||||
PandoraState state = data;
|
||||
PandoraInfoWindow *window = PANDORA_INFO_WINDOW (user_data);
|
||||
|
||||
pandora_info_window_status_update_servers (window, state);
|
||||
}
|
|
@ -1,53 +0,0 @@
|
|||
/*
|
||||
Copyright (C) 2006 Artica ST.
|
||||
Written by Esteban Sanchez.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef INFO_WINDOW_H
|
||||
#define INFO_WINDOW_H
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include "pandora-status.h"
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
#define PANDORA_INFO_WINDOW_TYPE (pandora_info_window_get_type())
|
||||
#define PANDORA_INFO_WINDOW(object) (G_TYPE_CHECK_INSTANCE_CAST((object), PANDORA_INFO_WINDOW_TYPE, PandoraInfoWindow))
|
||||
#define PANDORA_INFO_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PANDORA_INFO_WINDOW_TYPE, PandoraInfoWindowClass))
|
||||
#define PANDORA_IS_INFO_WINDOW(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), PANDORA_INFO_WINDOW_TYPE))
|
||||
#define PANDORA_IS_INFO_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PANDORA_INFO_WINDOW_TYPE))
|
||||
#define PANDORA_INFO_WINDOW_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), PANDORA_INFO_WINDOW_TYPE, PandoraInfoWindowClass))
|
||||
|
||||
typedef struct _PandoraInfoWindowPrivate PandoraInfoWindowPrivate;
|
||||
|
||||
typedef struct {
|
||||
GtkWindowClass parent_class;
|
||||
} PandoraInfoWindowClass;
|
||||
|
||||
typedef struct {
|
||||
GtkWindow parent;
|
||||
PandoraInfoWindowPrivate *priv;
|
||||
} PandoraInfoWindow;
|
||||
|
||||
GtkWidget *pandora_info_window_new (void);
|
||||
void pandora_info_window_set_status (PandoraInfoWindow *window,
|
||||
PandoraStatus *status);
|
||||
|
||||
#endif
|
|
@ -1,292 +0,0 @@
|
|||
/*
|
||||
Copyright (C) 2006 Artica ST.
|
||||
Written by Esteban Sanchez.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <glib.h>
|
||||
#include <glib/gi18n.h>
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
#include "pandora-setup-dialog.h"
|
||||
|
||||
struct _PandoraSetupDialogPrivate {
|
||||
GtkWidget *entry_host;
|
||||
GtkWidget *entry_username;
|
||||
GtkWidget *entry_password;
|
||||
gchar *real_password;
|
||||
GtkWidget *entry_dbname;
|
||||
|
||||
PandoraSetup *setup;
|
||||
};
|
||||
|
||||
#define PANDORA_SETUP_DIALOG_GET_PRIVATE(object) \
|
||||
(G_TYPE_INSTANCE_GET_PRIVATE ((object), PANDORA_SETUP_DIALOG_TYPE, \
|
||||
PandoraSetupDialogPrivate))
|
||||
|
||||
static void pandora_setup_dialog_init (PandoraSetupDialog *dialog);
|
||||
static void pandora_setup_dialog_class_init (PandoraSetupDialogClass *klass);
|
||||
static void pandora_setup_dialog_finalize (GObject *object);
|
||||
|
||||
static gboolean pandora_setup_close_cb (GtkWidget *dialog, gpointer data);
|
||||
|
||||
GType
|
||||
pandora_setup_dialog_get_type (void)
|
||||
{
|
||||
static GType type = 0;
|
||||
|
||||
if (!type) {
|
||||
static const GTypeInfo info = {
|
||||
sizeof (PandoraSetupDialogClass),
|
||||
(GBaseInitFunc) NULL,
|
||||
(GBaseFinalizeFunc) NULL,
|
||||
(GClassInitFunc) pandora_setup_dialog_class_init,
|
||||
NULL,
|
||||
NULL,
|
||||
sizeof (PandoraSetupDialog),
|
||||
0,
|
||||
(GInstanceInitFunc) pandora_setup_dialog_init
|
||||
};
|
||||
|
||||
type = g_type_register_static (GTK_TYPE_DIALOG, "PandoraSetupDialog",
|
||||
&info, 0);
|
||||
}
|
||||
|
||||
return type;
|
||||
}
|
||||
|
||||
static void
|
||||
pandora_setup_dialog_init (PandoraSetupDialog *dialog)
|
||||
{
|
||||
GtkWidget *table;
|
||||
GtkWidget *hbutton_box;
|
||||
GtkWidget *button_close;
|
||||
GtkWidget *frame;
|
||||
GtkWidget *label_title;
|
||||
GtkWidget *label;
|
||||
GtkWidget *alignment;
|
||||
gchar *str;
|
||||
|
||||
dialog->priv = PANDORA_SETUP_DIALOG_GET_PRIVATE (dialog);
|
||||
dialog->priv->setup = NULL;
|
||||
|
||||
|
||||
gtk_window_set_title (GTK_WINDOW (dialog), _("Preferences"));
|
||||
gtk_container_set_border_width (GTK_CONTAINER (dialog), 5);
|
||||
gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog)->vbox), 12);
|
||||
gtk_window_set_destroy_with_parent (GTK_WINDOW (dialog), TRUE);
|
||||
gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE);
|
||||
|
||||
gtk_dialog_add_buttons (GTK_DIALOG (dialog),
|
||||
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
|
||||
GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
|
||||
NULL);
|
||||
gtk_dialog_set_default_response (GTK_DIALOG (dialog),
|
||||
GTK_RESPONSE_CANCEL);
|
||||
|
||||
gtk_window_set_icon_name (GTK_WINDOW (dialog),
|
||||
GTK_STOCK_PREFERENCES);
|
||||
/* Frame */
|
||||
str = g_strdup_printf ("<b>%s:</b>", _("Database connection"));
|
||||
label_title = gtk_label_new (NULL);
|
||||
gtk_label_set_markup (GTK_LABEL (label_title), str);
|
||||
g_free (str);
|
||||
gtk_misc_set_alignment (GTK_MISC (label_title), 0, 0.5);
|
||||
|
||||
frame = gtk_frame_new (NULL);
|
||||
gtk_frame_set_label_widget (GTK_FRAME (frame), label_title);
|
||||
gtk_container_set_border_width (GTK_CONTAINER (frame), 5);
|
||||
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_NONE);
|
||||
|
||||
/* Table inside frame */
|
||||
table = gtk_table_new (4, 2, FALSE);
|
||||
gtk_table_set_row_spacings (GTK_TABLE (table), 5);
|
||||
gtk_table_set_col_spacings (GTK_TABLE (table), 5);
|
||||
|
||||
/* First row */
|
||||
label = gtk_label_new (_("Host"));
|
||||
gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
|
||||
|
||||
dialog->priv->entry_host = gtk_entry_new ();
|
||||
|
||||
gtk_table_attach (GTK_TABLE (table), label,
|
||||
0, 1, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
|
||||
gtk_table_attach (GTK_TABLE (table), dialog->priv->entry_host,
|
||||
1, 2, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
|
||||
|
||||
/* Second row */
|
||||
label = gtk_label_new (_("Username"));
|
||||
gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
|
||||
|
||||
dialog->priv->entry_username = gtk_entry_new ();
|
||||
|
||||
gtk_table_attach (GTK_TABLE (table), label,
|
||||
0, 1, 1, 2, GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
|
||||
gtk_table_attach (GTK_TABLE (table), dialog->priv->entry_username,
|
||||
1, 2, 1, 2, GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
|
||||
|
||||
/* Third row */
|
||||
label = gtk_label_new (_("Password"));
|
||||
gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
|
||||
|
||||
dialog->priv->entry_password = gtk_entry_new ();
|
||||
gtk_entry_set_invisible_char (GTK_ENTRY (dialog->priv->entry_password),
|
||||
'*');
|
||||
gtk_entry_set_visibility (GTK_ENTRY (dialog->priv->entry_password),
|
||||
FALSE);
|
||||
|
||||
gtk_table_attach (GTK_TABLE (table), label,
|
||||
0, 1, 2, 3, GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
|
||||
gtk_table_attach (GTK_TABLE (table), dialog->priv->entry_password,
|
||||
1, 2, 2, 3, GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
|
||||
|
||||
/* Fourth row */
|
||||
label = gtk_label_new (_("Database name"));
|
||||
gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
|
||||
|
||||
dialog->priv->entry_dbname = gtk_entry_new ();
|
||||
|
||||
gtk_table_attach (GTK_TABLE (table), label,
|
||||
0, 1, 3, 4, GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
|
||||
gtk_table_attach (GTK_TABLE (table), dialog->priv->entry_dbname,
|
||||
1, 2, 3, 4, GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
|
||||
|
||||
alignment = gtk_alignment_new (0.5, 0.5, 1.0, 1.0);
|
||||
gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 0, 0, 12, 0);
|
||||
gtk_container_add (GTK_CONTAINER (alignment), table);
|
||||
gtk_container_add (GTK_CONTAINER (frame), alignment);
|
||||
|
||||
gtk_widget_show_all (frame);
|
||||
|
||||
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), frame, FALSE, FALSE, 0);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
pandora_setup_dialog_class_init (PandoraSetupDialogClass *klass)
|
||||
{
|
||||
GObjectClass *object_class;
|
||||
|
||||
g_type_class_add_private (klass, sizeof (PandoraSetupDialogPrivate));
|
||||
|
||||
object_class = G_OBJECT_CLASS (klass);
|
||||
object_class->finalize = pandora_setup_dialog_finalize;
|
||||
}
|
||||
|
||||
static void
|
||||
pandora_setup_dialog_finalize (GObject *object)
|
||||
{
|
||||
PandoraSetupDialog *dialog;
|
||||
|
||||
dialog = PANDORA_SETUP_DIALOG (object);
|
||||
|
||||
if (dialog->priv->setup) {
|
||||
g_object_unref (dialog->priv->setup);
|
||||
}
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
pandora_setup_dialog_new (void)
|
||||
{
|
||||
GtkWidget *dialog;
|
||||
|
||||
dialog = GTK_WIDGET (g_object_new (PANDORA_SETUP_DIALOG_TYPE,
|
||||
NULL));
|
||||
return dialog;
|
||||
}
|
||||
|
||||
void
|
||||
pandora_setup_dialog_set_setup (PandoraSetupDialog *dialog,
|
||||
PandoraSetup *setup)
|
||||
{
|
||||
gchar *value;
|
||||
|
||||
if (dialog->priv->setup) {
|
||||
g_object_unref (dialog->priv->setup);
|
||||
}
|
||||
|
||||
dialog->priv->setup = setup;
|
||||
g_object_ref (G_OBJECT (setup));
|
||||
|
||||
value = pandora_setup_get_host (setup);
|
||||
if (value) {
|
||||
gtk_entry_set_text (GTK_ENTRY (dialog->priv->entry_host),
|
||||
value);
|
||||
g_free (value);
|
||||
value = NULL;
|
||||
} else {
|
||||
gtk_entry_set_text (GTK_ENTRY (dialog->priv->entry_host),
|
||||
"");
|
||||
}
|
||||
|
||||
value = pandora_setup_get_username (setup);
|
||||
if (value) {
|
||||
gtk_entry_set_text (GTK_ENTRY (dialog->priv->entry_username),
|
||||
value);
|
||||
g_free (value);
|
||||
} else {
|
||||
gtk_entry_set_text (GTK_ENTRY (dialog->priv->entry_username),
|
||||
"");
|
||||
}
|
||||
|
||||
value = pandora_setup_get_password (setup);
|
||||
if (value) {
|
||||
gtk_entry_set_text (GTK_ENTRY (dialog->priv->entry_password),
|
||||
NOT_SHOWN_PASSWORD);
|
||||
g_free (value);
|
||||
} else {
|
||||
gtk_entry_set_text (GTK_ENTRY (dialog->priv->entry_password),
|
||||
"");
|
||||
}
|
||||
|
||||
value = pandora_setup_get_dbname (setup);
|
||||
if (value) {
|
||||
gtk_entry_set_text (GTK_ENTRY (dialog->priv->entry_dbname),
|
||||
value);
|
||||
g_free (value);
|
||||
} else {
|
||||
gtk_entry_set_text (GTK_ENTRY (dialog->priv->entry_dbname),
|
||||
"");
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
pandora_setup_dialog_apply_changes (PandoraSetupDialog *dialog)
|
||||
{
|
||||
const gchar *host;
|
||||
const gchar *username;
|
||||
const gchar *password;
|
||||
const gchar *dbname;
|
||||
|
||||
host = gtk_entry_get_text (GTK_ENTRY (dialog->priv->entry_host));
|
||||
username = gtk_entry_get_text (GTK_ENTRY (dialog->priv->entry_username));
|
||||
password = gtk_entry_get_text (GTK_ENTRY (dialog->priv->entry_password));
|
||||
dbname = gtk_entry_get_text (GTK_ENTRY (dialog->priv->entry_dbname));
|
||||
|
||||
g_object_set (G_OBJECT (dialog->priv->setup),
|
||||
"host", host,
|
||||
"username", username,
|
||||
"dbname", dbname,
|
||||
NULL);
|
||||
|
||||
if (g_ascii_strcasecmp (password, NOT_SHOWN_PASSWORD) != 0) {
|
||||
pandora_setup_set_password (dialog->priv->setup, password);
|
||||
}
|
||||
}
|
|
@ -1,57 +0,0 @@
|
|||
/*
|
||||
Copyright (C) 2006 Artica ST.
|
||||
Written by Esteban Sanchez.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef SETUP_DIALOG_H
|
||||
#define SETUP_DIALOG_H
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
#include "pandora-setup.h"
|
||||
|
||||
#define NOT_SHOWN_PASSWORD "nonenonenone"
|
||||
|
||||
#define PANDORA_SETUP_DIALOG_TYPE (pandora_setup_dialog_get_type())
|
||||
#define PANDORA_SETUP_DIALOG(object) (G_TYPE_CHECK_INSTANCE_CAST((object), PANDORA_SETUP_DIALOG_TYPE, PandoraSetupDialog))
|
||||
#define PANDORA_SETUP_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PANDORA_SETUP_DIALOG_TYPE, PandoraSetupDialogClass))
|
||||
#define PANDORA_IS_SETUP_DIALOG(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), PANDORA_SETUP_DIALOG_TYPE))
|
||||
#define PANDORA_IS_SETUP_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PANDORA_SETUP_DIALOG_TYPE))
|
||||
#define PANDORA_SETUP_DIALOG_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), PANDORA_SETUP_DIALOG_TYPE, PandoraSetupDialogClass))
|
||||
|
||||
typedef struct _PandoraSetupDialogPrivate PandoraSetupDialogPrivate;
|
||||
|
||||
typedef struct {
|
||||
GtkDialogClass parent_class;
|
||||
} PandoraSetupDialogClass;
|
||||
|
||||
typedef struct {
|
||||
GtkDialog parent;
|
||||
PandoraSetupDialogPrivate *priv;
|
||||
} PandoraSetupDialog;
|
||||
|
||||
GtkWidget *pandora_setup_dialog_new (void);
|
||||
|
||||
void pandora_setup_dialog_set_setup (PandoraSetupDialog *dialog,
|
||||
PandoraSetup *setup);
|
||||
void pandora_setup_dialog_apply_changes (PandoraSetupDialog *dialog);
|
||||
|
||||
#endif
|
|
@ -1,420 +0,0 @@
|
|||
/*
|
||||
Copyright (C) 2006 Artica ST.
|
||||
Written by Esteban Sanchez.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include "pandora-setup.h"
|
||||
|
||||
#include <libxml/tree.h>
|
||||
#include <libxml/encoding.h>
|
||||
#include <libxml/xmlwriter.h>
|
||||
|
||||
enum {
|
||||
PROP_0,
|
||||
PROP_HOST,
|
||||
PROP_USERNAME,
|
||||
PROP_PASSWORD,
|
||||
PROP_DBNAME
|
||||
};
|
||||
|
||||
struct _PandoraSetupPrivate {
|
||||
gchar *config_file;
|
||||
|
||||
gchar *host;
|
||||
gchar *username;
|
||||
gchar *password;
|
||||
gchar *dbname;
|
||||
};
|
||||
|
||||
#define PANDORA_SETUP_GET_PRIVATE(object) \
|
||||
(G_TYPE_INSTANCE_GET_PRIVATE ((object), PANDORA_TYPE_SETUP, \
|
||||
PandoraSetupPrivate))
|
||||
|
||||
static GObjectClass *parent_class = NULL;
|
||||
|
||||
static void pandora_setup_read_config_file (PandoraSetup *setup, gchar *file);
|
||||
static void pandora_setup_init (PandoraSetup *pandora_setup);
|
||||
static void pandora_setup_class_init (PandoraSetupClass *klass);
|
||||
static void pandora_setup_finalize (GObject *object);
|
||||
static void pandora_setup_get_property (GObject *object,
|
||||
guint prop_id,
|
||||
GValue *value,
|
||||
GParamSpec *pspec);
|
||||
static void pandora_setup_set_property (GObject *object,
|
||||
guint prop_id,
|
||||
const GValue *value,
|
||||
GParamSpec *pspec);
|
||||
|
||||
GType
|
||||
pandora_setup_get_type (void)
|
||||
{
|
||||
static GType type = 0;
|
||||
|
||||
if (!type) {
|
||||
static const GTypeInfo info = {
|
||||
sizeof (PandoraSetupClass),
|
||||
(GBaseInitFunc) NULL,
|
||||
(GBaseFinalizeFunc) NULL,
|
||||
(GClassInitFunc) pandora_setup_class_init,
|
||||
NULL,
|
||||
NULL,
|
||||
sizeof (PandoraSetup),
|
||||
0,
|
||||
(GInstanceInitFunc) pandora_setup_init
|
||||
};
|
||||
|
||||
type = g_type_register_static (G_TYPE_OBJECT, "PandoraSetup",
|
||||
&info, 0);
|
||||
}
|
||||
|
||||
return type;
|
||||
}
|
||||
|
||||
static void
|
||||
pandora_setup_init (PandoraSetup *setup)
|
||||
{
|
||||
setup->priv = PANDORA_SETUP_GET_PRIVATE (setup);
|
||||
|
||||
setup->priv->host = NULL;
|
||||
setup->priv->username = NULL;
|
||||
setup->priv->password = NULL;
|
||||
setup->priv->dbname = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
pandora_setup_class_init (PandoraSetupClass *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
parent_class = g_type_class_peek_parent (klass);
|
||||
|
||||
g_type_class_add_private (klass, sizeof (PandoraSetupPrivate));
|
||||
|
||||
object_class->set_property = pandora_setup_set_property;
|
||||
object_class->get_property = pandora_setup_get_property;
|
||||
|
||||
g_object_class_install_property (object_class,
|
||||
PROP_HOST,
|
||||
g_param_spec_string ("host",
|
||||
"Host",
|
||||
"Host to connect to",
|
||||
NULL,
|
||||
G_PARAM_READWRITE));
|
||||
g_object_class_install_property (object_class,
|
||||
PROP_USERNAME,
|
||||
g_param_spec_string ("username",
|
||||
"Username",
|
||||
"Username to use in the connection",
|
||||
NULL,
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property (object_class,
|
||||
PROP_PASSWORD,
|
||||
g_param_spec_string ("password",
|
||||
"Password",
|
||||
"Password to use in the connection",
|
||||
NULL,
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property (object_class,
|
||||
PROP_DBNAME,
|
||||
g_param_spec_string ("dbname",
|
||||
"Database name",
|
||||
"Database name to connect to",
|
||||
NULL,
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
object_class->finalize = pandora_setup_finalize;
|
||||
}
|
||||
|
||||
static void
|
||||
pandora_setup_finalize (GObject *object)
|
||||
{
|
||||
PandoraSetup *setup = PANDORA_SETUP (object);
|
||||
|
||||
/* Make persistent */
|
||||
pandora_setup_save_to_disk (setup);
|
||||
|
||||
if (setup->priv->config_file) {
|
||||
g_free (setup->priv->config_file);
|
||||
setup->priv->config_file = NULL;
|
||||
}
|
||||
|
||||
if (setup->priv->host) {
|
||||
g_free (setup->priv->host);
|
||||
setup->priv->host = NULL;
|
||||
}
|
||||
|
||||
if (setup->priv->username) {
|
||||
g_free (setup->priv->username);
|
||||
setup->priv->username = NULL;
|
||||
}
|
||||
|
||||
if (setup->priv->password) {
|
||||
g_free (setup->priv->password);
|
||||
setup->priv->password = NULL;
|
||||
}
|
||||
|
||||
if (setup->priv->dbname) {
|
||||
g_free (setup->priv->dbname);
|
||||
setup->priv->dbname = NULL;
|
||||
}
|
||||
|
||||
if (G_OBJECT_CLASS (parent_class)->finalize)
|
||||
(* G_OBJECT_CLASS (parent_class)->finalize) (object);
|
||||
}
|
||||
|
||||
static void
|
||||
pandora_setup_set_property (GObject *object,
|
||||
guint prop_id,
|
||||
const GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
PandoraSetup *setup = PANDORA_SETUP (object);
|
||||
GDate *date;
|
||||
|
||||
switch (prop_id) {
|
||||
case PROP_HOST:
|
||||
g_free (setup->priv->host);
|
||||
setup->priv->host = g_value_dup_string (value);
|
||||
|
||||
break;
|
||||
case PROP_USERNAME:
|
||||
g_free (setup->priv->username);
|
||||
setup->priv->username = g_value_dup_string (value);
|
||||
|
||||
break;
|
||||
case PROP_PASSWORD:
|
||||
g_free (setup->priv->password);
|
||||
setup->priv->password = g_value_dup_string (value);
|
||||
|
||||
break;
|
||||
case PROP_DBNAME:
|
||||
g_free (setup->priv->dbname);
|
||||
setup->priv->dbname = g_value_dup_string (value);
|
||||
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
pandora_setup_get_property (GObject *object,
|
||||
guint prop_id,
|
||||
GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
PandoraSetup *setup = PANDORA_SETUP (object);
|
||||
|
||||
switch (prop_id) {
|
||||
case PROP_HOST:
|
||||
g_value_set_string (value, setup->priv->host);
|
||||
|
||||
break;
|
||||
case PROP_USERNAME:
|
||||
g_value_set_string (value, setup->priv->username);
|
||||
|
||||
break;
|
||||
case PROP_PASSWORD:
|
||||
g_value_set_string (value, setup->priv->password);
|
||||
|
||||
break;
|
||||
case PROP_DBNAME:
|
||||
g_value_set_string (value, setup->priv->dbname);
|
||||
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
}
|
||||
}
|
||||
|
||||
gchar *
|
||||
pandora_setup_get_host (PandoraSetup *setup)
|
||||
{
|
||||
gchar *host = NULL;
|
||||
|
||||
g_return_val_if_fail (PANDORA_IS_SETUP (setup), NULL);
|
||||
|
||||
g_object_get (G_OBJECT (setup), "host", &host, NULL);
|
||||
|
||||
return host;
|
||||
}
|
||||
|
||||
gchar *
|
||||
pandora_setup_get_username (PandoraSetup *setup)
|
||||
{
|
||||
gchar *username = NULL;
|
||||
|
||||
g_return_val_if_fail (PANDORA_IS_SETUP (setup), NULL);
|
||||
|
||||
g_object_get (G_OBJECT (setup), "username", &username, NULL);
|
||||
|
||||
return username;
|
||||
}
|
||||
|
||||
gchar *
|
||||
pandora_setup_get_password (PandoraSetup *setup)
|
||||
{
|
||||
gchar *password = NULL;
|
||||
|
||||
g_return_val_if_fail (PANDORA_IS_SETUP (setup), NULL);
|
||||
|
||||
g_object_get (G_OBJECT (setup), "password", &password, NULL);
|
||||
|
||||
return password;
|
||||
}
|
||||
|
||||
gchar *
|
||||
pandora_setup_get_dbname (PandoraSetup *setup)
|
||||
{
|
||||
gchar *dbname = NULL;
|
||||
|
||||
g_return_val_if_fail (PANDORA_IS_SETUP (setup), NULL);
|
||||
|
||||
g_object_get (G_OBJECT (setup), "dbname", &dbname, NULL);
|
||||
|
||||
return dbname;
|
||||
}
|
||||
|
||||
void
|
||||
pandora_setup_set_host (PandoraSetup *setup, const gchar *host)
|
||||
{
|
||||
g_return_if_fail (PANDORA_IS_SETUP (setup));
|
||||
g_return_if_fail (host != NULL);
|
||||
|
||||
g_object_set (G_OBJECT (setup), "host", host, NULL);
|
||||
}
|
||||
|
||||
void
|
||||
pandora_setup_set_username (PandoraSetup *setup, const gchar *username)
|
||||
{
|
||||
g_return_if_fail (PANDORA_IS_SETUP (setup));
|
||||
g_return_if_fail (username != NULL);
|
||||
|
||||
g_object_set (G_OBJECT (setup), "username", username, NULL);
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
pandora_setup_set_password (PandoraSetup *setup, const gchar *password)
|
||||
{
|
||||
g_return_if_fail (PANDORA_IS_SETUP (setup));
|
||||
g_return_if_fail (password != NULL);
|
||||
|
||||
g_object_set (G_OBJECT (setup), "password", password, NULL);
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
pandora_setup_set_dbname (PandoraSetup *setup, const gchar *dbname)
|
||||
{
|
||||
g_return_if_fail (PANDORA_IS_SETUP (setup));
|
||||
g_return_if_fail (dbname != NULL);
|
||||
|
||||
g_object_set (G_OBJECT (setup), "dbname", dbname, NULL);
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
pandora_setup_read_config_file (PandoraSetup *setup, gchar *file)
|
||||
{
|
||||
xmlDocPtr doc;
|
||||
xmlNodePtr root;
|
||||
gchar *host;
|
||||
gchar *username;
|
||||
gchar *password;
|
||||
gchar *dbname;
|
||||
|
||||
doc = xmlParseFile (file);
|
||||
|
||||
if (!doc) {
|
||||
return;
|
||||
}
|
||||
|
||||
root = xmlDocGetRootElement (doc);
|
||||
|
||||
if (!root) {
|
||||
xmlFreeDoc (doc);
|
||||
return;
|
||||
}
|
||||
|
||||
if (g_ascii_strcasecmp ((const gchar*) root->name, "config") == 0) {
|
||||
host = (gchar *) xmlGetProp (root, (xmlChar *) "host");
|
||||
username = (gchar *) xmlGetProp (root, (xmlChar *) "username");
|
||||
password = (gchar *) xmlGetProp (root, (xmlChar *) "password");
|
||||
dbname = (gchar *) xmlGetProp (root, (xmlChar *) "dbname");
|
||||
|
||||
g_object_set (setup,
|
||||
"host", host,
|
||||
"username", username,
|
||||
"password", password,
|
||||
"dbname", dbname,
|
||||
NULL);
|
||||
|
||||
g_free (host);
|
||||
g_free (username);
|
||||
g_free (password);
|
||||
g_free (dbname);
|
||||
}
|
||||
|
||||
xmlFreeDoc (doc);
|
||||
}
|
||||
|
||||
void
|
||||
pandora_setup_save_to_disk (PandoraSetup *setup)
|
||||
{
|
||||
xmlTextWriterPtr writer;
|
||||
|
||||
writer = xmlNewTextWriterFilename (setup->priv->config_file, 0);
|
||||
|
||||
xmlTextWriterStartDocument (writer, NULL, NULL, NULL);
|
||||
xmlTextWriterStartElement (writer, BAD_CAST "config");
|
||||
|
||||
xmlTextWriterWriteAttribute (writer,
|
||||
BAD_CAST "host",
|
||||
BAD_CAST setup->priv->host);
|
||||
xmlTextWriterWriteAttribute (writer,
|
||||
BAD_CAST "username",
|
||||
BAD_CAST setup->priv->username);
|
||||
xmlTextWriterWriteAttribute (writer,
|
||||
BAD_CAST "password",
|
||||
BAD_CAST setup->priv->password);
|
||||
xmlTextWriterWriteAttribute (writer,
|
||||
BAD_CAST "dbname",
|
||||
BAD_CAST setup->priv->dbname);
|
||||
|
||||
xmlTextWriterEndElement (writer);
|
||||
xmlTextWriterEndDocument (writer);
|
||||
xmlFreeTextWriter (writer);
|
||||
}
|
||||
|
||||
|
||||
PandoraSetup *
|
||||
pandora_setup_new (gchar *config_file)
|
||||
{
|
||||
PandoraSetup *setup;
|
||||
|
||||
setup = PANDORA_SETUP (g_object_new (PANDORA_TYPE_SETUP, NULL));
|
||||
|
||||
setup->priv->config_file = g_strdup (config_file);
|
||||
|
||||
pandora_setup_read_config_file (setup, config_file);
|
||||
|
||||
return setup;
|
||||
}
|
||||
|
|
@ -1,65 +0,0 @@
|
|||
/*
|
||||
Copyright (C) 2006 Artica ST.
|
||||
Written by Esteban Sanchez.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef SETUP_H
|
||||
#define SETUP_H
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <glib-object.h>
|
||||
|
||||
#define PANDORA_TYPE_SETUP (pandora_setup_get_type())
|
||||
#define PANDORA_SETUP(object) (G_TYPE_CHECK_INSTANCE_CAST((object), PANDORA_TYPE_SETUP, PandoraSetup))
|
||||
#define PANDORA_SETUP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PANDORA_TYPE_SETUP, PandoraSetupClass))
|
||||
#define PANDORA_IS_SETUP(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), PANDORA_TYPE_SETUP))
|
||||
#define PANDORA_IS_SETUP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PANDORA_TYPE_SETUP))
|
||||
#define PANDORA_SETUP_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), PANDORA_TYPE_SETUP, PandoraSetupClass))
|
||||
|
||||
typedef struct _PandoraSetupPrivate PandoraSetupPrivate;
|
||||
|
||||
typedef struct {
|
||||
GObjectClass parent_class;
|
||||
} PandoraSetupClass;
|
||||
|
||||
/*
|
||||
* Setup instance data
|
||||
*
|
||||
*/
|
||||
typedef struct {
|
||||
GObject parent;
|
||||
PandoraSetupPrivate *priv;
|
||||
} PandoraSetup;
|
||||
|
||||
PandoraSetup *pandora_setup_new (gchar *config_file);
|
||||
|
||||
gchar *pandora_setup_get_host (PandoraSetup *setup);
|
||||
gchar *pandora_setup_get_username (PandoraSetup *setup);
|
||||
gchar *pandora_setup_get_password (PandoraSetup *setup);
|
||||
gchar *pandora_setup_get_dbname (PandoraSetup *setup);
|
||||
|
||||
void pandora_setup_set_host (PandoraSetup *setup, const gchar *host);
|
||||
void pandora_setup_set_username (PandoraSetup *setup, const gchar *username);
|
||||
void pandora_setup_set_password (PandoraSetup *setup, const gchar *password);
|
||||
void pandora_setup_set_dbname (PandoraSetup *setup, const gchar *dbname);
|
||||
|
||||
void pandora_setup_save_to_disk (PandoraSetup *setup);
|
||||
|
||||
#endif
|
|
@ -1,428 +0,0 @@
|
|||
/*
|
||||
Copyright (C) 2006 Artica ST.
|
||||
Written by Esteban Sanchez.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <glib.h>
|
||||
#include <mysql.h>
|
||||
|
||||
#include "pandora-status-checker.h"
|
||||
|
||||
enum {
|
||||
CHECKER_STATE_READY,
|
||||
CHECKER_STATE_RUNNING,
|
||||
CHECKER_STATE_FINISHED,
|
||||
CHECKER_STATE_STOPPING,
|
||||
CHECKER_STATE_FAILED
|
||||
};
|
||||
|
||||
struct _PandoraStatusCheckerPrivate {
|
||||
GThread *thread;
|
||||
GMutex *state_mutex;
|
||||
|
||||
gint state;
|
||||
|
||||
PandoraStatus *status;
|
||||
PandoraSetup *setup;
|
||||
|
||||
MYSQL *connection;
|
||||
};
|
||||
|
||||
#define PANDORA_STATUS_CHECKER_GET_PRIVATE(object) \
|
||||
(G_TYPE_INSTANCE_GET_PRIVATE ((object), PANDORA_STATUS_CHECKER_TYPE, \
|
||||
PandoraStatusCheckerPrivate))
|
||||
|
||||
static gboolean pandora_status_checker_connect (PandoraStatusChecker *checker);
|
||||
static gboolean pandora_status_checker_disconnect (PandoraStatusChecker *checker);
|
||||
|
||||
static PandoraState pandora_status_checker_check_alerts (PandoraStatusChecker *checker);
|
||||
static PandoraState pandora_status_checker_check_servers (PandoraStatusChecker *checker);
|
||||
static PandoraState pandora_status_checker_check_agents (PandoraStatusChecker *checker);
|
||||
|
||||
static void pandora_status_checker_init (PandoraStatusChecker *checker);
|
||||
static void pandora_status_checker_class_init (PandoraStatusCheckerClass *klass);
|
||||
static void pandora_status_checker_finalize (GObject *object);
|
||||
|
||||
static gpointer pandora_status_checker_run_thread (gpointer data);
|
||||
|
||||
GType
|
||||
pandora_status_checker_get_type (void)
|
||||
{
|
||||
static GType type = 0;
|
||||
|
||||
if (!type) {
|
||||
static const GTypeInfo info = {
|
||||
sizeof (PandoraStatusCheckerClass),
|
||||
(GBaseInitFunc) NULL,
|
||||
(GBaseFinalizeFunc) NULL,
|
||||
(GClassInitFunc) pandora_status_checker_class_init,
|
||||
NULL,
|
||||
NULL,
|
||||
sizeof (PandoraStatusChecker),
|
||||
0,
|
||||
(GInstanceInitFunc) pandora_status_checker_init
|
||||
};
|
||||
|
||||
type = g_type_register_static (G_TYPE_OBJECT, "PandoraStatusChecker",
|
||||
&info, 0);
|
||||
}
|
||||
|
||||
return type;
|
||||
}
|
||||
|
||||
static void
|
||||
pandora_status_checker_init (PandoraStatusChecker *checker)
|
||||
{
|
||||
checker->priv = PANDORA_STATUS_CHECKER_GET_PRIVATE (checker);
|
||||
|
||||
checker->priv->connection = NULL;
|
||||
|
||||
checker->priv->state_mutex = g_mutex_new ();
|
||||
|
||||
checker->priv->state = CHECKER_STATE_READY;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
pandora_status_checker_class_init (PandoraStatusCheckerClass *klass)
|
||||
{
|
||||
GObjectClass *object_class;
|
||||
|
||||
g_type_class_add_private (klass, sizeof (PandoraStatusCheckerPrivate));
|
||||
|
||||
object_class = G_OBJECT_CLASS (klass);
|
||||
object_class->finalize = pandora_status_checker_finalize;
|
||||
}
|
||||
|
||||
static void
|
||||
pandora_status_checker_finalize (GObject *object)
|
||||
{
|
||||
PandoraStatusChecker *checker;
|
||||
|
||||
checker = PANDORA_STATUS_CHECKER (object);
|
||||
|
||||
switch (checker->priv->state) {
|
||||
case CHECKER_STATE_RUNNING:
|
||||
pandora_status_checker_stop (checker);
|
||||
/* Do not break! */
|
||||
case CHECKER_STATE_STOPPING:
|
||||
g_thread_join (checker->priv->thread);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (checker->priv->status) {
|
||||
g_object_unref (checker->priv->status);
|
||||
checker->priv->status = NULL;
|
||||
}
|
||||
|
||||
if (checker->priv->state_mutex) {
|
||||
g_mutex_free (checker->priv->state_mutex);
|
||||
checker->priv->state_mutex = NULL;
|
||||
}
|
||||
|
||||
if (checker->priv->setup) {
|
||||
g_object_unref (checker->priv->setup);
|
||||
checker->priv->setup = NULL;
|
||||
}
|
||||
|
||||
if (checker->priv->connection) {
|
||||
mysql_close (checker->priv->connection);
|
||||
checker->priv->connection = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
PandoraStatusChecker *
|
||||
pandora_status_checker_new (PandoraSetup *setup, PandoraStatus *status)
|
||||
{
|
||||
PandoraStatusChecker *checker;
|
||||
|
||||
checker = PANDORA_STATUS_CHECKER (g_object_new (PANDORA_STATUS_CHECKER_TYPE,
|
||||
NULL));
|
||||
checker->priv->setup = setup;
|
||||
g_object_ref (setup);
|
||||
|
||||
checker->priv->status = status;
|
||||
g_object_ref (status);
|
||||
|
||||
return checker;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
pandora_status_checker_connect (PandoraStatusChecker *checker)
|
||||
{
|
||||
gchar *host, *username, *password, *dbname;
|
||||
gboolean retval = TRUE;
|
||||
|
||||
if (checker->priv->connection != NULL) {
|
||||
mysql_close (checker->priv->connection);
|
||||
checker->priv->connection = NULL;
|
||||
}
|
||||
|
||||
checker->priv->connection = mysql_init (NULL);
|
||||
|
||||
if (checker->priv->connection == NULL) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
g_object_get (G_OBJECT (checker->priv->setup), "host", &host, "username", &username,
|
||||
"password", &password, "dbname", &dbname, NULL);
|
||||
|
||||
if (mysql_real_connect (checker->priv->connection, host, username,
|
||||
password, dbname, 3306, NULL, 0) == NULL)
|
||||
{
|
||||
|
||||
g_print ("SQL connection failed. %s\n",
|
||||
mysql_error (checker->priv->connection));
|
||||
mysql_close (checker->priv->connection);
|
||||
checker->priv->connection = NULL;
|
||||
|
||||
retval = FALSE;
|
||||
}
|
||||
|
||||
g_free (host);
|
||||
g_free (username);
|
||||
g_free (password);
|
||||
g_free (dbname);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
pandora_status_checker_disconnect (PandoraStatusChecker *checker)
|
||||
{
|
||||
if (checker->priv->connection) {
|
||||
mysql_close (checker->priv->connection);
|
||||
}
|
||||
|
||||
checker->priv->connection = NULL;
|
||||
}
|
||||
|
||||
static PandoraState
|
||||
pandora_status_checker_check_agents (PandoraStatusChecker *checker)
|
||||
{
|
||||
MYSQL_RES *result;
|
||||
MYSQL_ROW row;
|
||||
const gchar const *query_time = "SELECT * FROM tagente "
|
||||
"WHERE UNIX_TIMESTAMP(ultimo_contacto_remoto)"
|
||||
"- intervalo > UNIX_TIMESTAMP(NOW())" ;
|
||||
const gchar const *query_status = "SELECT * FROM tagente_estado "
|
||||
"LEFT JOIN tagente "
|
||||
"ON tagente_estado.id_agente = tagente.id_agente "
|
||||
"WHERE estado != 100 and datos = 0.0";
|
||||
|
||||
if (checker->priv->connection == NULL) {
|
||||
return STATE_UNKNOWN;
|
||||
}
|
||||
|
||||
if (mysql_query (checker->priv->connection, query_time) != 0) {
|
||||
return STATE_UNKNOWN;
|
||||
}
|
||||
|
||||
result = mysql_store_result (checker->priv->connection);
|
||||
|
||||
if (mysql_num_rows (result) > 0) {
|
||||
mysql_free_result (result);
|
||||
return STATE_BAD;
|
||||
}
|
||||
|
||||
mysql_free_result (result);
|
||||
|
||||
if (mysql_query (checker->priv->connection, query_status) != 0) {
|
||||
return STATE_UNKNOWN;
|
||||
}
|
||||
|
||||
result = mysql_store_result (checker->priv->connection);
|
||||
|
||||
if (mysql_num_rows (result) > 0) {
|
||||
mysql_free_result (result);
|
||||
return STATE_BAD;
|
||||
}
|
||||
|
||||
mysql_free_result (result);
|
||||
return STATE_OK;
|
||||
}
|
||||
|
||||
static PandoraState
|
||||
pandora_status_checker_check_servers (PandoraStatusChecker *checker)
|
||||
{
|
||||
MYSQL_RES *result;
|
||||
MYSQL_ROW row;
|
||||
const gchar const *query = "SELECT * FROM tserver "
|
||||
"WHERE status = 0";
|
||||
|
||||
if (checker->priv->connection == NULL) {
|
||||
return STATE_UNKNOWN;
|
||||
}
|
||||
|
||||
if (mysql_query (checker->priv->connection, query) != 0) {
|
||||
return STATE_UNKNOWN;
|
||||
}
|
||||
|
||||
result = mysql_store_result (checker->priv->connection);
|
||||
|
||||
if (mysql_num_rows (result) > 0) {
|
||||
mysql_free_result (result);
|
||||
return STATE_BAD;
|
||||
}
|
||||
|
||||
mysql_free_result (result);
|
||||
return STATE_OK;
|
||||
}
|
||||
|
||||
static PandoraState
|
||||
pandora_status_checker_check_alerts (PandoraStatusChecker *checker)
|
||||
{
|
||||
MYSQL_RES *result1 = NULL, *result2 = NULL, *result3 = NULL;
|
||||
MYSQL_ROW row;
|
||||
const gchar const *query_all_agents = "SELECT * FROM tagente "
|
||||
"WHERE disabled = 0";
|
||||
const gchar const *query_agent_state = "SELECT * FROM tagente_estado "
|
||||
"WHERE id_agente = %s";
|
||||
const gchar const *query_agent_alert = "SELECT * FROM talerta_agente_modulo "
|
||||
"WHERE id_agente_modulo = %s "
|
||||
"AND times_fired > 0";
|
||||
gchar *query;
|
||||
|
||||
if (checker->priv->connection == NULL) {
|
||||
return STATE_UNKNOWN;
|
||||
}
|
||||
|
||||
if (mysql_query (checker->priv->connection, query_all_agents) != 0) {
|
||||
return STATE_UNKNOWN;
|
||||
}
|
||||
|
||||
result1 = mysql_store_result (checker->priv->connection);
|
||||
if (result1 == NULL)
|
||||
return STATE_UNKNOWN;
|
||||
|
||||
if (mysql_num_rows (result1) == 0)
|
||||
return STATE_UNKNOWN;
|
||||
|
||||
while (row = mysql_fetch_row (result1)) {
|
||||
query = g_strdup_printf (query_agent_state, row[0]);
|
||||
|
||||
if (mysql_query (checker->priv->connection, query) == 0) {
|
||||
result2 = mysql_store_result (checker->priv->connection);
|
||||
|
||||
if (mysql_num_rows (result2) > 0) {
|
||||
|
||||
while (row = mysql_fetch_row (result2)) {
|
||||
|
||||
g_free (query);
|
||||
query = g_strdup_printf (query_agent_alert,
|
||||
row[1]);
|
||||
|
||||
if (mysql_query (checker->priv->connection, query) == 0) {
|
||||
result3 = mysql_store_result (checker->priv->connection);
|
||||
|
||||
if (mysql_num_rows (result3) > 0) {
|
||||
mysql_free_result (result1);
|
||||
mysql_free_result (result2);
|
||||
mysql_free_result (result3);
|
||||
|
||||
g_free (query);
|
||||
|
||||
return STATE_BAD;
|
||||
}
|
||||
|
||||
mysql_free_result (result3);
|
||||
}
|
||||
}
|
||||
|
||||
mysql_free_result (result2);
|
||||
}
|
||||
}
|
||||
|
||||
g_free (query);
|
||||
}
|
||||
|
||||
if (mysql_num_rows (result1) > 0)
|
||||
mysql_free_result (result1);
|
||||
|
||||
return STATE_OK;
|
||||
}
|
||||
|
||||
static gpointer
|
||||
pandora_status_checker_run_thread (gpointer data)
|
||||
{
|
||||
PandoraStatusChecker *checker = PANDORA_STATUS_CHECKER (data);
|
||||
PandoraState alerts, servers, agents;
|
||||
|
||||
g_usleep (G_USEC_PER_SEC);
|
||||
|
||||
g_mutex_lock (checker->priv->state_mutex);
|
||||
checker->priv->state = CHECKER_STATE_RUNNING;
|
||||
|
||||
while (checker->priv->state == CHECKER_STATE_RUNNING) {
|
||||
g_mutex_unlock (checker->priv->state_mutex);
|
||||
|
||||
if (pandora_status_checker_connect (checker)) {
|
||||
|
||||
alerts = pandora_status_checker_check_alerts (checker);
|
||||
servers = pandora_status_checker_check_servers (checker);
|
||||
agents = pandora_status_checker_check_agents (checker);
|
||||
|
||||
pandora_status_set_all (checker->priv->status,
|
||||
alerts, agents, servers);
|
||||
|
||||
pandora_status_checker_disconnect (checker);
|
||||
} else {
|
||||
pandora_status_set_all (checker->priv->status,
|
||||
STATE_UNKNOWN,
|
||||
STATE_UNKNOWN,
|
||||
STATE_UNKNOWN);
|
||||
}
|
||||
|
||||
g_usleep (G_USEC_PER_SEC * 10);
|
||||
|
||||
g_mutex_lock (checker->priv->state_mutex);
|
||||
}
|
||||
|
||||
g_mutex_unlock (checker->priv->state_mutex);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void
|
||||
pandora_status_checker_run (PandoraStatusChecker *checker)
|
||||
{
|
||||
g_mutex_lock (checker->priv->state_mutex);
|
||||
if (checker->priv->state == CHECKER_STATE_RUNNING) {
|
||||
g_mutex_unlock (checker->priv->state_mutex);
|
||||
return;
|
||||
}
|
||||
g_mutex_unlock (checker->priv->state_mutex);
|
||||
|
||||
checker->priv->thread = g_thread_create (pandora_status_checker_run_thread,
|
||||
(gpointer) checker, TRUE, NULL);
|
||||
}
|
||||
|
||||
void
|
||||
pandora_status_checker_stop (PandoraStatusChecker *checker)
|
||||
{
|
||||
g_mutex_lock (checker->priv->state_mutex);
|
||||
checker->priv->state = CHECKER_STATE_STOPPING;
|
||||
g_mutex_unlock (checker->priv->state_mutex);
|
||||
|
||||
g_thread_join (checker->priv->thread);
|
||||
}
|
|
@ -1,57 +0,0 @@
|
|||
/*
|
||||
Copyright (C) 2006 Artica ST.
|
||||
Written by Esteban Sanchez.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef STATUS_CHECKER_H
|
||||
#define STATUS_CHECKER_H
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <glib-object.h>
|
||||
|
||||
#include "pandora-setup.h"
|
||||
#include "pandora-status.h"
|
||||
|
||||
#define PANDORA_STATUS_CHECKER_TYPE (pandora_status_checker_get_type())
|
||||
#define PANDORA_STATUS_CHECKER(object) (G_TYPE_CHECK_INSTANCE_CAST((object), PANDORA_STATUS_CHECKER_TYPE, PandoraStatusChecker))
|
||||
#define PANDORA_STATUS_CHECKER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PANDORA_STATUS_CHECKER_TYPE, PandoraStatusCheckerClass))
|
||||
#define PANDORA_IS_STATUS_CHECKER(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), PANDORA_STATUS_CHECKER_TYPE))
|
||||
#define PANDORA_IS_STATUS_CHECKER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PANDORA_STATUS_CHECKER_TYPE))
|
||||
#define PANDORA_STATUS_CHECKER_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), PANDORA_STATUS_CHECKER_TYPE, PandoraStatusCheckerClass))
|
||||
|
||||
typedef struct _PandoraStatusCheckerPrivate PandoraStatusCheckerPrivate;
|
||||
|
||||
typedef struct {
|
||||
GObjectClass parent_class;
|
||||
} PandoraStatusCheckerClass;
|
||||
|
||||
typedef struct {
|
||||
GObject parent;
|
||||
|
||||
PandoraStatusCheckerPrivate *priv;
|
||||
} PandoraStatusChecker;
|
||||
|
||||
PandoraStatusChecker *pandora_status_checker_new (PandoraSetup *setup,
|
||||
PandoraStatus *status);
|
||||
|
||||
void pandora_status_checker_run (PandoraStatusChecker *checker);
|
||||
void pandora_status_checker_stop (PandoraStatusChecker *checker);
|
||||
|
||||
#endif
|
|
@ -1,249 +0,0 @@
|
|||
/*
|
||||
Copyright (C) 2006 Artica ST.
|
||||
Written by Esteban Sanchez.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <glib.h>
|
||||
#include <glib/gi18n.h>
|
||||
|
||||
#include "pandora-status.h"
|
||||
|
||||
enum {
|
||||
NONE,
|
||||
INCIDENCE,
|
||||
CHANGED_ALERTS,
|
||||
CHANGED_AGENTS,
|
||||
CHANGED_SERVERS,
|
||||
N_SIGNALS
|
||||
};
|
||||
|
||||
struct _PandoraStatusPrivate {
|
||||
PandoraState alerts;
|
||||
PandoraState agents;
|
||||
PandoraState servers;
|
||||
|
||||
GMutex *mutex;
|
||||
};
|
||||
|
||||
static guint pandora_status_signals[N_SIGNALS];
|
||||
|
||||
#define PANDORA_STATUS_GET_PRIVATE(object) \
|
||||
(G_TYPE_INSTANCE_GET_PRIVATE ((object), PANDORA_STATUS_TYPE, \
|
||||
PandoraStatusPrivate))
|
||||
|
||||
static void pandora_status_init (PandoraStatus *status);
|
||||
static void pandora_status_class_init (PandoraStatusClass *klass);
|
||||
static void pandora_status_finalize (GObject *object);
|
||||
|
||||
GType
|
||||
pandora_status_get_type (void)
|
||||
{
|
||||
static GType type = 0;
|
||||
|
||||
if (!type) {
|
||||
static const GTypeInfo info = {
|
||||
sizeof (PandoraStatusClass),
|
||||
(GBaseInitFunc) NULL,
|
||||
(GBaseFinalizeFunc) NULL,
|
||||
(GClassInitFunc) pandora_status_class_init,
|
||||
NULL,
|
||||
NULL,
|
||||
sizeof (PandoraStatus),
|
||||
0,
|
||||
(GInstanceInitFunc) pandora_status_init
|
||||
};
|
||||
|
||||
type = g_type_register_static (G_TYPE_OBJECT, "PandoraStatus",
|
||||
&info, 0);
|
||||
}
|
||||
|
||||
return type;
|
||||
}
|
||||
|
||||
static void
|
||||
pandora_status_init (PandoraStatus *status)
|
||||
{
|
||||
status->priv = PANDORA_STATUS_GET_PRIVATE (status);
|
||||
status->priv->alerts = FALSE;
|
||||
status->priv->agents = FALSE;
|
||||
status->priv->servers = FALSE;
|
||||
|
||||
status->priv->mutex = g_mutex_new ();
|
||||
}
|
||||
|
||||
static void
|
||||
pandora_status_class_init (PandoraStatusClass *klass)
|
||||
{
|
||||
GObjectClass *object_class;
|
||||
|
||||
g_type_class_add_private (klass, sizeof (PandoraStatusPrivate));
|
||||
|
||||
object_class = G_OBJECT_CLASS (klass);
|
||||
object_class->finalize = pandora_status_finalize;
|
||||
|
||||
pandora_status_signals[INCIDENCE] =
|
||||
g_signal_new ("incidence",
|
||||
G_TYPE_FROM_CLASS (object_class),
|
||||
G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
|
||||
G_STRUCT_OFFSET (PandoraStatusClass, changed),
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__INT,
|
||||
G_TYPE_NONE, 1, G_TYPE_INT);
|
||||
|
||||
pandora_status_signals[CHANGED_ALERTS] =
|
||||
g_signal_new ("changed_alerts",
|
||||
G_TYPE_FROM_CLASS (object_class),
|
||||
G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
|
||||
G_STRUCT_OFFSET (PandoraStatusClass, changed),
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__INT,
|
||||
G_TYPE_NONE, 1, G_TYPE_INT);
|
||||
|
||||
pandora_status_signals[CHANGED_AGENTS] =
|
||||
g_signal_new ("changed_agents",
|
||||
G_TYPE_FROM_CLASS (object_class),
|
||||
G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
|
||||
G_STRUCT_OFFSET (PandoraStatusClass, changed),
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__INT,
|
||||
G_TYPE_NONE, 1, G_TYPE_INT);
|
||||
|
||||
pandora_status_signals[CHANGED_SERVERS] =
|
||||
g_signal_new ("changed_servers",
|
||||
G_TYPE_FROM_CLASS (object_class),
|
||||
G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
|
||||
G_STRUCT_OFFSET (PandoraStatusClass, changed),
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__INT,
|
||||
G_TYPE_NONE, 1, G_TYPE_INT);
|
||||
}
|
||||
|
||||
static void
|
||||
pandora_status_finalize (GObject *object)
|
||||
{
|
||||
PandoraStatus *status;
|
||||
|
||||
status = PANDORA_STATUS (object);
|
||||
|
||||
if (status->priv->mutex) {
|
||||
g_mutex_free (status->priv->mutex);
|
||||
status->priv->mutex = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
PandoraStatus *
|
||||
pandora_status_new (void)
|
||||
{
|
||||
PandoraStatus *status;
|
||||
|
||||
status = PANDORA_STATUS (g_object_new (PANDORA_STATUS_TYPE,
|
||||
NULL));
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
void
|
||||
pandora_status_set_all (PandoraStatus *status,
|
||||
PandoraState alerts,
|
||||
PandoraState agents,
|
||||
PandoraState servers)
|
||||
{
|
||||
PandoraState incidence = STATE_INVALID;
|
||||
|
||||
g_return_if_fail (PANDORA_IS_STATUS (status));
|
||||
|
||||
g_mutex_lock (status->priv->mutex);
|
||||
|
||||
if (status->priv->alerts != alerts) {
|
||||
status->priv->alerts = alerts;
|
||||
|
||||
g_signal_emit (status, pandora_status_signals[CHANGED_ALERTS],
|
||||
0, alerts);
|
||||
|
||||
incidence = alerts;
|
||||
}
|
||||
|
||||
if (status->priv->agents != agents) {
|
||||
status->priv->agents = agents;
|
||||
|
||||
g_signal_emit (status, pandora_status_signals[CHANGED_AGENTS],
|
||||
0, agents);
|
||||
|
||||
/* Change value if it was invalid or OK, so
|
||||
* "incidence" signal will be emmited only if there
|
||||
* are any bad value or all are ok. */
|
||||
if (incidence == STATE_INVALID || incidence == STATE_OK)
|
||||
incidence = agents;
|
||||
}
|
||||
|
||||
if (status->priv->servers != servers) {
|
||||
status->priv->servers = servers;
|
||||
|
||||
g_signal_emit (status, pandora_status_signals[CHANGED_SERVERS],
|
||||
0, servers);
|
||||
|
||||
if (incidence == STATE_INVALID || incidence == STATE_OK)
|
||||
incidence = agents;
|
||||
}
|
||||
|
||||
/* Emit incidence_any signal if necessary */
|
||||
if (incidence != STATE_INVALID)
|
||||
g_signal_emit (status, pandora_status_signals[INCIDENCE],
|
||||
0, incidence);
|
||||
|
||||
g_mutex_unlock (status->priv->mutex);
|
||||
}
|
||||
|
||||
PandoraState
|
||||
pandora_status_get_alerts (PandoraStatus *status)
|
||||
{
|
||||
PandoraState value;
|
||||
|
||||
g_mutex_lock (status->priv->mutex);
|
||||
value = status->priv->alerts;
|
||||
g_mutex_unlock (status->priv->mutex);
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
PandoraState
|
||||
pandora_status_get_agents (PandoraStatus *status)
|
||||
{
|
||||
PandoraState value;
|
||||
|
||||
g_mutex_lock (status->priv->mutex);
|
||||
value = status->priv->agents;
|
||||
g_mutex_unlock (status->priv->mutex);
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
PandoraState
|
||||
pandora_status_get_servers (PandoraStatus *status)
|
||||
{
|
||||
PandoraState value;
|
||||
|
||||
g_mutex_lock (status->priv->mutex);
|
||||
value = status->priv->servers;
|
||||
g_mutex_unlock (status->priv->mutex);
|
||||
|
||||
return value;
|
||||
}
|
|
@ -1,68 +0,0 @@
|
|||
/*
|
||||
Copyright (C) 2006 Artica ST.
|
||||
Written by Esteban Sanchez.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef STATUS_H
|
||||
#define STATUS_H
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <glib-object.h>
|
||||
|
||||
typedef enum {
|
||||
STATE_INVALID = 0,
|
||||
STATE_UNKNOWN = 1,
|
||||
STATE_OK = 2,
|
||||
STATE_BAD = 3
|
||||
} PandoraState;
|
||||
|
||||
#define PANDORA_STATUS_TYPE (pandora_status_get_type())
|
||||
#define PANDORA_STATUS(object) (G_TYPE_CHECK_INSTANCE_CAST((object), PANDORA_STATUS_TYPE, PandoraStatus))
|
||||
#define PANDORA_STATUS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PANDORA_STATUS_TYPE, PandoraStatusClass))
|
||||
#define PANDORA_IS_STATUS(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), PANDORA_STATUS_TYPE))
|
||||
#define PANDORA_IS_STATUS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PANDORA_STATUS_TYPE))
|
||||
#define PANDORA_STATUS_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), PANDORA_STATUS_TYPE, PandoraStatusClass))
|
||||
|
||||
typedef struct _PandoraStatusPrivate PandoraStatusPrivate;
|
||||
|
||||
typedef struct {
|
||||
GObject parent;
|
||||
|
||||
PandoraStatusPrivate *priv;
|
||||
} PandoraStatus;
|
||||
|
||||
typedef struct {
|
||||
GObjectClass parent_class;
|
||||
|
||||
void (* changed) (PandoraStatus *view);
|
||||
} PandoraStatusClass;
|
||||
|
||||
PandoraStatus *pandora_status_new (void);
|
||||
void pandora_status_set_all (PandoraStatus *status,
|
||||
PandoraState alerts,
|
||||
PandoraState agents,
|
||||
PandoraState servers);
|
||||
|
||||
PandoraState pandora_status_get_alerts (PandoraStatus *status);
|
||||
PandoraState pandora_status_get_agents (PandoraStatus *status);
|
||||
PandoraState pandora_status_get_servers (PandoraStatus *status);
|
||||
|
||||
|
||||
#endif
|