From fe7986af7bfc7f3193a1dfcaed72740c1ab15007 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 21 Jun 2006 13:47:11 +0000 Subject: make "start on login" button work git-svn-id: file:///home/lennart/svn/public/padevchooser/trunk@11 e4aeda27-4315-0410-ac56-b21855d76123 --- src/padevchooser.c | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 63 insertions(+), 2 deletions(-) (limited to 'src/padevchooser.c') diff --git a/src/padevchooser.c b/src/padevchooser.c index 5b10c06..b8e2fd1 100644 --- a/src/padevchooser.c +++ b/src/padevchooser.c @@ -1,4 +1,33 @@ +/* $Id$ */ + +/*** + This file is part of padevchooser. + + padevchooser 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. + + padevchooser 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 Lesser General Public License + along with padevchooser; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + USA. +***/ + +#ifdef HAVE_CONFIG_H +#include +#endif + #include +#include +#include +#include +#include #include #include @@ -634,6 +663,35 @@ static void set_x11_props(void) { x11_del_prop(GDK_DISPLAY(), "PULSE_ID"); } +static void start_on_login_cb(GtkCheckButton *w) { + gchar *c; + + mkdir(g_get_user_config_dir(), 0777); + c = g_build_filename(g_get_user_config_dir(), "autostart", NULL); + mkdir(c, 0777); + g_free(c); + c = g_build_filename(g_get_user_config_dir(), "autostart", "padevchooser.desktop", NULL); + + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w))) { + if (symlink(DESKTOP_FILE, c) < 0 && errno != EEXIST) + g_warning("symlink() failed: %s", strerror(errno)); + } else { + if (unlink(c) < 0 && errno != ENOENT) + g_warning("unlink() failed: %s", strerror(errno)); + } + + g_free(c); +} + +static void init_start_on_login_check_button(GtkToggleButton *w) { + struct stat st; + gchar *c; + + c = g_build_filename(g_get_user_config_dir(), "autostart", "padevchooser.desktop", NULL); + gtk_toggle_button_set_active(w, lstat(c, &st) >= 0); + g_free(c); +} + static void check_button_cb(GtkCheckButton *w, const gchar *key) { gboolean b, *ptr; @@ -661,7 +719,7 @@ static void gconf_notify_cb(GConfClient *client, guint cnxn_id, GConfEntry *entr } static void setup_gconf(void) { - GtkWidget *server_check_button, *sink_check_button, *source_check_button, *startup_check_button; + GtkWidget *server_check_button, *sink_check_button, *source_check_button, *startup_check_button, *start_on_login_check_button; gconf = gconf_client_get_default(); g_assert(gconf); @@ -672,6 +730,7 @@ static void setup_gconf(void) { sink_check_button = glade_xml_get_widget(glade_xml, "sinkCheckButton"); source_check_button = glade_xml_get_widget(glade_xml, "sourceCheckButton"); startup_check_button = glade_xml_get_widget(glade_xml, "startupCheckButton"); + start_on_login_check_button = glade_xml_get_widget(glade_xml, "loginCheckButton"); g_object_set_data(G_OBJECT(server_check_button), "ptr", ¬ify_on_server_discovery); g_object_set_data(G_OBJECT(sink_check_button), "ptr", ¬ify_on_sink_discovery); @@ -687,7 +746,8 @@ static void setup_gconf(void) { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(sink_check_button), notify_on_sink_discovery); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(source_check_button), notify_on_source_discovery); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(startup_check_button), no_notify_on_startup); - + init_start_on_login_check_button(GTK_TOGGLE_BUTTON(start_on_login_check_button)); + gtk_widget_set_sensitive(startup_check_button, notify_on_server_discovery||notify_on_sink_discovery||notify_on_source_discovery); gconf_client_notify_add(gconf, GCONF_PREFIX"/notify_on_server_discovery", gconf_notify_cb, server_check_button, NULL, NULL); @@ -699,6 +759,7 @@ static void setup_gconf(void) { g_signal_connect(G_OBJECT(sink_check_button), "toggled", G_CALLBACK(check_button_cb), GCONF_PREFIX"/notify_on_sink_discovery"); g_signal_connect(G_OBJECT(source_check_button), "toggled", G_CALLBACK(check_button_cb), GCONF_PREFIX"/notify_on_source_discovery"); g_signal_connect(G_OBJECT(startup_check_button), "toggled", G_CALLBACK(check_button_cb), GCONF_PREFIX"/no_notify_on_startup"); + g_signal_connect(G_OBJECT(start_on_login_check_button), "toggled", G_CALLBACK(start_on_login_cb), NULL); } int main(int argc, char *argv[]) { -- cgit