diff options
author | Michael Vogt <mvo@debian.org> | 2013-12-07 17:54:11 +0100 |
---|---|---|
committer | Michael Vogt <mvo@debian.org> | 2013-12-07 17:54:11 +0100 |
commit | 8fafb8adc032002284f53359e1308efa609f9239 (patch) | |
tree | 2348ae1953446a069c0e44bcd20915c22c4d89b1 /apt-pkg/install-progress.cc | |
parent | bc435af429f427c6a5db971c3d4cc7f15a2fe55d (diff) | |
parent | ce34af08ad6866869147e3525fa6c89d8dcb4601 (diff) |
Merge branch 'debian/sid' into ubuntu/master
Conflicts:
debian/changelog
debian/gbp.conf
Diffstat (limited to 'apt-pkg/install-progress.cc')
-rw-r--r-- | apt-pkg/install-progress.cc | 32 |
1 files changed, 25 insertions, 7 deletions
diff --git a/apt-pkg/install-progress.cc b/apt-pkg/install-progress.cc index 09b1bef9e..b82b7efde 100644 --- a/apt-pkg/install-progress.cc +++ b/apt-pkg/install-progress.cc @@ -10,6 +10,7 @@ #include <sstream> #include <fcntl.h> + namespace APT { namespace Progress { @@ -221,6 +222,14 @@ bool PackageManagerProgressDeb822Fd::StatusChanged(std::string PackageName, return true; } +int PackageManagerFancy::GetNumberTerminalRows() +{ + struct winsize win; + if(ioctl(STDOUT_FILENO, TIOCGWINSZ, (char *)&win) != 0) + return -1; + + return win.ws_row; +} void PackageManagerFancy::SetupTerminalScrollArea(int nr_rows) { @@ -248,23 +257,32 @@ void PackageManagerFancy::SetupTerminalScrollArea(int nr_rows) } PackageManagerFancy::PackageManagerFancy() - : nr_terminal_rows(-1) { - struct winsize win; - if(ioctl(STDOUT_FILENO, TIOCGWINSZ, (char *)&win) == 0) - { - nr_terminal_rows = win.ws_row; - } + // setup terminal size + old_SIGWINCH = signal(SIGWINCH, HandleSIGWINCH); +} + +PackageManagerFancy::~PackageManagerFancy() +{ + signal(SIGWINCH, old_SIGWINCH); +} + +void PackageManagerFancy::HandleSIGWINCH(int) +{ + int nr_terminal_rows = GetNumberTerminalRows(); + SetupTerminalScrollArea(nr_terminal_rows); } void PackageManagerFancy::Start() { + int nr_terminal_rows = GetNumberTerminalRows(); if (nr_terminal_rows > 0) SetupTerminalScrollArea(nr_terminal_rows); } void PackageManagerFancy::Stop() { + int nr_terminal_rows = GetNumberTerminalRows(); if (nr_terminal_rows > 0) { SetupTerminalScrollArea(nr_terminal_rows + 1); @@ -284,7 +302,7 @@ bool PackageManagerFancy::StatusChanged(std::string PackageName, HumanReadableAction)) return false; - int row = nr_terminal_rows; + int row = GetNumberTerminalRows(); static string save_cursor = "\033[s"; static string restore_cursor = "\033[u"; |