hw/xwin: Add a simple interface to the ITaskbarList COM interface
Signed-off-by: Jon TURNEY <jon.turney@dronecode.org.uk> Reviewed-by: Colin Harrison <colin.harrison@virgin.net>
This commit is contained in:
parent
19d875187a
commit
de759cc38c
|
@ -102,6 +102,7 @@ SRCS = InitInput.c \
|
|||
winshaddd.c \
|
||||
winshadddnl.c \
|
||||
winshadgdi.c \
|
||||
wintaskbar.c \
|
||||
wintrayicon.c \
|
||||
winvalargs.c \
|
||||
winwakeup.c \
|
||||
|
|
92
hw/xwin/wintaskbar.c
Normal file
92
hw/xwin/wintaskbar.c
Normal file
|
@ -0,0 +1,92 @@
|
|||
/*
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice (including the next
|
||||
paragraph) shall be included in all copies or substantial portions of the
|
||||
Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_XWIN_CONFIG_H
|
||||
#include <xwin-config.h>
|
||||
#endif
|
||||
|
||||
#include "win.h"
|
||||
#include "winwindow.h"
|
||||
|
||||
const GUID CLSID_TaskbarList = {0x56fdf344,0xfd6d,0x11d0,{0x95,0x8a,0x0,0x60,0x97,0xc9,0xa0,0x90}};
|
||||
const GUID IID_ITaskbarList = {0x56fdf342,0xfd6d,0x11d0,{0x95,0x8a,0x0,0x60,0x97,0xc9,0xa0,0x90}};
|
||||
|
||||
#ifdef INTERFACE
|
||||
#undef INTERFACE
|
||||
#endif
|
||||
|
||||
#define INTERFACE ITaskbarList
|
||||
DECLARE_INTERFACE_(ITaskbarList, IUnknown)
|
||||
{
|
||||
/* IUnknown methods */
|
||||
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
|
||||
STDMETHOD_(ULONG, AddRef) (THIS) PURE;
|
||||
STDMETHOD_(ULONG, Release) (THIS) PURE;
|
||||
|
||||
/* ITaskbarList methods */
|
||||
STDMETHOD(HrInit) (THIS) PURE;
|
||||
STDMETHOD(AddTab) (THIS_ HWND hWnd) PURE;
|
||||
STDMETHOD(DeleteTab) (THIS_ HWND hWnd) PURE;
|
||||
STDMETHOD(ActivateTab) (THIS_ HWND hWnd) PURE;
|
||||
STDMETHOD(SetActiveAlt) (THIS_ HWND hWnd) PURE;
|
||||
};
|
||||
#undef INTERFACE
|
||||
|
||||
/*
|
||||
The stuff above needs to be in win32api headers, not defined here,
|
||||
or at least generated from the MIDL :-)
|
||||
*/
|
||||
|
||||
/*
|
||||
This is unnecessarily heavyweight, we could just call CoInitialize() once at
|
||||
startup and CoUninitialize() once at shutdown
|
||||
*/
|
||||
|
||||
/*
|
||||
The documentation for ITaskbarList::AddTab says that we are responsible for
|
||||
deleting the tab ourselves when the window is deleted, but that doesn't actually
|
||||
seem to be the case
|
||||
*/
|
||||
|
||||
void winShowWindowOnTaskbar(HWND hWnd, BOOL show)
|
||||
{
|
||||
ITaskbarList* pTaskbarList = NULL;
|
||||
|
||||
if (SUCCEEDED(CoInitialize(NULL)))
|
||||
{
|
||||
if (SUCCEEDED(CoCreateInstance((const CLSID *)&CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER, (const IID *)&IID_ITaskbarList, (void**)&pTaskbarList)))
|
||||
{
|
||||
if (SUCCEEDED(pTaskbarList->lpVtbl->HrInit(pTaskbarList)))
|
||||
{
|
||||
if (show)
|
||||
{
|
||||
pTaskbarList->lpVtbl->AddTab(pTaskbarList,hWnd);
|
||||
}
|
||||
else
|
||||
{
|
||||
pTaskbarList->lpVtbl->DeleteTab(pTaskbarList,hWnd);
|
||||
}
|
||||
}
|
||||
pTaskbarList->lpVtbl->Release(pTaskbarList);
|
||||
}
|
||||
CoUninitialize();
|
||||
}
|
||||
}
|
|
@ -157,5 +157,8 @@ void
|
|||
void
|
||||
winSetAppUserModelID(HWND hWnd, const char *AppID);
|
||||
|
||||
void
|
||||
winShowWindowOnTaskbar(HWND hWnd, BOOL show);
|
||||
|
||||
#endif /* XWIN_MULTIWINDOW */
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue
Block a user