diff --git a/data/terminal.metainfo.xml.in b/data/terminal.metainfo.xml.in index 6acc7dd88f..f83192b406 100644 --- a/data/terminal.metainfo.xml.in +++ b/data/terminal.metainfo.xml.in @@ -71,6 +71,7 @@ + Show symbol while terminal is working Links open when clicking on Terminal app in Alt+Tab Port Terminal to GTK4 Natural Copy/Paste. Ctrl+c clears the highlighted word. Ctrl+x doesn't. diff --git a/src/Application.vala b/src/Application.vala index 13a7449424..c239b3f6ac 100644 --- a/src/Application.vala +++ b/src/Application.vala @@ -183,6 +183,8 @@ public class Terminal.Application : Gtk.Application { if (terminal != terminal.main_window.current_terminal) { terminal.tab_state = tab_state; + } else if (terminal.tab_state == WORKING) { + terminal.tab_state = NONE; } if (!(get_active_window ().is_active)) { diff --git a/src/MainWindow.vala b/src/MainWindow.vala index 23aaff19be..1e73b61b3b 100644 --- a/src/MainWindow.vala +++ b/src/MainWindow.vala @@ -303,7 +303,9 @@ namespace Terminal { return; } - term.tab_state = NONE; + if (term.tab_state != WORKING) { + term.tab_state = NONE; + } }); notebook.tab_bar.bind_property ("tabs-revealed", new_tab_revealer, "reveal-child", SYNC_CREATE | INVERT_BOOLEAN); diff --git a/src/Widgets/TerminalView.vala b/src/Widgets/TerminalView.vala index 5a9f598532..b3f3fd1a31 100644 --- a/src/Widgets/TerminalView.vala +++ b/src/Widgets/TerminalView.vala @@ -171,6 +171,7 @@ public class Terminal.TerminalView : Granite.Bin { terminal_widget.notify["tab-state"].connect (() => { tab.icon = terminal_widget.tab_state.to_icon (); + tab.loading = terminal_widget.tab_state == WORKING; }); //Set correct label now to avoid race when spawning shell diff --git a/src/Widgets/TerminalWidget.vala b/src/Widgets/TerminalWidget.vala index aad750d250..9ff091a75b 100644 --- a/src/Widgets/TerminalWidget.vala +++ b/src/Widgets/TerminalWidget.vala @@ -7,6 +7,7 @@ namespace Terminal { public class TerminalWidget : Vte.Terminal { public enum TabState { NONE, + WORKING, COMPLETED, ERROR; @@ -242,6 +243,7 @@ namespace Terminal { notify["width-request"].connect (() => resized = true); contents_changed.connect (on_contents_changed); child_exited.connect (on_child_exited); + window_title_changed.connect (on_window_title_changed); ulong once = 0; once = realize.connect (() => { clipboard = Gdk.Display.get_default ().get_clipboard (); @@ -802,6 +804,14 @@ namespace Terminal { fg_pid = -1; } + private void on_window_title_changed () { + if (has_foreground_process ()) { + tab_state = WORKING; + } + + // Application.dbus_register handles resetting the state + } + public void kill_fg () { int fg_pid; if (this.try_get_foreground_pid (out fg_pid)) {