[Tizen] Save and send the position of the focused actor
[platform/core/uifw/dali-adaptor.git] / dali / internal / window-system / tizen-wayland / ecore-wl2 / window-base-ecore-wl2.cpp
index b596096..710f51f 100755 (executable)
@@ -595,6 +595,16 @@ static void EcoreElDBusAccessibilityNotification( void* context, const Eldbus_Me
     windowBase->OnEcoreElDBusAccessibilityNotification( context, message );
   }
 }
+
+// Callback for Ecore ElDBus accessibility quickpanel changed event.
+static void EcoreElDBusAccessibilityQuickpanelChanged( void* context, const Eldbus_Message* message )
+{
+  WindowBaseEcoreWl2* windowBase = static_cast< WindowBaseEcoreWl2* >( context );
+  if( windowBase )
+  {
+    windowBase->OnEcoreElDBusAccessibilityQuickpanelChanged( context, message );
+  }
+}
 #endif // DALI_ELDBUS_AVAILABLE
 
 static void RegistryGlobalCallback( void* data, struct wl_registry *registry, uint32_t name, const char* interface, uint32_t version )
@@ -1307,15 +1317,40 @@ void WindowBaseEcoreWl2::OnFontSizeChanged()
 void WindowBaseEcoreWl2::OnEcoreElDBusAccessibilityNotification( void* context, const Eldbus_Message* message )
 {
 #ifdef DALI_ELDBUS_AVAILABLE
-  AccessibilityInfo info;
 
   // The string defines the arg-list's respective types.
-  if( !eldbus_message_arguments_get( message, "iiiiiiu", &info.gestureValue, &info.startX, &info.startY, &info.endX, &info.endY, &info.state, &info.eventTime ) )
+  if( !eldbus_message_arguments_get( message, "iiiiiiu", &mAccessibilityInfo.gestureValue, &mAccessibilityInfo.startX, &mAccessibilityInfo.startY, &mAccessibilityInfo.endX, &mAccessibilityInfo.endY, &mAccessibilityInfo.state, &mAccessibilityInfo.eventTime ) )
   {
     DALI_LOG_ERROR( "OnEcoreElDBusAccessibilityNotification: Error getting arguments\n" );
   }
 
-  mAccessibilitySignal.Emit( info );
+  mAccessibilitySignal.Emit( mAccessibilityInfo );
+#endif
+}
+
+void WindowBaseEcoreWl2::OnEcoreElDBusAccessibilityQuickpanelChanged( void* context, const Eldbus_Message* message )
+{
+#ifdef DALI_ELDBUS_AVAILABLE
+
+  unsigned int type = 0; // For example, type 1 is QuickPanel, type 3 is AllApps
+  unsigned int state = 0; // 0 is hidden, 1 is shown
+
+  // The string defines the arg-list's respective types.
+  if( !eldbus_message_arguments_get( message, "uu", &type, &state ) )
+  {
+    DALI_LOG_ERROR( "OnEcoreElDBusAccessibilityQuickpanelChanged: Error getting arguments\n" );
+  }
+
+  if( state ) // Shown
+  {
+    mAccessibilityInfo.quickpanelInfo |= 1 << type;
+  }
+  else // Hidden
+  {
+    mAccessibilityInfo.quickpanelInfo &= ~( 1 << type );
+  }
+
+  mQuickPanelSignal.Emit( mAccessibilityInfo.quickpanelInfo );
 #endif
 }
 
@@ -1660,9 +1695,19 @@ void WindowBaseEcoreWl2::SetAcceptFocus( bool accept )
 
 void WindowBaseEcoreWl2::Show()
 {
-  if( !mVisible )
+  if(!mVisible)
   {
-    ecore_wl2_window_geometry_set( mEcoreWindow, mWindowPositionSize.x, mWindowPositionSize.y, mWindowPositionSize.width, mWindowPositionSize.height );
+    // Ecore-wl2 has the original window size
+    // and he always sends the window rotation event with the swapped size.
+    // So, to restore, dali should set the reswapped size(original window size) to ecore-wl2 for restoring.
+    if(mWindowRotationAngle == 0 || mWindowRotationAngle == 180)
+    {
+      ecore_wl2_window_geometry_set(mEcoreWindow, mWindowPositionSize.x, mWindowPositionSize.y, mWindowPositionSize.width, mWindowPositionSize.height);
+    }
+    else
+    {
+      ecore_wl2_window_geometry_set(mEcoreWindow, mWindowPositionSize.x, mWindowPositionSize.y, mWindowPositionSize.height, mWindowPositionSize.width);
+    }
   }
   mVisible = true;
 
@@ -2418,10 +2463,18 @@ void WindowBaseEcoreWl2::InitializeEcoreElDBus()
     return;
   }
 
+  // Save dbus proxy on init.
+  mAccessibilityInfo.proxy = manager;
+
   if( !eldbus_proxy_signal_handler_add( manager, "GestureDetected", EcoreElDBusAccessibilityNotification, this ) )
   {
     DALI_LOG_ERROR( "No signal handler returned\n" );
   }
+
+  if( !eldbus_proxy_signal_handler_add( manager, "QuickpanelChanged", EcoreElDBusAccessibilityQuickpanelChanged, this ) )
+  {
+    DALI_LOG_ERROR( "No signal handler returned for QuickpanelChanged signal\n" );
+  }
 #endif
 }