From 11192b58aa0053df80faebe224e3cf7f83d822cb Mon Sep 17 00:00:00 2001
From: Guillaume Cottenceau <gc@mandriva.com>
Date: Wed, 26 Nov 2003 13:01:01 +0000
Subject: allow X to restart after dying through X_move script, startkde also
 through startkde_move script

---
 move/Makefile                     |  3 ++-
 move/move.pm                      |  2 +-
 move/tree/X_move                  |  7 +++++++
 move/tree/startkde_move           | 32 ++++++++++++++++++++++++++++++++
 perl-install/install_steps_gtk.pm |  4 ++--
 5 files changed, 44 insertions(+), 4 deletions(-)
 create mode 100755 move/tree/X_move
 create mode 100755 move/tree/startkde_move

diff --git a/move/Makefile b/move/Makefile
index 8ee16a0cf..9b8e40f46 100644
--- a/move/Makefile
+++ b/move/Makefile
@@ -7,7 +7,7 @@ ISO = /BIG/mdkmove.iso
 DATA_FILES = devices symlinks directories-to-create etcfiles all-etcfiles keyfiles \
              BOOT-800-MOVE.jpg BOOT-1024-MOVE.jpg BOOT-1280-MOVE.jpg BOOT-1600-MOVE.jpg
 
-PROGRAM_FILES = etc-monitorer.pl
+PROGRAM_FILES = etc-monitorer.pl tree/startkde_move
 LANG_FILES = $(shell perl -ne 'print $$1 if /ALLOWED_LANGS = qw\((.*)\)/' move.pm)
 
 STAGE1 = ../mdk-stage1
@@ -49,6 +49,7 @@ install: build
 	sudo cp -f *.pm $(DEST_STAGE2)
 	sudo cp -f $(addprefix $(INSTALL)/, $(INSTALL_FILES)) $(DEST_STAGE2)
 	sudo cp -f $(PROGRAM_FILES) $(DEST_LIVETREE)/usr/bin
+	sudo cp -f tree/X_move $(DEST_LIVETREE)/usr/X11R6/bin
 
 	sudo rm -rf $(DEST_LIVETREE)/usr/share/langs
 	sudo mkdir -p $(DEST_LIVETREE)/usr/share/langs
diff --git a/move/move.pm b/move/move.pm
index 19a1af58c..e2f10e2f7 100644
--- a/move/move.pm
+++ b/move/move.pm
@@ -514,7 +514,7 @@ sub install2::startMove {
 	$ENV{LOGNAME} = $ENV{USER} = $username;
 	$ENV{HOME} = $home;
 	$ENV{SHELL} = $shell;
-	exec 'startkde';
+	exec 'startkde_move';
     } else {
 	exec 'xwait' or c::_exit(0);
     }
diff --git a/move/tree/X_move b/move/tree/X_move
new file mode 100755
index 000000000..df085fcd8
--- /dev/null
+++ b/move/tree/X_move
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+ok=0
+while [ "$ok" == 0 ]; do
+    X $@
+    ok=$?
+done
diff --git a/move/tree/startkde_move b/move/tree/startkde_move
new file mode 100755
index 000000000..a9d1d53ce
--- /dev/null
+++ b/move/tree/startkde_move
@@ -0,0 +1,32 @@
+#!/usr/bin/perl
+
+use MDK::Common;
+use lib qw(/usr/lib/libDrakX);
+use c;
+
+sub wait4x() {
+    my $nb = 0;
+    foreach (1..30) {
+        sleep 1;
+        print("no X server :("), exit 1 if !fuzzy_pidofs(qr/\bX_move\b/);
+        $nb++ if c::Xtest(':0');
+        if ($nb > 2) { #- one succeeded test is not enough :-(
+            return;
+        }
+    }
+    exit 1;
+}
+
+my ($kde_ok, $xwait);
+
+while (1) {
+    wait4x();
+    if (!($xwait = fork())) {
+        exec 'xwait', '-permanent';  #- so that server doesn't blink when startkde finishes
+    }
+    my ($xdim) = `xdpyinfo` =~ /dimensions:\s*(\d+)/;
+    system("qiv --root /image/move/BOOT-$xdim-MOVE.jpg");
+    system('startkde');
+    system('sudo killall X');
+    waitpid $xwait, 0;
+}
diff --git a/perl-install/install_steps_gtk.pm b/perl-install/install_steps_gtk.pm
index 82e962140..ba34a9205 100644
--- a/perl-install/install_steps_gtk.pm
+++ b/perl-install/install_steps_gtk.pm
@@ -107,13 +107,13 @@ sub new($$) {
             require run_program;
             move::automatic_xconf($o);
             run_program::run('/sbin/service', 'xfs', 'start');
-            @servers = qw(X);
+            @servers = qw(X_move);
 	}
 
 	foreach (@servers) {
 	    log::l("Trying with server $_");
 	    my $dir = "/usr/X11R6/bin";
-	    my ($prog, $Driver) = /Driver:(.*)/ ? ('XFree86', $1) : /Xsun|Xpmac|Xnest|^X$/ ? $_ : "XF86_$_";
+	    my ($prog, $Driver) = /Driver:(.*)/ ? ('XFree86', $1) : /Xsun|Xpmac|Xnest|^X_move$/ ? $_ : "XF86_$_";
 	    unless (-x "$dir/$prog") {
 		unlink $_ foreach glob_("$dir/X*");
 		install_any::getAndSaveFile("Mandrake/mdkinst$dir/$prog", "$dir/$prog") or die "failed to get server $prog: $!";
-- 
cgit v1.2.1