summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormallum <mallum@b067294f-1dea-0310-9683-c47a78595994>2005-01-28 16:06:06 +0000
committermallum <mallum@b067294f-1dea-0310-9683-c47a78595994>2005-01-28 16:06:06 +0000
commit280a45ae4a92177412ac4c8b31f31144499a0580 (patch)
tree95ef8d3149f2edf9b2e90bf552b629eb35e9bb65
parentefdeb1b636f1954e17f5dd334fdf65f44ff90c3e (diff)
add icon, support for changing device via hack + cmd to run on startup
git-svn-id: http://svn.o-hand.com/repos/matchbox/trunk/Xoo@1047 b067294f-1dea-0310-9683-c47a78595994
-rw-r--r--ChangeLog24
-rw-r--r--configure.ac2
-rw-r--r--data/Makefile.am5
-rw-r--r--data/Xoo.glade49
-rw-r--r--data/xoo.desktop1
-rw-r--r--data/xoo.pngbin0 -> 2521 bytes
-rw-r--r--data/xoo.svg181
-rw-r--r--src/callbacks.c38
-rw-r--r--src/callbacks.h34
-rw-r--r--src/fakedev.h6
-rw-r--r--src/main.c97
-rw-r--r--src/prefs.c12
-rw-r--r--src/prefs.h1
13 files changed, 419 insertions, 31 deletions
diff --git a/ChangeLog b/ChangeLog
index 00b032e..10170fe 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,27 @@
+2005-01-28 mallum,,, <mallum@openedhand.com>
+
+ * configure.ac:
+ Bump Up version
+
+ * data/Makefile.am:
+ * data/xoo.desktop:
+ * data/xoo.svg:
+ Add an icon for .dotdesktop
+
+ * data/Xoo.glade:
+ * src/callbacks.c: (on_about_activate), (on_delete_event_hide):
+ * src/callbacks.h:
+ * src/fakedev.h:
+ * src/main.c: (fakeapp_new), (fakeapp_create_gui), (key_event),
+ (fakeapp_start_server), (fakeapp_catch_sigchild),
+ (fakeapp_restart_server), (usage), (main):
+ * src/prefs.c: (gconf_prefs_init), (on_prefs_apply_clicked):
+ * src/prefs.h:
+ Add support for:
+ - Setting command to run on startup
+ - Changing device on the fly ( via very nasty hack )
+ Also wrap some code at 80 chars.
+
2005-01-25 Ross Burton <ross@burtonini.com>
* data/Makefile.am:
diff --git a/configure.ac b/configure.ac
index 38a69ac..56079bf 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2,7 +2,7 @@
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.53)
-AC_INIT([Xoo], 0.5, [mallum@handhelds.org])
+AC_INIT([Xoo], 0.6, [mallum@handhelds.org])
AC_CONFIG_SRCDIR([src/main.c])
AM_INIT_AUTOMAKE()
diff --git a/data/Makefile.am b/data/Makefile.am
index 292a8db..36c34d4 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -1,4 +1,4 @@
-EXTRA_DIST = ipaq3800.xml ipaq3800.png dot.png Xoo.glade
+EXTRA_DIST = ipaq3800.xml ipaq3800.png dot.png Xoo.glade xoo.desktop xoo.png
devicedir = $(pkgdatadir)
device_DATA = ipaq3800.xml ipaq3800.png dot.png
@@ -8,3 +8,6 @@ ui_DATA = Xoo.glade
desktopdir = $(datadir)/applications
desktop_DATA = xoo.desktop
+
+pixmapdir = $(datadir)/pixmaps
+pixmap_DATA = xoo.png
diff --git a/data/Xoo.glade b/data/Xoo.glade
index a9f0b69..40c3c74 100644
--- a/data/Xoo.glade
+++ b/data/Xoo.glade
@@ -42,7 +42,7 @@
<child>
<widget class="GtkMenuItem" id="select_device">
<property name="visible">True</property>
- <property name="sensitive">False</property>
+ <property name="sensitive">True</property>
<property name="label" translatable="yes">Select _Device...</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_select_device_activate" last_modification_time="Mon, 08 Nov 2004 12:08:36 GMT"/>
@@ -212,7 +212,7 @@
<child>
<widget class="GtkTable" id="table1">
<property name="visible">True</property>
- <property name="n_rows">3</property>
+ <property name="n_rows">4</property>
<property name="n_columns">2</property>
<property name="homogeneous">False</property>
<property name="row_spacing">4</property>
@@ -392,6 +392,51 @@
<property name="y_options">fill</property>
</packing>
</child>
+
+ <child>
+ <widget class="GtkLabel" id="label9">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">On startup run:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="entry_start">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
</widget>
</child>
</widget>
diff --git a/data/xoo.desktop b/data/xoo.desktop
index 62e0f9b..0e7bd73 100644
--- a/data/xoo.desktop
+++ b/data/xoo.desktop
@@ -4,6 +4,7 @@ Name=Xoo
Comment=Handheld Device Simulator
Exec=xoo
Terminal=false
+Icon=xoo.png
Type=Application
Categories=GNOME;Application;Development;
StartupNotify=true
diff --git a/data/xoo.png b/data/xoo.png
new file mode 100644
index 0000000..6866f8a
--- /dev/null
+++ b/data/xoo.png
Binary files differ
diff --git a/data/xoo.svg b/data/xoo.svg
new file mode 100644
index 0000000..7cae175
--- /dev/null
+++ b/data/xoo.svg
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
+"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg
+ id="svg1"
+ sodipodi:version="0.32"
+ inkscape:version="0.40"
+ width="210mm"
+ height="297mm"
+ sodipodi:docname="xsvg.svg"
+ sodipodi:docbase="/home/mallum/Desktop"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:xml="http://www.w3.org/XML/1998/namespace"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs
+ id="defs47" />
+ <metadata
+ id="metadata46">
+ <rdf:RDF
+ id="RDF48">
+ <cc:Work
+ rdf:about=""
+ id="Work49">
+ <dc:format
+ id="format50">image/svg+xml</dc:format>
+ <dc:type
+ id="type52"
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="4.5375000"
+ inkscape:cx="31.073482"
+ inkscape:cy="656.27045"
+ inkscape:window-width="676"
+ inkscape:window-height="852"
+ inkscape:window-x="663"
+ inkscape:window-y="68"
+ inkscape:current-layer="svg1" />
+ <rect
+ x="7.1625342"
+ y="145.73003"
+ width="100.00000"
+ height="100.00000"
+ rx="10.000000"
+ ry="10.000000"
+ id="rect2"
+ style="fill:#326464;fill-opacity:1.0000000;"
+ inkscape:export-xdpi="43.200001"
+ inkscape:export-ydpi="43.200001" />
+ <g
+ transform="translate(253.5455,11.67218)"
+ font-size="10"
+ xml:space="preserve"
+ id="g3"
+ style="font-size:10.000000;fill:#000000;fill-opacity:0.49999997;font-family:mono">
+ <text
+ x="0"
+ y="10"
+ id="text5"> SVG SVG SVG SVG </text>
+
+
+ <text
+ x="0"
+ y="20"
+ id="text8">SVG SVG SVG SVG S</text>
+
+
+ <text
+ x="0"
+ y="30"
+ id="text11">VG SVG SVG SVG SV</text>
+
+
+ <text
+ x="0"
+ y="40"
+ id="text14">G SVG SVG SVG SVG</text>
+
+
+ <text
+ x="0"
+ y="50"
+ id="text17"> SVG SVG SVG SVG </text>
+
+
+ <text
+ x="0"
+ y="60"
+ id="text20">SVG SVG SVG SVG S</text>
+
+
+ <text
+ x="0"
+ y="70"
+ id="text23">VG SVG SVG SVG SV</text>
+
+
+ <text
+ x="0"
+ y="80"
+ id="text26">G SVG SVG SVG SVG</text>
+
+
+ <text
+ x="0"
+ y="90"
+ id="text29"> SVG SVG SVG SVG </text>
+
+
+ <text
+ x="0"
+ y="100"
+ id="text32"> VG SVG SVG SVG </text>
+
+
+ </g>
+ <g
+ transform="translate(11.20386,155.0055)"
+ id="g35">
+ <g
+ transform="translate(3.000000,2.000000)"
+ id="g36"
+ style="opacity:0.49999997">
+ <g
+ transform="scale(80.00000,80.00000)"
+ id="g37"
+ style="fill:#000000">
+ <g
+ transform="scale(7.864000e-7,7.864000e-7)"
+ id="g38">
+ <path
+ d="M 0.0000000,0.0000000 L 317900.00,0.0000000 L 710600.00,523600.00 L 115600.00,1271600.0 L 0.0000000,1271600.0 L 490875.00,654500.00 L 0.0000000,0.0000000 z "
+ id="path39" />
+ <path
+ d="M 1271600.0,1271600.0 L 953700.00,1271600.0 L 561000.00,748000.00 L 1156000.0,0.0000000 L 1271600.0,0.0000000 L 780725.00,617100.00 L 1271600.0,1271600.0 z "
+ id="path40" />
+ </g>
+ </g>
+ </g>
+ <g
+ transform="scale(80.00000,80.00000)"
+ id="g41"
+ style="fill:#d7d7d7">
+ <g
+ transform="scale(7.864000e-7,7.864000e-7)"
+ id="g42">
+ <path
+ d="M 0.0000000,0.0000000 L 317900.00,0.0000000 L 710600.00,523600.00 L 115600.00,1271600.0 L 0.0000000,1271600.0 L 490875.00,654500.00 L 0.0000000,0.0000000 z "
+ id="path43" />
+ <path
+ d="M 1271600.0,1271600.0 L 953700.00,1271600.0 L 561000.00,748000.00 L 1156000.0,0.0000000 L 1271600.0,0.0000000 L 780725.00,617100.00 L 1271600.0,1271600.0 z "
+ id="path44" />
+ </g>
+ </g>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-size:48.000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#191919;fill-opacity:1.0000000;stroke:none;stroke-width:1.0000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;font-family:HouseMovements-Poster;text-anchor:middle;writing-mode:lr;"
+ x="60.330578"
+ y="197.54124"
+ id="text1103"
+ sodipodi:linespacing="100%"
+ transform="translate(23.14050,30.85399)"><tspan
+ sodipodi:role="line"
+ id="tspan1104"
+ x="60.330578"
+ y="197.54124">oo</tspan></text>
+</svg>
diff --git a/src/callbacks.c b/src/callbacks.c
index 197fc17..7a17953 100644
--- a/src/callbacks.c
+++ b/src/callbacks.c
@@ -16,6 +16,7 @@
#include "config.h"
#include <signal.h>
+#include <gtk/gtk.h>
#include <gtk/gtkmain.h>
#include <gtk/gtkmenu.h>
#include <gtk/gtkmenuitem.h>
@@ -23,6 +24,8 @@
#include <gtk/gtkwindow.h>
#include "fakedev.h"
+extern pid_t xnest_pid;
+
void on_send_signal_activate (GtkMenuItem *menuitem, FakeApp *app) {
g_return_if_fail (app->xnest_pid != 0);
kill (app->xnest_pid, SIGUSR1);
@@ -74,3 +77,38 @@ gboolean on_delete_event_hide (GtkWidget *widget, GdkEvent *event, FakeApp *app)
gtk_widget_hide (widget);
return TRUE;
}
+
+void
+on_select_device (GtkMenuItem *menuitem, FakeApp *app)
+{
+ GtkWidget *dialog;
+
+ dialog = gtk_file_chooser_dialog_new ("Open Device",
+ GTK_WINDOW(app->window),
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+ NULL);
+
+ if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
+ {
+ char *filename;
+
+
+ filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
+
+ /****** DONT TRY THIS AT HOME KIDS. *******/
+
+ /* xxx FIXME, This is gross - just a very nasty hack for now xxx */
+
+ kill(xnest_pid, 9);
+ sleep(2);
+ execl("/bin/sh", "sh", "-c", "Xoo", "--device", filename, 0);
+
+ g_warning("Failed load device %s\n", filename);
+
+ g_free (filename);
+ }
+
+ gtk_widget_destroy (dialog);
+}
diff --git a/src/callbacks.h b/src/callbacks.h
index 5c5d38d..e3e4887 100644
--- a/src/callbacks.h
+++ b/src/callbacks.h
@@ -2,11 +2,29 @@
/* GTK+ callbacks */
-void on_send_signal_activate (GtkWidget *menuitem, FakeApp *app);
-void on_preferences_activate (GtkMenuItem *menuitem, FakeApp *app);
-void on_quit_activate (GtkMenuItem *menuitem, FakeApp *app);
-void on_about_activate (GtkMenuItem *menuitem, FakeApp *app);
-void on_window_destroy (GtkObject *widget, FakeApp *app);
-gboolean on_popup_menu_show (GtkWidget *widget, GdkEventButton *event, FakeApp *app);
-void on_show_decorations_toggle (GtkMenuItem *menuitem, FakeApp *app);
-gboolean on_delete_event_hide (GtkWidget *widget, GdkEvent *event, FakeApp *app);
+void
+on_send_signal_activate (GtkWidget *menuitem, FakeApp *app);
+
+void
+on_preferences_activate (GtkMenuItem *menuitem, FakeApp *app);
+
+void
+on_quit_activate (GtkMenuItem *menuitem, FakeApp *app);
+
+void
+on_about_activate (GtkMenuItem *menuitem, FakeApp *app);
+
+void
+on_window_destroy (GtkObject *widget, FakeApp *app);
+
+gboolean
+on_popup_menu_show (GtkWidget *widget, GdkEventButton *event, FakeApp *app);
+
+void
+on_show_decorations_toggle (GtkMenuItem *menuitem, FakeApp *app);
+
+gboolean
+on_delete_event_hide (GtkWidget *widget, GdkEvent *event, FakeApp *app);
+
+void
+on_select_device (GtkMenuItem *menuitem, FakeApp *app);
diff --git a/src/fakedev.h b/src/fakedev.h
index 845016c..1339c28 100644
--- a/src/fakedev.h
+++ b/src/fakedev.h
@@ -42,7 +42,7 @@ struct FakeApp
GtkWidget *debug_menu;
GtkWidget *prefs_window;
- GtkWidget *entry_display, *entry_server, *entry_options;
+ GtkWidget *entry_display, *entry_server, *entry_options, *entry_start;
GtkWidget *about_window;
int device_width;
@@ -72,6 +72,10 @@ struct FakeApp
pid_t xnest_pid;
char *win_title;
+ char *start_cmd;
+
+ int argc;
+ char **argv;
};
struct FakeButton
diff --git a/src/main.c b/src/main.c
index 88e2310..35ae6e8 100644
--- a/src/main.c
+++ b/src/main.c
@@ -29,7 +29,7 @@
#define XNEST_BIN "/usr/X11R6/bin/Xnest"
/* Used by the signal handler to detect which child has died */
-static pid_t xnest_pid;
+pid_t xnest_pid;
static gboolean key_event (GtkWidget *widget, GdkEventKey *event, FakeApp *app);
@@ -57,40 +57,76 @@ fakeapp_new(void)
glade = glade_xml_new (PKGDATADIR "/Xoo.glade", NULL, NULL);
g_assert (glade != NULL);
- glade_xml_signal_connect_data (glade, "on_send_signal_activate", (GCallback)on_send_signal_activate, app);
- glade_xml_signal_connect_data (glade, "on_quit_activate", (GCallback)on_quit_activate, app);
- glade_xml_signal_connect_data (glade, "on_about_activate", (GCallback)on_about_activate, app);
- glade_xml_signal_connect_data (glade, "on_window_destroy", (GCallback)on_window_destroy, app);
- glade_xml_signal_connect_data (glade, "on_popup_menu_show", (GCallback)on_popup_menu_show, app);
- glade_xml_signal_connect_data (glade, "on_show_decorations_toggle", (GCallback)on_show_decorations_toggle, app);
- glade_xml_signal_connect_data (glade, "on_delete_event_hide", (GCallback)on_delete_event_hide, app);
+ glade_xml_signal_connect_data (glade, "on_send_signal_activate",
+ (GCallback)on_send_signal_activate, app);
+
+ glade_xml_signal_connect_data (glade, "on_quit_activate",
+ (GCallback)on_quit_activate, app);
+
+ glade_xml_signal_connect_data (glade, "on_about_activate",
+ (GCallback)on_about_activate, app);
+
+ glade_xml_signal_connect_data (glade, "on_window_destroy",
+ (GCallback)on_window_destroy, app);
+
+ glade_xml_signal_connect_data (glade, "on_popup_menu_show",
+ (GCallback)on_popup_menu_show, app);
+
+ glade_xml_signal_connect_data (glade, "on_show_decorations_toggle",
+ (GCallback)on_show_decorations_toggle, app);
+
+ glade_xml_signal_connect_data (glade, "on_delete_event_hide",
+ (GCallback)on_delete_event_hide, app);
+
+ glade_xml_signal_connect_data (glade, "on_select_device_activate",
+ (GCallback)on_select_device, app);
+
#if HAVE_GCONF
- glade_xml_signal_connect_data (glade, "on_preferences_activate", (GCallback)on_preferences_activate, app);
- glade_xml_signal_connect_data (glade, "on_prefs_apply_clicked", (GCallback)on_prefs_apply_clicked, app);
- glade_xml_signal_connect_data (glade, "on_prefs_cancel_clicked", (GCallback)on_prefs_cancel_clicked, app);
+ glade_xml_signal_connect_data (glade, "on_preferences_activate",
+ (GCallback)on_preferences_activate, app);
+
+ glade_xml_signal_connect_data (glade, "on_prefs_apply_clicked",
+ (GCallback)on_prefs_apply_clicked, app);
+
+ glade_xml_signal_connect_data (glade, "on_prefs_cancel_clicked",
+ (GCallback)on_prefs_cancel_clicked, app);
#else
+
gtk_widget_hide (glade_xml_get_widget (glade, "preferences"));
+
#endif
app->window = glade_xml_get_widget (glade, "window");
app->fixed = glade_xml_get_widget (glade, "fixed");
gtk_fixed_set_has_window (GTK_FIXED (app->fixed), TRUE);
+
app->winnest = glade_xml_get_widget (glade, "winnest");
- g_signal_connect(app->window, "key-press-event", (GCallback)key_event, app);
- g_signal_connect(app->window, "key-release-event", (GCallback)key_event, app);
+
+ g_signal_connect(app->window, "key-press-event",
+ (GCallback)key_event, app);
+
+ g_signal_connect(app->window, "key-release-event",
+ (GCallback)key_event, app);
app->prefs_window = glade_xml_get_widget (glade, "prefswindow");
- gtk_window_set_transient_for (GTK_WINDOW (app->prefs_window), GTK_WINDOW (app->window));
+ gtk_window_set_transient_for (GTK_WINDOW (app->prefs_window),
+ GTK_WINDOW (app->window));
+
app->entry_display = glade_xml_get_widget (glade, "entry_display");
app->entry_server = glade_xml_get_widget (glade, "entry_server");
app->entry_options = glade_xml_get_widget (glade, "entry_options");
+ app->entry_start = glade_xml_get_widget (glade, "entry_start");
app->debug_menu = glade_xml_get_widget (glade, "send_signal");
app->popupmenu = glade_xml_get_widget (glade, "popupmenu_menu");
app->about_window = glade_xml_get_widget (glade, "aboutwindow");
- gtk_window_set_transient_for (GTK_WINDOW (app->about_window), GTK_WINDOW (app->window));
- g_signal_connect_swapped (glade_xml_get_widget (glade, "button_about_close"), "clicked", G_CALLBACK (gtk_widget_hide), app->about_window);
-
+
+ gtk_window_set_transient_for (GTK_WINDOW (app->about_window),
+ GTK_WINDOW (app->window));
+
+ g_signal_connect_swapped (glade_xml_get_widget (glade, "button_about_close"),
+ "clicked", G_CALLBACK (gtk_widget_hide),
+ app->about_window);
return app;
}
@@ -172,7 +208,9 @@ key_event (GtkWidget *widget, GdkEventKey *event, FakeApp *app)
xevent.xkey.window = GDK_WINDOW_XWINDOW (app->winnest->window);
xevent.xkey.root = GDK_WINDOW_XWINDOW (gdk_screen_get_root_window (gdk_drawable_get_screen (app->winnest->window)));
xevent.xkey.time = event->time;
+
/* FIXME, the following might cause problems for non-GTK apps */
+
xevent.xkey.x = 0;
xevent.xkey.y = 0;
xevent.xkey.x_root = 0;
@@ -182,9 +220,12 @@ key_event (GtkWidget *widget, GdkEventKey *event, FakeApp *app)
xevent.xkey.same_screen = TRUE;
gdk_error_trap_push ();
- XSendEvent (GDK_WINDOW_XDISPLAY (app->winnest->window), app->xnest_window,
+ XSendEvent (GDK_WINDOW_XDISPLAY
+ (app->winnest->window), app->xnest_window,
False, NoEventMask, &xevent);
+
gdk_display_sync (gtk_widget_get_display (widget));
+
if (gdk_error_trap_pop ()) {
g_warning("X error on XSendEvent");
}
@@ -242,6 +283,23 @@ fakeapp_start_server(FakeApp *app)
} else {
gtk_widget_set_sensitive (app->debug_menu, TRUE);
}
+
+ if (app->start_cmd)
+ {
+ pid = fork();
+ switch (pid) {
+ case 0:
+ setenv("DISPLAY", app->xnest_dpy_name, 1);
+ execl("/bin/sh", "sh", "-c", app->start_cmd, 0);
+ g_warning( "Failed to Launch %s\n", app->start_cmd);
+ exit(1);
+ case -1:
+ g_warning("Failed to Launch %s\n", app->start_cmd);
+ break;
+ default:
+ break;
+ }
+ }
return FALSE;
}
@@ -299,6 +357,9 @@ main(int argc, char **argv)
app = fakeapp_new();
+ app->argv = argv;
+ app->argc = argc;
+
#ifdef HAVE_GCONF
/* Do this here so that command line argument override the GConf prefs */
gconf_prefs_init(app);
diff --git a/src/prefs.c b/src/prefs.c
index 22edad1..7e723e7 100644
--- a/src/prefs.c
+++ b/src/prefs.c
@@ -43,12 +43,21 @@ void gconf_prefs_init(FakeApp *app) {
if (s != NULL && *s != '\0') {
app->xnest_bin_options = s;
}
+
+ s = gconf_client_get_string (gconf, GCONF_START_CMD, NULL);
+ if (s != NULL && *s != '\0') {
+ app->start_cmd = s;
+ }
+
}
void on_preferences_activate (GtkMenuItem *menuitem, FakeApp *app) {
gtk_entry_set_text (GTK_ENTRY (app->entry_display), app->xnest_dpy_name);
gtk_entry_set_text (GTK_ENTRY (app->entry_server), app->xnest_bin_path);
gtk_entry_set_text (GTK_ENTRY (app->entry_options), app->xnest_bin_options ? app->xnest_bin_options : "");
+
+ gtk_entry_set_text (GTK_ENTRY (app->entry_start), app->start_cmd ? app->start_cmd : "");
+
gtk_window_present (GTK_WINDOW (app->prefs_window));
}
@@ -64,6 +73,9 @@ void on_prefs_apply_clicked (GtkWidget *widget, FakeApp *app) {
s = gtk_entry_get_text (GTK_ENTRY (app->entry_options));
gconf_client_set_string (gconf, GCONF_SERVER_OPTIONS, s, NULL);
+ s = gtk_entry_get_text (GTK_ENTRY (app->entry_start));
+ gconf_client_set_string (gconf, GCONF_START_CMD, s, NULL);
+
gconf_prefs_init (app);
fakeapp_restart_server (app);
diff --git a/src/prefs.h b/src/prefs.h
index c30305a..3c30f88 100644
--- a/src/prefs.h
+++ b/src/prefs.h
@@ -4,6 +4,7 @@
#define GCONF_DISPLAY "/apps/Xoo/display"
#define GCONF_SERVER "/apps/Xoo/xserver"
#define GCONF_SERVER_OPTIONS "/apps/Xoo/xserver-options"
+#define GCONF_START_CMD "/apps/Xoo/startup-command"
void gconf_prefs_init(FakeApp *app);