summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2007-08-07 00:16:44 +0000
committerLennart Poettering <lennart@poettering.net>2007-08-07 00:16:44 +0000
commitfb27911c3fb03c047b2cf7d0683c87f24ed7ad30 (patch)
treead7758eb753673a7e3c44fd3dfbfcecedbbfcde0
parent5b935be84d9486556cf87bd2b6ba0dc307abe1ef (diff)
use libgnome-desktop apis to start programs with startup notification support
git-svn-id: file:///home/lennart/svn/public/padevchooser/trunk@29 e4aeda27-4315-0410-ac56-b21855d76123
-rw-r--r--configure.ac2
-rw-r--r--src/Makefile.am2
-rw-r--r--src/padevchooser.c51
3 files changed, 46 insertions, 9 deletions
diff --git a/configure.ac b/configure.ac
index 36a126d..5a9dca1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -39,7 +39,7 @@ AC_PROG_LN_S
AC_TYPE_SIGNAL
AC_HEADER_STDC
-PKG_CHECK_MODULES(GUILIBS, [ gtk+-2.0 >= 2.10 libnotify libglade-2.0 gconf-2.0 ])
+PKG_CHECK_MODULES(GUILIBS, [ gtk+-2.0 >= 2.10 libnotify libglade-2.0 gconf-2.0 libgnomeui-2.0 gnome-desktop-2.0])
AC_SUBST(GUILIBS_CFLAGS)
AC_SUBST(GUILIBS_LIBS)
diff --git a/src/Makefile.am b/src/Makefile.am
index 1c13c1c..0916ee0 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -30,5 +30,5 @@ padevchooser_LDADD=$(AM_LDADD) $(GUILIBS_LIBS) $(PULSE_LIBS)
padevchooser_CFLAGS=$(AM_CFLAGS) $(GUILIBS_CFLAGS) $(PULSE_CFLAGS)
padevchooser_CFLAGS+=-DGLADE_FILE=\"$(pkgdatadir)/padevchooser.glade\"
padevchooser_CFLAGS+=-DDESKTOP_FILE=\"$(desktopdir)/padevchooser.desktop\"
-padevchooser_CFLAGS+=-DEGG_COMPILATION
+padevchooser_CFLAGS+=-DDESKTOP_DIR=\"$(desktopdir)\"
diff --git a/src/padevchooser.c b/src/padevchooser.c
index e71b957..c55ac8f 100644
--- a/src/padevchooser.c
+++ b/src/padevchooser.c
@@ -33,6 +33,8 @@
#include <gdk/gdkx.h>
#include <glade/glade.h>
#include <gconf/gconf-client.h>
+#include <libgnome/gnome-desktop-item.h>
+#include <libgnomeui/gnome-ui-init.h>
#include <libnotify/notify.h>
#include <pulse/pulseaudio.h>
@@ -357,24 +359,52 @@ static void tray_icon_on_click(GtkStatusIcon *status_icon, void * user_data) {
gtk_menu_popup(menu, NULL, NULL, gtk_status_icon_position_menu, status_icon, 1, gtk_get_current_event_time());
}
+static void run(const char *name) {
+ GnomeDesktopItem* di;
+ char *p;
+
+ p = g_strdup_printf(DESKTOP_DIR "/%s.desktop", name);
+ di = gnome_desktop_item_new_from_file(p, GNOME_DESKTOP_ITEM_LOAD_ONLY_IF_EXISTS, NULL);
+
+ if (di) {
+ if (gnome_desktop_item_launch(di, NULL, 0, NULL)) {
+ gnome_desktop_item_unref(di);
+ g_free(p);
+ return;
+ }
+ }
+
+ g_message("Failed to launch desktop item '%s'.", di ? gnome_desktop_item_get_location(di) : p);
+
+ if (di)
+ gnome_desktop_item_unref(di);
+
+ g_free(p);
+
+ if (strcmp(name, "pavumeter-record") == 0)
+ g_spawn_command_line_async("pavumeter --record", NULL);
+ else
+ g_spawn_command_line_async(name, NULL);
+}
+
static void start_manager_cb(void) {
- g_spawn_command_line_async("paman", NULL);
+ run("paman");
}
static void start_vucontrol_cb(void) {
- g_spawn_command_line_async("pavucontrol", NULL);
+ run("pavucontrol");
}
static void start_vumeter_playback_cb(void) {
- g_spawn_command_line_async("pavumeter", NULL);
+ run("pavumeter");
}
static void start_vumeter_record_cb(void) {
- g_spawn_command_line_async("pavumeter --record", NULL);
+ run("pavumeter-record");
}
static void start_server_preferences_cb(void) {
- g_spawn_command_line_async("paprefs", NULL);
+ run("paprefs");
}
static void show_preferences(void) {
@@ -772,11 +802,15 @@ static void setup_gconf(void) {
int main(int argc, char *argv[]) {
pa_browser *b = NULL;
pa_glib_mainloop *m = NULL;
+ GnomeProgram *program;
startup_time = time(NULL);
-
- gtk_init(&argc, &argv);
+ program = gnome_program_init("padevchoose", VERSION,
+ LIBGNOMEUI_MODULE,
+ argc, argv,
+ NULL);
+
glade_xml = glade_xml_new(GLADE_FILE, NULL, NULL);
g_assert(glade_xml);
@@ -825,6 +859,9 @@ fail:
g_object_unref(G_OBJECT(notification));
g_free(last_events);
+
+ if (program)
+ g_object_unref(program);
return 0;
}