aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.am3
-rw-r--r--configure.ac2
-rw-r--r--libindicate/Makefile.am19
-rw-r--r--libindicate/indicate-listener.xml41
-rw-r--r--libindicate/indicator.h3
-rw-r--r--libindicate/listener.c25
-rw-r--r--libindicate/listener.h1
-rw-r--r--src/applet-main.c83
-rw-r--r--tests/Makefile.am11
9 files changed, 175 insertions, 13 deletions
diff --git a/Makefile.am b/Makefile.am
index f304ab6..d4f7ca2 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -14,6 +14,9 @@ EXTRA_DIST = \
omf.make \
xmldocs.make
+DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc --disable-scrollkeeper
+
DISTCLEANFILES = \
indicator-applet-*.tar.gz \
gtk-doc.make
+
diff --git a/configure.ac b/configure.ac
index 3ae3656..e32da5f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4,7 +4,7 @@ AC_INIT(src/applet-main.c)
AC_PREREQ(2.53)
AM_CONFIG_HEADER(config.h)
-AM_INIT_AUTOMAKE(indicator-applet, 0.1.1)
+AM_INIT_AUTOMAKE(indicator-applet, 0.1.2)
AM_MAINTAINER_MODE
diff --git a/libindicate/Makefile.am b/libindicate/Makefile.am
index fdbda8a..b851919 100644
--- a/libindicate/Makefile.am
+++ b/libindicate/Makefile.am
@@ -4,12 +4,15 @@ INCLUDES= \
EXTRA_DIST = \
indicate-interface.xml \
+ indicate-listener.xml \
listener-marshal.list \
indicate.pc.in
BUILT_SOURCES = \
dbus-indicate-server.h \
dbus-indicate-client.h \
+ dbus-listener-server.h \
+ dbus-listener-client.h \
listener-marshal.c \
listener-marshal.h
@@ -31,6 +34,8 @@ libindicate_la_SOURCES = \
$(indicate_headers) \
dbus-indicate-server.h \
dbus-indicate-client.h \
+ dbus-listener-server.h \
+ dbus-listener-client.h \
server.c \
listener.c \
listener-marshal.c \
@@ -63,6 +68,20 @@ dbus-indicate-client.h: indicate-interface.xml
--output=dbus-indicate-client.h \
$(srcdir)/indicate-interface.xml
+dbus-listener-server.h: indicate-listener.xml
+ dbus-binding-tool \
+ --prefix=indicate_listener \
+ --mode=glib-server \
+ --output=dbus-listener-server.h \
+ $(srcdir)/indicate-listener.xml
+
+dbus-listener-client.h: indicate-listener.xml
+ dbus-binding-tool \
+ --prefix=indicate_listener \
+ --mode=glib-client \
+ --output=dbus-listener-client.h \
+ $(srcdir)/indicate-listener.xml
+
listener-marshal.h: $(srcdir)/listener-marshal.list
glib-genmarshal --header \
--prefix=indicate_listener_marshal $(srcdir)/listener-marshal.list \
diff --git a/libindicate/indicate-listener.xml b/libindicate/indicate-listener.xml
new file mode 100644
index 0000000..c834489
--- /dev/null
+++ b/libindicate/indicate-listener.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+A library to allow applictions to provide simple indications of
+information to be displayed to users of the application through the
+interface shell.
+
+Copyright 2009 Canonical Ltd.
+
+Authors:
+ Ted Gould <ted@canonical.com>
+
+This program is free software: you can redistribute it and/or modify it
+under the terms of either or both of the following licenses:
+
+1) the GNU Lesser General Public License version 3, as published by the
+Free Software Foundation; and/or
+2) the GNU Lesser General Public License version 2.1, as published by
+the Free Software Foundation.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranties of
+MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR
+PURPOSE. See the applicable version of the GNU Lesser General Public
+License for more details.
+
+You should have received a copy of both the GNU Lesser General Public
+License version 3 and version 2.1 along with this program. If not, see
+<http://www.gnu.org/licenses/>
+-->
+<node name="/">
+ <interface name="org.freedesktop.indicator.listener">
+
+<!-- Functions -->
+ <method name="GetIndicatorServers">
+ <arg type="as" name="server_ids" direction="out" />
+ </method>
+
+<!-- End of interesting stuff -->
+
+ </interface>
+</node>
diff --git a/libindicate/indicator.h b/libindicate/indicator.h
index 5faea3c..8af5568 100644
--- a/libindicate/indicator.h
+++ b/libindicate/indicator.h
@@ -78,9 +78,6 @@ GType indicate_indicator_get_type(void) G_GNUC_CONST;
IndicateIndicator * indicate_indicator_new (void);
-/* Should these just be GObject properties? */
-void indicate_indicator_set_property (IndicateIndicator * indicator, const gchar * property_name, const gchar * property_value);
-
/* Show and hide this indicator */
void indicate_indicator_show (IndicateIndicator * indicator);
void indicate_indicator_hide (IndicateIndicator * indicator);
diff --git a/libindicate/listener.c b/libindicate/listener.c
index d8926f1..b786552 100644
--- a/libindicate/listener.c
+++ b/libindicate/listener.c
@@ -31,6 +31,8 @@ License version 3 and version 2.1 along with this program. If not, see
#include "listener-marshal.h"
#include <dbus/dbus-glib-bindings.h>
#include "dbus-indicate-client.h"
+#include "dbus-listener-client.h"
+#include "dbus-listener-server.h"
/* Errors */
enum {
@@ -81,6 +83,7 @@ typedef struct {
typedef struct {
DBusGConnection * bus;
gchar * name;
+ gboolean startup;
} proxy_todo_t;
G_DEFINE_TYPE (IndicateListener, indicate_listener, G_TYPE_OBJECT);
@@ -90,7 +93,7 @@ static void indicate_listener_finalize (GObject * obj);
static void dbus_owner_change (DBusGProxy * proxy, const gchar * name, const gchar * prev, const gchar * new, IndicateListener * listener);
static void proxy_struct_destroy (gpointer data);
static void build_todo_list_cb (DBusGProxy * proxy, char ** names, GError * error, void * data);
-static void todo_list_add (const gchar * name, DBusGProxy * proxy, IndicateListener * listener);
+static void todo_list_add (const gchar * name, DBusGProxy * proxy, IndicateListener * listener, gboolean startup);
static gboolean todo_idle (gpointer data);
void get_type_cb (IndicateListener * listener, IndicateListenerServer * server, gchar * type, gpointer data);
static void proxy_server_added (DBusGProxy * proxy, const gchar * type, proxy_t * proxyt);
@@ -286,7 +289,7 @@ dbus_owner_change (DBusGProxy * proxy, const gchar * name, const gchar * prev, c
/* g_debug("Name change on %s bus: '%s' from '%s' to '%s'", bus_name, name, prev, new); */
if (prev != NULL && prev[0] == '\0') {
- todo_list_add(name, proxy, listener);
+ todo_list_add(name, proxy, listener, FALSE);
}
if (new != NULL && new[0] == '\0') {
proxy_t * proxyt;
@@ -369,14 +372,14 @@ build_todo_list_cb (DBusGProxy * proxy, char ** names, GError * error, void * da
guint i = 0;
for (i = 0; names[i] != NULL; i++) {
- todo_list_add(names[i], proxy, listener);
+ todo_list_add(names[i], proxy, listener, TRUE);
}
return;
}
static void
-todo_list_add (const gchar * name, DBusGProxy * proxy, IndicateListener * listener)
+todo_list_add (const gchar * name, DBusGProxy * proxy, IndicateListener * listener, gboolean startup)
{
if (name == NULL || name[0] != ':') {
return;
@@ -398,6 +401,7 @@ todo_list_add (const gchar * name, DBusGProxy * proxy, IndicateListener * listen
proxy_todo_t todo;
todo.name = g_strdup(name);
todo.bus = bus;
+ todo.startup = startup;
g_array_append_val(priv->proxy_todo, todo);
@@ -455,6 +459,12 @@ todo_idle (gpointer data)
g_hash_table_insert(priv->proxies_possible, proxyt->name, proxyt);
+ /* I think that we need to have this as there is a race
+ * condition here. If someone comes on the bus and we get
+ * that message, but before we set up the handler for the ServerShow
+ * signal it gets sent, we wouldn't get it. So then we would
+ * miss an indicator server coming on the bus. I'd like to not
+ * generate a warning in every app with DBus though. */
indicate_listener_server_get_type(listener, (IndicateListenerServer *)proxyt->name, get_type_cb, proxyt);
return TRUE;
@@ -783,6 +793,13 @@ indicate_listener_get_property_icon (IndicateListener * listener, IndicateListen
return get_property_helper(listener, server, indicator, property, G_CALLBACK(callback), data, PROPERTY_TYPE_ICON);
}
+gboolean
+indicate_listener_get_indicator_servers (IndicateListener * listener, GList * servers)
+{
+
+
+}
+
static void
listener_display_cb (DBusGProxy *proxy, GError *error, gpointer userdata)
{
diff --git a/libindicate/listener.h b/libindicate/listener.h
index ed40630..f931b04 100644
--- a/libindicate/listener.h
+++ b/libindicate/listener.h
@@ -109,6 +109,7 @@ void indicate_listener_get_property_icon (IndicateListener * l
void indicate_listener_display (IndicateListener * listener,
IndicateListenerServer * server,
IndicateListenerIndicator * indicator);
+gboolean indicate_listener_get_indicator_servers (IndicateListener * listener, GList * servers);
void indicate_listener_server_get_type (IndicateListener * listener,
IndicateListenerServer * server,
indicate_listener_get_server_property_cb callback,
diff --git a/src/applet-main.c b/src/applet-main.c
index 6efd33f..cd07548 100644
--- a/src/applet-main.c
+++ b/src/applet-main.c
@@ -83,6 +83,18 @@ load_module (const gchar * name, GtkWidget * menu)
}
static gboolean
+menubar_press (GtkWidget * widget,
+ GdkEventButton *event,
+ gpointer data)
+{
+ if (event->button != 1) {
+ g_signal_stop_emission_by_name(widget, "button-press-event");
+ }
+
+ return FALSE;
+}
+
+static gboolean
menubar_on_expose (GtkWidget * widget,
GdkEventExpose *event,
GtkWidget * menubar)
@@ -94,9 +106,69 @@ menubar_on_expose (GtkWidget * widget,
return FALSE;
}
+static void
+about_cb (BonoboUIComponent *ui_container,
+ gpointer data,
+ const gchar *cname)
+{
+ static const gchar *authors[] = {
+ "Ted Gould <ted@canonical.com>",
+ NULL
+ };
+
+ static gchar *license[] = {
+ N_("The Indicator Applet is free software; you can redistribute it and/or modify "
+ "it under the terms of the GNU General Public License as published by "
+ "the Free Software Foundation; either version 3 of the License."),
+ N_("This program is distributed in the hope that it will be useful, "
+ "but WITHOUT ANY WARRANTY; without even the implied warranties of "
+ "MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR "
+ "PURPOSE. See the GNU General Public License for more details."),
+ N_("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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA "),
+ NULL
+ };
+ gchar *license_i18n;
+
+ license_i18n = g_strjoinv ("\n\n", license);
+
+ gtk_show_about_dialog(NULL,
+ "version", "0.1",
+ "copyright", "Copyright \xc2\xa9 2009 Canonical, Ltd.",
+ "comments", _("An applet to hold all of the system indicators."),
+ "authors", authors,
+ "license", license_i18n,
+ "wrap-license", TRUE,
+ "translator-credits", _("translator-credits"),
+ "logo-icon-name", "indicator-applet",
+ "website", "http://launchpad.net/indicator-applet",
+ "website-label", _("Indicator Applet Website"),
+ NULL
+ );
+
+ g_free (license_i18n);
+
+ return;
+}
+
+#ifdef N_
+#undef N_
+#endif
+#define N_(x) x
+
static gboolean
applet_fill_cb (PanelApplet * applet, const gchar * iid, gpointer data)
{
+ static const BonoboUIVerb menu_verbs[] = {
+ BONOBO_UI_VERB ("IndicatorAppletAbout", about_cb),
+ BONOBO_UI_VERB_END
+ };
+ static const gchar * menu_xml =
+ "<popup name=\"button3\">"
+ "<menuitem name=\"About Item\" verb=\"IndicatorAppletAbout\" _label=\"" N_("_About") "\" pixtype=\"stock\" pixname=\"gtk-about\"/>"
+ "</popup>";
+
GtkWidget *menubar;
gint i;
gint indicators_loaded = 0;
@@ -109,12 +181,13 @@ applet_fill_cb (PanelApplet * applet, const gchar * iid, gpointer data)
/* Set panel options */
gtk_container_set_border_width(GTK_CONTAINER (applet), 0);
- panel_applet_set_flags(applet, PANEL_APPLET_EXPAND_MINOR | PANEL_APPLET_HAS_HANDLE);
+ panel_applet_set_flags(applet, PANEL_APPLET_EXPAND_MINOR);
+ panel_applet_setup_menu(applet, menu_xml, menu_verbs, NULL);
/* Init some theme/icon stuff */
gtk_icon_theme_append_search_path(gtk_icon_theme_get_default(),
ICONS_DIR);
- g_debug("Icons directory: %s", ICONS_DIR);
+ /* g_debug("Icons directory: %s", ICONS_DIR); */
gtk_rc_parse_string (
"style \"indicator-applet-style\"\n"
"{\n"
@@ -123,12 +196,14 @@ applet_fill_cb (PanelApplet * applet, const gchar * iid, gpointer data)
" GtkWidget::focus-line-width = 0\n"
" GtkWidget::focus-padding = 0\n"
"}\n"
- "widget \"*.indicator-applet-menubar\" style \"indicator-applet-style\"");
- gtk_widget_set_name(GTK_WIDGET (applet), "indicator-applet-menubar");
+ "widget \"*.fast-user-switch-applet\" style \"indicator-applet-style\"");
+ //gtk_widget_set_name(GTK_WIDGET (applet), "indicator-applet-menubar");
+ gtk_widget_set_name(GTK_WIDGET (applet), "fast-user-switch-applet");
/* Build menubar */
menubar = gtk_menu_bar_new();
GTK_WIDGET_SET_FLAGS (menubar, GTK_WIDGET_FLAGS(menubar) | GTK_CAN_FOCUS);
+ g_signal_connect(menubar, "button-press-event", G_CALLBACK(menubar_press), NULL);
g_signal_connect_after(menubar, "expose-event", G_CALLBACK(menubar_on_expose), menubar);
gtk_container_set_border_width(GTK_CONTAINER(menubar), 0);
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 0017bca..4a8f962 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -1,5 +1,5 @@
-noinst_PROGRAMS = \
+libexec_PROGRAMS = \
indicate-and-crash \
indicate-alot \
listen-and-print \
@@ -49,3 +49,12 @@ im_client_LDADD = \
../libindicate/libindicate.la \
$(LIBINDICATE_LIBS)
+examplesdir = $(docdir)/examples/
+
+examples_DATA = \
+ $(indicate_and_crash_SOURCES) \
+ $(indicate_alot_SOURCES) \
+ $(listen_and_print_SOURCES) \
+ $(im_client_SOURCES)
+
+EXTRA_DIST = $(examples_DATA)