Преглед изворни кода

[quickfix][Refs #36] send SIGWINCH when term is resized from background

B Thibault пре 9 година
родитељ
комит
6c4458544f
2 измењених фајлова са 13 додато и 2 уклоњено
  1. 13 1
      src/curseOutput.cpp
  2. 0 1
      src/curseSimpleOutput.cpp

+ 13 - 1
src/curseOutput.cpp

@@ -29,7 +29,11 @@ CurseOutput::CurseOutput(const Params &p): params(p)
 
 CurseOutput::~CurseOutput()
 {
+    struct winsize size;
+
     runningInst = nullptr;
+    if (ioctl(fileno(screen_fd ? screen_fd : stdout), TIOCGWINSZ, &size) == 0)
+        resize_term(size.ws_row, size.ws_col);
 }
 
 void CurseOutput::loop(WINDOW * w)
@@ -52,17 +56,25 @@ void CurseOutput::onResizeHandler(const t_Cursor &)
 bool CurseOutput::onsig(int signo)
 {
     struct winsize size;
+    t_Cursor oldScrSize;
 
     switch (signo)
     {
     case SIGWINCH:
-    case SIGCONT:
         if (ioctl(fileno(screen_fd ? screen_fd : stdout), TIOCGWINSZ, &size) == 0)
             resize_term(size.ws_row, size.ws_col);
         onResizeHandler(getScreenSize());
         while (!redraw());
         break;
 
+    case SIGCONT:
+        oldScrSize = getScreenSizeUnsafe();
+        if (ioctl(fileno(screen_fd ? screen_fd : stdout), TIOCGWINSZ, &size) == -1)
+            break;
+        if (size.ws_row != oldScrSize.second || size.ws_col != oldScrSize.first)
+            kill(getpid(), SIGWINCH);
+        break;
+
     case SIGKILL:
     case SIGINT:
     case SIGTERM:

+ 0 - 1
src/curseSimpleOutput.cpp

@@ -79,7 +79,6 @@ bool CurseSimpleOutput::redraw()
 void CurseSimpleOutput::onResizeHandler(const t_Cursor &ss)
 {
     screenSize = t_Cursor(ss);
-    clear();
 }
 
 inputResult CurseSimpleOutput::selectUp()