#!/usr/bin/perl
use Gtk;
init Gtk;
$isEmbedded = ($XID, $CCPID) = "@ARGV" =~ /--embedded (w+) (w+)/;

my $window1 = $isEmbedded ? new Gtk::Plug ($XID) : new Gtk::Window -toplevel;
$window1->border_width(20);
my $vbox1 = new Gtk::VBox(1,0); $window1->add($vbox1);
$vbox1->pack_start(new Gtk::Label("
Welcome to the DrakClick configurator. Please choose between Double
Click (as in Windows, Gnome or Mac), or Single Click (click once like a web
page). 
"),0,0,0);
my $button1 = new Gtk::Button "Single Click";
my $button2 = new Gtk::Button "Double Click";
$button1->signal_connect ( clicked => \&singleclick );
$button2->signal_connect ( clicked => \&doubleclick );
$vbox1->pack_start($button1,0,0,0);
$vbox1->pack_start($button2,0,0,0);
$window1->show_all();
# callback registration
$window1->signal_connect( delete_event => \&closeapp );
Gtk->main_iteration while Gtk->events_pending;
$isEmbedded and kill USR2, $CCPID;
Gtk->main;

sub closeapp { $isEmbedded ? kill(USR1, $CCPID) : Gtk->exit(0);}

sub singleclick { changeclick ("true");}
sub doubleclick { changeclick ("false");}

sub changeclick
{
  my $status = shift(@_);
  my $inkde=0;
  $_=`date +%Y%m%d-%T`;chop;s/:/./g;my $dat=$_;
  my $DIR=$ENV{HOME}."/.kde/share/config";
  my $BAKDIR=$DIR."/bak";
  `mkdir -p $BAKDIR`;
  `touch $DIR/kdeglobals`;
  `cp -f $DIR/kdeglobals $BAKDIR/kdeglobals.$dat`;
  open(OLDCONF, "$BAKDIR/kdeglobals.$dat") or die "Can't open OLDCONF!";
  open(NCONF, ">".$DIR."/kdeglobals") or die "Can't open NCONF!";
  while(<OLDCONF>) {
    next if (/^SingleClick/);
    $inkde=1 if (/^\[KDE\]$/);
    $inkde++ if (/^$/ and $inkde>0);
    print NCONF "SingleClick=$status\n" if (/^$/ and $inkde==2);
    print NCONF $_;
  }
  print NCONF "\n[KDE]\nSingleClick=$status\n\n" if ($inkde==0);
  close(OLDCONF);
  close(NCONF);
  $pid=`ps aux|grep kdeinit|grep kdesktop|cut -c10-14`;
  `kill $pid`;
  `kdeinit kdesktop >/dev/null 2>/dev/null`;
  closeapp;
}
