freebsd-ports/www/amphetadesk/files/patch-lib_AmphetaDesk_OS_Linux.pm
Mario Sergio Fujikawa Ferreira a63206c430 Patch file names can only characters [-+._a-zA-Z0-9]. Therefore,
rename them replacing s/::/_/

Reminded by:	Marcus Alves Grando <mnag@FreeBSD.org>
2005-10-11 22:31:52 +00:00

71 lines
2 KiB
Perl

--- lib/AmphetaDesk/OS/Linux.pm.orig Thu May 23 23:35:38 2002
+++ lib/AmphetaDesk/OS/Linux.pm Tue Oct 11 18:46:17 2005
@@ -15,11 +15,26 @@
use strict;
use AmphetaDesk::Settings;
use AmphetaDesk::Utilities;
+use POSIX ":sys_wait_h";
+use POSIX ":unistd_h";
require Exporter;
use vars qw( @ISA @EXPORT );
@ISA = qw( Exporter );
@EXPORT = qw( gui_init gui_listen gui_note open_url );
+# taken from perlipc man page
+sub sigchild {
+ my $child;
+
+ # If a second child dies while in the signal handler caused by the
+ # first death, we won't get another signal. So must loop here else
+ # we will leave the unreaped child as a zombie. And the next time
+ # two children die we get another zombie. And so on.
+ while (($child = waitpid(-1,WNOHANG)) > 0) {}
+
+ $SIG{CHLD} = \&sigchild;
+}
+
###############################################################################
# gui_init - start the gui and display the window. #
###############################################################################
@@ -105,8 +120,41 @@
# construct our url.
my $url = "http://127.0.0.1:" . get_setting("urls_port") . "/index.html";
+ # default browser
+ my $browser;
+
# we spit out our suggestion just to catch all instances.
note("If your browser doesn't load, go to <$url>.", 1);
+
+ # what browser?
+ if ($ENV{'BROWSER'}) {
+ $browser = $ENV{'BROWSER'};
+ } else {
+ if (get_setting("user_browser_path")) {
+ $browser = get_setting("user_browser_path");
+ }
+ }
+
+ if ( ($browser) && ( (-x $browser) || (-X $browser) ) ) {
+ note("Your environment states that $browser is your default program.");
+
+ $SIG{CHLD} = \&sigchild;
+
+ if (fork() == 0) {
+ my @args = ("$browser", "$url");
+
+ setsid();
+ close(STDIN);
+ close(STDOUT);
+ close(STDERR);
+
+ exec(@args) == 0
+ or note("The browser <$browser> does not exist. Please select another.");
+
+ exit 1;
+ }
+
+ }
return 1;