1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
21 * This file is part of LibreOffice published API.
23 #ifndef INCLUDED_UNO_CURRENT_CONTEXT_HXX
24 #define INCLUDED_UNO_CURRENT_CONTEXT_HXX
26 #include "sal/config.h"
30 #include "uno/current_context.h"
31 #include "uno/lbnames.h"
33 #include "com/sun/star/uno/XCurrentContext.hpp"
45 /** Getting the current context.
47 Don't spread the returned interface around to other threads. Every thread has its own
50 @return current context or null ref, if none is set
52 inline Reference
< XCurrentContext
> SAL_CALL
getCurrentContext()
54 Reference
< XCurrentContext
> xRet
;
55 ::rtl::OUString
aEnvTypeName( CPPU_CURRENT_LANGUAGE_BINDING_NAME
);
56 ::uno_getCurrentContext( reinterpret_cast<void **>(&xRet
), aEnvTypeName
.pData
, NULL
);
59 /** Setting the current context.
61 @param xContext current context to be set
62 @return true, if context has been successfully set
64 inline bool SAL_CALL
setCurrentContext(
65 Reference
< XCurrentContext
> const & xContext
)
67 ::rtl::OUString
aEnvTypeName( CPPU_CURRENT_LANGUAGE_BINDING_NAME
);
68 return ::uno_setCurrentContext( xContext
.get(), aEnvTypeName
.pData
, NULL
);
71 /** Objects of this class are used for applying a current context until they are destructed, i.e.
72 the ctor of this class saves the previous and sets the given context while the dtor restores
73 the previous one upon destruction.
77 /** this C++ environment type name.
79 ::rtl::OUString m_aEnvTypeName
;
82 Reference
< XCurrentContext
> m_xPreviousContext
;
85 /** Constructor: Saves the previous context and sets the new (given) one.
87 @param xNewContext new context to be set
90 Reference
< XCurrentContext
> const & xNewContext
= Reference
< XCurrentContext
>() );
91 /** Destructor: restores the previous context.
93 inline ~ContextLayer();
95 /** Gets the previously set context.
97 @return the previously set context
99 Reference
< XCurrentContext
> SAL_CALL
getPreviousContext() const
100 { return m_xPreviousContext
; }
103 inline ContextLayer::ContextLayer( Reference
< XCurrentContext
> const & xNewContext
)
104 : m_aEnvTypeName( CPPU_CURRENT_LANGUAGE_BINDING_NAME
)
106 ::uno_getCurrentContext( reinterpret_cast<void **>(&m_xPreviousContext
), m_aEnvTypeName
.pData
, NULL
);
107 ::uno_setCurrentContext( xNewContext
.get(), m_aEnvTypeName
.pData
, NULL
);
110 inline ContextLayer::~ContextLayer()
112 ::uno_setCurrentContext( m_xPreviousContext
.get(), m_aEnvTypeName
.pData
, NULL
);
122 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */