diff --git a/src/gui.h b/src/gui.h
index 719b8b5..e4ee182 100644
--- a/src/gui.h
+++ b/src/gui.h
@@ -460,7 +460,6 @@
     WindowPtr	VimWindow;
     MenuHandle	MacOSHelpMenu;	    /* Help menu provided by the MacOS */
     int		MacOSHelpItems;	    /* Nr of help-items supplied by MacOS */
-    int		MacOSHaveCntxMenu;  /* Contextual menu available */
     WindowPtr	wid;		    /* Window id of text area */
     int		visibility;	    /* Is window partially/fully obscured? */
 #endif
diff --git a/src/gui_mac.c b/src/gui_mac.c
index 8f90e43..2d3da30 100644
--- a/src/gui_mac.c
+++ b/src/gui_mac.c
@@ -1676,13 +1676,12 @@
 	/* TODO: NEEDED? */
 	clickIsPopup = FALSE;
 
-	if ((gui.MacOSHaveCntxMenu) && (mouse_model_popup()))
-	    if (IsShowContextualMenuClick(theEvent))
-	    {
-		vimMouseButton = MOUSE_RIGHT;
-		vimModifiers &= ~MOUSE_CTRL;
-		clickIsPopup = TRUE;
-	    }
+	if (mouse_model_popup() && IsShowContextualMenuClick(theEvent))
+	{
+	    vimMouseButton = MOUSE_RIGHT;
+	    vimModifiers &= ~MOUSE_CTRL;
+	    clickIsPopup = TRUE;
+	}
 
 	/* Is it a double click ? */
 	dblClick = ((theEvent->when - lastMouseTick) < GetDblTime());
@@ -1920,24 +1919,19 @@
     WindowPtr	whichWindow;
 
     whichWindow = (WindowPtr) event->message;
-    if ((event->modifiers) & activeFlag)
-	/* Activate */
-	gui_focus_change(TRUE);
-    else
+    /* Dim scrollbars */
+    if (whichWindow == gui.VimWindow)
     {
-	/* Deactivate */
-	gui_focus_change(FALSE);
-/*	DON'T KNOW what the code below was doing
-	found in the deactivate clause, but the
-	clause writing TRUE into in_focus (BUG)
- */
-
-#if 0	/* Removed by Dany as per above June 2001 */
-	a_bool = false;
-	SetPreserveGlyph(a_bool);
-	SetOutlinePreferred(a_bool);
-#endif
+        ControlRef rootControl;
+        GetRootControl(gui.VimWindow, &rootControl);
+        if ((event->modifiers) & activeFlag)
+            ActivateControl(rootControl);
+        else
+            DeactivateControl(rootControl);
     }
+
+    /* Activate */
+    gui_focus_change((event->modifiers) & activeFlag);
 }
 
 
@@ -2559,16 +2553,15 @@
     OSErr	error;
 
     /* Handle contextual menu right now (if needed) */
-    if (gui.MacOSHaveCntxMenu)
-	if (IsShowContextualMenuClick(event))
-	{
+    if (IsShowContextualMenuClick(event))
+    {
 # if 0
-	    gui_mac_handle_contextual_menu(event);
+        gui_mac_handle_contextual_menu(event);
 # else
-	    gui_mac_doMouseDownEvent(event);
+        gui_mac_doMouseDownEvent(event);
 # endif
-	    return;
-	}
+        return;
+    }
 
     /* Handle normal event */
     switch (event->what)
@@ -2782,14 +2775,6 @@
     (void) InstallAEHandlers();
 #endif
 
-    if (Gestalt(gestaltContextualMenuAttr, &gestalt_rc) == noErr)
-	gui.MacOSHaveCntxMenu = BitTst(&gestalt_rc, 31-gestaltContextualMenuTrapAvailable);
-    else
-	gui.MacOSHaveCntxMenu = false;
-
-    if (gui.MacOSHaveCntxMenu)
-	gui.MacOSHaveCntxMenu = (InitContextualMenus()==noErr);
-
     pomme = NewMenu(256, "\p\024"); /* 0x14= = Apple Menu */
 
     AppendMenu(pomme, "\pAbout VIM");
@@ -2941,6 +2926,7 @@
 #ifdef USE_CARBONKEYHANDLER
     EventHandlerRef keyEventHandlerRef;
 #endif
+    ControlRef rootControl;
 
     if (Gestalt(gestaltSystemVersion, &gMacSystemVersion) != noErr)
 	gMacSystemVersion = 0x1000; /* TODO: Default to minimum sensible value */
@@ -2954,15 +2940,6 @@
     (void) InstallAEHandlers();
 #endif
 
-    /* Ctrl click */
-    if (Gestalt(gestaltContextualMenuAttr, &gestalt_rc) == noErr)
-	gui.MacOSHaveCntxMenu = BitTst(&gestalt_rc, 31-gestaltContextualMenuTrapAvailable);
-    else
-	gui.MacOSHaveCntxMenu = false;
-
-    if (gui.MacOSHaveCntxMenu)
-	gui.MacOSHaveCntxMenu = (InitContextualMenus()==noErr);
-
     pomme = NewMenu(256, "\p\024"); /* 0x14= = Apple Menu */
 
     AppendMenu(pomme, "\pAbout VIM");
@@ -2981,6 +2958,7 @@
     gui.VimWindow = NewCWindow(nil, &windRect, "\pgVim on Macintosh", true,
 			zoomDocProc,
 			(WindowPtr)-1L, true, 0);
+    CreateRootControl(gui.VimWindow, &rootControl);
     InstallReceiveHandler((DragReceiveHandlerUPP)receiveHandler,
 	    gui.VimWindow, NULL);
     SetPortWindowPort(gui.VimWindow);
diff --git a/src/version.c b/src/version.c
index 88fa407..8c14146 100644
--- a/src/version.c
+++ b/src/version.c
@@ -667,6 +667,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    7,
+/**/
     6,
 /**/
     5,
