diff --git a/lib/Slic3r/GUI.pm b/lib/Slic3r/GUI.pm index 56007b44cb..1c96962a00 100644 --- a/lib/Slic3r/GUI.pm +++ b/lib/Slic3r/GUI.pm @@ -404,4 +404,29 @@ sub scan_serial_ports { return grep !/Bluetooth|FireFly/, @ports; } +sub save_window_pos { + my ($self, $window, $name) = @_; + + $Settings->{_}{"${name}_pos"} = join ',', $window->GetScreenPositionXY; + $Settings->{_}{"${name}_size"} = join ',', $window->GetSizeWH; + $Settings->{_}{"${name}_maximized"} = $window->IsMaximized; + $self->save_settings; +} + +sub restore_window_pos { + my ($self, $window, $name) = @_; + + if (defined $Settings->{_}{"${name}_pos"}) { + my $size = [ split ',', $Settings->{_}{"${name}_size"}, 2 ]; + $window->SetSize($size); + + my $display = Wx::Display->new->GetClientArea(); + my $pos = [ split ',', $Settings->{_}{"${name}_pos"}, 2 ]; + if (($pos->[0] + $size->[0]/2) < $display->GetRight && ($pos->[1] + $size->[1]/2) < $display->GetBottom) { + $window->Move($pos); + } + $window->Maximize(1) if $Settings->{_}{"${name}_maximized"}; + } +} + 1; diff --git a/lib/Slic3r/GUI/MainFrame.pm b/lib/Slic3r/GUI/MainFrame.pm index b01f3dd4e8..1f27a97243 100644 --- a/lib/Slic3r/GUI/MainFrame.pm +++ b/lib/Slic3r/GUI/MainFrame.pm @@ -60,19 +60,8 @@ sub new { $self->SetSizer($sizer); $self->Fit; $self->SetMinSize([760, 490]); - if (defined $Slic3r::GUI::Settings->{_}{main_frame_size}) { - my $size = [ split ',', $Slic3r::GUI::Settings->{_}{main_frame_size}, 2 ]; - $self->SetSize($size); - - my $display = Wx::Display->new->GetClientArea(); - my $pos = [ split ',', $Slic3r::GUI::Settings->{_}{main_frame_pos}, 2 ]; - if (($pos->[X] + $size->[X]/2) < $display->GetRight && ($pos->[Y] + $size->[Y]/2) < $display->GetBottom) { - $self->Move($pos); - } - $self->Maximize(1) if $Slic3r::GUI::Settings->{_}{main_frame_maximized}; - } else { - $self->SetSize($self->GetMinSize); - } + $self->SetSize($self->GetMinSize); + wxTheApp->restore_window_pos($self, "main_frame"); $self->Show; $self->Layout; } @@ -87,10 +76,7 @@ sub new { } # save window size - $Slic3r::GUI::Settings->{_}{main_frame_pos} = join ',', $self->GetScreenPositionXY; - $Slic3r::GUI::Settings->{_}{main_frame_size} = join ',', $self->GetSizeWH; - $Slic3r::GUI::Settings->{_}{main_frame_maximized} = $self->IsMaximized; - wxTheApp->save_settings; + wxTheApp->save_window_pos($self, "main_frame"); # propagate event $event->Skip; diff --git a/lib/Slic3r/GUI/Plater/ObjectSettingsDialog.pm b/lib/Slic3r/GUI/Plater/ObjectSettingsDialog.pm index bf2e50dcc2..971d688cb5 100644 --- a/lib/Slic3r/GUI/Plater/ObjectSettingsDialog.pm +++ b/lib/Slic3r/GUI/Plater/ObjectSettingsDialog.pm @@ -7,7 +7,7 @@ use strict; use warnings; use utf8; -use Wx qw(:dialog :id :misc :sizer :systemsettings :notebook wxTAB_TRAVERSAL); +use Wx qw(:dialog :id :misc :sizer :systemsettings :notebook wxTAB_TRAVERSAL wxTheApp); use Wx::Event qw(EVT_BUTTON); use base 'Wx::Dialog';