uint32_t is_open : 1;
uint32_t is_active : 1;
uint32_t is_unbuffered : 1;
+ uint32_t is_disabled : 1;
uint32_t is_watching_for_vt_changes : 1;
uint32_t should_ignore_mode_changes : 1;
};
ply_terminal_unlock (terminal);
+ terminal->is_disabled = false;
+
+ if (ply_terminal_is_vt (terminal))
+ ioctl (terminal->fd, KDSKBMODE, K_UNICODE);
+
tcgetattr (terminal->fd, &term_attributes);
if (!terminal->original_term_attributes_saved) {
{
struct termios term_attributes;
+ terminal->is_disabled = false;
+
+ if (ply_terminal_is_vt (terminal))
+ ioctl (terminal->fd, KDSKBMODE, K_UNICODE);
+
if (!terminal->is_unbuffered)
return true;
return true;
}
+bool
+ply_terminal_set_disabled_input (ply_terminal_t *terminal)
+{
+ terminal->is_disabled = true;
+
+ if (ply_terminal_is_vt (terminal))
+ ioctl (terminal->fd, KDSKBMODE, K_OFF);
+
+ return true;
+}
+
void
ply_terminal_write (ply_terminal_t *terminal,
const char *format,
{
ply_list_node_t *node;
+ if (terminal->is_disabled) {
+ ply_terminal_flush_input (terminal);
+ return;
+ }
+
node = ply_list_get_first_node (terminal->input_closures);
while (node != NULL) {
ply_terminal_input_closure_t *closure;
bool ply_terminal_set_unbuffered_input (ply_terminal_t *terminal);
bool ply_terminal_set_buffered_input (ply_terminal_t *terminal);
+bool ply_terminal_set_disabled_input (ply_terminal_t *terminal);
bool ply_terminal_refresh_geometry (ply_terminal_t *terminal);
__attribute__((__format__ (__printf__, 2, 3)))
if (backend->terminal != NULL) {
ply_terminal_set_mode (backend->terminal, PLY_TERMINAL_MODE_GRAPHICS);
- ply_terminal_set_unbuffered_input (backend->terminal);
+
+ if (using_input_device (&backend->input_source)) {
+ ply_terminal_set_disabled_input (backend->terminal);
+ } else {
+ ply_terminal_set_unbuffered_input (backend->terminal);
+ }
}
pixel_buffer = head->pixel_buffer;
updated_region = ply_pixel_buffer_get_updated_areas (pixel_buffer);
if (backend->terminal != NULL) {
ply_terminal_set_mode (backend->terminal, PLY_TERMINAL_MODE_GRAPHICS);
- ply_terminal_set_unbuffered_input (backend->terminal);
+
+ if (using_input_device (&backend->input_source)) {
+ ply_terminal_set_disabled_input (backend->terminal);
+ } else {
+ ply_terminal_set_unbuffered_input (backend->terminal);
+ }
}
pixel_buffer = head->pixel_buffer;
updated_region = ply_pixel_buffer_get_updated_areas (pixel_buffer);