diff --git a/src/vte.cc b/src/vte.cc
index 7dabf62c..e8b083f0 100644
--- a/src/vte.cc
+++ b/src/vte.cc
@@ -2289,12 +2289,17 @@ VteTerminalPrivate::update_insert_delta()
 void
 VteTerminalPrivate::apply_mouse_cursor()
 {
-        m_mouse_cursor_visible = !(m_mouse_autohide && m_mouse_cursor_autohidden);
+        /* See bug 789390 for the m_mouse_cursor_over_widget condition. */
+        bool mouse_cursor_invisible = m_mouse_autohide && m_mouse_cursor_autohidden && m_mouse_cursor_over_widget;
 
         if (!widget_realized())
                 return;
 
-        if (m_mouse_cursor_visible) {
+        if (mouse_cursor_invisible) {
+                _vte_debug_print(VTE_DEBUG_CURSOR,
+                                "Setting to invisible cursor.\n");
+                gdk_window_set_cursor(m_event_window, m_mouse_inviso_cursor);
+	} else {
                 if (m_hyperlink_hover_idx != 0) {
                         _vte_debug_print(VTE_DEBUG_CURSOR,
                                         "Setting hyperlink mouse cursor.\n");
@@ -2314,10 +2319,6 @@ VteTerminalPrivate::apply_mouse_cursor()
 					"Setting default mouse cursor.\n");
 			gdk_window_set_cursor(m_event_window, m_mouse_default_cursor);
 		}
-	} else {
-		_vte_debug_print(VTE_DEBUG_CURSOR,
-				"Setting to invisible cursor.\n");
-		gdk_window_set_cursor(m_event_window, m_mouse_inviso_cursor);
 	}
 }
 
diff --git a/src/vteinternal.hh b/src/vteinternal.hh
index bab9e5e7..76ff9544 100644
--- a/src/vteinternal.hh
+++ b/src/vteinternal.hh
@@ -476,7 +476,6 @@ public:
 	/* Mouse cursors. */
         gboolean m_mouse_cursor_over_widget;
         gboolean m_mouse_cursor_autohidden;  /* whether the autohiding logic wants to hide it; even if autohiding is disabled */
-        gboolean m_mouse_cursor_visible;     /* derived value really containing if it's actually visible */
         GdkCursor* m_mouse_default_cursor;
         GdkCursor* m_mouse_mousing_cursor;
         GdkCursor* m_mouse_hyperlink_cursor;
