API: Refactor: Register/unregister created/destroyed tabpages

- Add the 'handle' field to `tabpage_T`
- Add declare/implement functions for registering/unregistering/retrieving
  tabpages
- Register/unregister tabpages when they are created/destroyed.
This commit is contained in:
Thiago de Arruda 2014-05-23 15:49:35 -03:00
parent 20848c4064
commit 5fdf854f78
4 changed files with 6 additions and 0 deletions

View File

@ -30,9 +30,11 @@ static uint64_t next_handle = 1;
HANDLE_IMPL(buf_T, buffer) HANDLE_IMPL(buf_T, buffer)
HANDLE_IMPL(win_T, window) HANDLE_IMPL(win_T, window)
HANDLE_IMPL(tabpage_T, tabpage)
void handle_init() void handle_init()
{ {
HANDLE_INIT(buffer); HANDLE_INIT(buffer);
HANDLE_INIT(window); HANDLE_INIT(window);
HANDLE_INIT(tabpage);
} }

View File

@ -11,6 +11,7 @@
HANDLE_DECLS(buf_T, buffer) HANDLE_DECLS(buf_T, buffer)
HANDLE_DECLS(win_T, window) HANDLE_DECLS(win_T, window)
HANDLE_DECLS(tabpage_T, tabpage)
void handle_init(void); void handle_init(void);

View File

@ -738,6 +738,7 @@ struct diffblock_S {
*/ */
typedef struct tabpage_S tabpage_T; typedef struct tabpage_S tabpage_T;
struct tabpage_S { struct tabpage_S {
uint64_t handle;
tabpage_T *tp_next; /* next tabpage or NULL */ tabpage_T *tp_next; /* next tabpage or NULL */
frame_T *tp_topframe; /* topframe for the windows */ frame_T *tp_topframe; /* topframe for the windows */
win_T *tp_curwin; /* current window in this Tab page */ win_T *tp_curwin; /* current window in this Tab page */

View File

@ -2845,6 +2845,7 @@ void win_init_size(void)
static tabpage_T *alloc_tabpage(void) static tabpage_T *alloc_tabpage(void)
{ {
tabpage_T *tp = xcalloc(1, sizeof(tabpage_T)); tabpage_T *tp = xcalloc(1, sizeof(tabpage_T));
handle_register_tabpage(tp);
/* init t: variables */ /* init t: variables */
tp->tp_vars = dict_alloc(); tp->tp_vars = dict_alloc();
@ -2859,6 +2860,7 @@ void free_tabpage(tabpage_T *tp)
{ {
int idx; int idx;
handle_unregister_tabpage(tp);
diff_clear(tp); diff_clear(tp);
for (idx = 0; idx < SNAP_COUNT; ++idx) for (idx = 0; idx < SNAP_COUNT; ++idx)
clear_snapshot(tp, idx); clear_snapshot(tp, idx);