From 632bf56f2932bc76369381d0bad7a73a440029f9 Mon Sep 17 00:00:00 2001
From: bubnikv <bubnikv@gmail.com>
Date: Fri, 4 Aug 2017 15:54:12 +0200
Subject: [PATCH] merged save_window_pos / restore_window_pos from @alexrj
 Slic3r.

---
 lib/Slic3r/GUI.pm                             | 25 +++++++++++++++++++
 lib/Slic3r/GUI/MainFrame.pm                   | 20 +++------------
 lib/Slic3r/GUI/Plater/ObjectSettingsDialog.pm |  2 +-
 3 files changed, 29 insertions(+), 18 deletions(-)

diff --git a/lib/Slic3r/GUI.pm b/lib/Slic3r/GUI.pm
index 56007b44c..1c96962a0 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 b01f3dd4e..1f27a9724 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 bf2e50dcc..971d688cb 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';