Index: /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk	(revision 71664)
+++ /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk	(revision 71665)
@@ -183,4 +183,5 @@
 VBoxGlobal_DEFS.win     = VBOX_WS_WIN
 VBoxGlobal_DEFS.debug   = VBOX_CHECK_STATE # QT_FATAL_ASSERT
+VBoxGlobal_DEFS.darwin  += VBOX_DARWIN_USE_NATIVE_CONTROLS
 #VBoxGlobal_DEFS.win     += UNICODE QT_DLL
 VBoxGlobal_DEFS         += \
@@ -325,4 +326,28 @@
 if defined(VBOX_WITH_VIDEOHWACCEL) || defined(VBOX_GUI_USE_QGL)
  VirtualBox_LDFLAGS.darwin += -framework OpenGL
+endif
+
+
+#
+# VirtualBox - GUI Global Shared Library.
+# Compiling/linking flags.
+#
+
+## @todo we're using a number of deprecated APIs, please fix and remove these!
+ifdef VBOX_WITH_NEW_XCODE
+ VBoxGlobal_CXXFLAGS.darwin    += -Wno-error=deprecated-declarations
+ VBoxGlobal_OBJCFLAGS.darwin   += -Wno-error=deprecated-declarations
+ VBoxGlobal_OBJCXXFLAGS.darwin += -Wno-error=deprecated-declarations
+else
+ VBoxGlobal_CXXFLAGS.darwin    += -Wno-deprecated-declarations
+ VBoxGlobal_OBJCFLAGS.darwin   += -Wno-deprecated-declarations
+ VBoxGlobal_OBJCXXFLAGS.darwin += -Wno-deprecated-declarations
+endif
+
+VBoxGlobal_LDFLAGS.darwin = \
+	-framework AppKit -framework Carbon -framework IOKit
+
+if defined(VBOX_WITH_VIDEOHWACCEL) || defined(VBOX_GUI_USE_QGL)
+ VBoxGlobal_LDFLAGS.darwin += -framework OpenGL
 endif
 
@@ -681,4 +706,5 @@
 	src/VBoxLicenseViewer.h \
 	src/extensions/QIArrowButtonPress.h \
+	src/extensions/QIArrowButtonSwitch.h \
 	src/extensions/QIArrowSplitter.h \
 	src/extensions/QIDialog.h \
@@ -739,4 +765,7 @@
 	src/net/UIUpdateManager.h
 endif
+
+VBoxGlobal_QT_MOCHDRS.darwin += \
+	src/platform/darwin/UICocoaSpecialControls.h
 
 
@@ -1068,12 +1097,6 @@
 
 VirtualBox_SOURCES.darwin += \
-	src/platform/darwin/CocoaEventHelper.mm \
-	src/platform/darwin/DarwinKeyboard.cpp \
-	src/platform/darwin/UICocoaApplication.mm \
-	src/platform/darwin/UICocoaSpecialControls.mm \
 	src/platform/darwin/UIDesktopServices_darwin.cpp \
-	src/platform/darwin/UIDesktopServices_darwin_cocoa.mm \
-	src/platform/darwin/VBoxUtils-darwin-cocoa.mm \
-	src/platform/darwin/VBoxUtils-darwin.cpp
+	src/platform/darwin/UIDesktopServices_darwin_cocoa.mm
 
 ifdef VBOX_WITH_ICHAT_THEATER
@@ -1184,4 +1207,13 @@
  VirtualBox_SOURCES.win += \
 	src/platform/win/VBoxUtils-win.cpp
+
+ VirtualBox_SOURCES.darwin += \
+	src/platform/darwin/CocoaEventHelper.mm \
+	src/platform/darwin/DarwinKeyboard.cpp \
+	src/platform/darwin/UICocoaApplication.mm \
+	src/platform/darwin/UICocoaSpecialControls.mm \
+	src/platform/darwin/VBoxUtils-darwin-cocoa.mm \
+	src/platform/darwin/VBoxUtils-darwin.cpp
+
 endif
 
@@ -1274,4 +1306,12 @@
 	src/platform/win/VBoxUtils-win.cpp
 
+VBoxGlobal_SOURCES.darwin += \
+	src/platform/darwin/CocoaEventHelper.mm \
+	src/platform/darwin/DarwinKeyboard.cpp \
+	src/platform/darwin/UICocoaApplication.mm \
+	src/platform/darwin/UICocoaSpecialControls.mm \
+	src/platform/darwin/VBoxUtils-darwin-cocoa.mm \
+	src/platform/darwin/VBoxUtils-darwin.cpp
+
 
 #
@@ -1640,5 +1680,6 @@
  tstDarwinKeyboard_TEMPLATE = VBOXR3TSTEXE
  tstDarwinKeyboard_DEFS.x86 = USE_HID_FOR_MODIFIERS
- tstDarwinKeyboard_INCS = include
+ tstDarwinKeyboard_INCS = \
+ 	$(VBOX_GUI_INC_DIRS)
  tstDarwinKeyboard_SOURCES = \
  	src/platform/darwin/tstDarwinKeyboard.cpp \
@@ -1649,4 +1690,7 @@
  tstDarwinKeyboard_LIBS = \
  	$(LIB_RUNTIME)
+ ifdef VBOX_GUI_WITH_SHARED_LIBRARY
+  tstDarwinKeyboard_LIBS += $(PATH_STAGE_DLL)/VBoxGlobal$(VBOX_SUFF_DLL)
+ endif
 endif
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/platform/darwin/CocoaEventHelper.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/platform/darwin/CocoaEventHelper.h	(revision 71664)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/platform/darwin/CocoaEventHelper.h	(revision 71665)
@@ -18,4 +18,7 @@
 #ifndef ___CocoaEventHelper_h
 #define ___CocoaEventHelper_h
+
+/* GUI includes: */
+#include "UILibraryDefs.h"
 
 /* Other VBox includes: */
@@ -41,5 +44,5 @@
 
 /** Posts stripped mouse event based on passed @a pEvent. */
-void darwinPostStrippedMouseEvent(ConstNativeNSEventRef pEvent);
+SHARED_LIBRARY_STUFF void darwinPostStrippedMouseEvent(ConstNativeNSEventRef pEvent);
 
 RT_C_DECLS_END
Index: /trunk/src/VBox/Frontends/VirtualBox/src/platform/darwin/DarwinKeyboard.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/platform/darwin/DarwinKeyboard.h	(revision 71664)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/platform/darwin/DarwinKeyboard.h	(revision 71665)
@@ -18,4 +18,7 @@
 #ifndef ___DarwinKeyboard_h___
 #define ___DarwinKeyboard_h___
+
+/* GUI includes: */
+#include "UILibraryDefs.h"
 
 /* Other VBox includes: */
@@ -41,28 +44,28 @@
 
 /** Converts a darwin (virtual) key code to a set 1 scan code. */
-unsigned DarwinKeycodeToSet1Scancode(unsigned uKeyCode);
+SHARED_LIBRARY_STUFF unsigned DarwinKeycodeToSet1Scancode(unsigned uKeyCode);
 /** Adjusts the modifier mask left / right using the current keyboard state. */
-UInt32   DarwinAdjustModifierMask(UInt32 fModifiers, const void *pvCocoaEvent);
+SHARED_LIBRARY_STUFF UInt32   DarwinAdjustModifierMask(UInt32 fModifiers, const void *pvCocoaEvent);
 /** Converts a single modifier to a set 1 scan code. */
-unsigned DarwinModifierMaskToSet1Scancode(UInt32 fModifiers);
+SHARED_LIBRARY_STUFF unsigned DarwinModifierMaskToSet1Scancode(UInt32 fModifiers);
 /** Converts a single modifier to a darwin keycode. */
-unsigned DarwinModifierMaskToDarwinKeycode(UInt32 fModifiers);
+SHARED_LIBRARY_STUFF unsigned DarwinModifierMaskToDarwinKeycode(UInt32 fModifiers);
 /** Converts a darwin keycode to a modifier mask. */
-UInt32   DarwinKeyCodeToDarwinModifierMask(unsigned uKeyCode);
+SHARED_LIBRARY_STUFF UInt32   DarwinKeyCodeToDarwinModifierMask(unsigned uKeyCode);
 
 /** Disables or enabled global hot keys. */
-void     DarwinDisableGlobalHotKeys(bool fDisable);
+SHARED_LIBRARY_STUFF void     DarwinDisableGlobalHotKeys(bool fDisable);
 
 /** Start grabbing keyboard events.
   * @param   fGlobalHotkeys  Brings whether to disable global hotkeys or not. */
-void     DarwinGrabKeyboard(bool fGlobalHotkeys);
+SHARED_LIBRARY_STUFF void     DarwinGrabKeyboard(bool fGlobalHotkeys);
 /** Reverses the actions taken by DarwinGrabKeyboard. */
-void     DarwinReleaseKeyboard();
+SHARED_LIBRARY_STUFF void     DarwinReleaseKeyboard();
 
 /** Saves the states of leds for all HID devices attached to the system and return it. */
-void    *DarwinHidDevicesKeepLedsState();
+SHARED_LIBRARY_STUFF void    *DarwinHidDevicesKeepLedsState();
 
 /** Applies LEDs @a pState release its resources afterwards. */
-int      DarwinHidDevicesApplyAndReleaseLedsState(void *pState);
+SHARED_LIBRARY_STUFF int      DarwinHidDevicesApplyAndReleaseLedsState(void *pState);
 /** Set states for host keyboard LEDs.
   * @note This function will set led values for all
@@ -72,5 +75,5 @@
   * @param fCapsLockOn    Turns on CapsLock led if TRUE, off otherwise
   * @param fScrollLockOn  Turns on ScrollLock led if TRUE, off otherwise */
-void     DarwinHidDevicesBroadcastLeds(void *pState, bool fNumLockOn, bool fCapsLockOn, bool fScrollLockOn);
+SHARED_LIBRARY_STUFF void     DarwinHidDevicesBroadcastLeds(void *pState, bool fNumLockOn, bool fCapsLockOn, bool fScrollLockOn);
 
 RT_C_DECLS_END
Index: /trunk/src/VBox/Frontends/VirtualBox/src/platform/darwin/UICocoaApplication.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/platform/darwin/UICocoaApplication.h	(revision 71664)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/platform/darwin/UICocoaApplication.h	(revision 71665)
@@ -25,4 +25,5 @@
 #include "VBoxCocoaHelper.h"
 #include "VBoxUtils-darwin.h"
+#include "UILibraryDefs.h"
 
 /* Forward declarations: */
@@ -50,5 +51,5 @@
 
 /** Singleton prototype for our private NSApplication object. */
-class UICocoaApplication
+class SHARED_LIBRARY_STUFF UICocoaApplication
 {
 public:
Index: /trunk/src/VBox/Frontends/VirtualBox/src/platform/darwin/UICocoaSpecialControls.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/platform/darwin/UICocoaSpecialControls.h	(revision 71664)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/platform/darwin/UICocoaSpecialControls.h	(revision 71665)
@@ -25,4 +25,5 @@
 /* GUI includes: */
 #include "VBoxCocoaHelper.h"
+#include "UILibraryDefs.h"
 
 /* Add typedefs for Cocoa types: */
@@ -31,5 +32,5 @@
 /** QMacCocoaViewContainer extension,
   * used as cocoa button container. */
-class UICocoaButton : public QMacCocoaViewContainer
+class SHARED_LIBRARY_STUFF UICocoaButton : public QMacCocoaViewContainer
 {
     Q_OBJECT
Index: /trunk/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxUtils-darwin.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxUtils-darwin.h	(revision 71664)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxUtils-darwin.h	(revision 71665)
@@ -21,4 +21,7 @@
 /* Qt includes: */
 #include <QRect>
+
+/* GUI includes: */
+#include "UILibraryDefs.h"
 
 /* Other VBox includes: */
@@ -71,5 +74,5 @@
 NativeNSViewRef darwinToNativeViewImpl(NativeNSWindowRef pWindow);
 NativeNSButtonRef darwinNativeButtonOfWindowImpl(NativeNSWindowRef pWindow, StandardWindowButtonType enmButtonType);
-NativeNSStringRef darwinToNativeString(const char* pcszString);
+SHARED_LIBRARY_STUFF NativeNSStringRef darwinToNativeString(const char* pcszString);
 QString darwinFromNativeString(NativeNSStringRef pString);
 
@@ -82,8 +85,8 @@
 void darwinSetShowsResizeIndicatorImpl(NativeNSWindowRef pWindow, bool fEnabled);
 void darwinSetHidesAllTitleButtonsImpl(NativeNSWindowRef pWindow);
-void darwinLabelWindow(NativeNSWindowRef pWindow, NativeNSImageRef pImage, bool fCenter);
+SHARED_LIBRARY_STUFF void darwinLabelWindow(NativeNSWindowRef pWindow, NativeNSImageRef pImage, bool fCenter);
 void darwinSetShowsWindowTransparentImpl(NativeNSWindowRef pWindow, bool fEnabled);
-void darwinSetWindowHasShadow(NativeNSWindowRef pWindow, bool fEnabled);
-void darwinSetMouseCoalescingEnabled(bool fEnabled);
+SHARED_LIBRARY_STUFF void darwinSetWindowHasShadow(NativeNSWindowRef pWindow, bool fEnabled);
+SHARED_LIBRARY_STUFF void darwinSetMouseCoalescingEnabled(bool fEnabled);
 
 void darwintest(NativeNSWindowRef pWindow);
@@ -100,19 +103,19 @@
 int  darwinWindowToolBarHeight(NativeNSWindowRef pWindow);
 bool darwinIsToolbarVisible(NativeNSWindowRef pWindow);
-bool darwinIsWindowMaximized(NativeNSWindowRef pWindow);
+SHARED_LIBRARY_STUFF bool darwinIsWindowMaximized(NativeNSWindowRef pWindow);
 void darwinMinaturizeWindow(NativeNSWindowRef pWindow);
-void darwinEnableFullscreenSupport(NativeNSWindowRef pWindow);
-void darwinEnableTransienceSupport(NativeNSWindowRef pWindow);
-void darwinToggleFullscreenMode(NativeNSWindowRef pWindow);
-void darwinToggleWindowZoom(NativeNSWindowRef pWindow);
-bool darwinIsInFullscreenMode(NativeNSWindowRef pWindow);
-bool darwinIsOnActiveSpace(NativeNSWindowRef pWindow);
-bool darwinScreensHaveSeparateSpaces();
+SHARED_LIBRARY_STUFF void darwinEnableFullscreenSupport(NativeNSWindowRef pWindow);
+SHARED_LIBRARY_STUFF void darwinEnableTransienceSupport(NativeNSWindowRef pWindow);
+SHARED_LIBRARY_STUFF void darwinToggleFullscreenMode(NativeNSWindowRef pWindow);
+SHARED_LIBRARY_STUFF void darwinToggleWindowZoom(NativeNSWindowRef pWindow);
+SHARED_LIBRARY_STUFF bool darwinIsInFullscreenMode(NativeNSWindowRef pWindow);
+SHARED_LIBRARY_STUFF bool darwinIsOnActiveSpace(NativeNSWindowRef pWindow);
+SHARED_LIBRARY_STUFF bool darwinScreensHaveSeparateSpaces();
 
 bool darwinOpenFile(NativeNSStringRef pstrFile);
 
-float darwinSmallFontSize();
-bool darwinSetFrontMostProcess();
-uint64_t darwinGetCurrentProcessId();
+SHARED_LIBRARY_STUFF float darwinSmallFontSize();
+SHARED_LIBRARY_STUFF bool darwinSetFrontMostProcess();
+SHARED_LIBRARY_STUFF uint64_t darwinGetCurrentProcessId();
 
 void darwinInstallResizeDelegate(NativeNSWindowRef pWindow);
@@ -123,5 +126,5 @@
 void darwinCreateContextMenuEvent(void *pvWin, int x, int y);
 
-bool darwinIsApplicationCommand(ConstNativeNSEventRef pEvent);
+SHARED_LIBRARY_STUFF bool darwinIsApplicationCommand(ConstNativeNSEventRef pEvent);
 
 void darwinRetranslateAppMenu();
@@ -129,5 +132,5 @@
 void darwinSendMouseGrabEvents(QWidget *pWidget, int type, int button, int buttons, int x, int y);
 
-QString darwinResolveAlias(const QString &strFile);
+SHARED_LIBRARY_STUFF QString darwinResolveAlias(const QString &strFile);
 
 RT_C_DECLS_END
@@ -204,12 +207,12 @@
  * @param   pWidget      Pointer to the QWidget
  */
-CGImageRef darwinToCGImageRef(const QImage *pImage);
-CGImageRef darwinToCGImageRef(const QPixmap *pPixmap);
-CGImageRef darwinToCGImageRef(const char *pczSource);
-
-NativeNSImageRef darwinToNSImageRef(const CGImageRef pImage);
-NativeNSImageRef darwinToNSImageRef(const QImage *pImage);
-NativeNSImageRef darwinToNSImageRef(const QPixmap *pPixmap);
-NativeNSImageRef darwinToNSImageRef(const char *pczSource);
+SHARED_LIBRARY_STUFF CGImageRef darwinToCGImageRef(const QImage *pImage);
+SHARED_LIBRARY_STUFF CGImageRef darwinToCGImageRef(const QPixmap *pPixmap);
+SHARED_LIBRARY_STUFF CGImageRef darwinToCGImageRef(const char *pczSource);
+
+SHARED_LIBRARY_STUFF NativeNSImageRef darwinToNSImageRef(const CGImageRef pImage);
+SHARED_LIBRARY_STUFF NativeNSImageRef darwinToNSImageRef(const QImage *pImage);
+SHARED_LIBRARY_STUFF NativeNSImageRef darwinToNSImageRef(const QPixmap *pPixmap);
+SHARED_LIBRARY_STUFF NativeNSImageRef darwinToNSImageRef(const char *pczSource);
 
 #include <QEvent>
@@ -254,10 +257,10 @@
  ********************************************************************************/
 void darwinSetShowsToolbarButton(QToolBar *aToolBar, bool fEnabled);
-void darwinLabelWindow(QWidget *pWidget, QPixmap *pPixmap, bool fCenter);
+SHARED_LIBRARY_STUFF void darwinLabelWindow(QWidget *pWidget, QPixmap *pPixmap, bool fCenter);
 void darwinSetShowsResizeIndicator(QWidget *pWidget, bool fEnabled);
-void darwinSetHidesAllTitleButtons(QWidget *pWidget);
+SHARED_LIBRARY_STUFF void darwinSetHidesAllTitleButtons(QWidget *pWidget);
 void darwinSetShowsWindowTransparent(QWidget *pWidget, bool fEnabled);
-void darwinSetWindowHasShadow(QWidget *pWidget, bool fEnabled);
-void darwinDisableIconsInMenus(void);
+SHARED_LIBRARY_STUFF void darwinSetWindowHasShadow(QWidget *pWidget, bool fEnabled);
+SHARED_LIBRARY_STUFF void darwinDisableIconsInMenus(void);
 
 void darwinTest(QWidget *pWidget1, QWidget *pWidget2, int h);
@@ -268,5 +271,5 @@
  *
  ********************************************************************************/
-void darwinWindowAnimateResize(QWidget *pWidget, const QRect &aTarget);
+SHARED_LIBRARY_STUFF void darwinWindowAnimateResize(QWidget *pWidget, const QRect &aTarget);
 void darwinWindowAnimateResizeNew(QWidget *pWidget, int h, bool fAnimate);
 void darwinWindowInvalidateShape(QWidget *pWidget);
@@ -274,12 +277,12 @@
 int  darwinWindowToolBarHeight(QWidget *pWidget);
 bool darwinIsToolbarVisible(QToolBar *pToolBar);
-bool darwinIsWindowMaximized(QWidget *pWidget);
+SHARED_LIBRARY_STUFF bool darwinIsWindowMaximized(QWidget *pWidget);
 void darwinMinaturizeWindow(QWidget *pWidget);
-void darwinEnableFullscreenSupport(QWidget *pWidget);
-void darwinEnableTransienceSupport(QWidget *pWidget);
-void darwinToggleFullscreenMode(QWidget *pWidget);
-void darwinToggleWindowZoom(QWidget *pWidget);
-bool darwinIsInFullscreenMode(QWidget *pWidget);
-bool darwinIsOnActiveSpace(QWidget *pWidget);
+SHARED_LIBRARY_STUFF void darwinEnableFullscreenSupport(QWidget *pWidget);
+SHARED_LIBRARY_STUFF void darwinEnableTransienceSupport(QWidget *pWidget);
+SHARED_LIBRARY_STUFF void darwinToggleFullscreenMode(QWidget *pWidget);
+SHARED_LIBRARY_STUFF void darwinToggleWindowZoom(QWidget *pWidget);
+SHARED_LIBRARY_STUFF bool darwinIsInFullscreenMode(QWidget *pWidget);
+SHARED_LIBRARY_STUFF bool darwinIsOnActiveSpace(QWidget *pWidget);
 bool darwinOpenFile(const QString &strFile);
 
@@ -290,11 +293,11 @@
 void darwinUninstallResizeDelegate(QWidget *pWidget);
 
-void darwinRegisterForUnifiedToolbarContextMenuEvents(QMainWindow *pWindow);
-void darwinUnregisterForUnifiedToolbarContextMenuEvents(QMainWindow *pWindow);
-
-void darwinMouseGrab(QWidget *pWidget);
-void darwinMouseRelease(QWidget *pWidget);
-
-void *darwinCocoaToCarbonEvent(void *pvCocoaEvent);
+SHARED_LIBRARY_STUFF void darwinRegisterForUnifiedToolbarContextMenuEvents(QMainWindow *pWindow);
+SHARED_LIBRARY_STUFF void darwinUnregisterForUnifiedToolbarContextMenuEvents(QMainWindow *pWindow);
+
+SHARED_LIBRARY_STUFF void darwinMouseGrab(QWidget *pWidget);
+SHARED_LIBRARY_STUFF void darwinMouseRelease(QWidget *pWidget);
+
+SHARED_LIBRARY_STUFF void *darwinCocoaToCarbonEvent(void *pvCocoaEvent);
 
 #endif /* !___VBoxUtils_darwin_h___ */
