Update window's geometry to ecore_wl2. 39/235039/1
authorWonsik Jung <sidein@samsung.com>
Tue, 2 Jun 2020 02:09:23 +0000 (11:09 +0900)
committerWonsik Jung <sidein@samsung.com>
Tue, 2 Jun 2020 02:10:30 +0000 (11:10 +0900)
When the ecore wl2 window is resized or changed position then the window is hidden,
the window's position and size is not updated by the Tizen Display Server.
Because wayland protocol is destroyed by window's hidden.
To fix that, window's geometry is updated again before window is shown.

Change-Id: Iafa6a7ae5509c54f2e11bd6bd3ca8e0d23a1439b

dali/internal/window-system/tizen-wayland/ecore-wl2/window-base-ecore-wl2.cpp
dali/internal/window-system/tizen-wayland/ecore-wl2/window-base-ecore-wl2.h

index 89fae585f302ac23bf40f4d7274ece86d3470b36..dbd8aa6190c662589b46f63cfe0698701afc4332 100755 (executable)
@@ -688,6 +688,8 @@ WindowBaseEcoreWl2::WindowBaseEcoreWl2( Dali::PositionSize positionSize, Any sur
   mBrightness( 0 ),
   mBrightnessChangeState( 0 ),
   mBrightnessChangeDone( true ),
+  mVisible( true ),
+  mWindowPositionSize( positionSize ),
   mOwnSurface( false ),
   mMoveResizeSerial( 0 ),
   mLastSubmittedMoveResizeSerial( 0 )
@@ -949,6 +951,9 @@ void WindowBaseEcoreWl2::OnRotation( void* data, int type, void* event )
       rotationEvent.height = ev->w;
     }
 
+    mWindowPositionSize.width = rotationEvent.width;
+    mWindowPositionSize.height = rotationEvent.height;
+
     mRotationSignal.Emit( rotationEvent );
   }
 }
@@ -1521,16 +1526,19 @@ bool WindowBaseEcoreWl2::IsEglWindowRotationSupported()
 
 void WindowBaseEcoreWl2::Move( PositionSize positionSize )
 {
+  mWindowPositionSize = positionSize;
   ecore_wl2_window_position_set( mEcoreWindow, positionSize.x, positionSize.y );
 }
 
 void WindowBaseEcoreWl2::Resize( PositionSize positionSize )
 {
+  mWindowPositionSize = positionSize;
   ecore_wl2_window_geometry_set( mEcoreWindow, positionSize.x, positionSize.y, positionSize.width, positionSize.height );
 }
 
 void WindowBaseEcoreWl2::MoveResize( PositionSize positionSize )
 {
+  mWindowPositionSize = positionSize;
   ecore_wl2_window_sync_geometry_set( mEcoreWindow, ++mMoveResizeSerial, positionSize.x, positionSize.y, positionSize.width, positionSize.height );
 }
 
@@ -1580,11 +1588,18 @@ void WindowBaseEcoreWl2::SetAcceptFocus( bool accept )
 
 void WindowBaseEcoreWl2::Show()
 {
+  if( !mVisible )
+  {
+    ecore_wl2_window_geometry_set( mEcoreWindow, mWindowPositionSize.x, mWindowPositionSize.y, mWindowPositionSize.width, mWindowPositionSize.height );
+  }
+  mVisible = true;
+
   ecore_wl2_window_show( mEcoreWindow );
 }
 
 void WindowBaseEcoreWl2::Hide()
 {
+  mVisible = false;
   ecore_wl2_window_hide( mEcoreWindow );
 }
 
index c7a724054c36140c1e10cfe111f7bd76b9eaab4f..f429435f69cc10182f9b0bbfe10f940f03acc33a 100644 (file)
@@ -496,6 +496,9 @@ private:
   uint32_t                             mBrightnessChangeState;
   bool                                 mBrightnessChangeDone;
 
+  bool                                 mVisible:1;
+  Dali::PositionSize                   mWindowPositionSize;
+
   bool                                 mOwnSurface;
 
   volatile uint32_t                    mMoveResizeSerial;