diff --git a/debug-viewer/GstDebugViewer/GUI.py b/debug-viewer/GstDebugViewer/GUI.py index 7a7de88671..dc6ab21a76 100755 --- a/debug-viewer/GstDebugViewer/GUI.py +++ b/debug-viewer/GstDebugViewer/GUI.py @@ -822,6 +822,7 @@ class Window (object): self.sentinels = [] + self.dispatcher = None self.progress_bar = None self.update_progress_id = None @@ -841,6 +842,7 @@ class Window (object): group.add_actions ([("new-window", gtk.STOCK_NEW, _("_New Window"), "N"), ("open-file", gtk.STOCK_OPEN, _("_Open File"), "O"), ("close-window", gtk.STOCK_CLOSE, _("Close _Window"), "W"), + ("cancel-load", gtk.STOCK_CANCEL, None,), ("show-about", gtk.STOCK_ABOUT, None)]) ## group.add_toggle_actions ([("show-line-density", None, _("Line _Density"), "D")]) self.actions.add_group (group) @@ -893,6 +895,7 @@ class Window (object): gtk.gdk.SELECTION_CLIPBOARD) for action_name in ("new-window", "open-file", "close-window", + "cancel-load", "edit-copy-line", "edit-copy-message", "filter-out-higher-levels", "show-about",): @@ -965,6 +968,19 @@ class Window (object): self.set_log_file (dialog.get_filename ()) dialog.destroy () + def handle_cancel_load_action_activate (self, action): + + self.logger.debug ("cancelling data load") + + self.set_log_file (None) + if self.progress_dialog: + self.progress_dialog.destroy () + self.progress_dialog = None + self.progress_bar = None + if self.update_progress_id is not None: + gobject.source_remove (self.update_progress_id) + self.update_progress_id = None + def handle_close_window_action_activate (self, action): self.close () @@ -1019,12 +1035,18 @@ class Window (object): def set_log_file (self, filename): - self.logger.debug ("setting log file %r", filename) + if filename is None: + if self.dispatcher is not None: + self.dispatcher.cancel () + self.dispatcher = None + self.log_file = None + else: + self.logger.debug ("setting log file %r", filename) - dispatcher = Common.Data.GSourceDispatcher () - self.log_file = Data.LogFile (filename, dispatcher) - self.log_file.consumers.append (self) - self.log_file.start_loading () + self.dispatcher = Common.Data.GSourceDispatcher () + self.log_file = Data.LogFile (filename, self.dispatcher) + self.log_file.consumers.append (self) + self.log_file.start_loading () def handle_log_view_button_press_event (self, view, event): @@ -1040,6 +1062,7 @@ class Window (object): widgets = self.widget_factory.make ("progress_dialog") dialog = widgets.progress_dialog + dialog.connect ("response", self.handle_progress_dialog_response) self.progress_dialog = dialog self.progress_bar = widgets.progress_bar dialog.set_transient_for (self.gtk_window) @@ -1047,6 +1070,10 @@ class Window (object): self.update_progress_id = gobject.timeout_add (250, self.update_load_progress) + def handle_progress_dialog_response (self, dialog, response): + + self.actions.cancel_load.activate () + def update_load_progress (self): if not self.progress_bar: diff --git a/debug-viewer/data/gst-debug-viewer.glade b/debug-viewer/data/gst-debug-viewer.glade index cd915c3fd5..d960a2d481 100644 --- a/debug-viewer/data/gst-debug-viewer.glade +++ b/debug-viewer/data/gst-debug-viewer.glade @@ -445,7 +445,7 @@ Public License instead of this License. GTK_BUTTONBOX_END - + True True True diff --git a/debug-viewer/data/gst-debug-viewer.glade.bak b/debug-viewer/data/gst-debug-viewer.glade.bak index 66b57cf824..cd915c3fd5 100644 --- a/debug-viewer/data/gst-debug-viewer.glade.bak +++ b/debug-viewer/data/gst-debug-viewer.glade.bak @@ -30,7 +30,7 @@ 0 - + True True GTK_POLICY_AUTOMATIC