From c0593d9f1f8e9b8b55c796be6f6705cbd429d5ea Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 8 Sep 2017 16:09:47 +0530 Subject: [PATCH] Get rid of update_screen No longer needed. --- kitty/boss.py | 7 +------ kitty/char_grid.py | 8 +++----- kitty/child-monitor.c | 14 +++++--------- kitty/window.py | 4 ---- 4 files changed, 9 insertions(+), 24 deletions(-) diff --git a/kitty/boss.py b/kitty/boss.py index d768166f8..9f069dece 100644 --- a/kitty/boss.py +++ b/kitty/boss.py @@ -107,7 +107,7 @@ class Boss: self.ui_timers = Timers() self.child_monitor = ChildMonitor( opts.repaint_delay / 1000.0, glfw_window.window_id(), - self.on_child_death, self.update_screen, self.ui_timers, self.render, + self.on_child_death, self.ui_timers, self.render, DumpCommands(args) if args.dump_commands or args.dump_bytes else None) set_boss(self) self.current_font_size = opts.font_size @@ -163,11 +163,6 @@ class Boss: if w is not None: w.on_child_death() - def update_screen(self, window_id): - w = self.window_id_map.get(window_id) - if w is not None: - w.update_screen() - def close_window(self, window=None): if window is None: window = self.active_window diff --git a/kitty/char_grid.py b/kitty/char_grid.py index 6fa48f3be..66fa9930a 100644 --- a/kitty/char_grid.py +++ b/kitty/char_grid.py @@ -231,7 +231,6 @@ class CharGrid: self.update_cell_data() def update_cell_data(self, force_full_refresh=False): - is_dirty = self.screen.is_dirty() cursor_changed, history_line_added_count = self.screen.update_cell_data( addressof(self.main_sprite_map), force_full_refresh) if self.scrolled_by: @@ -240,8 +239,7 @@ class CharGrid: addressof(self.main_sprite_map), self.scrolled_by, addressof(self.scroll_sprite_map)) data = self.scroll_sprite_map if self.scrolled_by else self.main_sprite_map - if is_dirty: - self.current_selection.clear() + self.current_selection.clear() memmove(self.render_buf, data, sizeof(type(data))) self.render_data = self.screen_geometry self.render_buf_is_dirty = True @@ -365,9 +363,9 @@ class CharGrid: return s.text(self.screen.linebuf, self.screen.historybuf) def prepare_for_render(self, cell_program): + if self.screen.is_dirty(): + self.update_cell_data() sg = self.render_data - if sg is None: - return if self.vao_id is None: self.vao_id = cell_program.create_sprite_map() start, end = sel = self.current_selection.limits(self.scrolled_by, self.screen.lines, self.screen.columns) diff --git a/kitty/child-monitor.c b/kitty/child-monitor.c index 532a8938f..e5d184359 100644 --- a/kitty/child-monitor.c +++ b/kitty/child-monitor.c @@ -111,12 +111,12 @@ self_pipe(int fds[2]) { static PyObject * new(PyTypeObject *type, PyObject *args, PyObject UNUSED *kwds) { ChildMonitor *self; - PyObject *dump_callback, *death_notify, *update_screen, *timers, *wid, *render_func; + PyObject *dump_callback, *death_notify, *timers, *wid, *render_func; int ret; double repaint_delay; if (created) { PyErr_SetString(PyExc_RuntimeError, "Can have only a single ChildMonitor instance"); return NULL; } - if (!PyArg_ParseTuple(args, "dOOOOOO", &repaint_delay, &wid, &death_notify, &update_screen, &timers, &render_func, &dump_callback)) return NULL; + if (!PyArg_ParseTuple(args, "dOOOOO", &repaint_delay, &wid, &death_notify, &timers, &render_func, &dump_callback)) return NULL; glfw_window_id = PyLong_AsVoidPtr(wid); created = true; if ((ret = pthread_mutex_init(&children_lock, NULL)) != 0) { @@ -132,7 +132,6 @@ new(PyTypeObject *type, PyObject *args, PyObject UNUSED *kwds) { self = (ChildMonitor *)type->tp_alloc(type, 0); if (self == NULL) return PyErr_NoMemory(); self->death_notify = death_notify; Py_INCREF(death_notify); - self->update_screen = update_screen; Py_INCREF(self->update_screen); self->render_func = render_func; Py_INCREF(self->render_func); self->timers = (Timers*)timers; Py_INCREF(timers); if (dump_callback != Py_None) { @@ -152,7 +151,6 @@ dealloc(ChildMonitor* self) { pthread_mutex_destroy(&children_lock); Py_CLEAR(self->dump_callback); Py_CLEAR(self->death_notify); - Py_CLEAR(self->update_screen); Py_CLEAR(self->timers); Py_CLEAR(self->render_func); Py_TYPE(self)->tp_free((PyObject*)self); @@ -266,7 +264,7 @@ shutdown(ChildMonitor *self) { } static inline bool -do_parse(ChildMonitor *self, Screen *screen, unsigned long child_id) { +do_parse(ChildMonitor *self, Screen *screen) { bool updated = false; screen_mutex(lock, read); if (screen->read_buf_sz) { @@ -277,9 +275,7 @@ do_parse(ChildMonitor *self, Screen *screen, unsigned long child_id) { } screen_mutex(unlock, read); if (LIKELY(updated)) { - PyObject *t = PyObject_CallFunction(self->update_screen, "k", child_id); - if (t == NULL) PyErr_Print(); - else Py_DECREF(t); + glfwPostEmptyEvent(); } return updated; } @@ -326,7 +322,7 @@ parse_input(ChildMonitor *self) { for (size_t i = 0; i < count; i++) { if (!scratch[i].needs_removal) { - do_parse(self, scratch[i].screen, scratch[i].id); + do_parse(self, scratch[i].screen); } DECREF_CHILD(scratch[i]); } diff --git a/kitty/window.py b/kitty/window.py index a016911b1..58fdcda2f 100644 --- a/kitty/window.py +++ b/kitty/window.py @@ -133,10 +133,6 @@ class Window: def use_utf8(self, on): get_boss().child_monitor.set_iutf8(self.window_id, on) - def update_screen(self): - self.char_grid.update_cell_data() - glfw_post_empty_event() - def focus_changed(self, focused): if focused: if self.screen.focus_tracking_enabled: