Mir
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
mir_prompt_session.h
Go to the documentation of this file.
1 /*
2  * Copyright © 2014 Canonical Ltd.
3  *
4  * This program is free software: you can redistribute it and/or modify it
5  * under the terms of the GNU Lesser General Public License version 3,
6  * as published by the Free Software Foundation.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU Lesser General Public License for more details.
12  *
13  * You should have received a copy of the GNU Lesser General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  *
16  * Authored by: Nick Dedekind <nick.dedekind@canonical.com>
17  */
18 
19 #ifndef MIR_CLIENT_MIR_PROMPT_SESSION_H_
20 #define MIR_CLIENT_MIR_PROMPT_SESSION_H_
21 
23 
24 #include "mir_protobuf.pb.h"
25 #include "mir_wait_handle.h"
26 
27 #include <mutex>
28 #include <memory>
29 #include <atomic>
30 
31 namespace mir
32 {
34 namespace client
35 {
36 class EventHandlerRegister;
37 }
38 }
39 
41 {
42 public:
44  std::shared_ptr<mir::client::EventHandlerRegister> const& event_handler_register);
45 
47 
48  MirWaitHandle* start(pid_t application_pid, mir_prompt_session_callback callback, void* context);
49  MirWaitHandle* stop(mir_prompt_session_callback callback, void* context);
50 
52  unsigned int no_of_fds,
53  mir_client_fd_callback callback,
54  void * context);
55 
57 
58  char const* get_error_message();
59 
60 private:
61  std::mutex mutable mutex; // Protects parameters, wait_handles & results
64  mir::protobuf::Void add_result;
65  mir::protobuf::Void protobuf_void;
66  mir::protobuf::SocketFD socket_fd_response;
67  std::shared_ptr<mir::client::EventHandlerRegister> const event_handler_register;
68  int const event_handler_register_id;
69 
70  MirWaitHandle start_wait_handle;
71  MirWaitHandle stop_wait_handle;
72  MirWaitHandle fds_for_prompt_providers_wait_handle;
73  std::atomic<MirPromptSessionState> state;
74 
75  std::mutex mutable session_mutex; // Protects session
76  mir::protobuf::Void session;
77 
78  std::mutex mutable event_handler_mutex; // Need another mutex for callback access to members
79  std::function<void(MirPromptSessionState)> handle_prompt_session_state_change;
80 
81  void set_state(MirPromptSessionState new_state);
82  void done_start(mir_prompt_session_callback callback, void* context);
83  void done_stop(mir_prompt_session_callback callback, void* context);
84  void done_fds_for_prompt_providers(mir_client_fd_callback callback, void* context);
85  MirPromptSession(MirPromptSession const&) = delete;
86  MirPromptSession& operator=(MirPromptSession const&) = delete;
87 };
88 
89 #endif /* MIR_CLIENT_MIR_PROMPT_SESSION_H_ */
90 
~MirPromptSession()
Definition: mir_prompt_session.cpp:41
All things Mir.
Definition: aging_buffer.h:24
char const * get_error_message()
Definition: mir_prompt_session.cpp:128
Definition: mir_protobuf.pb.h:3171
void(* mir_prompt_session_state_change_callback)(MirPromptSession *prompt_provider, MirPromptSessionState state, void *context)
Callback member of MirPromptSession for handling of prompt sessions events.
Definition: client_types.h:336
Definition: mir_wait_handle.h:31
MirPromptSession(mir::protobuf::DisplayServer &server, std::shared_ptr< mir::client::EventHandlerRegister > const &event_handler_register)
MirPromptSessionState
Definition: common.h:104
MirWaitHandle * new_fds_for_prompt_providers(unsigned int no_of_fds, mir_client_fd_callback callback, void *context)
Definition: mir_prompt_session.cpp:138
MirWaitHandle * start(pid_t application_pid, mir_prompt_session_callback callback, void *context)
Definition: mir_prompt_session.cpp:63
void(* mir_prompt_session_callback)(MirPromptSession *prompt_provider, void *context)
Callback member of MirPromptSession for handling of prompt sessions.
Definition: client_types.h:328
void(* mir_client_fd_callback)(MirPromptSession *prompt_session, size_t count, int const *fds, void *context)
Callback called when a request for client file descriptors completes.
Definition: client_types.h:117
Definition: mir_protobuf.pb.h:1834
Definition: mir_protobuf.pb.h:3061
MirWaitHandle * stop(mir_prompt_session_callback callback, void *context)
Definition: mir_prompt_session.cpp:81
Definition: mir_prompt_session.h:40
void register_prompt_session_state_change_callback(mir_prompt_session_state_change_callback callback, void *context)
Definition: mir_prompt_session.cpp:95
Definition: mir_protobuf.pb.h:3255

Copyright © 2012,2013 Canonical Ltd.
Generated on Fri Oct 10 14:07:14 UTC 2014