From fb27911c3fb03c047b2cf7d0683c87f24ed7ad30 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 7 Aug 2007 00:16:44 +0000 Subject: 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 --- configure.ac | 2 +- src/Makefile.am | 2 +- src/padevchooser.c | 51 ++++++++++++++++++++++++++++++++++++++++++++------- 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 #include #include +#include +#include #include #include @@ -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; } -- cgit