fdo#74697 Add Bluez 5 support for impress remote.
[LibreOffice.git] / include / uno / current_context.hxx
blobdbade9c04cca1d67a49cf1d27fc41e587fa328c9
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
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 .
19 #ifndef _UNO_CURRENT_CONTEXT_HXX_
20 #define _UNO_CURRENT_CONTEXT_HXX_
22 #include <uno/current_context.h>
24 #include <com/sun/star/uno/XCurrentContext.hpp>
27 namespace com
29 namespace sun
31 namespace star
33 namespace uno
36 /** Getting the current context.
37 @attention
38 Don't spread the returned interface around to other threads. Every thread has its own
39 current context.
41 @return current context or null ref, if none is set
43 inline Reference< XCurrentContext > SAL_CALL getCurrentContext()
44 SAL_THROW(())
46 Reference< XCurrentContext > xRet;
47 ::rtl::OUString aEnvTypeName( CPPU_CURRENT_LANGUAGE_BINDING_NAME );
48 ::uno_getCurrentContext( (void **)&xRet, aEnvTypeName.pData, 0 );
49 return xRet;
51 /** Setting the current context.
53 @param xContext current context to be set
54 @return true, if context has been successfully set
56 inline bool SAL_CALL setCurrentContext(
57 Reference< XCurrentContext > const & xContext )
58 SAL_THROW(())
60 ::rtl::OUString aEnvTypeName( CPPU_CURRENT_LANGUAGE_BINDING_NAME );
61 return (::uno_setCurrentContext( xContext.get(), aEnvTypeName.pData, 0 ) != sal_False);
64 /** Objects of this class are used for applying a current context until they are destructed, i.e.
65 the ctor of this class saves the previous and sets the given context while the dtor restores
66 the previous one upon destruction.
68 class ContextLayer
70 /** this C++ environment type name.
72 ::rtl::OUString m_aEnvTypeName;
73 /** previous context
75 Reference< XCurrentContext > m_xPreviousContext;
77 public:
78 /** Constructor: Saves the previous context and sets the new (given) one.
80 @param xNewContext new context to be set
82 inline ContextLayer(
83 Reference< XCurrentContext > const & xNewContext = Reference< XCurrentContext >() )
84 SAL_THROW(());
85 /** Destructor: restores the previous context.
87 inline ~ContextLayer() SAL_THROW(());
89 /** Gets the previously set context.
91 @return the previously set context
93 inline Reference< XCurrentContext > SAL_CALL getPreviousContext() const
94 SAL_THROW(())
95 { return m_xPreviousContext; }
97 //__________________________________________________________________________________________________
98 inline ContextLayer::ContextLayer( Reference< XCurrentContext > const & xNewContext )
99 SAL_THROW(())
100 : m_aEnvTypeName( CPPU_CURRENT_LANGUAGE_BINDING_NAME )
102 ::uno_getCurrentContext( (void **)&m_xPreviousContext, m_aEnvTypeName.pData, 0 );
103 ::uno_setCurrentContext( xNewContext.get(), m_aEnvTypeName.pData, 0 );
105 //__________________________________________________________________________________________________
106 inline ContextLayer::~ContextLayer()
107 SAL_THROW(())
109 ::uno_setCurrentContext( m_xPreviousContext.get(), m_aEnvTypeName.pData, 0 );
117 #endif
119 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */