forked from Bananymous/banan-os
				
			Terminal: Update terminal size and send SIGWINCH on resize
This commit is contained in:
		
							parent
							
								
									592675022e
								
							
						
					
					
						commit
						bf1cbb4cde
					
				|  | @ -159,13 +159,36 @@ void Terminal::run() | ||||||
| 			m_window->invalidate(m_window->width() - rem, 0, rem, m_window->height()); | 			m_window->invalidate(m_window->width() - rem, 0, rem, m_window->height()); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if (m_cursor.x < cols() && m_cursor.y < rows()) | 		if (m_cursor.x >= cols() || m_cursor.y >= rows()) | ||||||
| 			return; | 		{ | ||||||
|  | 			m_cursor.x = BAN::Math::min(m_cursor.x, cols() - 1); | ||||||
|  | 			m_cursor.y = BAN::Math::min(m_cursor.y, rows() - 1); | ||||||
|  | 			for (auto& pixel : m_cursor_buffer) | ||||||
|  | 				pixel = m_bg_color; | ||||||
|  | 		} | ||||||
| 
 | 
 | ||||||
| 		m_cursor.x = BAN::Math::min(m_cursor.x, cols() - 1); | 		const winsize winsize { | ||||||
| 		m_cursor.y = BAN::Math::min(m_cursor.y, rows() - 1); | 			.ws_row = static_cast<unsigned short>(rows()), | ||||||
| 		for (auto& pixel : m_cursor_buffer) | 			.ws_col = static_cast<unsigned short>(cols()), | ||||||
| 			pixel = m_bg_color; | 		}; | ||||||
|  | 		if (ioctl(m_shell_info.pts_master, TIOCSWINSZ, &winsize) == -1) | ||||||
|  | 		{ | ||||||
|  | 			perror("ioctl"); | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		const pid_t fgpgrp = tcgetpgrp(m_shell_info.pts_master); | ||||||
|  | 		if (fgpgrp == -1) | ||||||
|  | 		{ | ||||||
|  | 			perror("tcgetpgrp"); | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if (kill(-fgpgrp, SIGWINCH) == -1) | ||||||
|  | 		{ | ||||||
|  | 			perror("kill"); | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
| 	}); | 	}); | ||||||
| 
 | 
 | ||||||
| 	const int max_fd = BAN::Math::max(m_shell_info.pts_master, m_window->server_fd()); | 	const int max_fd = BAN::Math::max(m_shell_info.pts_master, m_window->server_fd()); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue