Compare commits

...

2 Commits

Author SHA1 Message Date
Christian Burger ba378b2a43 window manager: inverting all windows' visibility
Introducing a method that makes all visible windows invisible and vice-
versa.
2022-05-20 20:41:45 +02:00
Christian Burger 870fa80fc7 getter for ncurses mutex
not sure if the best solution, but works for the moment
2022-05-19 14:45:50 +02:00
3 changed files with 34 additions and 0 deletions

View File

@ -130,6 +130,10 @@ namespace krikkel::NCurses
windowManager->updateLayout();
windowManager->refresh();
break;
case KEY_F(4):
windowManager->invertWindowsVisibility();
windowManager->updateLayout();
windowManager->refresh();
case KEY_F(5):
windowManager->refresh();
break;

View File

@ -27,6 +27,11 @@ namespace krikkel::NCurses
visibleStack.push_back(stackElement);
}
std::recursive_mutex *TilingWindowManager::getNCursesMutex()
{
return ncursesMutex;
}
void TilingWindowManager::hideWindow(Window *window)
{
if(window->hidden)
@ -60,6 +65,27 @@ namespace krikkel::NCurses
}
}
void TilingWindowManager::invertWindowsVisibility()
{
list<WindowStackElement> originallyVisibleStack(visibleStack);
list<WindowStackElement>::iterator originallyVisibleStackIterator = originallyVisibleStack.begin();
visibleStack.clear();
for(WindowStackElement currentWindowElement : stack)
if(originallyVisibleStackIterator != originallyVisibleStack.end()
&& currentWindowElement == *originallyVisibleStackIterator)
{
currentWindowElement.first->hidden = true;
++originallyVisibleStackIterator;
continue;
}
else
{
currentWindowElement.first->hidden = false;
visibleStack.push_back(currentWindowElement);
}
}
int TilingWindowManager::resize(int rows, int cols)
{
int result = Window::resize(rows, cols);

View File

@ -36,15 +36,19 @@ namespace krikkel::NCurses
typedef std::pair<Window *, windowDimension> WindowStackElement;
TilingWindowManager(NCursesWindow *rootWindow, std::recursive_mutex *ncursesMutex);
std::recursive_mutex *getNCursesMutex();
void addWindow(Window *window, windowDimension size = -1);
int resize(int rows, int cols) override;
int refresh() override;
void updateLayout();
void hideWindow(Window *window);
void showWindow(Window *window);
void invertWindowsVisibility();
protected:
/// @todo rename to `nCursesMutex`?
std::recursive_mutex *ncursesMutex;
std::list<WindowStackElement> stack, visibleStack;