summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2006-06-21 13:47:11 +0000
committerLennart Poettering <lennart@poettering.net>2006-06-21 13:47:11 +0000
commitfe7986af7bfc7f3193a1dfcaed72740c1ab15007 (patch)
tree229579615a1f5b6069fd2b48d70b607f21d38e53 /src
parent3247ef3194a233acdf5b2499c5ebe7fc7d4c45fe (diff)
make "start on login" button work
git-svn-id: file:///home/lennart/svn/public/padevchooser/trunk@11 e4aeda27-4315-0410-ac56-b21855d76123
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am1
-rw-r--r--src/config.h1
-rw-r--r--src/padevchooser.c65
-rw-r--r--src/padevchooser.glade2
4 files changed, 65 insertions, 4 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index ca8d704..f4a0164 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -29,5 +29,6 @@ padevchooser_SOURCES=padevchooser.c x11prop.c eggtrayicon.c
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
diff --git a/src/config.h b/src/config.h
deleted file mode 100644
index c498b27..0000000
--- a/src/config.h
+++ /dev/null
@@ -1 +0,0 @@
-#define GETTEX_PACKAGE foo
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 <config.h>
+#endif
+
#include <string.h>
+#include <errno.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <sys/types.h>
#include <gtk/gtk.h>
#include <glade/glade.h>
@@ -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", &notify_on_server_discovery);
g_object_set_data(G_OBJECT(sink_check_button), "ptr", &notify_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[]) {
diff --git a/src/padevchooser.glade b/src/padevchooser.glade
index 52872de..11c4ada 100644
--- a/src/padevchooser.glade
+++ b/src/padevchooser.glade
@@ -342,7 +342,7 @@
<property name="spacing">6</property>
<child>
- <widget class="GtkCheckButton" id="sessionCheckButton">
+ <widget class="GtkCheckButton" id="loginCheckButton">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">Start applet on session _login</property>