LibreOffice Module sfx2 (master)
1
sfx2
source
sidebar
AsynchronousCall.cxx
Go to the documentation of this file.
1
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
/*
3
* This file is part of the LibreOffice project.
4
*
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/.
8
*
9
* This file incorporates work covered by the following license notice:
10
*
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 .
18
*/
19
20
#include <
sfx2/sidebar/AsynchronousCall.hxx
>
21
#include <utility>
22
#include <
vcl/svapp.hxx
>
23
24
namespace
sfx2::sidebar
{
25
26
AsynchronousCall::AsynchronousCall
(
Action
aAction)
27
:
maAction
(
std
::move(aAction)),
28
mnCallId(nullptr)
29
{
30
}
31
32
AsynchronousCall::~AsynchronousCall
()
33
{
34
CancelRequest
();
35
}
36
37
void
AsynchronousCall::RequestCall
()
38
{
39
if
(
mnCallId
==
nullptr
)
40
{
41
Link<void*,void>
aLink (
LINK
(
this
,
AsynchronousCall
, HandleUserCall));
42
mnCallId
=
Application::PostUserEvent
(aLink);
43
}
44
}
45
46
void
AsynchronousCall::CancelRequest
()
47
{
48
if
(
mnCallId
!=
nullptr
)
49
{
50
Application::RemoveUserEvent
(
mnCallId
);
51
mnCallId
=
nullptr
;
52
}
53
}
54
55
void
AsynchronousCall::Sync
()
56
{
57
if
(
mnCallId
!=
nullptr
) {
58
maAction
();
59
CancelRequest
();
60
}
61
}
62
63
IMPL_LINK_NOARG
(
AsynchronousCall
, HandleUserCall,
void
*,
void
)
64
{
65
mnCallId =
nullptr
;
66
if
(
maAction
)
67
maAction
();
68
}
69
70
}
// end of namespace sfx2::sidebar
71
72
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
AsynchronousCall.hxx
Action
Application::PostUserEvent
static ImplSVEvent * PostUserEvent(const Link< void *, void > &rLink, void *pCaller=nullptr, bool bReferenceLink=false)
Application::RemoveUserEvent
static void RemoveUserEvent(ImplSVEvent *nUserEvent)
Link< void *, void >
sfx2::sidebar::AsynchronousCall
A simple asynchronous call via Application::PostUserCall.
Definition:
AsynchronousCall.hxx:32
sfx2::sidebar::AsynchronousCall::RequestCall
void RequestCall()
Definition:
AsynchronousCall.cxx:37
sfx2::sidebar::AsynchronousCall::CancelRequest
void CancelRequest()
Definition:
AsynchronousCall.cxx:46
sfx2::sidebar::AsynchronousCall::AsynchronousCall
AsynchronousCall(Action aAction)
Definition:
AsynchronousCall.cxx:26
sfx2::sidebar::AsynchronousCall::~AsynchronousCall
~AsynchronousCall()
Definition:
AsynchronousCall.cxx:32
sfx2::sidebar::AsynchronousCall::mnCallId
ImplSVEvent * mnCallId
Definition:
AsynchronousCall.hxx:45
sfx2::sidebar::AsynchronousCall::maAction
Action maAction
Definition:
AsynchronousCall.hxx:44
sfx2::sidebar::AsynchronousCall::Sync
void Sync()
Definition:
AsynchronousCall.cxx:55
maAction
const Action maAction
LINK
#define LINK(Instance, Class, Member)
sfx2::sidebar
Definition:
appdata.hxx:56
sfx2::sidebar::IMPL_LINK_NOARG
IMPL_LINK_NOARG(AsynchronousCall, HandleUserCall, void *, void)
Definition:
AsynchronousCall.cxx:63
std
svapp.hxx
Generated on Sun Jul 30 2023 04:34:00 for LibreOffice Module sfx2 (master) by
1.9.3