Using g_spawn_async() instead of execlp()

This commit is contained in:
Pierre Pronchery 2011-02-05 03:39:34 +00:00
parent 5f9ae60e55
commit 58a2e08f92
6 changed files with 88 additions and 104 deletions

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Browser 0.1.4\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-02-01 15:17+0100\n"
"POT-Creation-Date: 2011-02-05 04:38+0100\n"
"PO-Revision-Date: 2010-03-29 23:28+0200\n"
"Last-Translator: Pierre Pronchery <khorben@defora.org>\n"
"Language-Team: English\n"
@ -189,12 +189,12 @@ msgstr ""
#: ../src/copy.c:672 ../src/delete.c:421 ../src/delete.c:426
#: ../src/desktop.c:1439 ../src/desktop.c:1444 ../src/move.c:452
#: ../src/move.c:456 ../src/properties.c:114 ../src/properties.c:118
#: ../src/view.c:364 ../src/view.c:367
#: ../src/view.c:366 ../src/view.c:371
msgid "Error"
msgstr "Fehler"
#: ../src/browser.c:753 ../src/desktopicon.c:814 ../src/view.c:144
#: ../src/view.c:415
#: ../src/browser.c:753 ../src/desktopicon.c:804 ../src/view.c:144
#: ../src/view.c:419
msgid "Open with..."
msgstr "Offnen mit..."
@ -268,8 +268,8 @@ msgid "New folder"
msgstr "Neu Ordner"
#: ../src/callbacks.c:195 ../src/callbacks.c:201 ../src/callbacks.c:1051
#: ../src/callbacks.c:1056 ../src/desktopicon.c:796 ../src/desktopicon.c:801
#: ../src/desktopicon.c:848 ../src/desktopicon.c:853
#: ../src/callbacks.c:1056 ../src/desktopicon.c:784 ../src/desktopicon.c:789
#: ../src/desktopicon.c:836 ../src/desktopicon.c:841
msgid "Warning"
msgstr "Achtung"
@ -311,7 +311,7 @@ msgstr ""
msgid "Open _with..."
msgstr "Offnen _mit..."
#: ../src/callbacks.c:1055 ../src/desktopicon.c:800
#: ../src/callbacks.c:1055 ../src/desktopicon.c:788
msgid "Are you sure you want to execute this file?"
msgstr ""
@ -484,11 +484,11 @@ msgid ""
" -m\tMonitor where to display the desktop\n"
msgstr ""
#: ../src/desktopicon.c:851
#: ../src/desktopicon.c:839
msgid "Are you sure you want to delete "
msgstr ""
#: ../src/desktopicon.c:852
#: ../src/desktopicon.c:840
msgid " file(s)?"
msgstr ""
@ -614,10 +614,10 @@ msgstr ""
msgid "View file..."
msgstr ""
#: ../src/view.c:403 ../src/view.c:496
#: ../src/view.c:407 ../src/view.c:500
msgid "Could not edit file"
msgstr ""
#: ../src/view.c:510
#: ../src/view.c:514
msgid "Usage: view file...\n"
msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Browser 0.1.4\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-02-01 15:17+0100\n"
"POT-Creation-Date: 2011-02-05 04:38+0100\n"
"PO-Revision-Date: 2010-03-30 01:04+0200\n"
"Last-Translator: Pierre Pronchery <khorben@defora.org>\n"
"Language-Team: Spanish\n"
@ -189,12 +189,12 @@ msgstr ""
#: ../src/copy.c:672 ../src/delete.c:421 ../src/delete.c:426
#: ../src/desktop.c:1439 ../src/desktop.c:1444 ../src/move.c:452
#: ../src/move.c:456 ../src/properties.c:114 ../src/properties.c:118
#: ../src/view.c:364 ../src/view.c:367
#: ../src/view.c:366 ../src/view.c:371
msgid "Error"
msgstr ""
#: ../src/browser.c:753 ../src/desktopicon.c:814 ../src/view.c:144
#: ../src/view.c:415
#: ../src/browser.c:753 ../src/desktopicon.c:804 ../src/view.c:144
#: ../src/view.c:419
msgid "Open with..."
msgstr ""
@ -268,8 +268,8 @@ msgid "New folder"
msgstr ""
#: ../src/callbacks.c:195 ../src/callbacks.c:201 ../src/callbacks.c:1051
#: ../src/callbacks.c:1056 ../src/desktopicon.c:796 ../src/desktopicon.c:801
#: ../src/desktopicon.c:848 ../src/desktopicon.c:853
#: ../src/callbacks.c:1056 ../src/desktopicon.c:784 ../src/desktopicon.c:789
#: ../src/desktopicon.c:836 ../src/desktopicon.c:841
msgid "Warning"
msgstr ""
@ -311,7 +311,7 @@ msgstr ""
msgid "Open _with..."
msgstr ""
#: ../src/callbacks.c:1055 ../src/desktopicon.c:800
#: ../src/callbacks.c:1055 ../src/desktopicon.c:788
msgid "Are you sure you want to execute this file?"
msgstr ""
@ -484,11 +484,11 @@ msgid ""
" -m\tMonitor where to display the desktop\n"
msgstr ""
#: ../src/desktopicon.c:851
#: ../src/desktopicon.c:839
msgid "Are you sure you want to delete "
msgstr ""
#: ../src/desktopicon.c:852
#: ../src/desktopicon.c:840
msgid " file(s)?"
msgstr ""
@ -614,10 +614,10 @@ msgstr ""
msgid "View file..."
msgstr ""
#: ../src/view.c:403 ../src/view.c:496
#: ../src/view.c:407 ../src/view.c:500
msgid "Could not edit file"
msgstr ""
#: ../src/view.c:510
#: ../src/view.c:514
msgid "Usage: view file...\n"
msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Browser 0.1.4\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-02-01 15:17+0100\n"
"POT-Creation-Date: 2011-02-05 04:38+0100\n"
"PO-Revision-Date: 2010-03-29 23:28+0200\n"
"Last-Translator: Pierre Pronchery <khorben@defora.org>\n"
"Language-Team: French\n"
@ -189,12 +189,12 @@ msgstr " Chemin: "
#: ../src/copy.c:672 ../src/delete.c:421 ../src/delete.c:426
#: ../src/desktop.c:1439 ../src/desktop.c:1444 ../src/move.c:452
#: ../src/move.c:456 ../src/properties.c:114 ../src/properties.c:118
#: ../src/view.c:364 ../src/view.c:367
#: ../src/view.c:366 ../src/view.c:371
msgid "Error"
msgstr "Erreur"
#: ../src/browser.c:753 ../src/desktopicon.c:814 ../src/view.c:144
#: ../src/view.c:415
#: ../src/browser.c:753 ../src/desktopicon.c:804 ../src/view.c:144
#: ../src/view.c:419
msgid "Open with..."
msgstr "Ouvrir avec..."
@ -268,8 +268,8 @@ msgid "New folder"
msgstr "Nouveau dossier"
#: ../src/callbacks.c:195 ../src/callbacks.c:201 ../src/callbacks.c:1051
#: ../src/callbacks.c:1056 ../src/desktopicon.c:796 ../src/desktopicon.c:801
#: ../src/desktopicon.c:848 ../src/desktopicon.c:853
#: ../src/callbacks.c:1056 ../src/desktopicon.c:784 ../src/desktopicon.c:789
#: ../src/desktopicon.c:836 ../src/desktopicon.c:841
msgid "Warning"
msgstr "Avertissement"
@ -311,7 +311,7 @@ msgstr "Démonter"
msgid "Open _with..."
msgstr "Ouvrir _avec..."
#: ../src/callbacks.c:1055 ../src/desktopicon.c:800
#: ../src/callbacks.c:1055 ../src/desktopicon.c:788
msgid "Are you sure you want to execute this file?"
msgstr "Voulez-vous vraiment exécuter ce fichier ?"
@ -512,11 +512,11 @@ msgstr ""
" -h\tAfficher l'écran d'accueil\n"
" -m\tMoniteur où afficher le bureau\n"
#: ../src/desktopicon.c:851
#: ../src/desktopicon.c:839
msgid "Are you sure you want to delete "
msgstr "Voulez-vous vraiment effacer "
#: ../src/desktopicon.c:852
#: ../src/desktopicon.c:840
msgid " file(s)?"
msgstr " fichier(s) ?"
@ -648,10 +648,10 @@ msgstr "Ne peut pas déterminer le type de fichier"
msgid "View file..."
msgstr "Ouvrir..."
#: ../src/view.c:403 ../src/view.c:496
#: ../src/view.c:407 ../src/view.c:500
msgid "Could not edit file"
msgstr "Impossible d'éditer le fichier"
#: ../src/view.c:510
#: ../src/view.c:514
msgid "Usage: view file...\n"
msgstr "Usage: view fichier...\n"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Browser 0.1.4\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-02-01 15:17+0100\n"
"POT-Creation-Date: 2011-02-05 04:38+0100\n"
"PO-Revision-Date: 2010-04-07 23:18+0200\n"
"Last-Translator: Pierre Pronchery <khorben@defora.org>\n"
"Language-Team: Italian\n"
@ -189,12 +189,12 @@ msgstr ""
#: ../src/copy.c:672 ../src/delete.c:421 ../src/delete.c:426
#: ../src/desktop.c:1439 ../src/desktop.c:1444 ../src/move.c:452
#: ../src/move.c:456 ../src/properties.c:114 ../src/properties.c:118
#: ../src/view.c:364 ../src/view.c:367
#: ../src/view.c:366 ../src/view.c:371
msgid "Error"
msgstr ""
#: ../src/browser.c:753 ../src/desktopicon.c:814 ../src/view.c:144
#: ../src/view.c:415
#: ../src/browser.c:753 ../src/desktopicon.c:804 ../src/view.c:144
#: ../src/view.c:419
msgid "Open with..."
msgstr ""
@ -268,8 +268,8 @@ msgid "New folder"
msgstr ""
#: ../src/callbacks.c:195 ../src/callbacks.c:201 ../src/callbacks.c:1051
#: ../src/callbacks.c:1056 ../src/desktopicon.c:796 ../src/desktopicon.c:801
#: ../src/desktopicon.c:848 ../src/desktopicon.c:853
#: ../src/callbacks.c:1056 ../src/desktopicon.c:784 ../src/desktopicon.c:789
#: ../src/desktopicon.c:836 ../src/desktopicon.c:841
msgid "Warning"
msgstr ""
@ -311,7 +311,7 @@ msgstr ""
msgid "Open _with..."
msgstr ""
#: ../src/callbacks.c:1055 ../src/desktopicon.c:800
#: ../src/callbacks.c:1055 ../src/desktopicon.c:788
msgid "Are you sure you want to execute this file?"
msgstr ""
@ -484,11 +484,11 @@ msgid ""
" -m\tMonitor where to display the desktop\n"
msgstr ""
#: ../src/desktopicon.c:851
#: ../src/desktopicon.c:839
msgid "Are you sure you want to delete "
msgstr ""
#: ../src/desktopicon.c:852
#: ../src/desktopicon.c:840
msgid " file(s)?"
msgstr ""
@ -614,10 +614,10 @@ msgstr ""
msgid "View file..."
msgstr ""
#: ../src/view.c:403 ../src/view.c:496
#: ../src/view.c:407 ../src/view.c:500
msgid "Could not edit file"
msgstr ""
#: ../src/view.c:510
#: ../src/view.c:514
msgid "Usage: view file...\n"
msgstr ""

View File

@ -13,7 +13,8 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. */
/* FIXME
* - track multiple selection on delete/properties... */
* - track multiple selection on delete/properties...
* - add a "Rename..." menu action */
@ -160,7 +161,7 @@ static int _desktop_get_workarea(Desktop * desktop);
/* desktop_new */
/* callbacks */
static gboolean _new_idle(gpointer data);
static GdkFilterReturn _new_on_root_event(GdkXEvent * xevent, GdkEvent * event,
static GdkFilterReturn _on_root_event(GdkXEvent * xevent, GdkEvent * event,
gpointer data);
Desktop * desktop_new(DesktopPrefs * prefs)
@ -188,16 +189,15 @@ Desktop * desktop_new(DesktopPrefs * prefs)
desktop->home = "/";
desktop_set_layout(desktop, desktop->prefs.layout);
/* manage root window events */
gdk_add_client_message_filter(gdk_atom_intern(
DESKTOP_CLIENT_MESSAGE, FALSE),
_new_on_root_event, desktop);
gdk_add_client_message_filter(gdk_atom_intern(DESKTOP_CLIENT_MESSAGE,
FALSE), _on_root_event, desktop);
gdk_window_get_geometry(desktop->root, &desktop->window.x,
&desktop->window.y, &desktop->window.width,
&desktop->window.height, &depth);
gdk_window_set_events(desktop->root, gdk_window_get_events(
desktop->root) | GDK_BUTTON_PRESS_MASK
| GDK_PROPERTY_CHANGE_MASK);
gdk_window_add_filter(desktop->root, _new_on_root_event, desktop);
gdk_window_add_filter(desktop->root, _on_root_event, desktop);
/* draw background when idle */
g_idle_add(_new_idle, desktop);
return desktop;
@ -288,7 +288,7 @@ static void _on_popup_paste(gpointer data);
static void _on_popup_preferences(gpointer data);
static void _on_popup_symlink(gpointer data);
static GdkFilterReturn _new_on_root_event(GdkXEvent * xevent, GdkEvent * event,
static GdkFilterReturn _on_root_event(GdkXEvent * xevent, GdkEvent * event,
gpointer data)
{
Desktop * desktop = data;

View File

@ -1,5 +1,5 @@
/* $Id$ */
/* Copyright (c) 2010 Pierre Pronchery <khorben@defora.org> */
/* Copyright (c) 2011 Pierre Pronchery <khorben@defora.org> */
/* This file is part of DeforaOS Desktop Browser */
/* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -718,7 +718,9 @@ static void _on_icon_open(gpointer data)
{
DesktopIcon * desktopicon = data;
Mime * mime;
pid_t pid;
char * argv[] = { "browser", "browser", "--", NULL, NULL };
GSpawnFlags flags = G_SPAWN_SEARCH_PATH | G_SPAWN_FILE_AND_ARGV_ZERO;
GError * error = NULL;
if(desktopicon->path == NULL && desktopicon->callback != NULL)
{
@ -733,16 +735,10 @@ static void _on_icon_open(gpointer data)
_on_icon_open_with(desktopicon);
return;
}
if((pid = fork()) == -1)
{
desktop_error(desktopicon->desktop, "fork", 0);
return;
}
if(pid != 0)
return;
execlp("browser", "browser", "--", desktopicon->path, NULL);
fprintf(stderr, "%s%s\n", "desktop: browser: ", strerror(errno));
exit(127);
argv[3] = desktopicon->path;
if(g_spawn_async(NULL, argv, NULL, flags, NULL, NULL, NULL, &error)
!= TRUE)
desktop_error(desktopicon->desktop, argv[0], 1); /* XXX */
}
static void _on_icon_edit(gpointer data)
@ -758,31 +754,23 @@ static gboolean _run_confirm(DesktopIcon * desktopicon);
static void _on_icon_run(gpointer data)
{
DesktopIcon * desktopicon = data;
pid_t pid;
char * argv[] = { NULL, NULL, NULL };
GSpawnFlags flags = G_SPAWN_SEARCH_PATH | G_SPAWN_FILE_AND_ARGV_ZERO;
GError * error = NULL;
if(desktopicon->confirm != FALSE && _run_confirm(desktopicon) != TRUE)
return;
if((pid = fork()) == -1)
desktop_error(desktopicon->desktop, "fork", 0);
else if(pid != 0)
return;
if(desktopicon->tryexec != NULL) /* XXX ugly */
{
execlp(desktopicon->tryexec, desktopicon->tryexec, NULL);
desktop_error(NULL, desktopicon->tryexec, 0);
}
if(desktopicon->exec != NULL)
{
argv[0] = desktopicon->tryexec;
else if(desktopicon->exec != NULL)
/* FIXME it's actually a format string */
execlp(desktopicon->exec, desktopicon->exec, NULL);
desktop_error(NULL, desktopicon->exec, 0);
}
argv[0] = desktopicon->exec;
else
{
execl(desktopicon->path, desktopicon->path, NULL);
desktop_error(NULL, desktopicon->path, 0);
}
exit(127);
argv[0] = desktopicon->path;
argv[1] = argv[0];
if(g_spawn_async(NULL, argv, NULL, flags, NULL, NULL, NULL, &error)
!= TRUE)
desktop_error(desktopicon->desktop, argv[0], 1); /* XXX */
}
static gboolean _run_confirm(DesktopIcon * desktopicon)
@ -809,7 +797,9 @@ static void _on_icon_open_with(gpointer data)
DesktopIcon * desktopicon = data;
GtkWidget * dialog;
char * filename = NULL;
pid_t pid;
char * argv[] = { NULL, NULL, NULL, NULL };
GSpawnFlags flags = G_SPAWN_SEARCH_PATH | G_SPAWN_FILE_AND_ARGV_ZERO;
GError * error = NULL;
dialog = gtk_file_chooser_dialog_new(_("Open with..."),
GTK_WINDOW(desktopicon->window),
@ -822,14 +812,12 @@ static void _on_icon_open_with(gpointer data)
gtk_widget_destroy(dialog);
if(filename == NULL)
return;
if((pid = fork()) == -1)
desktop_error(desktopicon->desktop, "fork", 0);
else if(pid == 0)
{
execlp(filename, filename, desktopicon->path, NULL);
desktop_error(NULL, filename, 0);
exit(127);
}
argv[0] = filename;
argv[1] = filename;
argv[2] = desktopicon->path;
if(g_spawn_async(NULL, argv, NULL, flags, NULL, NULL, NULL, &error)
!= TRUE)
desktop_error(desktopicon->desktop, argv[0], 1); /* XXX */
g_free(filename);
}
@ -858,7 +846,7 @@ static void _on_icon_delete(gpointer data)
/* FIXME check if needs UTF-8 conversion */
selection = g_list_append(selection, desktopicon->path);
if(_common_exec("delete", "-ir", selection) != 0)
desktop_error(desktopicon->desktop, "fork", 0);
desktop_error(desktopicon->desktop, "fork", 1);
g_list_free(selection);
}
}
@ -866,18 +854,14 @@ static void _on_icon_delete(gpointer data)
static void _on_icon_properties(gpointer data)
{
DesktopIcon * desktopicon = data;
pid_t pid;
char * argv[] = { "properties", "properties", "--", NULL, NULL };
GSpawnFlags flags = G_SPAWN_SEARCH_PATH | G_SPAWN_FILE_AND_ARGV_ZERO;
GError * error = NULL;
if((pid = fork()) == -1)
{
desktop_error(desktopicon->desktop, "fork", 0);
return;
}
else if(pid != 0)
return;
execlp("properties", "properties", "--", desktopicon->path, NULL);
desktop_error(NULL, "properties", 0);
exit(127);
argv[3] = desktopicon->path;
if(g_spawn_async(NULL, argv, NULL, flags, NULL, NULL, NULL, &error)
!= TRUE)
desktop_error(desktopicon->desktop, argv[0], 1); /* XXX */
}
static gboolean _on_icon_key_press(GtkWidget * widget, GdkEventKey * event,
@ -920,5 +904,5 @@ static void _on_icon_drag_data_received(GtkWidget * widget,
DesktopIcon * desktopicon = data;
if(_common_drag_data_received(context, seldata, desktopicon->path) != 0)
desktop_error(desktopicon->desktop, "fork", 0);
desktop_error(desktopicon->desktop, "fork", 1);
}