Update window's geometry to ecore_wl2. 43/234843/4
authorWonsik Jung <sidein@samsung.com>
Fri, 29 May 2020 06:29:29 +0000 (15:29 +0900)
committerWonsik Jung <sidein@samsung.com>
Fri, 29 May 2020 07:02:46 +0000 (16:02 +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: Ib7de2532476c175b5b8fa6643171f2a0a4ba8099

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 89fae58..dbd8aa6 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 c7a7240..f429435 100644 (file)
@@ -496,6 +496,9 @@ private:
   uint32_t                             mBrightnessChangeState;
   bool                                 mBrightnessChangeDone;
 
+  bool                                 mVisible:1;
+  Dali::PositionSize                   mWindowPositionSize;
+
   bool                                 mOwnSurface;
 
   volatile uint32_t                    mMoveResizeSerial;