diff --git a/sgbackup/gui/_app.py b/sgbackup/gui/_app.py index 3cce714..166ce81 100644 --- a/sgbackup/gui/_app.py +++ b/sgbackup/gui/_app.py @@ -56,6 +56,7 @@ class GameView(Gtk.ScrolledWindow): self.__liststore.append(g) self.__action_dialog = None + self.__backup_dialog = None factory_icon = Gtk.SignalListItemFactory.new() factory_icon.connect('setup',self._on_icon_column_setup) @@ -251,9 +252,14 @@ class GameView(Gtk.ScrolledWindow): BindingFlags.SYNC_CREATE,lambda binding,x: False if x else True) def _on_columnview_backup_button_clicked(self,button,item): - game = item.get_item() - dialog = BackupSingleDialog(self.get_root(),game) - dialog.run() + def on_dialog_response(dialog,response): + self.__backup_dialog = None + + if self.__backup_dialog is None: + game = item.get_item() + self.__backup_dialog = BackupSingleDialog(self.get_root(),game) + self.__backup_dialog.connect('response',on_dialog_response) + self.__backup_dialog.run() def _on_columnview_edit_button_clicked(self,button,item): def on_dialog_response(dialog,response): @@ -692,6 +698,7 @@ class Application(Gtk.Application): # add accels self.set_accels_for_action('app.quit',["q"]) + @property def builder(self)->Gtk.Builder: """ diff --git a/sgbackup/gui/_backupdialog.py b/sgbackup/gui/_backupdialog.py index 2a9fcce..0c83d82 100644 --- a/sgbackup/gui/_backupdialog.py +++ b/sgbackup/gui/_backupdialog.py @@ -30,13 +30,21 @@ class BackupSingleDialog(Gtk.Dialog): self.set_transient_for(parent) + label = Gtk.Label() + label.set_markup("Backing up {game}".format( + game = GLib.markup_escape_text(game.name))) + + self.get_content_area().append(label) + self.__progressbar = Gtk.ProgressBar() self.__progressbar.set_text("Starting savegame backup ...") + self.__progressbar.set_show_text(True) self.__progressbar.set_fraction(0.0) self.get_content_area().append(self.__progressbar) self.set_modal(False) + self.__ok_button = self.add_button('Close',Gtk.ResponseType.OK) self.__am_signal_progress = None self.__am_signal_finished = None @@ -46,10 +54,16 @@ class BackupSingleDialog(Gtk.Dialog): self.__progressbar.set_fraction(fraction) return False + def do_response(self,response): + self.hide() + self.destroy() + def _on_finished(self): self.__progressbar.set_text("Finished ...") self.__progressbar.set_fraction(1.0) + self.__ok_button.set_sensitive(True) am = ArchiverManager.get_global() + if self.__am_signal_finished is not None: am.disconnect(self.__am_signal_finished) self.__am_signal_finished = None @@ -58,8 +72,10 @@ class BackupSingleDialog(Gtk.Dialog): am.disconnect(self.__am_signal_progress) self.__am_signal_progress = None - self.hide() - self.destroy() + #if settings.backup_dialog_close_when_finished: + # self.response(Gtk.ResponseType.OK) + + return False def _on_am_backup_game_progress(self,am,game,fraction,message): if self.__game.key == game.key: @@ -72,9 +88,10 @@ class BackupSingleDialog(Gtk.Dialog): def run(self): def _thread_func(archiver_manager,game): am.backup(game) - + self.__ok_button.set_sensitive(False) self.present() + am = ArchiverManager.get_global() self.__am_signal_progress = am.connect('backup-game-progress',self._on_am_backup_game_progress) self.__am_signal_finished = am.connect('backup-game-finished',self._on_am_backup_game_finished)