diff options
-rwxr-xr-x | control-center3 | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/control-center3 b/control-center3 index f7484d68..997d779e 100755 --- a/control-center3 +++ b/control-center3 @@ -36,7 +36,7 @@ my @treeitem_sub; my $nb_pages=0; my $window_global = new Gtk::Window -toplevel; $window_global->set_usize(800, 600); -$window_global->signal_connect ( delete_event => sub { Gtk->exit(0); }); +$window_global->signal_connect ( delete_event => sub { quit_global(); }); $window_global->set_position(1); $window_global->set_title("Mandrake Control Center"); $window_global->border_width(0); @@ -192,7 +192,7 @@ map { "Userdrake" => "userdrake" , "Draknet" => "draknet" , "Drakgw" => "drakgw" , "Menudrake" => "menudrake" , "Drakfont" => "drakfont" ); - +my @pid_launched; %tree_launched = ("Drakboot" => -1, "Drakfloppy" => -1, "Drakelogo" => -1 , "xfdrake" => -1 , "Hardrake" => -1 , "Mousedrake" => -1 , @@ -213,6 +213,15 @@ $SIG{USR1} = sub { $notebook_global->set_page(0); }; # embedded applications wil Gtk->main; +sub quit_global { + print "Cleaning...\n"; + foreach (@pid_launched) { + print "$_\n"; + } + kill TERM, @pid_launched; + Gtk->exit(0); +} + sub about_mdk_cc() { my $window_about = new Gtk::Dialog(); @@ -309,9 +318,13 @@ sub exec_treeitem { $notebook_global->append_page($socket, ""); $socket->realize; print ("The XID of the sockets window n° is [" . $socket->window->XWINDOW . "]\nMy PID is [" . $$ . "]\n"); - my $a = $exec_string . " --embedded " . $socket->window->XWINDOW . " " . $$ . "&"; + my $a = $exec_string . " --embedded " . $socket->window->XWINDOW . " " . $$; print "$a\n"; - system ($a); + if (my $pid = fork()) { + $pid_launched[$nb_pages]=$pid; + } else { + exec ($a) or print STDERR "couldn't exec $a: $!"; + } $nb_pages++; $tree_launched{$label}=$nb_pages; $notebook_global->set_page($nb_pages); @@ -326,7 +339,7 @@ sub item_factory_cb { my ($widget, $action, @data) = @_; print "ItemFactory: activated ", $widget->item_factory_path(), " -> ", $action, "\n"; - $action == 1 and Gtk->exit(0); + $action == 1 and quit_global(); $action == 4 and about_mdk_cc(); } |