2 * This program is free software; you can redistribute it and/or modify
3 * it under the terms of the GNU General Public License as published by
4 * the Free Software Foundation; either version 2 of the License, or (at
5 * your option) any later version.
7 * This program is distributed in the hope that it will be useful, but
8 * WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
10 * General Public License for more details.
12 * You should have received a copy of the GNU General Public License
13 * along with this program; if not, write to the Free Software
14 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
17 * Copyright © 2006 Pierre Habouzit
20 #include <lib-ui/lib-ui.h>
23 #ifdef HAVE_SYS_IOCTL_H
24 # include <sys/ioctl.h>
25 #elif defined(HAVE_IOCTL_H)
35 void mutt_need_hard_redraw(void)
38 clearok(stdscr, true);
39 set_option(OPTNEEDREDRAW);
42 void mutt_refresh(void)
45 extern ssize_t UngetCount;
47 /* don't refresh when we are waiting for a child. */
48 if (option(OPTKEEPQUIET))
51 /* don't refresh in the middle of macros unless necessary */
52 if (UngetCount && !option(OPTFORCEREFRESH))
58 wrefresh(layout.sidebar);
61 void mutt_endwin(const char *msg)
63 if (!option(OPTNOCURSES)) {
67 delwin(layout.sidebar);
68 layout.sidebar = NULL;
75 wattrset(stdscr, A_NORMAL);
80 if (!m_strisempty(msg)) {
86 void ui_layout_init(void)
88 SETCOLOR(MT_COLOR_NORMAL);
90 mutt_error = mutt_curses_error;
91 mutt_message = mutt_curses_message;
93 getmaxyx(stdscr, layout.rows, layout.cols);
96 void ui_layout_resize(void)
102 layout.rows = layout.cols = -1;
104 if ((fd = open("/dev/tty", O_RDONLY)) != -1) {
105 if (ioctl(fd, TIOCGWINSZ, &w) != -1) {
106 layout.rows = w.ws_row;
107 layout.cols = w.ws_col;
111 if (layout.rows <= 0) {
112 layout.rows = atoi(getenv("LINES") ?: "24");
114 if (layout.cols <= 0) {
115 layout.cols = atoi(getenv("COLUMNS") ?: "80");
117 resizeterm(layout.rows, layout.cols);
119 /* force a real complete redraw. */
120 clearok(stdscr, true);
124 WINDOW *ui_layout_sidebar_w(void)
126 if (option(OPTMBOXPANE) && SidebarWidth > 1 && SidebarWidth < layout.cols)
130 if (!layout.sidebar) {
131 layout.sidebar = newwin(layout.rows - 1, SidebarWidth, 0, 0);
134 getmaxyx(layout.sidebar, sh, sw);
136 if (sh != layout.rows - 1 || sw != SidebarWidth) {
137 wresize(layout.sidebar, layout.rows - 1, SidebarWidth);
140 if (layout.sidebar) {
141 delwin(layout.sidebar);
142 layout.sidebar = NULL;
145 return layout.sidebar;