/*
 * 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
 */

[
    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; }
