Add visibility changed signal to Window 82/216182/2
authorHeeyong Song <heeyong.song@samsung.com>
Tue, 22 Oct 2019 05:14:46 +0000 (14:14 +0900)
committerHeeyong Song <heeyong.song@samsung.com>
Thu, 24 Oct 2019 04:12:07 +0000 (04:12 +0000)
Change-Id: If4d885b656f8261fdc0ac5ab91cebf2570dd635b

dali/devel-api/adaptor-framework/window-devel.cpp
dali/devel-api/adaptor-framework/window-devel.h
dali/internal/window-system/common/window-impl.cpp
dali/internal/window-system/common/window-impl.h

index 9d93348..8715b81 100644 (file)
@@ -65,6 +65,11 @@ WheelEventSignalType& WheelEventSignal( Window window )
   return GetImplementation( window ).WheelEventSignal();
 }
 
+VisibilityChangedSignalType& VisibilityChangedSignal( Window window )
+{
+  return GetImplementation( window ).VisibilityChangedSignal();
+}
+
 void SetParent( Window window, Window parent )
 {
   GetImplementation( window ).SetParent( parent );
index ca90c51..47e676c 100644 (file)
@@ -39,6 +39,8 @@ typedef Signal< void (const TouchData&) > TouchSignalType;         ///< Touch si
 
 typedef Signal< void (const WheelEvent&) > WheelEventSignalType;   ///< Touched signal type
 
+typedef Signal< void ( Window, bool ) > VisibilityChangedSignalType; ///< Visibility changed signal type
+
 /**
  * @brief Sets position and size of the window. This API guarantees that both moving and resizing of window will appear on the screen at once.
  *
@@ -114,6 +116,18 @@ DALI_ADAPTOR_API TouchSignalType& TouchSignal( Window window );
 DALI_ADAPTOR_API WheelEventSignalType& WheelEventSignal( Window window );
 
 /**
+ * @brief This signal is emitted when the window is shown or hidden.
+ *
+ * A callback of the following type may be connected:
+ * @code
+ *   void YourCallbackName( Window window, bool visible );
+ * @endcode
+ * @param[in] window The window instance
+ * @return The signal to connect to
+ */
+DALI_ADAPTOR_API VisibilityChangedSignalType& VisibilityChangedSignal( Window window );
+
+/**
  * @brief Sets parent window of the window.
  *
  * After setting that, these windows do together when raise-up, lower and iconified/deiconified.
index 78d820c..4755a44 100644 (file)
@@ -86,7 +86,8 @@ Window::Window()
   mResizedSignal(),
   mDeleteRequestSignal(),
   mFocusChangeSignal(),
-  mResizeSignal()
+  mResizeSignal(),
+  mVisibilityChangedSignal()
 {
 }
 
@@ -291,6 +292,9 @@ void Window::Show()
   {
     WindowVisibilityObserver* observer( mAdaptor );
     observer->OnWindowShown();
+
+    Dali::Window handle( this );
+    mVisibilityChangedSignal.Emit( handle, true );
   }
 
   DALI_LOG_RELEASE_INFO( "Window (%p) Show(): iconified = %d\n", this, mIconified );
@@ -306,6 +310,9 @@ void Window::Hide()
   {
     WindowVisibilityObserver* observer( mAdaptor );
     observer->OnWindowHidden();
+
+    Dali::Window handle( this );
+    mVisibilityChangedSignal.Emit( handle, false );
   }
 
   DALI_LOG_RELEASE_INFO( "Window (%p) Hide(): iconified = %d\n", this, mIconified );
@@ -563,6 +570,9 @@ void Window::OnIconifyChanged( bool iconified )
     {
       WindowVisibilityObserver* observer( mAdaptor );
       observer->OnWindowHidden();
+
+      Dali::Window handle( this );
+      mVisibilityChangedSignal.Emit( handle, false );
     }
 
     DALI_LOG_RELEASE_INFO( "Window (%p) Iconified: visible = %d\n", this, mVisible );
@@ -575,6 +585,9 @@ void Window::OnIconifyChanged( bool iconified )
     {
       WindowVisibilityObserver* observer( mAdaptor );
       observer->OnWindowShown();
+
+      Dali::Window handle( this );
+      mVisibilityChangedSignal.Emit( handle, true );
     }
 
     DALI_LOG_RELEASE_INFO( "Window (%p) Deiconified: visible = %d\n", this, mVisible );
index bebb11b..a11b55d 100644 (file)
@@ -67,6 +67,7 @@ public:
   typedef Dali::Window::ResizedSignalType ResizedSignalType;
   typedef Dali::Window::FocusChangeSignalType FocusChangeSignalType;
   typedef Dali::Window::ResizeSignalType ResizeSignalType;
+  typedef Dali::DevelWindow::VisibilityChangedSignalType VisibilityChangedSignalType;
   typedef Signal< void () > SignalType;
 
   /**
@@ -469,6 +470,7 @@ public: // Signals
    * @copydoc Dali::Window::ResizedSignal()
    */
   ResizedSignalType& ResizedSignal() { return mResizedSignal; }
+
   /**
    * @copydoc Dali::Window::ResizedSignal()
    */
@@ -480,6 +482,11 @@ public: // Signals
   SignalType& DeleteRequestSignal() { return mDeleteRequestSignal; }
 
   /**
+   * @copydoc Dali::DevelWindow::VisibilityChangedSignal()
+   */
+  VisibilityChangedSignalType& VisibilityChangedSignal() { return mVisibilityChangedSignal; }
+
+  /**
    * @copydoc Dali::Window::SignalEventProcessingFinished()
    */
   Dali::DevelWindow::EventProcessingFinishedSignalType& EventProcessingFinishedSignal() { return mScene.EventProcessingFinishedSignal(); }
@@ -515,6 +522,7 @@ private:
   SignalType                            mDeleteRequestSignal;
   FocusChangeSignalType                 mFocusChangeSignal;
   ResizeSignalType                      mResizeSignal;
+  VisibilityChangedSignalType           mVisibilityChangedSignal;
 };
 
 } // namespace Adaptor