~ubuntu-branches/ubuntu/vivid/mir/vivid

« back to all changes in this revision

Viewing changes to src/server/scene/prompt_session_manager_impl.cpp

  • Committer: Package Import Robot
  • Author(s): Ubuntu daily release, Daniel van Vugt
  • Date: 2014-07-17 07:58:53 UTC
  • mfrom: (1.1.67)
  • Revision ID: package-import@ubuntu.com-20140717075853-s4i71ob3iq4ns49z
Tags: 0.5.0+14.10.20140717-0ubuntu1
[ Daniel van Vugt ]
* New upstream release 0.5.0 (https://launchpad.net/mir/+milestone/0.5.0)
  - mirclient ABI unchanged at 8. Clients do not need rebuilding.
  - mirserver ABI bumped to 23. Servers need rebuilding, but probably don't
    need modification:
    . DefaultServerConfiguration/Cursor API: Cursor interfaces changed, most
      notably CursorImages moved from ::mir::graphics to ::mir::input.
    . DefaultServerConfiguration: New "prompt" API.
    . DefaultServerConfiguration: "clock" member is now static.
    . SessionAuthorizer: New functions.
    . ServerConfiguration: New function added: the_prompt_connector().
  - Enhancements:
    . Add AddressSanitizer cmake build type.
    . frontend, client API, tests: add support for prompt session
      permissions and for client detecting errors.
    . server: Ensure our emergency cleanup handling infrastructure is
      signal-safe.
    . Implement and enable an xcursor based image loader for cursors.
    . Fix warnings raised by the new g++-4.9.
    . shared, scene: Introduce a generic listener collection.
    . MirMotionEvent: Define a struct typedef to allow for
      pointer_coordinates to be used individually.
  - Bugs fixed:
    . Nexus 10 leaks during overlay operations (LP: #1331769)
    . MultiThreadedCompositor deadlocks (LP: #1335311)
    . Intermittent test failure in ClientSurfaceEvents can client query 
      orientation (LP: #1335741)
    . Intermittent test failure in ClientSurfaceEvents/OrientationEvents
      (LP: #1335752)
    . Intermittent memory error in ClientSurfaceEvents on
      orientation query (LP: #1335819)
    . mir_unit_tests.EventDistributorTest.* SEGFAULT (LP: #1338902)
    . [regression] Device locks randomly on welcome screen (LP: #1339700)
    . Intermittent deadlock when switching to session with custom display
      config & closing other session (LP: #1340669)
    . Mir cursor has no hotspot setting, assumes (0, 0) (LP: #1189775)
    . clang built mir_unit_tests.ProtobufSocketCommunicatorFD crashes
      intermittently (LP: #1300653)
    . g++-4.9 binary incompatibilities with libraries built with g++-4.8
      (LP: #1329089)
    . [test regression] SurfaceLoop fails sporadically on deleting surfaces
      for a disconnecting client (LP: #1335747)
    . Intermittent test failure ServerShutdown when clients are blocked
      (LP: #1335873)
    . [regression] mir_demo_client_multiwin is displayed with obviously
      wrong colours (LP: #1339471)
    . Partially onscreen surfaces not occluded when covered by another
      surface (LP: #1340078)
    . SurfaceConfigurator::attribute_set always say "unfocused" for focus
      property changes (LP: #1336548)

Show diffs side-by-side

added added

removed removed

Lines of Context:
104
104
    stop_prompt_session_locked(lock, prompt_session);
105
105
}
106
106
 
107
 
void ms::PromptSessionManagerImpl::add_prompt_provider_by_pid_locked(std::lock_guard<std::mutex> const&,
108
 
    std::shared_ptr<PromptSession> const& prompt_session,
109
 
    pid_t process_id) const
110
 
{
111
 
    prompt_session_container->insert_waiting_process(prompt_session.get(), process_id);
112
 
 
113
 
    app_container->for_each(
114
 
        [&](std::shared_ptr<Session> const& session)
115
 
        {
116
 
            if (session->process_id() == process_id)
117
 
            {
118
 
                if (prompt_session_container->insert_participant(prompt_session.get(), session, PromptSessionContainer::ParticipantType::prompt_provider))
119
 
                    prompt_session_listener->prompt_provider_added(*prompt_session, session);
120
 
            }
121
 
        });
122
 
}
123
 
 
124
 
void ms::PromptSessionManagerImpl::add_prompt_provider_by_pid(
125
 
    std::shared_ptr<PromptSession> const& prompt_session,
126
 
    pid_t process_id) const
127
 
{
128
 
    std::lock_guard<std::mutex> lock(prompt_sessions_mutex);
129
 
 
130
 
    add_prompt_provider_by_pid_locked(lock, prompt_session, process_id);
131
 
}
132
 
 
133
107
std::shared_ptr<ms::PromptSession> ms::PromptSessionManagerImpl::start_prompt_session_for(
134
108
    std::shared_ptr<Session> const& session,
135
109
    PromptSessionCreationParameters const& params) const
157
131
    return prompt_session;
158
132
}
159
133
 
160
 
void ms::PromptSessionManagerImpl::add_expected_session(std::shared_ptr<Session> const& session) const
161
 
{
162
 
    std::unique_lock<std::mutex> lock(prompt_sessions_mutex);
163
 
 
164
 
    std::vector<std::shared_ptr<PromptSession>> prompt_sessions;
165
 
 
166
 
    prompt_session_container->for_each_prompt_session_expecting_process(session->process_id(),
167
 
        [&](std::shared_ptr<PromptSession> const& prompt_session)
168
 
        {
169
 
            prompt_sessions.push_back(prompt_session);
170
 
        });
171
 
 
172
 
    for(auto const& prompt_session : prompt_sessions)
173
 
    {
174
 
        if (prompt_session_container->insert_participant(prompt_session.get(), session, PromptSessionContainer::ParticipantType::prompt_provider))
175
 
            prompt_session_listener->prompt_provider_added(*prompt_session, session);
176
 
    }
177
 
}
178
 
 
179
134
void ms::PromptSessionManagerImpl::add_prompt_provider(
180
135
    std::shared_ptr<PromptSession> const& prompt_session,
181
136
    std::shared_ptr<Session> const& prompt_provider) const