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)
44 /* don't refresh when we are waiting for a child. */
45 if (option(OPTKEEPQUIET))
49 /* don't refresh in the middle of macros unless necessary */
50 if (UngetCount && !option(OPTFORCEREFRESH))
57 wrefresh(layout.sidebar);
60 void mutt_endwin(const char *msg)
62 if (!option(OPTNOCURSES)) {
66 delwin(layout.sidebar);
67 layout.sidebar = NULL;
74 wattrset(stdscr, A_NORMAL);
79 if (!m_strisempty(msg)) {
85 void ui_layout_init(void)
87 SETCOLOR(MT_COLOR_NORMAL);
89 mutt_error = mutt_curses_error;
90 mutt_message = mutt_curses_message;
92 getmaxyx(stdscr, layout.rows, layout.cols);
95 void ui_layout_resize(void)
101 layout.rows = layout.cols = -1;
103 if ((fd = open("/dev/tty", O_RDONLY)) != -1) {
104 if (ioctl(fd, TIOCGWINSZ, &w) != -1) {
105 layout.rows = w.ws_row;
106 layout.cols = w.ws_col;
110 if (layout.rows <= 0) {
111 layout.rows = atoi(getenv("LINES") ?: "24");
113 if (layout.cols <= 0) {
114 layout.cols = atoi(getenv("COLUMNS") ?: "80");
116 resizeterm(layout.rows, layout.cols);
118 /* force a real complete redraw. */
119 clearok(stdscr, true);
123 WINDOW *ui_layout_sidebar_w(void)
125 if (option(OPTMBOXPANE) && SidebarWidth > 1 && SidebarWidth < layout.cols)
129 if (!layout.sidebar) {
130 layout.sidebar = newwin(layout.rows - 1, SidebarWidth, 0, 0);
133 getmaxyx(layout.sidebar, sh, sw);
135 if (sh != layout.rows - 1 || sw != SidebarWidth) {
136 wresize(layout.sidebar, layout.rows - 1, SidebarWidth);
139 if (layout.sidebar) {
140 delwin(layout.sidebar);
141 layout.sidebar = NULL;
144 return layout.sidebar;