updated for version 7.4.434
Problem:    gettabvar() is not consistent with getwinvar() and getbufvar().
Solution:   Return a dict with all variables when the varname is empty.
            (Yasuhiro Matsumoto)
diff --git a/src/eval.c b/src/eval.c
index 7bf52c5..8303bd3 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -12071,7 +12071,8 @@
     typval_T	*argvars;
     typval_T	*rettv;
 {
-    tabpage_T	*tp;
+    win_T	*win, *oldcurwin;
+    tabpage_T	*tp, *oldtabpage;
     dictitem_T	*v;
     char_u	*varname;
     int		done = FALSE;
@@ -12083,13 +12084,21 @@
     tp = find_tabpage((int)get_tv_number_chk(&argvars[0], NULL));
     if (tp != NULL && varname != NULL)
     {
+	/* Set curwin to be our win, temporarily.  Also set the tabpage,
+	 * otherwise the window is not valid. */
+	switch_win(&oldcurwin, &oldtabpage, win, tp, TRUE);
+
 	/* look up the variable */
-	v = find_var_in_ht(&tp->tp_vars->dv_hashtab, 0, varname, FALSE);
+	/* Let gettabvar({nr}, "") return the "t:" dictionary. */
+	v = find_var_in_ht(&tp->tp_vars->dv_hashtab, 't', varname, FALSE);
 	if (v != NULL)
 	{
 	    copy_tv(&v->di_tv, rettv);
 	    done = TRUE;
 	}
+
+	/* restore previous notion of curwin */
+	restore_win(oldcurwin, oldtabpage, TRUE);
     }
 
     if (!done && argvars[2].v_type != VAR_UNKNOWN)