~mir-team/qtmir/trunk

« back to all changes in this revision

Viewing changes to src/platforms/mirserver/mirwindowmanager.cpp

  • Committer: CI Train Bot
  • Author(s): Daniel d'Andrada
  • Date: 2016-02-12 00:06:46 UTC
  • mfrom: (381.4.16 initialSurfaceGeom)
  • Revision ID: ci-train-bot@canonical.com-20160212000646-kcsjdiesdyazpp53
Let shell decide the initial surface size Fixes: #1532974
Approved by: Nick Dedekind

Show diffs side-by-side

added added

removed removed

Lines of Context:
100
100
{
101
101
    tracepoint(qtmirserver, surfacePlacementStart);
102
102
 
103
 
    // TODO: Callback unity8 so that it can make a decision on that.
104
 
    //       unity8 must bear in mind that the called function will be on a Mir thread though.
105
 
    //       The QPA shouldn't be deciding for itself on such things.
106
 
 
 
103
    QSize initialSize;
 
104
    // can be connected to via Qt::BlockingQueuedConnection to alter surface initial size
 
105
    {
 
106
        int surfaceType = requestParameters.type.is_set() ? requestParameters.type.value() : -1;
 
107
        Q_EMIT sessionAboutToCreateSurface(session, surfaceType, initialSize);
 
108
    }
107
109
    ms::SurfaceCreationParameters placedParameters = requestParameters;
108
110
 
109
 
    // Just make it fullscreen for now
110
 
    mir::geometry::Rectangle rect{requestParameters.top_left, requestParameters.size};
111
 
    m_displayLayout->size_to_output(rect);
112
 
    placedParameters.size = rect.size;
 
111
    if (initialSize.isValid()) {
 
112
        placedParameters.size.width = mir::geometry::Width(initialSize.width());
 
113
        placedParameters.size.height = mir::geometry::Height(initialSize.height());
 
114
    } else {
 
115
        qCWarning(QTMIR_MIR_MESSAGES) << "MirWindowManagerImpl::add_surface(): didn't get a initial surface"
 
116
            " size from shell. Falling back to fullscreen placement";
 
117
        // This is bad. Fallback to fullscreen
 
118
        mir::geometry::Rectangle rect{requestParameters.top_left, requestParameters.size};
 
119
        m_displayLayout->size_to_output(rect);
 
120
        placedParameters.size = rect.size;
 
121
    }
 
122
 
113
123
 
114
124
    qCDebug(QTMIR_MIR_MESSAGES) << "MirWindowManagerImpl::add_surface(): size requested ("
115
125
                                << requestParameters.size.width.as_int() << "," << requestParameters.size.height.as_int() << ") and placed ("
174
184
    }
175
185
}
176
186
 
177
 
std::unique_ptr<MirWindowManager> MirWindowManager::create(
 
187
std::shared_ptr<MirWindowManager> MirWindowManager::create(
178
188
    mir::shell::FocusController* /*focus_controller*/,
179
189
    const std::shared_ptr<mir::shell::DisplayLayout> &displayLayout)
180
190
{
181
 
    return std::make_unique<MirWindowManagerImpl>(displayLayout);
 
191
    return std::make_shared<MirWindowManagerImpl>(displayLayout);
182
192
}