virtual void WindowUnfocused(Window window) = 0;
/**
+ * @brief Notifies accessibility dbus that window has just been minimized.
+ *
+ * @param[in] window The window to be minimized
+ */
+ virtual void WindowMinimized(Window window) = 0;
+
+ /**
+ * @brief Notifies accessibility dbus that window has just been restored.
+ *
+ * @param[in] window The window to be restored
+ * @param[in] detail Restored window state
+ */
+ virtual void WindowRestored(Window window, WindowRestoreType detail) = 0;
+
+ /**
+ * @brief Notifies accessibility dbus that window has just been maximized.
+ *
+ * @param[in] window The window to be maximized
+ */
+ virtual void WindowMaximized(Window window) = 0;
+
+ /**
* @brief Initializes accessibility bus.
*/
virtual void Initialize() = 0;
};\r
\r
/**\r
+ * @brief Restored window state\r
+ * @see Accessibility::Accessible::Emit\r
+ */\r
+enum class WindowRestoreType\r
+{\r
+ RESTORE_FROM_ICONIFY, // The Window is Deiconified.\r
+ RESTORE_FROM_MAXIMIZE // The Window is Unmaximized.\r
+};\r
+\r
+/**\r
* @brief Enumeration used to acquire bounded text from accessible object having textual content.\r
* @see Accessibility::Text::GetTextAtOffset\r
* @note Currently only TextBoundary::Character is supported\r
}
/**
+ * @brief Sends a signal to dbus that the window is minimized.
+ *
+ * @param[in] window The window to be minimized
+ * @see BridgeObject::Emit()
+ */
+ void EmitMinimize(Dali::Window window)
+ {
+ auto windowAccessible = mApplication.GetWindowAccessible(window);
+ if(windowAccessible)
+ {
+ windowAccessible->Emit(WindowEvent::MINIMIZE, 0);
+ }
+ }
+
+ /**
+ * @brief Sends a signal to dbus that the window is restored.
+ *
+ * @param[in] window The window to be restored
+ * @param[in] detail Restored window state
+ * @see BridgeObject::Emit()
+ */
+ void EmitRestore(Dali::Window window, Dali::Accessibility::WindowRestoreType detail)
+ {
+ auto windowAccessible = mApplication.GetWindowAccessible(window);
+ if(windowAccessible)
+ {
+ windowAccessible->Emit(WindowEvent::RESTORE, static_cast<unsigned int>(detail));
+ }
+ }
+
+ /**
+ * @brief Sends a signal to dbus that the window is maximized.
+ *
+ * @param[in] window The window to be maximized
+ * @see BridgeObject::Emit()
+ */
+ void EmitMaximize(Dali::Window window)
+ {
+ auto windowAccessible = mApplication.GetWindowAccessible(window);
+ if(windowAccessible)
+ {
+ windowAccessible->Emit(WindowEvent::MAXIMIZE, 0);
+ }
+ }
+
+ /**
* @copydoc Dali::Accessibility::Bridge::WindowShown()
*/
void WindowShown(Dali::Window window) override
}
/**
+ * @copydoc Dali::Accessibility::Bridge::WindowMinimized()
+ */
+ void WindowMinimized(Dali::Window window) override
+ {
+ if(IsUp())
+ {
+ EmitMinimize(window);
+ }
+ }
+
+ /**
+ * @copydoc Dali::Accessibility::Bridge::WindowRestored()
+ */
+ void WindowRestored(Dali::Window window, WindowRestoreType detail) override
+ {
+ if(IsUp())
+ {
+ EmitRestore(window, detail);
+ }
+ }
+
+ /**
+ * @copydoc Dali::Accessibility::Bridge::WindowMaximized()
+ */
+ void WindowMaximized(Dali::Window window) override
+ {
+ if(IsUp())
+ {
+ EmitMaximize(window);
+ }
+ }
+
+ /**
* @copydoc Dali::Accessibility::Bridge::SuppressScreenReader()
*/
void SuppressScreenReader(bool suppress) override
{
}
+ void WindowMinimized(Window window) override
+ {
+ }
+
+ void WindowRestored(Window window, WindowRestoreType detail) override
+ {
+ }
+
+ void WindowMaximized(Window window) override
+ {
+ }
+
void Initialize() override
{
}
{
WindowBase::WindowBase()
: mIconifyChangedSignal(),
+ mMaximizeChangedSignal(),
mFocusChangedSignal(),
mOutputTransformedSignal(),
mDeleteRequestSignal(),
return mIconifyChangedSignal;
}
+WindowBase::MaximizeSignalType& WindowBase::MaximizeChangedSignal()
+{
+ return mMaximizeChangedSignal;
+}
+
WindowBase::FocusSignalType& WindowBase::FocusChangedSignal()
{
return mFocusChangedSignal;
// Window
typedef Signal<void(bool)> IconifySignalType;
+ typedef Signal<void(bool)> MaximizeSignalType;
typedef Signal<void(bool)> FocusSignalType;
typedef Signal<void()> OutputSignalType;
typedef Signal<void()> DeleteSignalType;
IconifySignalType& IconifyChangedSignal();
/**
+ * @brief This signal is emitted when the window becomes maximized or unmaximized.
+ */
+ MaximizeSignalType& MaximizeChangedSignal();
+
+ /**
* @brief This signal is emitted when the window focus is changed.
*/
FocusSignalType& FocusChangedSignal();
protected:
IconifySignalType mIconifyChangedSignal;
+ MaximizeSignalType mMaximizeChangedSignal;
FocusSignalType mFocusChangedSignal;
OutputSignalType mOutputTransformedSignal;
DeleteSignalType mDeleteRequestSignal;
#if defined(DEBUG_ENABLED)
Debug::Filter* gWindowLogFilter = Debug::Filter::New(Debug::NoLogging, false, "LOG_WINDOW");
#endif
-
} // unnamed namespace
Window* Window::New(const PositionSize& positionSize, const std::string& name, const std::string& className, Dali::WindowType type, bool isTransparent)
mIsTransparent(false),
mIsFocusAcceptable(true),
mIconified(false),
+ mMaximized(false),
mOpaqueState(false),
mWindowRotationAcknowledgement(false),
mFocused(false),
// Connect signals
mWindowBase->IconifyChangedSignal().Connect(this, &Window::OnIconifyChanged);
+ mWindowBase->MaximizeChangedSignal().Connect(this, &Window::OnMaximizeChanged);
mWindowBase->FocusChangedSignal().Connect(this, &Window::OnFocusChanged);
mWindowBase->DeleteRequestSignal().Connect(this, &Window::OnDeleteRequest);
mWindowBase->TransitionEffectEventSignal().Connect(this, &Window::OnTransitionEffectEvent);
void Window::OnIconifyChanged(bool iconified)
{
+ const bool isActuallyChanged = (iconified != mIconified);
+ auto bridge = Dali::Accessibility::Bridge::GetCurrentBridge();
+ Dali::Window handle(this);
+
if(iconified)
{
mIconified = true;
if(mVisible)
{
- Dali::Window handle(this);
mVisibilityChangedSignal.Emit(handle, false);
- Dali::Accessibility::Bridge::GetCurrentBridge()->WindowHidden(handle);
+ bridge->WindowHidden(handle);
WindowVisibilityObserver* observer(mAdaptor);
observer->OnWindowHidden();
}
+ if(isActuallyChanged)
+ {
+ bridge->WindowMinimized(handle);
+ }
+
DALI_LOG_RELEASE_INFO("Window (%p), WinId (%d), Iconified: visible = %d\n", this, mNativeWindowId, mVisible);
}
else
if(mVisible)
{
- Dali::Window handle(this);
mVisibilityChangedSignal.Emit(handle, true);
- Dali::Accessibility::Bridge::GetCurrentBridge()->WindowShown(handle);
+ bridge->WindowShown(handle);
WindowVisibilityObserver* observer(mAdaptor);
observer->OnWindowShown();
}
+ if(isActuallyChanged)
+ {
+ bridge->WindowRestored(handle, Dali::Accessibility::WindowRestoreType::RESTORE_FROM_ICONIFY);
+ }
+
DALI_LOG_RELEASE_INFO("Window (%p), WinId (%d), Deiconified: visible = %d\n", this, mNativeWindowId, mVisible);
}
mSurface->SetFullSwapNextFrame();
}
-void Window::OnFocusChanged(bool focusIn)
+void Window::OnMaximizeChanged(bool maximized)
{
- Dali::Window handle(this);
- mFocusChangeSignal.Emit(handle, focusIn);
+ const bool isActuallyChanged = (maximized != mMaximized);
- mSurface->SetFullSwapNextFrame();
-
- if(auto bridge = Dali::Accessibility::Bridge::GetCurrentBridge())
+ if(isActuallyChanged)
{
- if(focusIn)
+ auto bridge = Dali::Accessibility::Bridge::GetCurrentBridge();
+ Dali::Window handle(this);
+
+ if(maximized)
{
- bridge->WindowFocused(handle);
+ mMaximized = true;
+ bridge->WindowMaximized(handle);
}
else
{
- bridge->WindowUnfocused(handle);
+ mMaximized = false;
+ bridge->WindowRestored(handle, Dali::Accessibility::WindowRestoreType::RESTORE_FROM_MAXIMIZE);
}
}
+}
+
+void Window::OnFocusChanged(bool focusIn)
+{
+ Dali::Window handle(this);
+ mFocusChangeSignal.Emit(handle, focusIn);
+
+ mSurface->SetFullSwapNextFrame();
+ auto bridge = Dali::Accessibility::Bridge::GetCurrentBridge();
+
+ if(focusIn)
+ {
+ bridge->WindowFocused(handle);
+ }
+ else
+ {
+ bridge->WindowUnfocused(handle);
+ }
+
mFocused = focusIn;
}
void OnIconifyChanged(bool iconified);
/**
+ * Called when the window becomes maximized or unmaximized.
+ */
+ void OnMaximizeChanged(bool maximized);
+
+ /**
* Called when the window focus is changed.
*/
void OnFocusChanged(bool focusIn);
bool mIsTransparent : 1;
bool mIsFocusAcceptable : 1;
bool mIconified : 1;
+ bool mMaximized : 1;
bool mOpaqueState : 1;
bool mWindowRotationAcknowledgement : 1;
bool mFocused : 1;
// Note: To comply with the wayland protocol, Dali should make an ack_configure
// by calling ecore_wl2_window_commit
- int tempWidth = static_cast<int>(ev->w);
- int tempHeight = static_cast<int>(ev->h);
+ int tempWidth = ev->w;
+ int tempHeight = ev->h;
// Initialize with previous size for skip resize when new size is 0.
// When window is just moved or window is resized by client application,
mUpdatePositionSizeSignal.Emit(newPositionSize);
}
+ mMaximizeChangedSignal.Emit(static_cast<bool>(ev->states & ECORE_WL2_WINDOW_STATE_MAXIMIZED));
+
ecore_wl2_window_commit(mEcoreWindow, EINA_FALSE);
}
}