/*
 * COM Classes for msctf
 *
 * Copyright 2010 Alexandre Julliard
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#pragma makedep register

[
    threading(apartment),
    uuid(529a9e6b-6587-4f23-ab9e-9c7d683e3c50)
]
coclass TF_ThreadMgr { interface ITfThreadMgr; }

[
    threading(apartment),
    uuid(33c53a50-f456-4884-b049-85fd643ecfed)
]
coclass TF_InputProcessorProfiles { interface ITfInputProcessorProfiles; }

[
    threading(apartment),
    uuid(a4b544a1-438d-4b41-9325-869523e2d6c7)
]
coclass TF_CategoryMgr { interface ITfCategoryMgr; }

[
    threading(apartment),
    uuid(ebb08c45-6c4a-4fdc-ae53-4eb8c4c7db8e)
]
coclass TF_LangBarMgr { interface ITfLangBarMgr; }

[
    threading(apartment),
    uuid(3ce74de4-53d3-4d74-8b83-431b3828ba53)
]
coclass TF_DisplayAttributeMgr { interface ITfDisplayAttributeMgr; }
