@shaz
I suggest you to implement control over the update_cursor method:
#-------------------------------------------------------------------------- # * Update Cursor #-------------------------------------------------------------------------- def update_cursor if @cursor_all cursor_rect.set(0, 0, contents.width, row_max * item_height) self.top_row = 0 elsif @index < 0 cursor_rect.empty else ensure_cursor_visible cursor_rect.set(item_rect(@index)) end endYou may set a variable @cursor_visible and only run this method if the variable is true. Also, when setting @cursor_visible as false you need to call cursor_rect.empty. That way the update method won't refresh the cursor's rect and it will be invisible. To show the cursor again just set @cursor_visible to true - the update method does the work of restoring the cursor.