void gui_main_signal_sigwinch () { gui_signal_sigwinch_received = 1; gui_window_ask_refresh (2); }
void gui_bar_window_free (struct t_gui_bar_window *bar_window, struct t_gui_window *window) { /* remove window bar from list */ if (window) { if (bar_window->prev_bar_window) (bar_window->prev_bar_window)->next_bar_window = bar_window->next_bar_window; if (bar_window->next_bar_window) (bar_window->next_bar_window)->prev_bar_window = bar_window->prev_bar_window; if (window->bar_windows == bar_window) window->bar_windows = bar_window->next_bar_window; if (window->last_bar_window == bar_window) window->last_bar_window = bar_window->prev_bar_window; } /* free data */ gui_bar_window_content_free (bar_window); gui_bar_window_objects_free (bar_window); free (bar_window->gui_objects); free (bar_window); gui_window_ask_refresh (1); }
void gui_color_reset_pairs () { if (gui_color_pairs) { memset (gui_color_pairs, 0, (gui_color_term_colors + 2) * (gui_color_term_colors + 2) * sizeof (gui_color_pairs[0])); gui_color_pairs_used = 0; gui_color_warning_pairs_full = 0; gui_color_buffer_refresh_needed = 1; gui_window_ask_refresh (1); } }
void gui_main_loop () { struct t_hook *hook_fd_keyboard; /* catch SIGWINCH signal: redraw screen */ util_catch_signal (SIGWINCH, &gui_main_signal_sigwinch); /* hook stdin (read keyboard) */ hook_fd_keyboard = hook_fd (NULL, STDIN_FILENO, 1, 0, 0, &gui_key_read_cb, NULL); gui_window_ask_refresh (1); while (!dogechat_quit) { /* execute timer hooks */ hook_timer_exec (); /* auto reset of color pairs */ if (gui_color_pairs_auto_reset) { gui_color_reset_pairs (); gui_color_pairs_auto_reset_last = time (NULL); gui_color_pairs_auto_reset = 0; gui_color_pairs_auto_reset_pending = 1; } gui_main_refreshs (); if (gui_window_refresh_needed && !gui_window_bare_display) gui_main_refreshs (); if (gui_signal_sigwinch_received) { (void) hook_signal_send ("signal_sigwinch", DOGECHAT_HOOK_SIGNAL_STRING, NULL); gui_signal_sigwinch_received = 0; } gui_color_pairs_auto_reset_pending = 0; /* execute fd hooks */ hook_fd_exec (); } /* remove keyboard hook */ unhook (hook_fd_keyboard); }
void gui_color_switch_colors () { if (gui_color_hook_timer) { unhook (gui_color_hook_timer); gui_color_hook_timer = NULL; } /* * when we press alt-c many times quickly, this just adds some time for * display of terminal colors */ if (gui_color_use_term_colors && (gui_color_timer > 0) && (gui_color_timer % 10 == 0)) { if (gui_color_timer < 120) gui_color_timer += 10; gui_color_buffer_display_timer (); } else { gui_color_use_term_colors ^= 1; if (gui_color_use_term_colors) gui_color_init_pairs_terminal (); else gui_color_init_pairs_weechat (); gui_color_buffer_refresh_needed = 1; gui_window_ask_refresh (1); if (gui_color_use_term_colors) gui_color_timer = GUI_COLOR_TIMER_TERM_COLORS; } if (gui_color_use_term_colors) { gui_color_hook_timer = hook_timer (NULL, 1000, 0, 0, &gui_color_timer_cb, NULL); } }
void gui_bar_window_set_current_size (struct t_gui_bar_window *bar_window, struct t_gui_window *window, int size) { int new_size, max_size; if (size == 0) new_size = 1; else { new_size = size; if ((size != 0) && (CONFIG_INTEGER(bar_window->bar->options[GUI_BAR_OPTION_SIZE_MAX]) > 0) && (size > CONFIG_INTEGER(bar_window->bar->options[GUI_BAR_OPTION_SIZE_MAX]))) { new_size = CONFIG_INTEGER(bar_window->bar->options[GUI_BAR_OPTION_SIZE_MAX]); if (new_size < 1) new_size = 1; } } if (bar_window->current_size != new_size) { max_size = gui_bar_window_get_max_size (bar_window, window); new_size = (max_size < new_size) ? max_size : new_size; if (bar_window->current_size != new_size) { bar_window->current_size = new_size; if (!CONFIG_BOOLEAN(bar_window->bar->options[GUI_BAR_OPTION_HIDDEN])) { gui_bar_window_calculate_pos_size (bar_window, window); gui_bar_window_create_win (bar_window); if (window) window->refresh_needed = 1; else gui_window_ask_refresh (1); } } } }
void gui_main_loop () { struct t_hook *hook_fd_keyboard; struct timeval tv_timeout; fd_set read_fds, write_fds, except_fds; int max_fd; int ready; /* catch SIGTERM signal: quit program */ util_catch_signal (SIGTERM, &gui_main_signal_sigterm); util_catch_signal (SIGQUIT, &gui_main_signal_sigquit); /* catch SIGHUP signal: reload configuration */ util_catch_signal (SIGHUP, &gui_main_signal_sighup); /* catch SIGWINCH signal: redraw screen */ util_catch_signal (SIGWINCH, &gui_main_signal_sigwinch); /* hook stdin (read keyboard) */ hook_fd_keyboard = hook_fd (NULL, STDIN_FILENO, 1, 0, 0, &gui_key_read_cb, NULL); gui_window_ask_refresh (1); while (!weechat_quit) { /* reload config, if SIGHUP received */ if (gui_reload_config) { gui_reload_config = 0; log_printf (_("Signal SIGHUP received, reloading configuration " "files")); command_reload (NULL, NULL, 0, NULL, NULL); } /* execute hook timers */ hook_timer_exec (); /* auto reset of color pairs */ if (gui_color_pairs_auto_reset) { gui_color_reset_pairs (); gui_color_pairs_auto_reset_last = time (NULL); gui_color_pairs_auto_reset = 0; gui_color_pairs_auto_reset_pending = 1; } gui_main_refreshs (); if (gui_window_refresh_needed && !gui_window_bare_display) gui_main_refreshs (); if (gui_signal_sigwinch_received) { (void) hook_signal_send ("signal_sigwinch", WEECHAT_HOOK_SIGNAL_STRING, NULL); gui_signal_sigwinch_received = 0; } gui_color_pairs_auto_reset_pending = 0; /* wait for keyboard or network activity */ FD_ZERO (&read_fds); FD_ZERO (&write_fds); FD_ZERO (&except_fds); max_fd = hook_fd_set (&read_fds, &write_fds, &except_fds); hook_timer_time_to_next (&tv_timeout); ready = select (max_fd + 1, &read_fds, &write_fds, &except_fds, &tv_timeout); if (ready > 0) { hook_fd_exec (&read_fds, &write_fds, &except_fds); } } /* remove keyboard hook */ unhook (hook_fd_keyboard); }
void gui_main_signal_sigwinch () { gui_window_ask_refresh (2); }
int gui_bar_window_new (struct t_gui_bar *bar, struct t_gui_window *window) { struct t_gui_bar_window *new_bar_window, *pos_bar_window; if (window) { if ((CONFIG_INTEGER(bar->options[GUI_BAR_OPTION_TYPE]) == GUI_BAR_TYPE_WINDOW) && (!gui_bar_check_conditions_for_window (bar, window))) return 1; } new_bar_window = malloc (sizeof (*new_bar_window)); if (new_bar_window) { new_bar_window->bar = bar; if (window) { bar->bar_window = NULL; if (window->bar_windows) { pos_bar_window = gui_bar_window_find_pos (bar, window); if (pos_bar_window) { /* insert before bar window found */ new_bar_window->prev_bar_window = pos_bar_window->prev_bar_window; new_bar_window->next_bar_window = pos_bar_window; if (pos_bar_window->prev_bar_window) (pos_bar_window->prev_bar_window)->next_bar_window = new_bar_window; else window->bar_windows = new_bar_window; pos_bar_window->prev_bar_window = new_bar_window; } else { /* add to end of list for window */ new_bar_window->prev_bar_window = window->last_bar_window; new_bar_window->next_bar_window = NULL; (window->last_bar_window)->next_bar_window = new_bar_window; window->last_bar_window = new_bar_window; } } else { new_bar_window->prev_bar_window = NULL; new_bar_window->next_bar_window = NULL; window->bar_windows = new_bar_window; window->last_bar_window = new_bar_window; } } else { bar->bar_window = new_bar_window; new_bar_window->prev_bar_window = NULL; new_bar_window->next_bar_window = NULL; } new_bar_window->x = 0; new_bar_window->y = 0; new_bar_window->width = 1; new_bar_window->height = 1; new_bar_window->scroll_x = 0; new_bar_window->scroll_y = 0; new_bar_window->cursor_x = -1; new_bar_window->cursor_y = -1; new_bar_window->current_size = (CONFIG_INTEGER(bar->options[GUI_BAR_OPTION_SIZE]) == 0) ? 1 : CONFIG_INTEGER(bar->options[GUI_BAR_OPTION_SIZE]); new_bar_window->items_count = 0; new_bar_window->items_subcount = NULL; new_bar_window->items_content = NULL; new_bar_window->items_refresh_needed = NULL; gui_bar_window_objects_init (new_bar_window); gui_bar_window_content_alloc (new_bar_window); if (gui_init_ok) { gui_bar_window_calculate_pos_size (new_bar_window, window); gui_bar_window_create_win (new_bar_window); gui_window_ask_refresh (1); } return 1; } /* failed to create bar window */ return 0; }