Move the AppUserModelID code to the launcher
diff --git a/Repository.mk b/Repository.mk
index fa701f7..2edad91 100644
--- a/Repository.mk
+++ b/Repository.mk
@@ -127,7 +127,6 @@ $(eval $(call gb_Helper_register_static_libraries,PLAINLIBS, \
	directxcanvas \
	winextendloaderenv \
	winlauncher \
	appusermodelid \
))

else
diff --git a/desktop/Executable_sbase.mk b/desktop/Executable_sbase.mk
index d09faf4..375cba3 100644
--- a/desktop/Executable_sbase.mk
+++ b/desktop/Executable_sbase.mk
@@ -37,10 +37,6 @@ $(eval $(call gb_Executable_use_libraries,sbase,\
    $(gb_STDLIBS) \
))

$(eval $(call gb_Executable_use_static_libraries,sbase,\
   appusermodelid \
))

$(eval $(call gb_Executable_add_libs,sbase,\
    $(call gb_CxxObject_get_target,desktop/win32/source/applauncher/launcher) \
))
diff --git a/desktop/Executable_scalc.mk b/desktop/Executable_scalc.mk
index 6b626e5..ce90099 100644
--- a/desktop/Executable_scalc.mk
+++ b/desktop/Executable_scalc.mk
@@ -37,10 +37,6 @@ $(eval $(call gb_Executable_use_libraries,scalc,\
    $(gb_STDLIBS) \
))

$(eval $(call gb_Executable_use_static_libraries,scalc,\
   appusermodelid \
))

$(eval $(call gb_Executable_add_libs,scalc,\
    $(call gb_CxxObject_get_target,desktop/win32/source/applauncher/launcher) \
))
diff --git a/desktop/Executable_sdraw.mk b/desktop/Executable_sdraw.mk
index 0b1b9f4..4642445 100644
--- a/desktop/Executable_sdraw.mk
+++ b/desktop/Executable_sdraw.mk
@@ -37,10 +37,6 @@ $(eval $(call gb_Executable_use_libraries,sdraw,\
    $(gb_STDLIBS) \
))

$(eval $(call gb_Executable_use_static_libraries,sdraw,\
   appusermodelid \
))

$(eval $(call gb_Executable_add_libs,sdraw,\
    $(call gb_CxxObject_get_target,desktop/win32/source/applauncher/launcher) \
))
diff --git a/desktop/Executable_simpress.mk b/desktop/Executable_simpress.mk
index 0ad5986..c302643 100644
--- a/desktop/Executable_simpress.mk
+++ b/desktop/Executable_simpress.mk
@@ -37,10 +37,6 @@ $(eval $(call gb_Executable_use_libraries,simpress,\
    $(gb_STDLIBS) \
))

$(eval $(call gb_Executable_use_static_libraries,simpress,\
   appusermodelid \
))

$(eval $(call gb_Executable_add_libs,simpress,\
    $(call gb_CxxObject_get_target,desktop/win32/source/applauncher/launcher) \
))
diff --git a/desktop/Executable_smath.mk b/desktop/Executable_smath.mk
index cbbb5bd..4c7c4af 100644
--- a/desktop/Executable_smath.mk
+++ b/desktop/Executable_smath.mk
@@ -37,10 +37,6 @@ $(eval $(call gb_Executable_use_libraries,smath,\
    $(gb_STDLIBS) \
))

$(eval $(call gb_Executable_use_static_libraries,smath,\
   appusermodelid \
))

$(eval $(call gb_Executable_add_libs,smath,\
    $(call gb_CxxObject_get_target,desktop/win32/source/applauncher/launcher) \
))
diff --git a/desktop/Executable_sweb.mk b/desktop/Executable_sweb.mk
index dd88c31..870cf7d 100644
--- a/desktop/Executable_sweb.mk
+++ b/desktop/Executable_sweb.mk
@@ -37,10 +37,6 @@ $(eval $(call gb_Executable_use_libraries,sweb,\
    $(gb_STDLIBS) \
))

$(eval $(call gb_Executable_use_static_libraries,sweb,\
   appusermodelid \
))

$(eval $(call gb_Executable_add_libs,sweb,\
    $(call gb_CxxObject_get_target,desktop/win32/source/applauncher/launcher) \
))
diff --git a/desktop/Executable_swriter.mk b/desktop/Executable_swriter.mk
index f0b435f..acd299b 100644
--- a/desktop/Executable_swriter.mk
+++ b/desktop/Executable_swriter.mk
@@ -37,10 +37,6 @@ $(eval $(call gb_Executable_use_libraries,swriter,\
    $(gb_STDLIBS) \
))

$(eval $(call gb_Executable_use_static_libraries,swriter,\
   appusermodelid \
))

$(eval $(call gb_Executable_add_libs,swriter,\
    $(call gb_CxxObject_get_target,desktop/win32/source/applauncher/launcher) \
))
diff --git a/desktop/Module_desktop.mk b/desktop/Module_desktop.mk
index cdc3d99..cb067b3 100644
--- a/desktop/Module_desktop.mk
+++ b/desktop/Module_desktop.mk
@@ -77,7 +77,6 @@ ifeq ($(OS),WNT)
$(eval $(call gb_Module_add_targets,desktop,\
    StaticLibrary_winextendloaderenv \
    StaticLibrary_winlauncher \
    StaticLibrary_appusermodelid \
    Executable_crashrep.com \
    Executable_quickstart \
    Executable_sbase \
diff --git a/desktop/StaticLibrary_appusermodelid.mk b/desktop/StaticLibrary_appusermodelid.mk
deleted file mode 100644
index 2970fa5..0000000
--- a/desktop/StaticLibrary_appusermodelid.mk
+++ /dev/null
@@ -1,38 +0,0 @@
# -*- Mode: makefile; tab-width: 4; indent-tabs-mode: t -*-
#
# Version: MPL 1.1 / GPLv3+ / LGPLv3+
#
# The contents of this file are subject to the Mozilla Public License Version
# 1.1 (the "License"); you may not use this file except in compliance with
# the License or as specified alternatively below. You may obtain a copy of
# the License at http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS" basis,
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
# for the specific language governing rights and limitations under the
# License.
#
# Major Contributor(s):
# Copyright (C) 2012 Jesús Corrius <jesus@softcatala.org> (initial developer)
#
# All Rights Reserved.
#
# For minor contributions see the git repository.
#
# Alternatively, the contents of this file may be used under the terms of
# either the GNU General Public License Version 3 or later (the "GPLv3+"), or
# the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
# in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
# instead of those above.

$(eval $(call gb_StaticLibrary_StaticLibrary,appusermodelid))

$(eval $(call gb_StaticLibrary_add_defs,appusermodelid,\
    -DUNICODE \
))

$(eval $(call gb_StaticLibrary_add_noexception_objects,appusermodelid,\
    desktop/win32/source/applauncher/appusermodelid \
))

# vim:set shiftwidth=4 softtabstop=4 expandtab:
diff --git a/desktop/win32/source/applauncher/appusermodelid.cxx b/desktop/win32/source/applauncher/appusermodelid.cxx
deleted file mode 100644
index 2095817..0000000
--- a/desktop/win32/source/applauncher/appusermodelid.cxx
+++ /dev/null
@@ -1,72 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
 * Version: MPL 1.1 / GPLv3+ / LGPLv3+
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License or as specified alternatively below. You may obtain a copy of
 * the License at http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * Major Contributor(s):
 * Copyright (C) 2012 Jesús Corrius <jesus@softcatala.org> (initial developer)
 *
 * All Rights Reserved.
 *
 * For minor contributions see the git repository.
 *
 * Alternatively, the contents of this file may be used under the terms of
 * either the GNU General Public License Version 3 or later (the "GPLv3+"), or
 * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
 * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
 * instead of those above.
 */

#include "appusermodelid.hxx"

#include <winbase.h>
#include <shlwapi.h>

#define PACKVERSION(major,minor) MAKELONG(minor,major)

void SetExplicitAppUserModelID(PCWSTR AppID)
{
	WCHAR szShell32[MAX_PATH];
	GetSystemDirectoryW(szShell32, MAX_PATH);
	wcscat(szShell32, L"\\Shell32.dll");

	HINSTANCE hinstDll = LoadLibraryW(szShell32);

	if(hinstDll)
	{
		DLLVERSIONINFO dvi;
		ZeroMemory(&dvi, sizeof(dvi));
		dvi.cbSize = sizeof(dvi);

		DLLGETVERSIONPROC pDllGetVersion;
		pDllGetVersion = (DLLGETVERSIONPROC)GetProcAddress(hinstDll, "DllGetVersion");
		HRESULT hr = (*pDllGetVersion)(&dvi);

		if(SUCCEEDED(hr))
		{
			DWORD dwVersion = PACKVERSION(dvi.dwMajorVersion, dvi.dwMinorVersion);
			if(dwVersion >= PACKVERSION(6,1)) // Shell32 version in Windows 7
			{
				typedef HRESULT (WINAPI *SETCURRENTPROCESSEXPLICITAPPUSERMODELID)(PCWSTR);
				SETCURRENTPROCESSEXPLICITAPPUSERMODELID pSetCurrentProcessExplicitAppUserModelID;
				pSetCurrentProcessExplicitAppUserModelID =
					(SETCURRENTPROCESSEXPLICITAPPUSERMODELID)GetProcAddress(hinstDll, "SetCurrentProcessExplicitAppUserModelID");

				if(pSetCurrentProcessExplicitAppUserModelID)
					(*pSetCurrentProcessExplicitAppUserModelID) (AppID);
			}
		}
	}
	FreeLibrary(hinstDll);
}

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/desktop/win32/source/applauncher/appusermodelid.hxx b/desktop/win32/source/applauncher/appusermodelid.hxx
deleted file mode 100644
index 42941d0..0000000
--- a/desktop/win32/source/applauncher/appusermodelid.hxx
+++ /dev/null
@@ -1,34 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
 * Version: MPL 1.1 / GPLv3+ / LGPLv3+
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License or as specified alternatively below. You may obtain a copy of
 * the License at http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * Major Contributor(s):
 * Copyright (C) 2012 Jesús Corrius <jesus@softcatala.org> (initial developer)
 *
 * All Rights Reserved.
 *
 * For minor contributions see the git repository.
 *
 * Alternatively, the contents of this file may be used under the terms of
 * either the GNU General Public License Version 3 or later (the "GPLv3+"), or
 * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
 * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
 * instead of those above.
 */

#pragma once
#include <windows.h>

void SetExplicitAppUserModelID(LPCWSTR AppID);

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/desktop/win32/source/applauncher/launcher.cxx b/desktop/win32/source/applauncher/launcher.cxx
index 074e2b53..24843a4 100644
--- a/desktop/win32/source/applauncher/launcher.cxx
+++ b/desktop/win32/source/applauncher/launcher.cxx
@@ -26,10 +26,7 @@
 *
 ************************************************************************/


#include "launcher.hxx"
#include "appusermodelid.hxx"


#ifndef _WINDOWS_
#   define WIN32_LEAN_AND_MEAN
@@ -38,15 +35,18 @@
#endif
#   include <windows.h>
#   include <shellapi.h>
#   include <winbase.h>
#   include <shlwapi.h>
#if defined _MSC_VER
#pragma warning(pop)
#endif
#endif


#include <stdlib.h>
#include <malloc.h>

#define PACKVERSION(major,minor) MAKELONG(minor,major)


#ifdef __MINGW32__
extern "C" int APIENTRY WinMain( HINSTANCE, HINSTANCE, LPSTR, int )
@@ -54,10 +54,40 @@ extern "C" int APIENTRY WinMain( HINSTANCE, HINSTANCE, LPSTR, int )
extern "C" int APIENTRY _tWinMain( HINSTANCE, HINSTANCE, LPTSTR, int )
#endif
{
	// Set an explicit Application User Model ID for the process
    // Set an explicit Application User Model ID for the process
    
    WCHAR szShell32[MAX_PATH];
    GetSystemDirectoryW(szShell32, MAX_PATH);
    wcscat(szShell32, L"\\Shell32.dll");

    // FIXME: Comment this out until I find a fix for minGW.
    // SetExplicitAppUserModelID(APPUSERMODELID);
    HINSTANCE hinstDll = LoadLibraryW(szShell32);

    if(hinstDll)
    {
        DLLVERSIONINFO dvi;
        ZeroMemory(&dvi, sizeof(dvi));
        dvi.cbSize = sizeof(dvi);

        DLLGETVERSIONPROC pDllGetVersion;
        pDllGetVersion = (DLLGETVERSIONPROC)GetProcAddress(hinstDll, "DllGetVersion");
        HRESULT hr = (*pDllGetVersion)(&dvi);

        if(SUCCEEDED(hr))
        {
            DWORD dwVersion = PACKVERSION(dvi.dwMajorVersion, dvi.dwMinorVersion);
            if(dwVersion >= PACKVERSION(6,1)) // Shell32 version in Windows 7
            {
                typedef HRESULT (WINAPI *SETCURRENTPROCESSEXPLICITAPPUSERMODELID)(PCWSTR);
                SETCURRENTPROCESSEXPLICITAPPUSERMODELID pSetCurrentProcessExplicitAppUserModelID;
                pSetCurrentProcessExplicitAppUserModelID =
                    (SETCURRENTPROCESSEXPLICITAPPUSERMODELID)GetProcAddress(hinstDll, "SetCurrentProcessExplicitAppUserModelID");

                if(pSetCurrentProcessExplicitAppUserModelID)
                    (*pSetCurrentProcessExplicitAppUserModelID) (APPUSERMODELID);
            }
        }
    }
    FreeLibrary(hinstDll);    

    // Retreive startup info