#!/usr/bin/perl -w unless (eval 'use Gtk; init Gtk;;') { &nogui } gui(); Gtk->main(); sub gui { #main window $main = new Gtk::Window("toplevel"); $main->signal_connect("destroy" => sub {$main->destroy; Gtk->exit(0);}); $main->signal_connect("delete_event" => \&Gtk::false); # $main->set_default_size('230','65'); $main->position(-mouse); $main->set_policy(1,1,1); $main->set_title("E Background"); $main->{'vbox'} = new Gtk::VBox(0,5); $main->{'vbox'}->show; $main->show; $main->add($main->{'vbox'}); #menubar $main->{'menu'} = new Gtk::MenuBar; $main->{'menu'}->{'file'} = new Gtk::MenuItem("File"); $main->{'menu'}->{'file'}->show; $main->{'menu'}->show; $main->{'menu'}->append($main->{'menu'}->{'file'}); $main->{'filemenu'} = new Gtk::Menu; $main->{'menu'}->{'file'}->set_submenu($main->{'filemenu'}); $main->{'filemenu'}->{'about'} = new Gtk::MenuItem("About"); $main->{'filemenu'}->{'about'}->signal_connect("activate" => \&about ); $main->{'filemenu'}->{'about'}->show; $main->{'filemenu'}->show; $main->{'filemenu'}->append($main->{'filemenu'}->{'about'}); $main->{'filemenu'}->{'exit'} = new Gtk::MenuItem("exit"); $main->{'filemenu'}->{'exit'}->signal_connect("activate" => sub { $main->destroy; Gtk->exit(0); }); $main->{'filemenu'}->{'exit'}->show; $main->{'filemenu'}->append($main->{'filemenu'}->{'exit'}); $main->{'vbox'}->pack_start($main->{'menu'},0,0,0); # button box and buttons. $main->{'buttonbox'} = new Gtk::VButtonBox; $main->{'buttonbox'}->show; $main->{'Add'} = new_with_label Gtk::Button("Add Background"); $main->{'Add'}->signal_connect('clicked' => \&add); $main->{'Add'}->show; $main->{'buttonbox'}->add($main->{'Add'}); $main->{'show'} = new_with_label Gtk::Button("Show Backgrounds"); $main->{'show'}->signal_connect('clicked' => \&show); $main->{'show'}->show; $main->{'buttonbox'}->add($main->{'show'}); $main->{'vbox'}->pack_start($main->{'buttonbox'},0,0,0); } #dialog and dialog for error reporting sub, pass it a title, text or an error and size.. but size #is not necessary. $x and $y are for size. sub create_dialog { my ($title, $error, $x, $y) = @_; my ($dlg, $lbl, $ok); $dlg = new Gtk::Dialog; $dlg->signal_connect("destroy" => sub { $dlg->destroy; }); $dlg->signal_connect("delete_event" => \&Gtk::false); $dlg->set_title("$title"); $dlg->border_width(10); $dlg->position(-mouse); if (defined $x and defined $y) { $dlg->set_default_size($x, $y); } else { $dlg->set_default_size(150, 100); } $lbl = new Gtk::Label "$error"; $lbl->set_alignment(0.5,0.5); $lbl->set_line_wrap(0); $dlg->vbox->pack_start($lbl,1,1,5); $lbl->show; $ok = new Gtk::Button "Ok"; $ok->signal_connect("clicked", sub { $dlg->destroy; }); $ok->set_usize(55,25); $ok->show; $dlg->action_area->pack_start($ok,0,0,5); $dlg->show; return 1; } sub about { &create_dialog("About This Program", "E background, adds a background to E's cache without a restart\nwritten by Maher Awamy ", "50", "50"); } # add entry sub sub add { if (defined $win) { &create_dialog("Error","A file selection window exists already!","50","50"); return 1; } $win = new Gtk::FileSelection("Choose File"); $win->position(-mouse); $win->show; $win->signal_connect("destroy" => sub { $win->destroy; undef $win; }); $win->signal_connect("delete_event" => \&Gtk::false); $win->ok_button->signal_connect("clicked", \&process, $win); $win->cancel_button->signal_connect("clicked", sub { $win->destroy; undef $win; }); } sub process { my $filename = $win->get_filename; if (-f $filename and $filename =~ /(bmp|gif|jpg|jpeg|png)$/i) { $win->destroy; undef $win; @args = ('eesh', '-e', "background $filename bg.file $filename"); system(@args) == 0 or die "system @args failed :$?"; } else { &create_dialog("Error","You must choose an image file","50","50"); $win->destroy; undef $win; } } sub show { @args = ('eesh', '-e', "configpanel bg"); system(@args) == 0 or die "system @args failed :$?"; } sub nogui { $filename = $ARGV[0]; if (!$filename) { printf("Usage: e.pl pathtofile\n"); exit } if (-f $filename and $filename =~ /(bmp|gif|jpg|jpeg|png)$/i) { @args = ('eesh', '-e', "background $filename bg.file $filename"); system(@args) == 0 or die "system @args failed :$?"; &show; } else { printf("Image does not exist or is not an image file\n"); exit; } exit; }