]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/install-progress.h
first proof-of-concept for a fix for #731738
[apt.git] / apt-pkg / install-progress.h
index 050954bb5c74dc82158c6daddf56b97e5d8af366..010be82fd63aa9e1960e487e9b8254cc6214be98 100644 (file)
@@ -3,7 +3,7 @@
 
 #include <string>
 #include <unistd.h>
-
+#include <signal.h>
 
 namespace APT {
 namespace Progress {
@@ -27,9 +27,15 @@ namespace Progress {
        : percentage(0.0), last_reported_progress(-1) {};
     virtual ~PackageManager() {};
 
-    virtual void Start() {};
+    /* Global Start/Stop */
+    virtual void Start(int child_pty=-1) {};
     virtual void Stop() {};
 
+    /* When dpkg is invoked (may happen multiple times for each 
+     * install/remove block 
+    */
+    virtual void StartDpkg() {};
+
     virtual pid_t fork() {return fork(); };
 
     virtual void Pulse() {};
@@ -62,7 +68,7 @@ namespace Progress {
  public:
     PackageManagerProgressFd(int progress_fd);
 
-    virtual void Start();
+    virtual void StartDpkg();
     virtual void Stop();
 
     virtual bool StatusChanged(std::string PackageName, 
@@ -91,7 +97,7 @@ namespace Progress {
  public:
     PackageManagerProgressDeb822Fd(int progress_fd);
 
-    virtual void Start();
+    virtual void StartDpkg();
     virtual void Stop();
 
     virtual bool StatusChanged(std::string PackageName, 
@@ -111,12 +117,15 @@ namespace Progress {
  class PackageManagerFancy : public PackageManager
  {
  protected:
-    int nr_terminal_rows;
-    void SetupTerminalScrollArea(int nr_rows);
+    static void SetupTerminalScrollArea(int nr_rows);
+    static int GetNumberTerminalRows();
+    static void HandleSIGWINCH(int);
+    sighandler_t old_SIGWINCH;
 
  public:
     PackageManagerFancy();
-    virtual void Start();
+    ~PackageManagerFancy();
+    virtual void Start(int child_pty=-1);
     virtual void Stop();
     virtual bool StatusChanged(std::string PackageName, 
                                unsigned int StepsDone,