--- deliantra/Deliantra-Client/DC/Main.pm 2011/12/27 09:17:27 1.2 +++ deliantra/Deliantra-Client/DC/Main.pm 2011/12/31 04:23:42 1.6 @@ -19,6 +19,7 @@ use common::sense; use Carp 'verbose'; +use Cwd (); use EV; BEGIN { *time = \&EV::time } @@ -42,7 +43,15 @@ BEGIN { $SIG{__DIE__} = sub { - return if $^S; + return if $^S; # quick reject + + # return if there are any eval contexts in the csall stack + for my $i (0..999) { + my ($sub, $is_require) = (caller $i)[3, 7] + or last; + return if $sub eq "(eval)" && !$is_require; + } + crash "CRASH/DIE: $_[0]" => 1; DC::fatal Carp::longmess "$_[0]"; } @@ -135,6 +144,7 @@ our $MUSIC_PLAYING_WIDGET; our $LICENSE_WIDGET; +our $DOWNLOADS_WIDGET; our $PICKUP_PAGE; our $INVENTORY_PAGE; @@ -1133,7 +1143,7 @@ tooltip => "You can override the audio driver to use here. Leaving it empty will result " . "in Deliantra picking one automatically. GNU/Linux users often prefer specific " . "drivers though, and can experiment with alsa, dsp, esd, pulse, arts, nas " - . "or other system-specific drivers. Selecting the wrong driver here will simply result" + . "or other system-specific drivers. Selecting the wrong driver here will simply result " . "in no sound.", on_changed => sub { my ($self, $value) = @_; $CFG->{audio_driver} = $value; 1 } ); @@ -1843,12 +1853,12 @@ $table->add_at (1, $row++, new DC::UI::Label align => 0, text => $Deliantra::VARDIR, tooltip => ""); $table->add_at (0, $row , new DC::UI::Label align => 1, text => "Database Directory"); $table->add_at (1, $row++, new DC::UI::Label align => 0, text => $DC::DB::DBDIR, tooltip => ""); + $table->add_at (0, $row , new DC::UI::Label align => 1, text => "Urlader (Prebuilt)"); + $table->add_at (1, $row++, new DC::UI::Label align => 0, text => $ENV{URLADER_VERSION}, tooltip => ""); $table->add_at (0, $row , new DC::UI::Label align => 1, text => "Branch (Prebuilt)"); - $table->add_at (1, $row++, new DC::UI::Label align => 0, text => $::EXE_ID, tooltip => ""); + $table->add_at (1, $row++, new DC::UI::Label align => 0, text => $ENV{URLADER_EXE_ID}, tooltip => ""); $table->add_at (0, $row , new DC::UI::Label align => 1, text => "Version (Prebuilt)"); - $table->add_at (1, $row++, new DC::UI::Label align => 0, text => $::EXE_VER, tooltip => ""); - $table->add_at (0, $row , new DC::UI::Label align => 1, text => "Update (Prebuilt)"); - $table->add_at (1, $row++, new DC::UI::Label align => 0, text => $::UPDPAR, tooltip => ""); + $table->add_at (1, $row++, new DC::UI::Label align => 0, text => $ENV{URLADER_EXE_VER}, tooltip => ""); } $vbox @@ -2032,16 +2042,50 @@ my $vb = new DC::UI::VBox; $vb->add (new DC::UI::FancyFrame - label => "Currently playing music", + label => "Current background music", child => new DC::UI::ScrolledWindow scroll_x => 1, scroll_y => 0, child => ($MUSIC_PLAYING_WIDGET = new DC::UI::Label ellipsise => 0, fontsize => 0.8), ); $vb->add (new DC::UI::FancyFrame + label => "Current downloads", + child => ($DOWNLOADS_WIDGET = new DC::UI::Table + expand => 1, fontsize => 0.8, padding_x => 4, padding_y => 4), + ); + + $DOWNLOADS_WIDGET->connect (visibility_change => sub { + my ($self) = @_; + + delete $self->{updater}; + return unless $_[1]; + + $self->{updater} = AE::timer 0, 1, sub { + $self->clear; + + return unless $CONN; + + my @nums = sort { $b <=> $a } keys %{ $CONN->{ix_recv_buf} }; + + $self->add_at (0, 0, new DC::UI::Label align => 1, text => "Face"); + $self->add_at (1, 0, new DC::UI::Label align => 0, text => "Octets/Total"); + + for my $row (0 .. $#nums) { + my $num = $nums[$row]; + + my $total = length $CONN->{ix_recv_buf}{$num}; + my $got = $total - $CONN->{ix_recv_ofs}{$num}; + + $self->add_at (0, $row + 1, new DC::UI::Label align => 1, text => $num, tooltip => ""); + $self->add_at (1, $row + 1, new DC::UI::Label align => 0, text => "$got/$total", tooltip => ""); + } + }; + }); + + $vb->add (new DC::UI::FancyFrame label => "Other media used in this session", expand => 1, child => ($LICENSE_WIDGET = new DC::UI::TextScroller - expand => 1, fontsize => 0.8, padding_x => 4, padding_y => 4), + expand => 1, fontsize => 0.8, padding_x => 4, padding_y => 4), ); $vb @@ -2840,8 +2884,11 @@ } } - $ENV{FONTCONFIG_FILE} = DC::find_rcfile "fonts/fonts.conf"; - $ENV{FONTCONFIG_DIR} = DC::find_rcfile "fonts"; + # fontconfig doesn't support relative paths anymore, so use abs_path and keep fingers crossed + # these are ignored under windows, for some reason, and thus set in the loader + $ENV{FONTCONFIG_FILE} = "fonts.conf"; + $ENV{FONTCONFIG_PATH} = Cwd::abs_path DC::find_rcfile "fonts"; + $ENV{FONTCONFIG_DIR} = $ENV{FONTCONFIG_PATH}; # helps with older versions { my @fonts = map DC::find_rcfile "fonts/$_", qw(