299 |
} |
} |
300 |
|
|
301 |
/* |
/* |
302 |
|
* gui_draw_window_separator: draw window separation |
303 |
|
*/ |
304 |
|
|
305 |
|
void |
306 |
|
gui_draw_window_separator (t_gui_window *window) |
307 |
|
{ |
308 |
|
if (window->win_separator) |
309 |
|
delwin (window->win_separator); |
310 |
|
|
311 |
|
if (window->win_x > 0) |
312 |
|
{ |
313 |
|
window->win_separator = newwin (window->win_height, |
314 |
|
1, |
315 |
|
window->win_y, |
316 |
|
window->win_x - 1); |
317 |
|
gui_window_set_color (window->win_separator, COLOR_WIN_TITLE); |
318 |
|
wborder (window->win_separator, ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '); |
319 |
|
wrefresh (window->win_separator); |
320 |
|
refresh (); |
321 |
|
} |
322 |
|
} |
323 |
|
|
324 |
|
/* |
325 |
* gui_draw_buffer_title: draw title window for a buffer |
* gui_draw_buffer_title: draw title window for a buffer |
326 |
*/ |
*/ |
327 |
|
|
442 |
{ |
{ |
443 |
num_displayed = window->win_chat_width - |
num_displayed = window->win_chat_width - |
444 |
window->win_chat_cursor_x; |
window->win_chat_cursor_x; |
445 |
|
if (num_displayed < 0) |
446 |
|
return; |
447 |
saved_char = ptr_message->message[offset + num_displayed]; |
saved_char = ptr_message->message[offset + num_displayed]; |
448 |
ptr_message->message[offset + num_displayed] = '\0'; |
ptr_message->message[offset + num_displayed] = '\0'; |
449 |
if (lines_displayed >= num_lines - count) |
if (lines_displayed >= num_lines - count) |
1608 |
} |
} |
1609 |
|
|
1610 |
/* |
/* |
|
* gui_curses_resize_handler: called when term size is modified |
|
|
*/ |
|
|
|
|
|
void |
|
|
gui_curses_resize_handler () |
|
|
{ |
|
|
t_gui_window *ptr_win, *old_current_window; |
|
|
int old_width, old_height; |
|
|
int new_width, new_height; |
|
|
|
|
|
getmaxyx (stdscr, old_height, old_width); |
|
|
|
|
|
endwin (); |
|
|
refresh (); |
|
|
|
|
|
getmaxyx (stdscr, new_height, new_width); |
|
|
|
|
|
old_current_window = gui_current_window; |
|
|
|
|
|
/* TODO: manage when some windows are outside new term size */ |
|
|
for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window) |
|
|
{ |
|
|
ptr_win->dcc_first = NULL; |
|
|
ptr_win->dcc_selected = NULL; |
|
|
if (ptr_win->win_x + ptr_win->win_width == old_width) |
|
|
ptr_win->win_width = new_width - ptr_win->win_x; |
|
|
if (ptr_win->win_y + ptr_win->win_height == old_height) |
|
|
ptr_win->win_height = new_height - ptr_win->win_y; |
|
|
gui_switch_to_buffer (ptr_win, ptr_win->buffer); |
|
|
} |
|
|
|
|
|
gui_current_window = old_current_window; |
|
|
if ((new_width > 5) && (new_height > 5)) |
|
|
{ |
|
|
gui_ok = 1; |
|
|
gui_calculate_pos_size (gui_current_window); |
|
|
gui_redraw_buffer (gui_current_window->buffer); |
|
|
} |
|
|
else |
|
|
gui_ok = 0; |
|
|
} |
|
|
|
|
|
/* |
|
1611 |
* gui_window_init_subviews: init subviews for a WeeChat window |
* gui_window_init_subviews: init subviews for a WeeChat window |
1612 |
*/ |
*/ |
1613 |
|
|
1685 |
gui_switch_to_buffer (gui_current_window, gui_current_window->buffer); |
gui_switch_to_buffer (gui_current_window, gui_current_window->buffer); |
1686 |
gui_redraw_buffer (gui_current_window->buffer); |
gui_redraw_buffer (gui_current_window->buffer); |
1687 |
|
|
1688 |
/* create & draw separator if window is not on the left */ |
/* create & draw separator */ |
1689 |
gui_current_window->win_separator = newwin (gui_current_window->win_height, |
gui_draw_window_separator (gui_current_window); |
1690 |
1, |
} |
1691 |
gui_current_window->win_y, |
} |
1692 |
gui_current_window->win_x - 1); |
|
1693 |
gui_window_set_color (gui_current_window->win_separator, COLOR_WIN_TITLE); |
/* |
1694 |
wborder (gui_current_window->win_separator, ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '); |
* gui_window_merge_down: merge window, direction down |
1695 |
wrefresh (gui_current_window->win_separator); |
*/ |
1696 |
refresh (); |
|
1697 |
|
int |
1698 |
|
gui_window_merge_down (t_gui_window *window) |
1699 |
|
{ |
1700 |
|
t_gui_window *ptr_win; |
1701 |
|
|
1702 |
|
for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window) |
1703 |
|
{ |
1704 |
|
if (ptr_win != window) |
1705 |
|
{ |
1706 |
|
if ((ptr_win->win_y == window->win_y + window->win_height) |
1707 |
|
&& (ptr_win->win_x == window->win_x) |
1708 |
|
&& (ptr_win->win_width == window->win_width)) |
1709 |
|
{ |
1710 |
|
window->win_height += ptr_win->win_height; |
1711 |
|
gui_window_free (ptr_win); |
1712 |
|
gui_switch_to_buffer (window, window->buffer); |
1713 |
|
gui_redraw_buffer (window->buffer); |
1714 |
|
return 0; |
1715 |
|
} |
1716 |
|
} |
1717 |
|
} |
1718 |
|
|
1719 |
|
/* no window found below current window */ |
1720 |
|
return -1; |
1721 |
|
} |
1722 |
|
|
1723 |
|
/* |
1724 |
|
* gui_window_merge_up: merge window, direction up |
1725 |
|
*/ |
1726 |
|
|
1727 |
|
int |
1728 |
|
gui_window_merge_up (t_gui_window *window) |
1729 |
|
{ |
1730 |
|
t_gui_window *ptr_win; |
1731 |
|
|
1732 |
|
for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window) |
1733 |
|
{ |
1734 |
|
if (ptr_win != window) |
1735 |
|
{ |
1736 |
|
if ((ptr_win->win_y + ptr_win->win_height == window->win_y) |
1737 |
|
&& (ptr_win->win_x == window->win_x) |
1738 |
|
&& (ptr_win->win_width == window->win_width)) |
1739 |
|
{ |
1740 |
|
window->win_height += ptr_win->win_height; |
1741 |
|
window->win_y -= ptr_win->win_height; |
1742 |
|
gui_window_free (ptr_win); |
1743 |
|
gui_switch_to_buffer (window, window->buffer); |
1744 |
|
gui_redraw_buffer (window->buffer); |
1745 |
|
return 0; |
1746 |
|
} |
1747 |
|
} |
1748 |
|
} |
1749 |
|
|
1750 |
|
/* no window found above current window */ |
1751 |
|
return -1; |
1752 |
|
} |
1753 |
|
|
1754 |
|
/* |
1755 |
|
* gui_window_merge_left: merge window, direction left |
1756 |
|
*/ |
1757 |
|
|
1758 |
|
int |
1759 |
|
gui_window_merge_left (t_gui_window *window) |
1760 |
|
{ |
1761 |
|
t_gui_window *ptr_win; |
1762 |
|
|
1763 |
|
for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window) |
1764 |
|
{ |
1765 |
|
if (ptr_win != window) |
1766 |
|
{ |
1767 |
|
if ((ptr_win->win_x + ptr_win->win_width + 1 == window->win_x) |
1768 |
|
&& (ptr_win->win_y == window->win_y) |
1769 |
|
&& (ptr_win->win_height == window->win_height)) |
1770 |
|
{ |
1771 |
|
window->win_width += ptr_win->win_width + 1; |
1772 |
|
window->win_x -= ptr_win->win_width + 1; |
1773 |
|
gui_window_free (ptr_win); |
1774 |
|
gui_switch_to_buffer (window, window->buffer); |
1775 |
|
gui_redraw_buffer (window->buffer); |
1776 |
|
return 0; |
1777 |
|
} |
1778 |
|
} |
1779 |
|
} |
1780 |
|
|
1781 |
|
/* no window found on the left of current window */ |
1782 |
|
return -1; |
1783 |
|
} |
1784 |
|
|
1785 |
|
/* |
1786 |
|
* gui_window_merge_right: merge window, direction right |
1787 |
|
*/ |
1788 |
|
|
1789 |
|
int |
1790 |
|
gui_window_merge_right (t_gui_window *window) |
1791 |
|
{ |
1792 |
|
t_gui_window *ptr_win; |
1793 |
|
|
1794 |
|
for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window) |
1795 |
|
{ |
1796 |
|
if (ptr_win != window) |
1797 |
|
{ |
1798 |
|
if ((ptr_win->win_x == window->win_x + window->win_width + 1) |
1799 |
|
&& (ptr_win->win_y == window->win_y) |
1800 |
|
&& (ptr_win->win_height == window->win_height)) |
1801 |
|
{ |
1802 |
|
window->win_width += ptr_win->win_width + 1; |
1803 |
|
gui_window_free (ptr_win); |
1804 |
|
gui_switch_to_buffer (window, window->buffer); |
1805 |
|
gui_redraw_buffer (window->buffer); |
1806 |
|
return 0; |
1807 |
|
} |
1808 |
|
} |
1809 |
} |
} |
1810 |
|
|
1811 |
|
/* no window found on the right of current window */ |
1812 |
|
return -1; |
1813 |
|
} |
1814 |
|
|
1815 |
|
/* |
1816 |
|
* gui_window_merge: merge a window, direction auto |
1817 |
|
*/ |
1818 |
|
|
1819 |
|
void |
1820 |
|
gui_window_merge_auto (t_gui_window *window) |
1821 |
|
{ |
1822 |
|
if (gui_window_merge_down (window) == 0) |
1823 |
|
return; |
1824 |
|
if (gui_window_merge_up (window) == 0) |
1825 |
|
return; |
1826 |
|
if (gui_window_merge_left (window) == 0) |
1827 |
|
return; |
1828 |
|
if (gui_window_merge_right (window) == 0) |
1829 |
|
return; |
1830 |
|
} |
1831 |
|
|
1832 |
|
/* |
1833 |
|
* gui_window_merge_all: merge all windows |
1834 |
|
*/ |
1835 |
|
|
1836 |
|
void |
1837 |
|
gui_window_merge_all (t_gui_window *window) |
1838 |
|
{ |
1839 |
|
while (gui_windows->next_window) |
1840 |
|
{ |
1841 |
|
gui_window_free ((gui_windows == window) ? gui_windows->next_window : gui_windows); |
1842 |
|
} |
1843 |
|
window->win_x = 0; |
1844 |
|
window->win_y = 0; |
1845 |
|
window->win_width = COLS; |
1846 |
|
window->win_height = LINES; |
1847 |
|
gui_switch_to_buffer (window, window->buffer); |
1848 |
|
gui_redraw_buffer (window->buffer); |
1849 |
|
} |
1850 |
|
|
1851 |
|
/* |
1852 |
|
* gui_curses_resize_handler: called when term size is modified |
1853 |
|
*/ |
1854 |
|
|
1855 |
|
void |
1856 |
|
gui_curses_resize_handler () |
1857 |
|
{ |
1858 |
|
t_gui_window *ptr_win, *old_current_window; |
1859 |
|
int old_width, old_height; |
1860 |
|
int new_width, new_height; |
1861 |
|
int merge_all_windows; |
1862 |
|
|
1863 |
|
getmaxyx (stdscr, old_height, old_width); |
1864 |
|
|
1865 |
|
endwin (); |
1866 |
|
refresh (); |
1867 |
|
|
1868 |
|
getmaxyx (stdscr, new_height, new_width); |
1869 |
|
|
1870 |
|
old_current_window = gui_current_window; |
1871 |
|
|
1872 |
|
gui_ok = ((new_width > 5) && (new_height > 5)); |
1873 |
|
|
1874 |
|
merge_all_windows = 0; |
1875 |
|
for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window) |
1876 |
|
{ |
1877 |
|
ptr_win->dcc_first = NULL; |
1878 |
|
ptr_win->dcc_selected = NULL; |
1879 |
|
|
1880 |
|
if (!merge_all_windows) |
1881 |
|
{ |
1882 |
|
if ((ptr_win->win_x > new_width - 5) |
1883 |
|
|| (ptr_win->win_y > new_height - 5)) |
1884 |
|
merge_all_windows = 1; |
1885 |
|
else |
1886 |
|
{ |
1887 |
|
if (ptr_win->win_x + ptr_win->win_width == old_width) |
1888 |
|
ptr_win->win_width = new_width - ptr_win->win_x; |
1889 |
|
if (ptr_win->win_y + ptr_win->win_height == old_height) |
1890 |
|
ptr_win->win_height = new_height - ptr_win->win_y; |
1891 |
|
if ((ptr_win->win_width < 5) || (ptr_win->win_height < 5)) |
1892 |
|
merge_all_windows = 1; |
1893 |
|
} |
1894 |
|
} |
1895 |
|
} |
1896 |
|
|
1897 |
|
if (merge_all_windows) |
1898 |
|
gui_window_merge_all (gui_current_window); |
1899 |
|
|
1900 |
|
for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window) |
1901 |
|
{ |
1902 |
|
gui_calculate_pos_size (ptr_win); |
1903 |
|
gui_switch_to_buffer (ptr_win, ptr_win->buffer); |
1904 |
|
gui_draw_window_separator (ptr_win); |
1905 |
|
} |
1906 |
|
|
1907 |
|
gui_current_window = old_current_window; |
1908 |
|
gui_redraw_buffer (gui_current_window->buffer); |
1909 |
} |
} |
1910 |
|
|
1911 |
/* |
/* |