cpp_quote("/**")
cpp_quote(" * This file is part of the mingw-w64 runtime package.")
cpp_quote(" * No warranty is given; refer to the file DISCLAIMER within this package.")
cpp_quote(" */")
cpp_quote("")

import "objidl.idl";
import "oleidl.idl";
import "shtypes.idl";

cpp_quote("#include <winapifamily.h>")
cpp_quote("")
cpp_quote("#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)")
cpp_quote("")
cpp_quote("#define SID_STravelLogCursor IID_ITravelLogStg")

enum tagTLENUMF {
  TLEF_RELATIVE_INCLUDE_CURRENT = 0x00000001,
  TLEF_RELATIVE_BACK = 0x00000010,
  TLEF_RELATIVE_FORE = 0x00000020,
  TLEF_INCLUDE_UNINVOKEABLE = 0x00000040,
  TLEF_ABSOLUTE = 0x00000031,
  TLEF_EXCLUDE_SUBFRAME_ENTRIES = 0x00000080,
};

typedef struct _WINDOWDATA {
  DWORD dwWindowID;
  UINT uiCP;
  PIDLIST_ABSOLUTE pidl;
  [string] LPWSTR lpszUrl;
  [string] LPWSTR lpszUrlLocation;
  [string] LPWSTR lpszTitle;
} WINDOWDATA;

typedef DWORD TLENUMF;
typedef WINDOWDATA *LPWINDOWDATA;
typedef const WINDOWDATA *LPCWINDOWDATA;

[object, uuid (7ebfdd87-ad18-11d3-a4c5-00c04f72d6b8)]
interface ITravelLogEntry : IUnknown {
  HRESULT GetTitle ([out] LPWSTR *ppszTitle);
  HRESULT GetURL ([out] LPWSTR *ppszURL);
};

[object, uuid (241c033e-e659-43da-aa4d-4086dbc4758d)]
interface ITravelLogClient : IUnknown {
  HRESULT FindWindowByIndex ([in] DWORD dwID,[out] IUnknown **ppunk);
  HRESULT GetWindowData ([in] IStream *pStream,[out] LPWINDOWDATA pWinData);
  HRESULT LoadHistoryPosition ([in] LPWSTR pszUrlLocation,[in] DWORD dwPosition);
};

[object, uuid (7ebfdd85-ad18-11d3-a4c5-00c04f72d6b8)]
interface IEnumTravelLogEntry : IUnknown {
  HRESULT Next ([in] ULONG cElt,[out, size_is (cElt), length_is (*pcEltFetched)] ITravelLogEntry **rgElt,[out] ULONG *pcEltFetched);
  HRESULT Skip ([in] ULONG cElt);
  HRESULT Reset (void);
  HRESULT Clone ([out] IEnumTravelLogEntry **ppEnum);
};

[object, uuid (7ebfdd80-ad18-11d3-a4c5-00c04f72d6b8), pointer_default (unique)]
interface ITravelLogStg : IUnknown {
  HRESULT CreateEntry ([in] LPCWSTR pszUrl,[in] LPCWSTR pszTitle,[in] ITravelLogEntry *ptleRelativeTo,[in] BOOL fPrepend,[out] ITravelLogEntry **pptle);
  HRESULT TravelTo ([in] ITravelLogEntry *ptle);
  HRESULT EnumEntries ([in] TLENUMF flags,[out] IEnumTravelLogEntry **ppenum);
  HRESULT FindEntries ([in] TLENUMF flags,[in] LPCWSTR pszUrl,[out] IEnumTravelLogEntry **ppenum);
  HRESULT GetCount ([in] TLENUMF flags,[out] DWORD *pcEntries);
  HRESULT RemoveEntry ([in] ITravelLogEntry *ptle);
  HRESULT GetRelativeEntry ([in] int iOffset,[out] ITravelLogEntry **ptle);
};
cpp_quote("#endif")
