20 #include <unity/shell/application/MirSurfaceInterface.h> 23 #include <QTextStream> 27 Q_LOGGING_CATEGORY(UNITY_WINDOW,
"unity.window", QtWarningMsg)
29 #define DEBUG_MSG qCDebug(UNITY_WINDOW).nospace() << qPrintable(toString()) << "::" << __func__ 31 Window::Window(
int id, QObject *parent)
36 QQmlEngine::setObjectOwnership(
this, QQmlEngine::CppOwnership);
51 return m_requestedPosition;
54 void Window::setRequestedPosition(
const QPoint &value)
56 m_positionRequested =
true;
57 if (value != m_requestedPosition) {
58 m_requestedPosition = value;
59 Q_EMIT requestedPositionChanged(m_requestedPosition);
61 m_surface->setRequestedPosition(value);
64 m_position = m_requestedPosition;
65 Q_EMIT positionChanged(m_position);
83 return m_surface->confinesMousePointer();
101 m_stateRequested =
true;
103 m_surface->requestState(state);
104 }
else if (m_state != state) {
106 Q_EMIT stateChanged(m_state);
115 Q_EMIT closeRequested();
123 m_surface->activate();
125 Q_EMIT emptyWindowActivated();
129 void Window::setSurface(unityapi::MirSurfaceInterface *surface)
131 DEBUG_MSG <<
"(" << surface <<
")";
133 disconnect(m_surface, 0,
this, 0);
139 connect(surface, &unityapi::MirSurfaceInterface::focusRequested,
this, [
this]() {
140 Q_EMIT focusRequested();
143 connect(surface, &unityapi::MirSurfaceInterface::closeRequested,
this, &Window::closeRequested);
145 connect(surface, &unityapi::MirSurfaceInterface::positionChanged,
this, [
this]() {
149 connect(surface, &unityapi::MirSurfaceInterface::stateChanged,
this, [
this]() {
153 connect(surface, &unityapi::MirSurfaceInterface::focusedChanged,
this, [
this]() {
158 if (m_positionRequested) {
159 m_surface->setRequestedPosition(m_requestedPosition);
161 if (m_stateRequested && m_surface->state() == Mir::RestoredState) {
162 m_surface->requestState(m_state);
171 Q_EMIT surfaceChanged(surface);
174 void Window::updatePosition()
176 if (m_surface->position() != m_position) {
177 m_position = m_surface->position();
178 Q_EMIT positionChanged(m_position);
182 void Window::updateState()
184 if (m_surface->state() != m_state) {
185 m_state = m_surface->state();
186 Q_EMIT stateChanged(m_state);
190 void Window::updateFocused()
192 if (m_surface->focused() != m_focused) {
193 m_focused = m_surface->focused();
194 Q_EMIT focusedChanged(m_focused);
198 void Window::setFocused(
bool value)
200 if (value != m_focused) {
201 DEBUG_MSG <<
"(" << value <<
")";
203 Q_EMIT focusedChanged(m_focused);
205 Q_ASSERT(!m_surface);
209 QString Window::toString()
const 213 QTextStream stream(&result);
214 stream <<
"Window["<<(
void*)
this<<
", id="<<
id()<<
", ";
216 stream <<
"MirSurface["<<(
void*)surface()<<
",\""<<surface()->name()<<
"\"]";
225 QDebug operator<<(QDebug dbg,
const Window *window)
227 QDebugStateSaver saver(dbg);
231 dbg << qPrintable(window->toString());
233 dbg << (
void*)(window);
A slightly higher concept than MirSurface.
Mir::State state
State of the surface.
void activate()
Focuses and raises the window.
unity::shell::application::MirSurfaceInterface surface
Surface backing up this window It might be null if a surface hasn't been created yet (application is ...
bool focused
Whether the surface is focused.
void requestState(Mir::State state)
Requests a change to the specified state.
QPoint position
Position of the current surface buffer, in pixels.
int id
A unique identifier for this window. Useful for telling windows apart in a list model as they get mov...
QPoint requestedPosition
Requested position of the current surface buffer, in pixels.
void close()
Sends a close request.
bool confinesMousePointer
Whether the surface wants to confine the mouse pointer within its boundaries.