diff options
author | Brad King <brad.king@kitware.com> | 2022-01-20 16:56:28 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2022-01-20 16:56:35 (GMT) |
commit | 925d089a4d24e0f5873ab87a65a36db551052ee9 (patch) | |
tree | ed3db4b937953761af5026bc918ff079e3e3b12b /Source | |
parent | a47b4387b40047f9b9e0cf5f7dbe7c1fe056355e (diff) | |
parent | e674e02c555732821c55a99b9f63298ebbcd91f0 (diff) | |
download | CMake-925d089a4d24e0f5873ab87a65a36db551052ee9.zip CMake-925d089a4d24e0f5873ab87a65a36db551052ee9.tar.gz CMake-925d089a4d24e0f5873ab87a65a36db551052ee9.tar.bz2 |
Merge topic 'ccmake-windows'
e674e02c55 Help: Add release note for experimental ccmake support on Windows
5c9310c714 ci: Enable ccmake on Windows
9278c6e01a ccmake: Add Windows support using PDCurses
b97c12babb ccmake: Refactor resizing logic into cmCursesForm
bf11dab49d ccmake: Refactor BUILD_CursesDialog option logic
bf94e01348 cmpdcurses: Add CMake build system
89703bc941 Merge branch 'upstream-PDCurses' into update-pdcurses
f84c4112c3 PDCurses 2021-12-08 (f1cd4f45)
...
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !6832
Diffstat (limited to 'Source')
-rw-r--r-- | Source/CursesDialog/ccmake.cxx | 23 | ||||
-rw-r--r-- | Source/CursesDialog/cmCursesForm.cxx | 29 | ||||
-rw-r--r-- | Source/CursesDialog/cmCursesForm.h | 4 | ||||
-rw-r--r-- | Source/CursesDialog/cmCursesLongMessageForm.cxx | 6 | ||||
-rw-r--r-- | Source/CursesDialog/cmCursesMainForm.cxx | 6 |
5 files changed, 50 insertions, 18 deletions
diff --git a/Source/CursesDialog/ccmake.cxx b/Source/CursesDialog/ccmake.cxx index ae4c0f6..1f7776c 100644 --- a/Source/CursesDialog/ccmake.cxx +++ b/Source/CursesDialog/ccmake.cxx @@ -9,8 +9,6 @@ #include <string> #include <vector> -#include <unistd.h> - #include "cmsys/Encoding.hxx" #include "cmCursesColor.h" @@ -53,31 +51,18 @@ static const char* cmDocumentationOptions[][2] = { cmCursesForm* cmCursesForm::CurrentForm = nullptr; +#ifndef _WIN32 extern "C" { static void onsig(int /*unused*/) { if (cmCursesForm::CurrentForm) { - endwin(); - if (initscr() == nullptr) { - static const char errmsg[] = "Error: ncurses initialization failed\n"; - auto r = write(STDERR_FILENO, errmsg, sizeof(errmsg) - 1); - static_cast<void>(r); - exit(1); - } - noecho(); /* Echo off */ - cbreak(); /* nl- or cr not needed */ - keypad(stdscr, true); /* Use key symbols as KEY_DOWN */ - refresh(); - int x; - int y; - getmaxyx(stdscr, y, x); - cmCursesForm::CurrentForm->Render(1, 1, x, y); - cmCursesForm::CurrentForm->UpdateStatusBar(); + cmCursesForm::CurrentForm->HandleResize(); } signal(SIGWINCH, onsig); } } +#endif // _WIN32 int main(int argc, char const* const* argv) { @@ -143,7 +128,9 @@ int main(int argc, char const* const* argv) keypad(stdscr, true); /* Use key symbols as KEY_DOWN */ cmCursesColor::InitColors(); +#ifndef _WIN32 signal(SIGWINCH, onsig); +#endif // _WIN32 int x; int y; diff --git a/Source/CursesDialog/cmCursesForm.cxx b/Source/CursesDialog/cmCursesForm.cxx index bd65c4a..ef36b45 100644 --- a/Source/CursesDialog/cmCursesForm.cxx +++ b/Source/CursesDialog/cmCursesForm.cxx @@ -2,6 +2,11 @@ file Copyright.txt or https://cmake.org/licensing for details. */ #include "cmCursesForm.h" +#include <cstdlib> +#ifndef _WIN32 +# include <unistd.h> +#endif // _WIN32 + cmsys::ofstream cmCursesForm::DebugFile; bool cmCursesForm::Debug = false; @@ -43,3 +48,27 @@ void cmCursesForm::LogMessage(const char* msg) cmCursesForm::DebugFile << msg << std::endl; } + +void cmCursesForm::HandleResize() +{ + endwin(); + if (initscr() == nullptr) { + static const char errmsg[] = "Error: ncurses initialization failed\n"; +#ifdef _WIN32 + fprintf(stderr, "%s", errmsg); +#else + auto r = write(STDERR_FILENO, errmsg, sizeof(errmsg) - 1); + static_cast<void>(r); +#endif // _WIN32 + exit(1); + } + noecho(); /* Echo off */ + cbreak(); /* nl- or cr not needed */ + keypad(stdscr, true); /* Use key symbols as KEY_DOWN */ + refresh(); + int x; + int y; + getmaxyx(stdscr, y, x); + this->Render(1, 1, x, y); + this->UpdateStatusBar(); +} diff --git a/Source/CursesDialog/cmCursesForm.h b/Source/CursesDialog/cmCursesForm.h index 93459b9..3a1eb25 100644 --- a/Source/CursesDialog/cmCursesForm.h +++ b/Source/CursesDialog/cmCursesForm.h @@ -55,6 +55,10 @@ public: static cmCursesForm* CurrentForm; + // Description: + // Handle resizing the form with curses. + void HandleResize(); + protected: static cmsys::ofstream DebugFile; static bool Debug; diff --git a/Source/CursesDialog/cmCursesLongMessageForm.cxx b/Source/CursesDialog/cmCursesLongMessageForm.cxx index 7f1815f..9b3a649 100644 --- a/Source/CursesDialog/cmCursesLongMessageForm.cxx +++ b/Source/CursesDialog/cmCursesLongMessageForm.cxx @@ -177,6 +177,12 @@ void cmCursesLongMessageForm::HandleInput() this->PrintKeys(); int key = getch(); +#ifdef _WIN32 + if (key == KEY_RESIZE) { + HandleResize(); + } +#endif // _WIN32 + snprintf(debugMessage, sizeof(debugMessage), "Message widget handling input, key: %d", key); cmCursesForm::LogMessage(debugMessage); diff --git a/Source/CursesDialog/cmCursesMainForm.cxx b/Source/CursesDialog/cmCursesMainForm.cxx index 0012a25..11b3b35 100644 --- a/Source/CursesDialog/cmCursesMainForm.cxx +++ b/Source/CursesDialog/cmCursesMainForm.cxx @@ -686,6 +686,12 @@ void cmCursesMainForm::HandleInput() } int key = getch(); +#ifdef _WIN32 + if (key == KEY_RESIZE) { + HandleResize(); + } +#endif // _WIN32 + getmaxyx(stdscr, y, x); // If window too small, handle 'q' only if (x < cmCursesMainForm::MIN_WIDTH || y < cmCursesMainForm::MIN_HEIGHT) { |