more bugs

This commit is contained in:
Kovid Goyal 2017-11-15 15:01:09 +05:30
parent f8c7a7a690
commit c3f5b20ca7
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 32 additions and 32 deletions

View File

@ -505,40 +505,38 @@ static inline bool
render_os_window(OSWindow *os_window, double now, unsigned int *active_window_id) { render_os_window(OSWindow *os_window, double now, unsigned int *active_window_id) {
bool dirtied = false; bool dirtied = false;
if (OPT(mouse_hide_wait) > 0 && now - os_window->last_mouse_activity_at > OPT(mouse_hide_wait)) hide_mouse(os_window); if (OPT(mouse_hide_wait) > 0 && now - os_window->last_mouse_activity_at > OPT(mouse_hide_wait)) hide_mouse(os_window);
if (os_window->num_tabs) { Tab *tab = os_window->tabs + os_window->active_tab;
Tab *tab = os_window->tabs + os_window->active_tab; for (unsigned int i = 0; i < tab->num_windows; i++) {
for (unsigned int i = 0; i < tab->num_windows; i++) { Window *w = tab->windows + i;
Window *w = tab->windows + i;
#define WD w->render_data #define WD w->render_data
if (w->visible && WD.screen) { if (w->visible && WD.screen) {
if (w->last_drag_scroll_at > 0) { if (w->last_drag_scroll_at > 0) {
if (now - w->last_drag_scroll_at >= 0.02) { if (now - w->last_drag_scroll_at >= 0.02) {
if (drag_scroll(w, os_window)) { if (drag_scroll(w, os_window)) {
w->last_drag_scroll_at = now; w->last_drag_scroll_at = now;
set_maximum_wait(0.02); set_maximum_wait(0.02);
} else w->last_drag_scroll_at = 0; } else w->last_drag_scroll_at = 0;
} else set_maximum_wait(now - w->last_drag_scroll_at); } else set_maximum_wait(now - w->last_drag_scroll_at);
} }
bool is_active_window = i == tab->active_window; bool is_active_window = i == tab->active_window;
if (is_active_window) { if (is_active_window) {
*active_window_id = w->id; *active_window_id = w->id;
collect_cursor_info(&WD.screen->current_cursor_render_info, w, now, os_window); collect_cursor_info(&WD.screen->current_cursor_render_info, w, now, os_window);
if (update_window_title(w, os_window)) dirtied = true; if (update_window_title(w, os_window)) dirtied = true;
} else WD.screen->current_cursor_render_info.is_visible = false; } else WD.screen->current_cursor_render_info.is_visible = false;
if (draw_cells(WD.vao_idx, WD.gvao_idx, WD.xstart, WD.ystart, WD.dx, WD.dy, WD.screen, os_window)) { if (draw_cells(WD.vao_idx, WD.gvao_idx, WD.xstart, WD.ystart, WD.dx, WD.dy, WD.screen, os_window)) {
if (is_active_window && WD.screen->current_cursor_render_info.is_visible && WD.screen->current_cursor_render_info.shape != CURSOR_BLOCK) { if (is_active_window && WD.screen->current_cursor_render_info.is_visible && WD.screen->current_cursor_render_info.shape != CURSOR_BLOCK) {
draw_cursor(&WD.screen->current_cursor_render_info, os_window == global_state.focused_os_window); draw_cursor(&WD.screen->current_cursor_render_info, os_window == global_state.focused_os_window);
}
dirtied = true;
}
if (WD.screen->start_visual_bell_at != 0) {
double bell_left = global_state.opts.visual_bell_duration - (now - WD.screen->start_visual_bell_at);
set_maximum_wait(bell_left);
} }
dirtied = true;
}
if (WD.screen->start_visual_bell_at != 0) {
double bell_left = global_state.opts.visual_bell_duration - (now - WD.screen->start_visual_bell_at);
set_maximum_wait(bell_left);
} }
} }
#undef WD
} }
#undef WD
return dirtied; return dirtied;
} }
@ -553,7 +551,7 @@ render(double now) {
for (size_t i = 0; i < global_state.num_os_windows; i++) { for (size_t i = 0; i < global_state.num_os_windows; i++) {
OSWindow *w = global_state.os_windows + i; OSWindow *w = global_state.os_windows + i;
if (!should_os_window_be_rendered(w)) continue; if (!w->num_tabs || !should_os_window_be_rendered(w)) continue;
if (w->viewport_size_dirty) { if (w->viewport_size_dirty) {
update_surface_size(w->viewport_width, w->viewport_height); update_surface_size(w->viewport_width, w->viewport_height);
w->viewport_size_dirty = false; w->viewport_size_dirty = false;

View File

@ -14,11 +14,13 @@ GlobalState global_state = {{0}};
if (array[i].id == qid) { \ if (array[i].id == qid) { \
destroy(array + i); \ destroy(array + i); \
memset(array + i, 0, sizeof(structure)); \ memset(array + i, 0, sizeof(structure)); \
size_t num_to_right = capacity - count - 1; \ size_t num_to_right = count - 1 - i; \
if (num_to_right) memmove(array + i, array + i + 1, num_to_right * sizeof(structure)); \ if (num_to_right) memmove(array + i, array + i + 1, num_to_right * sizeof(structure)); \
(count)--; \ (count)--; \
break; \
} \ } \
}} }}
#define WITH_OS_WINDOW(os_window_id) \ #define WITH_OS_WINDOW(os_window_id) \
for (size_t o = 0; o < global_state.num_os_windows; o++) { \ for (size_t o = 0; o < global_state.num_os_windows; o++) { \
OSWindow *os_window = global_state.os_windows + o; \ OSWindow *os_window = global_state.os_windows + o; \
@ -87,7 +89,7 @@ add_window(id_type os_window_id, id_type tab_id, PyObject *title) {
tab->windows[tab->num_windows].render_data.vao_idx = create_cell_vao(); tab->windows[tab->num_windows].render_data.vao_idx = create_cell_vao();
tab->windows[tab->num_windows].render_data.gvao_idx = create_graphics_vao(); tab->windows[tab->num_windows].render_data.gvao_idx = create_graphics_vao();
Py_INCREF(tab->windows[tab->num_windows].title); Py_INCREF(tab->windows[tab->num_windows].title);
return tab->windows[tab->num_windows++].id; return tab->windows[tab->num_windows++].id;
END_WITH_TAB; END_WITH_TAB;
return 0; return 0;
} }