2 * Copyright (c) 2017 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include <window-impl.h>
22 // Ecore is littered with C style cast
23 #pragma GCC diagnostic push
24 #pragma GCC diagnostic ignored "-Wold-style-cast"
26 #include <Ecore_Wayland.h>
27 #include <tizen-extension-client-protocol.h>
29 #include <dali/integration-api/core.h>
30 #include <dali/integration-api/system-overlay.h>
31 #include <dali/public-api/render-tasks/render-task.h>
32 #include <dali/public-api/render-tasks/render-task-list.h>
33 #include <orientation.h>
36 #include <window-render-surface.h>
37 #include <drag-and-drop-detector-impl.h>
38 #include <ecore-indicator-impl.h>
39 #include <window-visibility-observer.h>
40 #include <orientation-impl.h>
45 const float INDICATOR_ANIMATION_DURATION( 0.18f ); // 180 milli seconds
46 const float INDICATOR_SHOW_Y_POSITION( 0.0f );
47 const float INDICATOR_HIDE_Y_POSITION( -52.0f );
49 const uint32_t MAX_TIZEN_CLIENT_VERSION = 7;
60 #if defined(DEBUG_ENABLED)
61 Debug::Filter* gWindowLogFilter = Debug::Filter::New(Debug::NoLogging, false, "LOG_WINDOW");
65 * TODO: Abstract Window class out and move this into a window implementation for Ecore
67 struct Window::EventHandler
71 * @param[in] window A pointer to the window class.
73 EventHandler( Window* window )
80 mTizenDisplayPolicy( NULL ),
81 mNotificationLevel( -1 ),
82 mNotificationChangeState( 0 ),
83 mNotificationLevelChangeDone( true ),
85 mScreenOffModeChangeState( 0 ),
86 mScreenOffModeChangeDone( true ),
88 mBrightnessChangeState( 0 ),
89 mBrightnessChangeDone( true )
91 // store ecore window handle
92 ECore::WindowRenderSurface* wlWindow( dynamic_cast< ECore::WindowRenderSurface * >( mWindow->mSurface ) );
95 mEcoreWindow = wlWindow->GetWlWindow();
97 DALI_ASSERT_ALWAYS( mEcoreWindow != 0 && "There is no ecore Wl window");
99 if( mWindow->mEcoreEventHander )
101 mEcoreEventHandler.PushBack( ecore_event_handler_add( ECORE_WL_EVENT_WINDOW_ICONIFY_STATE_CHANGE, EcoreEventWindowIconifyStateChanged, this ) );
102 mEcoreEventHandler.PushBack( ecore_event_handler_add( ECORE_WL_EVENT_FOCUS_IN, EcoreEventWindowFocusIn, this ) );
103 mEcoreEventHandler.PushBack( ecore_event_handler_add( ECORE_WL_EVENT_FOCUS_OUT, EcoreEventWindowFocusOut, this ) );
104 mEcoreEventHandler.PushBack( ecore_event_handler_add( ECORE_WL_EVENT_OUTPUT_TRANSFORM, EcoreEventOutputTransform, this) );
105 mEcoreEventHandler.PushBack( ecore_event_handler_add( ECORE_WL_EVENT_IGNORE_OUTPUT_TRANSFORM, EcoreEventIgnoreOutputTransform, this) );
108 mDisplay = ecore_wl_display_get();
112 wl_display* displayWrapper = static_cast< wl_display* >( wl_proxy_create_wrapper( mDisplay ) );
115 mEventQueue = wl_display_create_queue( mDisplay );
118 wl_proxy_set_queue( reinterpret_cast< wl_proxy* >( displayWrapper ), mEventQueue );
120 wl_registry* registry = wl_display_get_registry( displayWrapper );
121 wl_registry_add_listener( registry, &mRegistryListener, this );
124 wl_proxy_wrapper_destroy( displayWrapper );
134 for( Dali::Vector< Ecore_Event_Handler* >::Iterator iter = mEcoreEventHandler.Begin(), endIter = mEcoreEventHandler.End(); iter != endIter; ++iter )
136 ecore_event_handler_del( *iter );
138 mEcoreEventHandler.Clear();
142 wl_event_queue_destroy( mEventQueue );
148 /// Called when the window iconify state is changed.
149 static Eina_Bool EcoreEventWindowIconifyStateChanged( void* data, int type, void* event )
151 Ecore_Wl_Event_Window_Iconify_State_Change* iconifyChangedEvent( static_cast< Ecore_Wl_Event_Window_Iconify_State_Change* >( event ) );
152 EventHandler* handler( static_cast< EventHandler* >( data ) );
153 Eina_Bool handled( ECORE_CALLBACK_PASS_ON );
155 if ( handler && handler->mWindow )
157 WindowVisibilityObserver* observer( handler->mWindow->mAdaptor );
158 if ( observer && ( iconifyChangedEvent->win == static_cast< unsigned int> ( ecore_wl_window_id_get( handler->mEcoreWindow ) ) ) )
160 if( iconifyChangedEvent->iconified == EINA_TRUE )
162 handler->mWindow->mIconified = true;
163 if( handler->mWindow->mVisible )
165 observer->OnWindowHidden();
167 DALI_LOG_RELEASE_INFO( "EcoreEventWindowIconifyStateChanged: Iconified, mVisible [%d]\n", handler->mWindow->mVisible );
171 handler->mWindow->mIconified = false;
172 if( handler->mWindow->mVisible )
174 observer->OnWindowShown();
176 DALI_LOG_RELEASE_INFO( "EcoreEventWindowIconifyStateChanged: Deiconified, mVisible [%d]\n", handler->mWindow->mVisible );
178 handled = ECORE_CALLBACK_DONE;
185 /// Called when the window gains focus
186 static Eina_Bool EcoreEventWindowFocusIn( void* data, int type, void* event )
188 Ecore_Wl_Event_Focus_In* focusInEvent( static_cast< Ecore_Wl_Event_Focus_In* >( event ) );
189 EventHandler* handler( static_cast< EventHandler* >( data ) );
191 if ( handler && handler->mWindow && focusInEvent->win == static_cast< unsigned int >( ecore_wl_window_id_get( handler->mEcoreWindow ) ) )
193 DALI_LOG_INFO( gWindowLogFilter, Debug::General, "Window EcoreEventWindowFocusIn\n" );
195 handler->mWindow->mFocusChangedSignal.Emit( true );
198 return ECORE_CALLBACK_PASS_ON;
201 /// Called when the window loses focus
202 static Eina_Bool EcoreEventWindowFocusOut( void* data, int type, void* event )
204 Ecore_Wl_Event_Focus_Out* focusOutEvent( static_cast< Ecore_Wl_Event_Focus_Out* >( event ) );
205 EventHandler* handler( static_cast< EventHandler* >( data ) );
207 if ( handler && handler->mWindow && focusOutEvent->win == static_cast< unsigned int >(ecore_wl_window_id_get( handler->mEcoreWindow ) ) )
209 DALI_LOG_INFO( gWindowLogFilter, Debug::General, "Window EcoreEventWindowFocusOut\n" );
211 handler->mWindow->mFocusChangedSignal.Emit( false );
214 return ECORE_CALLBACK_PASS_ON;
217 /// Called when the output is transformed
218 static Eina_Bool EcoreEventOutputTransform( void* data, int type, void* event )
220 Ecore_Wl_Event_Output_Transform* transformEvent( static_cast< Ecore_Wl_Event_Output_Transform* >( event ) );
221 EventHandler* handler( static_cast< EventHandler* >( data ) );
223 if ( handler && handler->mWindow && transformEvent->output == ecore_wl_window_output_find( handler->mEcoreWindow ) )
225 DALI_LOG_INFO( gWindowLogFilter, Debug::General, "Window (%p) EcoreEventOutputTransform\n", handler->mEcoreWindow );
227 ECore::WindowRenderSurface* wlSurface( dynamic_cast< ECore::WindowRenderSurface * >( handler->mWindow->mSurface ) );
230 wlSurface->OutputTransformed();
232 PositionSize positionSize = wlSurface->GetPositionSize();
233 handler->mWindow->mAdaptor->SurfaceResizePrepare( Adaptor::SurfaceSize( positionSize.width, positionSize.height ) );
234 handler->mWindow->mAdaptor->SurfaceResizeComplete( Adaptor::SurfaceSize( positionSize.width, positionSize.height ) );
238 return ECORE_CALLBACK_PASS_ON;
241 /// Called when the output transform should be ignored
242 static Eina_Bool EcoreEventIgnoreOutputTransform( void* data, int type, void* event )
244 Ecore_Wl_Event_Ignore_Output_Transform* ignoreTransformEvent( static_cast< Ecore_Wl_Event_Ignore_Output_Transform* >( event ) );
245 EventHandler* handler( static_cast< EventHandler* >( data ) );
247 if ( handler && handler->mWindow && ignoreTransformEvent->win == handler->mEcoreWindow )
249 DALI_LOG_INFO( gWindowLogFilter, Debug::General, "Window (%p) EcoreEventIgnoreOutputTransform\n", handler->mEcoreWindow );
251 ECore::WindowRenderSurface* wlSurface( dynamic_cast< ECore::WindowRenderSurface * >( handler->mWindow->mSurface ) );
254 wlSurface->OutputTransformed();
256 PositionSize positionSize = wlSurface->GetPositionSize();
257 handler->mWindow->mAdaptor->SurfaceResizePrepare( Adaptor::SurfaceSize( positionSize.width, positionSize.height ) );
258 handler->mWindow->mAdaptor->SurfaceResizeComplete( Adaptor::SurfaceSize( positionSize.width, positionSize.height ) );
262 return ECORE_CALLBACK_PASS_ON;
265 static void RegistryGlobalCallback( void* data, struct wl_registry *registry, uint32_t name, const char* interface, uint32_t version )
267 Window::EventHandler* eventHandler = static_cast< Window::EventHandler* >( data );
269 if( strcmp( interface, tizen_policy_interface.name ) == 0 )
271 uint32_t clientVersion = std::min( version, MAX_TIZEN_CLIENT_VERSION );
273 eventHandler->mTizenPolicy = static_cast< tizen_policy* >( wl_registry_bind( registry, name, &tizen_policy_interface, clientVersion ) );
274 if( !eventHandler->mTizenPolicy )
276 DALI_LOG_INFO( gWindowLogFilter, Debug::General, "Window::EventHandler::RegistryGlobalCallback: wl_registry_bind(tizen_policy_interface) is failed.\n" );
280 tizen_policy_add_listener( eventHandler->mTizenPolicy, &eventHandler->mTizenPolicyListener, data );
282 DALI_LOG_INFO( gWindowLogFilter, Debug::General, "Window::EventHandler::RegistryGlobalCallback: tizen_policy_add_listener is called.\n" );
284 else if( strcmp( interface, tizen_display_policy_interface.name ) == 0 )
286 eventHandler->mTizenDisplayPolicy = static_cast< tizen_display_policy* >( wl_registry_bind( registry, name, &tizen_display_policy_interface, version ) );
287 if( !eventHandler->mTizenDisplayPolicy )
289 DALI_LOG_INFO( gWindowLogFilter, Debug::General, "Window::EventHandler::RegistryGlobalCallback: wl_registry_bind(tizen_display_policy_interface) is failed.\n" );
293 tizen_display_policy_add_listener( eventHandler->mTizenDisplayPolicy, &eventHandler->mTizenDisplayPolicyListener, data );
295 DALI_LOG_INFO( gWindowLogFilter, Debug::General, "Window::EventHandler::RegistryGlobalCallback: tizen_display_policy_add_listener is called.\n" );
299 static void RegistryGlobalCallbackRemove( void* data, struct wl_registry* registry, uint32_t id )
301 Window::EventHandler* eventHandler = static_cast< Window::EventHandler* >( data );
302 eventHandler->mTizenPolicy = NULL;
303 eventHandler->mTizenDisplayPolicy = NULL;
306 static void TizenPolicyConformant( void* data, struct tizen_policy* tizenPolicy, struct wl_surface* surface, uint32_t isConformant )
310 static void TizenPolicyConformantArea( void* data, struct tizen_policy* tizenPolicy, struct wl_surface* surface, uint32_t conformantPart, uint32_t state, int32_t x, int32_t y, int32_t w, int32_t h )
314 static void TizenPolicyNotificationChangeDone(void* data, struct tizen_policy* tizenPolicy, struct wl_surface* surface, int32_t level, uint32_t state )
316 Window::EventHandler* eventHandler = static_cast< Window::EventHandler* >( data );
318 eventHandler->mNotificationLevel = level;
319 eventHandler->mNotificationChangeState = state;
320 eventHandler->mNotificationLevelChangeDone = true;
322 DALI_LOG_INFO( gWindowLogFilter, Debug::General, "Window::EventHandler::TizenPolicyNotificationChangeDone: level = %d, state = %d\n", level, state );
325 static void TizenPolicyTransientForDone( void* data, struct tizen_policy* tizenPolicy, uint32_t childId )
329 static void TizenPolicyScreenModeChangeDone( void* data, struct tizen_policy* tizenPolicy, struct wl_surface* surface, uint32_t mode, uint32_t state )
331 Window::EventHandler* eventHandler = static_cast< Window::EventHandler* >( data );
333 eventHandler->mScreenOffMode = mode;
334 eventHandler->mScreenOffModeChangeState = state;
335 eventHandler->mScreenOffModeChangeDone = true;
337 DALI_LOG_INFO( gWindowLogFilter, Debug::General, "Window::EventHandler::TizenPolicyScreenModeChangeDone: mode = %d, state = %d\n", mode, state );
340 static void TizenPolicyIconifyStateChanged( void* data, struct tizen_policy* tizenPolicy, struct wl_surface* surface, uint32_t iconified, uint32_t force )
344 static void TizenPolicySupportedAuxiliaryHints( void* data, struct tizen_policy* tizenPolicy, struct wl_surface* surface, struct wl_array* hints, uint32_t numNints )
348 static void TizenPolicyAllowedAuxiliaryHint( void* data, struct tizen_policy* tizenPolicy, struct wl_surface* surface, int id )
352 static void TizenPolicyAuxiliaryMessage( void* data, struct tizen_policy* tizenPolicy, struct wl_surface* surface, const char* key, const char* val, struct wl_array* options )
356 static void TizenPolicyConformantRegion( void* data, struct tizen_policy* tizenPolicy, struct wl_surface* surface, uint32_t conformantPart, uint32_t state, int32_t x, int32_t y, int32_t w, int32_t h, uint32_t serial )
360 static void DisplayPolicyBrightnessChangeDone( void* data, struct tizen_display_policy *displayPolicy, struct wl_surface* surface, int32_t brightness, uint32_t state )
362 Window::EventHandler* eventHandler = static_cast< Window::EventHandler* >( data );
364 eventHandler->mBrightness = brightness;
365 eventHandler->mBrightnessChangeState = state;
366 eventHandler->mBrightnessChangeDone = true;
368 DALI_LOG_INFO( gWindowLogFilter, Debug::General, "Window::EventHandler::DisplayPolicyBrightnessChangeDone: brightness = %d, state = %d\n", brightness, state );
371 const struct wl_registry_listener mRegistryListener =
373 RegistryGlobalCallback,
374 RegistryGlobalCallbackRemove
377 const struct tizen_policy_listener mTizenPolicyListener =
379 TizenPolicyConformant,
380 TizenPolicyConformantArea,
381 TizenPolicyNotificationChangeDone,
382 TizenPolicyTransientForDone,
383 TizenPolicyScreenModeChangeDone,
384 TizenPolicyIconifyStateChanged,
385 TizenPolicySupportedAuxiliaryHints,
386 TizenPolicyAllowedAuxiliaryHint,
387 TizenPolicyAuxiliaryMessage,
388 TizenPolicyConformantRegion
391 const struct tizen_display_policy_listener mTizenDisplayPolicyListener =
393 DisplayPolicyBrightnessChangeDone
398 Dali::Vector< Ecore_Event_Handler* > mEcoreEventHandler;
399 Ecore_Wl_Window* mEcoreWindow;
401 wl_display* mDisplay;
402 wl_event_queue* mEventQueue;
403 tizen_policy* mTizenPolicy;
404 tizen_display_policy* mTizenDisplayPolicy;
406 int mNotificationLevel;
407 uint32_t mNotificationChangeState;
408 bool mNotificationLevelChangeDone;
411 uint32_t mScreenOffModeChangeState;
412 bool mScreenOffModeChangeDone;
415 uint32_t mBrightnessChangeState;
416 bool mBrightnessChangeDone;
419 Window* Window::New( const PositionSize& positionSize, const std::string& name, const std::string& className, bool isTransparent )
421 Window* window = new Window();
422 window->mIsTransparent = isTransparent;
423 window->Initialize( positionSize, name, className );
427 void Window::SetAdaptor(Dali::Adaptor& adaptor)
429 DALI_ASSERT_ALWAYS( !mStarted && "Adaptor already started" );
432 // Only create one overlay per window
433 Internal::Adaptor::Adaptor& adaptorImpl = Internal::Adaptor::Adaptor::GetImplementation(adaptor);
434 Integration::Core& core = adaptorImpl.GetCore();
435 mOverlay = &core.GetSystemOverlay();
437 Dali::RenderTaskList taskList = mOverlay->GetOverlayRenderTasks();
438 taskList.CreateTask();
440 mAdaptor = &adaptorImpl;
441 mAdaptor->AddObserver( *this );
443 // Can only create the detector when we know the Core has been instantiated.
444 mDragAndDropDetector = DragAndDropDetector::New();
445 mAdaptor->SetDragAndDropDetector( &GetImplementation( mDragAndDropDetector ) );
449 mOrientation->SetAdaptor(adaptor);
452 if( mIndicator != NULL )
454 mIndicator->SetAdaptor(mAdaptor);
458 RenderSurface* Window::GetSurface()
463 void Window::ShowIndicator( Dali::Window::IndicatorVisibleMode visibleMode )
465 DALI_LOG_TRACE_METHOD_FMT( gWindowLogFilter, "visible : %d\n", visibleMode );
466 DALI_ASSERT_DEBUG(mOverlay);
468 ECore::WindowRenderSurface* wlSurface( dynamic_cast< ECore::WindowRenderSurface * >( mSurface ) );
469 DALI_ASSERT_DEBUG(wlSurface);
473 Ecore_Wl_Window* wlWindow = wlSurface->GetWlWindow();
475 mIndicatorVisible = visibleMode;
477 if ( mIndicatorVisible == Dali::Window::VISIBLE )
479 // when the indicator is visible, set proper mode for indicator server according to bg mode
480 if ( mIndicatorOpacityMode == Dali::Window::OPAQUE )
482 ecore_wl_window_indicator_opacity_set(wlWindow, ECORE_WL_INDICATOR_OPAQUE);
484 else if ( mIndicatorOpacityMode == Dali::Window::TRANSLUCENT )
486 ecore_wl_window_indicator_opacity_set(wlWindow, ECORE_WL_INDICATOR_TRANSLUCENT);
488 else if ( mIndicatorOpacityMode == Dali::Window::TRANSPARENT )
490 ecore_wl_window_indicator_opacity_set(wlWindow, ECORE_WL_INDICATOR_OPAQUE);
495 // when the indicator is not visible, set TRANSPARENT mode for indicator server
496 ecore_wl_window_indicator_opacity_set(wlWindow, ECORE_WL_INDICATOR_TRANSPARENT); // it means hidden indicator
500 DoShowIndicator( mIndicatorOrientation );
503 void Window::RotateIndicator( Dali::Window::WindowOrientation orientation )
505 DALI_LOG_TRACE_METHOD_FMT( gWindowLogFilter, "Orientation: %d\n", orientation );
507 DoRotateIndicator( orientation );
510 void Window::SetIndicatorBgOpacity( Dali::Window::IndicatorBgOpacity opacityMode )
512 mIndicatorOpacityMode = opacityMode;
514 if( mIndicator != NULL )
516 mIndicator->SetOpacityMode( opacityMode );
520 void Window::SetClass(std::string name, std::string klass)
522 ECore::WindowRenderSurface* wlSurface( dynamic_cast< ECore::WindowRenderSurface * >( mSurface ) );
526 Ecore_Wl_Window* wlWindow = wlSurface->GetWlWindow();
527 ecore_wl_window_title_set( wlWindow, name.c_str() );
528 ecore_wl_window_class_name_set( wlWindow, klass.c_str() );
532 DALI_LOG_INFO( gWindowLogFilter, Debug::General, "Window has no surface\n" );
538 mIndicatorVisible( Dali::Window::VISIBLE ),
539 mIndicatorIsShown( false ),
540 mShowRotatedIndicatorOnClose( false ),
542 mIsTransparent( false ),
543 mWMRotationAppSet( false ),
544 mEcoreEventHander( true ),
545 mIsFocusAcceptable( true ),
548 mOpaqueState( false ),
549 mResizeEnabled( false ),
551 mIndicatorOrientation( Dali::Window::PORTRAIT ),
552 mNextIndicatorOrientation( Dali::Window::PORTRAIT ),
553 mIndicatorOpacityMode( Dali::Window::OPAQUE ),
556 mType( Dali::Window::NORMAL ),
557 mEventHandler( NULL ),
558 mPreferredOrientation( Dali::Window::PORTRAIT ),
559 mSupportedAuxiliaryHints(),
561 mIndicatorVisibilityChangedSignal(),
562 mFocusChangedSignal(),
564 mDeleteRequestSignal()
570 delete mEventHandler;
580 mAdaptor->RemoveObserver( *this );
581 mAdaptor->SetDragAndDropDetector( NULL );
587 mSupportedAuxiliaryHints.clear();
588 mAuxiliaryHints.clear();
591 void Window::Initialize(const PositionSize& positionSize, const std::string& name, const std::string& className)
593 // create an Wayland window by default
595 ECore::WindowRenderSurface* windowSurface = new ECore::WindowRenderSurface( positionSize, surface, name, mIsTransparent );
597 mSurface = windowSurface;
599 // create event handler for Wayland window
600 mEventHandler = new EventHandler( this );
602 // get auxiliary hint
603 Eina_List* hints = ecore_wl_window_aux_hints_supported_get( mEventHandler->mEcoreWindow );
609 for( l = hints, ( hint = static_cast< char* >( eina_list_data_get(l) ) ); l; l = eina_list_next(l), ( hint = static_cast< char* >( eina_list_data_get(l) ) ) )
611 mSupportedAuxiliaryHints.push_back( hint );
613 DALI_LOG_INFO( gWindowLogFilter, Debug::Verbose, "Window::Initialize: %s\n", hint );
617 if( !positionSize.IsEmpty() )
619 AddAuxiliaryHint( "wm.policy.win.user.geometry", "1" );
620 mResizeEnabled = true;
623 SetClass( name, className );
624 windowSurface->Map();
626 mOrientation = Orientation::New(this);
629 void Window::DoShowIndicator( Dali::Window::WindowOrientation lastOrientation )
631 if( mIndicator == NULL )
633 if( mIndicatorVisible != Dali::Window::INVISIBLE )
635 mIndicator = new Indicator( mAdaptor, mIndicatorOrientation, this );
636 mIndicator->SetOpacityMode( mIndicatorOpacityMode );
637 Dali::Actor actor = mIndicator->GetActor();
638 SetIndicatorActorRotation();
639 mOverlay->Add(actor);
641 // else don't create a hidden indicator
643 else // Already have indicator
645 if( mIndicatorVisible == Dali::Window::VISIBLE )
647 // If we are resuming, and rotation has changed,
648 if( mIndicatorIsShown == false && mIndicatorOrientation != mNextIndicatorOrientation )
650 // then close current indicator and open new one
651 mShowRotatedIndicatorOnClose = true;
652 mIndicator->Close(); // May synchronously call IndicatorClosed() callback & 1 level of recursion
653 // Don't show actor - will contain indicator for old orientation.
658 // set indicator visible mode
659 if( mIndicator != NULL )
661 mIndicator->SetVisible( mIndicatorVisible );
664 bool show = (mIndicatorVisible != Dali::Window::INVISIBLE );
665 SetIndicatorProperties( show, lastOrientation );
666 mIndicatorIsShown = show;
669 void Window::DoRotateIndicator( Dali::Window::WindowOrientation orientation )
671 if( mIndicatorIsShown )
673 mShowRotatedIndicatorOnClose = true;
674 mNextIndicatorOrientation = orientation;
675 mIndicator->Close(); // May synchronously call IndicatorClosed() callback
679 // Save orientation for when the indicator is next shown
680 mShowRotatedIndicatorOnClose = false;
681 mNextIndicatorOrientation = orientation;
685 void Window::SetIndicatorProperties( bool isShow, Dali::Window::WindowOrientation lastOrientation )
687 ECore::WindowRenderSurface* wlSurface( dynamic_cast< ECore::WindowRenderSurface * >( mSurface ) );
691 Ecore_Wl_Window* wlWindow = wlSurface->GetWlWindow();
694 ecore_wl_window_indicator_state_set(wlWindow, ECORE_WL_INDICATOR_STATE_ON);
698 ecore_wl_window_indicator_state_set(wlWindow, ECORE_WL_INDICATOR_STATE_OFF);
703 void Window::IndicatorTypeChanged(Indicator::Type type)
705 #if defined(DALI_PROFILE_MOBILE)
706 ECore::WindowRenderSurface* wlSurface( dynamic_cast< ECore::WindowRenderSurface * >( mSurface ) );
710 Ecore_Wl_Window* wlWindow = wlSurface->GetWlWindow();
713 case Indicator::INDICATOR_TYPE_1:
714 ecore_wl_indicator_visible_type_set(wlWindow, ECORE_WL_INDICATOR_VISIBLE_TYPE_SHOWN);
717 case Indicator::INDICATOR_TYPE_2:
718 ecore_wl_indicator_visible_type_set(wlWindow, ECORE_WL_INDICATOR_VISIBLE_TYPE_HIDDEN);
721 case Indicator::INDICATOR_TYPE_UNKNOWN:
729 void Window::IndicatorClosed( IndicatorInterface* indicator )
731 DALI_LOG_TRACE_METHOD( gWindowLogFilter );
733 if( mShowRotatedIndicatorOnClose )
735 Dali::Window::WindowOrientation currentOrientation = mIndicatorOrientation;
736 mIndicator->Open(mNextIndicatorOrientation);
737 mIndicatorOrientation = mNextIndicatorOrientation;
738 SetIndicatorActorRotation();
739 DoShowIndicator(currentOrientation);
743 void Window::IndicatorVisibilityChanged(bool isVisible)
745 mIndicatorVisibilityChangedSignal.Emit(isVisible);
748 void Window::SetIndicatorActorRotation()
750 DALI_LOG_TRACE_METHOD( gWindowLogFilter );
751 DALI_ASSERT_DEBUG( mIndicator != NULL );
753 Dali::Actor actor = mIndicator->GetActor();
754 switch( mIndicatorOrientation )
756 case Dali::Window::PORTRAIT:
757 actor.SetParentOrigin( ParentOrigin::TOP_CENTER );
758 actor.SetAnchorPoint( AnchorPoint::TOP_CENTER );
759 actor.SetOrientation( Degree(0), Vector3::ZAXIS );
761 case Dali::Window::PORTRAIT_INVERSE:
762 actor.SetParentOrigin( ParentOrigin::BOTTOM_CENTER );
763 actor.SetAnchorPoint( AnchorPoint::TOP_CENTER );
764 actor.SetOrientation( Degree(180), Vector3::ZAXIS );
766 case Dali::Window::LANDSCAPE:
767 actor.SetParentOrigin( ParentOrigin::CENTER_LEFT );
768 actor.SetAnchorPoint( AnchorPoint::TOP_CENTER );
769 actor.SetOrientation( Degree(270), Vector3::ZAXIS );
771 case Dali::Window::LANDSCAPE_INVERSE:
772 actor.SetParentOrigin( ParentOrigin::CENTER_RIGHT );
773 actor.SetAnchorPoint( AnchorPoint::TOP_CENTER );
774 actor.SetOrientation( Degree(90), Vector3::ZAXIS );
781 // Use ecore_wl_window_activate to prevent the window shown without rendering
782 ecore_wl_window_activate( mEventHandler->mEcoreWindow );
784 DALI_LOG_RELEASE_INFO( "Window::Raise is called.\n" );
789 ecore_wl_window_lower( mEventHandler->mEcoreWindow );
791 DALI_LOG_RELEASE_INFO( "Window::Lower is called.\n" );
794 void Window::Activate()
796 ecore_wl_window_activate( mEventHandler->mEcoreWindow );
798 DALI_LOG_RELEASE_INFO( "Window::Activate is called.\n" );
801 Dali::DragAndDropDetector Window::GetDragAndDropDetector() const
803 return mDragAndDropDetector;
806 Dali::Any Window::GetNativeHandle() const
810 return mEventHandler->mEcoreWindow;
818 void Window::OnStart()
820 DoShowIndicator( mIndicatorOrientation );
823 void Window::OnPause()
827 void Window::OnResume()
829 // resume indicator status
830 if( mIndicator != NULL )
832 // Restore own indicator opacity
833 // Send opacity mode to indicator service when app resumed
834 mIndicator->SetOpacityMode( mIndicatorOpacityMode );
838 void Window::OnStop()
849 void Window::OnDestroy()
854 void Window::AddAvailableOrientation(Dali::Window::WindowOrientation orientation)
858 if ( orientation <= Dali::Window::LANDSCAPE_INVERSE )
860 for( std::size_t i = 0; i < mAvailableOrientations.size(); i++ )
862 if( mAvailableOrientations[i] == orientation )
871 mAvailableOrientations.push_back(orientation);
872 SetAvailableOrientations( mAvailableOrientations );
877 void Window::RemoveAvailableOrientation(Dali::Window::WindowOrientation orientation)
879 for( std::vector<Dali::Window::WindowOrientation>::iterator iter = mAvailableOrientations.begin();
880 iter != mAvailableOrientations.end(); ++iter )
882 if( *iter == orientation )
884 mAvailableOrientations.erase( iter );
888 SetAvailableOrientations( mAvailableOrientations );
891 void Window::SetAvailableOrientations(const std::vector<Dali::Window::WindowOrientation>& orientations)
893 int rotations[4] = { 0 };
894 for( std::size_t i = 0; i < mAvailableOrientations.size(); ++i )
896 rotations[i] = static_cast< int >( mAvailableOrientations[i] );
898 ecore_wl_window_rotation_available_rotations_set( mEventHandler->mEcoreWindow, rotations, mAvailableOrientations.size() );
901 const std::vector<Dali::Window::WindowOrientation>& Window::GetAvailableOrientations()
903 return mAvailableOrientations;
906 void Window::SetPreferredOrientation(Dali::Window::WindowOrientation orientation)
908 mPreferredOrientation = orientation;
910 ecore_wl_window_rotation_preferred_rotation_set( mEventHandler->mEcoreWindow, orientation );
913 Dali::Window::WindowOrientation Window::GetPreferredOrientation()
915 return mPreferredOrientation;
918 void Window::SetAcceptFocus( bool accept )
920 mIsFocusAcceptable = accept;
922 ecore_wl_window_focus_skip_set( mEventHandler->mEcoreWindow, !accept );
925 bool Window::IsFocusAcceptable() const
927 return mIsFocusAcceptable;
933 ecore_wl_window_show( mEventHandler->mEcoreWindow );
935 DALI_LOG_RELEASE_INFO( "Window::Show is called : mIconified [%d]\n", mIconified );
941 WindowVisibilityObserver* observer( mAdaptor );
942 observer->OnWindowShown();
950 ecore_wl_window_hide( mEventHandler->mEcoreWindow );
952 DALI_LOG_RELEASE_INFO( "Window::Hide is called : mIconified [%d]\n", mIconified );
958 WindowVisibilityObserver* observer( mAdaptor );
959 observer->OnWindowHidden();
964 bool Window::IsVisible() const
969 void Window::RotationDone( int orientation, int width, int height )
971 ECore::WindowRenderSurface* wlSurface( dynamic_cast< ECore::WindowRenderSurface * >( mSurface ) );
974 wlSurface->RequestRotation( orientation, width, height );
977 mAdaptor->SurfaceResizePrepare( Adaptor::SurfaceSize( width, height ) );
980 mResizedSignal.Emit( Dali::Window::WindowSize( width, height ) );
982 mAdaptor->SurfaceResizeComplete( Adaptor::SurfaceSize( width, height ) );
985 void Window::SetIndicatorVisibleMode( Dali::Window::IndicatorVisibleMode mode )
987 mIndicatorVisible = mode;
990 unsigned int Window::GetSupportedAuxiliaryHintCount() const
992 return mSupportedAuxiliaryHints.size();
995 std::string Window::GetSupportedAuxiliaryHint( unsigned int index ) const
997 if( index >= GetSupportedAuxiliaryHintCount() )
999 DALI_LOG_INFO( gWindowLogFilter, Debug::Verbose, "Window::GetSupportedAuxiliaryHint: Invalid index! [%d]\n", index );
1002 return mSupportedAuxiliaryHints[index];
1005 unsigned int Window::AddAuxiliaryHint( const std::string& hint, const std::string& value )
1007 bool supported = false;
1009 // Check if the hint is suppported
1010 for( std::vector< std::string >::iterator iter = mSupportedAuxiliaryHints.begin(); iter != mSupportedAuxiliaryHints.end(); ++iter )
1021 DALI_LOG_INFO( gWindowLogFilter, Debug::Concise, "Window::AddAuxiliaryHint: Not supported auxiliary hint [%s]\n", hint.c_str() );
1025 // Check if the hint is already added
1026 for( unsigned int i = 0; i < mAuxiliaryHints.size(); i++ )
1028 if( mAuxiliaryHints[i].first == hint )
1030 // Just change the value
1031 mAuxiliaryHints[i].second = value;
1033 DALI_LOG_INFO( gWindowLogFilter, Debug::Verbose, "Window::AddAuxiliaryHint: Change! hint = %s, value = %s, id = %d\n", hint.c_str(), value.c_str(), i + 1 );
1035 return i + 1; // id is index + 1
1040 mAuxiliaryHints.push_back( std::pair< std::string, std::string >( hint, value ) );
1042 unsigned int id = mAuxiliaryHints.size();
1044 ecore_wl_window_aux_hint_add( mEventHandler->mEcoreWindow, static_cast< int >( id ), hint.c_str(), value.c_str() );
1046 DALI_LOG_INFO( gWindowLogFilter, Debug::Verbose, "Window::AddAuxiliaryHint: hint = %s, value = %s, id = %d\n", hint.c_str(), value.c_str(), id );
1051 bool Window::RemoveAuxiliaryHint( unsigned int id )
1053 if( id == 0 || id > mAuxiliaryHints.size() )
1055 DALI_LOG_INFO( gWindowLogFilter, Debug::Concise, "Window::RemoveAuxiliaryHint: Invalid id [%d]\n", id );
1059 mAuxiliaryHints[id - 1].second = std::string();
1061 ecore_wl_window_aux_hint_del( mEventHandler->mEcoreWindow, static_cast< int >( id ) );
1063 DALI_LOG_INFO( gWindowLogFilter, Debug::Verbose, "Window::RemoveAuxiliaryHint: id = %d, hint = %s\n", id, mAuxiliaryHints[id - 1].first.c_str() );
1068 bool Window::SetAuxiliaryHintValue( unsigned int id, const std::string& value )
1070 if( id == 0 || id > mAuxiliaryHints.size() )
1072 DALI_LOG_INFO( gWindowLogFilter, Debug::Concise, "Window::SetAuxiliaryHintValue: Invalid id [%d]\n", id );
1076 mAuxiliaryHints[id - 1].second = value;
1078 ecore_wl_window_aux_hint_change( mEventHandler->mEcoreWindow, static_cast< int >( id ), value.c_str() );
1080 DALI_LOG_INFO( gWindowLogFilter, Debug::Verbose, "Window::SetAuxiliaryHintValue: id = %d, hint = %s, value = %s\n", id, mAuxiliaryHints[id - 1].first.c_str(), mAuxiliaryHints[id - 1].second.c_str() );
1085 std::string Window::GetAuxiliaryHintValue( unsigned int id ) const
1087 if( id == 0 || id > mAuxiliaryHints.size() )
1089 DALI_LOG_INFO( gWindowLogFilter, Debug::Concise, "Window::GetAuxiliaryHintValue: Invalid id [%d]\n", id );
1090 return std::string();
1093 DALI_LOG_INFO( gWindowLogFilter, Debug::Verbose, "Window::GetAuxiliaryHintValue: id = %d, hint = %s, value = %s\n", id, mAuxiliaryHints[id - 1].first.c_str(), mAuxiliaryHints[id - 1].second.c_str() );
1095 return mAuxiliaryHints[id - 1].second;
1098 unsigned int Window::GetAuxiliaryHintId( const std::string& hint ) const
1100 for( unsigned int i = 0; i < mAuxiliaryHints.size(); i++ )
1102 if( mAuxiliaryHints[i].first == hint )
1104 DALI_LOG_INFO( gWindowLogFilter, Debug::Verbose, "Window::GetAuxiliaryHintId: hint = %s, id = %d\n", hint.c_str(), i + 1 );
1109 DALI_LOG_INFO( gWindowLogFilter, Debug::Verbose, "Window::GetAuxiliaryHintId: Invalid hint! [%s]\n", hint.c_str() );
1114 void Window::SetInputRegion( const Rect< int >& inputRegion )
1116 ecore_wl_window_input_region_set( mEventHandler->mEcoreWindow, inputRegion.x, inputRegion.y, inputRegion.width, inputRegion.height );
1118 DALI_LOG_INFO( gWindowLogFilter, Debug::Verbose, "Window::SetInputRegion: x = %d, y = %d, w = %d, h = %d\n", inputRegion.x, inputRegion.y, inputRegion.width, inputRegion.height );
1121 void Window::SetType( Dali::Window::Type type )
1123 Ecore_Wl_Window_Type windowType;
1129 case Dali::Window::NORMAL:
1131 windowType = ECORE_WL_WINDOW_TYPE_TOPLEVEL;
1134 case Dali::Window::NOTIFICATION:
1136 windowType = ECORE_WL_WINDOW_TYPE_NOTIFICATION;
1139 case Dali::Window::UTILITY:
1141 windowType = ECORE_WL_WINDOW_TYPE_UTILITY;
1144 case Dali::Window::DIALOG:
1146 windowType = ECORE_WL_WINDOW_TYPE_DIALOG;
1151 windowType = ECORE_WL_WINDOW_TYPE_TOPLEVEL;
1156 ecore_wl_window_type_set( mEventHandler->mEcoreWindow, windowType );
1162 Dali::Window::Type Window::GetType() const
1167 bool Window::SetNotificationLevel( Dali::Window::NotificationLevel::Type level )
1169 if( mType != Dali::Window::NOTIFICATION )
1171 DALI_LOG_INFO( gWindowLogFilter, Debug::Verbose, "Window::SetNotificationLevel: Not supported window type [%d]\n", mType );
1175 while( !mEventHandler->mTizenPolicy )
1177 wl_display_dispatch_queue( mEventHandler->mDisplay, mEventHandler->mEventQueue );
1180 int notificationLevel;
1184 case Dali::Window::NotificationLevel::NONE:
1186 notificationLevel = TIZEN_POLICY_LEVEL_NONE;
1189 case Dali::Window::NotificationLevel::BASE:
1191 notificationLevel = TIZEN_POLICY_LEVEL_DEFAULT;
1194 case Dali::Window::NotificationLevel::MEDIUM:
1196 notificationLevel = TIZEN_POLICY_LEVEL_MEDIUM;
1199 case Dali::Window::NotificationLevel::HIGH:
1201 notificationLevel = TIZEN_POLICY_LEVEL_HIGH;
1204 case Dali::Window::NotificationLevel::TOP:
1206 notificationLevel = TIZEN_POLICY_LEVEL_TOP;
1211 DALI_LOG_INFO( gWindowLogFilter, Debug::Verbose, "Window::SetNotificationLevel: invalid level [%d]\n", level );
1212 notificationLevel = TIZEN_POLICY_LEVEL_DEFAULT;
1217 mEventHandler->mNotificationLevelChangeDone = false;
1218 mEventHandler->mNotificationChangeState = TIZEN_POLICY_ERROR_STATE_NONE;
1220 tizen_policy_set_notification_level( mEventHandler->mTizenPolicy, ecore_wl_window_surface_get( mEventHandler->mEcoreWindow ), notificationLevel );
1224 while( !mEventHandler->mNotificationLevelChangeDone && count < 3 )
1227 wl_display_dispatch_queue( mEventHandler->mDisplay, mEventHandler->mEventQueue );
1231 if( !mEventHandler->mNotificationLevelChangeDone )
1233 DALI_LOG_INFO( gWindowLogFilter, Debug::Verbose, "Window::SetNotificationLevel: Level change is failed [%d, %d]\n", level, mEventHandler->mNotificationChangeState );
1236 else if( mEventHandler->mNotificationChangeState == TIZEN_POLICY_ERROR_STATE_PERMISSION_DENIED )
1238 DALI_LOG_INFO( gWindowLogFilter, Debug::Verbose, "Window::SetNotificationLevel: Permission denied! [%d]\n", level );
1242 DALI_LOG_INFO( gWindowLogFilter, Debug::Verbose, "Window::SetNotificationLevel: Level is changed [%d]\n", mEventHandler->mNotificationLevel );
1247 Dali::Window::NotificationLevel::Type Window::GetNotificationLevel() const
1249 if( mType != Dali::Window::NOTIFICATION )
1251 DALI_LOG_INFO( gWindowLogFilter, Debug::Verbose, "Window::GetNotificationLevel: Not supported window type [%d]\n", mType );
1252 return Dali::Window::NotificationLevel::NONE;
1255 while( !mEventHandler->mTizenPolicy )
1257 wl_display_dispatch_queue( mEventHandler->mDisplay, mEventHandler->mEventQueue );
1262 while( !mEventHandler->mNotificationLevelChangeDone && count < 3 )
1265 wl_display_dispatch_queue( mEventHandler->mDisplay, mEventHandler->mEventQueue );
1269 if( !mEventHandler->mNotificationLevelChangeDone )
1271 DALI_LOG_INFO( gWindowLogFilter, Debug::Verbose, "Window::GetNotificationLevel: Error! [%d]\n", mEventHandler->mNotificationChangeState );
1272 return Dali::Window::NotificationLevel::NONE;
1275 Dali::Window::NotificationLevel::Type level;
1277 switch( mEventHandler->mNotificationLevel )
1279 case TIZEN_POLICY_LEVEL_NONE:
1281 level = Dali::Window::NotificationLevel::NONE;
1284 case TIZEN_POLICY_LEVEL_DEFAULT:
1286 level = Dali::Window::NotificationLevel::BASE;
1289 case TIZEN_POLICY_LEVEL_MEDIUM:
1291 level = Dali::Window::NotificationLevel::MEDIUM;
1294 case TIZEN_POLICY_LEVEL_HIGH:
1296 level = Dali::Window::NotificationLevel::HIGH;
1299 case TIZEN_POLICY_LEVEL_TOP:
1301 level = Dali::Window::NotificationLevel::TOP;
1306 DALI_LOG_INFO( gWindowLogFilter, Debug::Verbose, "Window::GetNotificationLevel: invalid level [%d]\n", mEventHandler->mNotificationLevel );
1307 level = Dali::Window::NotificationLevel::NONE;
1312 DALI_LOG_INFO( gWindowLogFilter, Debug::Verbose, "Window::GetNotificationLevel: level [%d]\n", mEventHandler->mNotificationLevel );
1317 void Window::SetOpaqueState( bool opaque )
1319 while( !mEventHandler->mTizenPolicy )
1321 wl_display_dispatch_queue( mEventHandler->mDisplay, mEventHandler->mEventQueue );
1324 tizen_policy_set_opaque_state( mEventHandler->mTizenPolicy, ecore_wl_window_surface_get( mEventHandler->mEcoreWindow ), ( opaque ? 1 : 0 ) );
1326 mOpaqueState = opaque;
1328 DALI_LOG_INFO( gWindowLogFilter, Debug::Verbose, "Window::SetOpaqueState: opaque = %d\n", opaque );
1331 bool Window::IsOpaqueState() const
1333 return mOpaqueState;
1336 bool Window::SetScreenOffMode(Dali::Window::ScreenOffMode::Type screenOffMode)
1338 while( !mEventHandler->mTizenPolicy )
1340 wl_display_dispatch_queue( mEventHandler->mDisplay, mEventHandler->mEventQueue );
1343 mEventHandler->mScreenOffModeChangeDone = false;
1344 mEventHandler->mScreenOffModeChangeState = TIZEN_POLICY_ERROR_STATE_NONE;
1346 unsigned int mode = 0;
1348 switch( screenOffMode )
1350 case Dali::Window::ScreenOffMode::TIMEOUT:
1355 case Dali::Window::ScreenOffMode::NEVER:
1362 tizen_policy_set_window_screen_mode( mEventHandler->mTizenPolicy, ecore_wl_window_surface_get( mEventHandler->mEcoreWindow ), mode );
1366 while( !mEventHandler->mScreenOffModeChangeDone && count < 3 )
1369 wl_display_dispatch_queue( mEventHandler->mDisplay, mEventHandler->mEventQueue );
1373 if( !mEventHandler->mScreenOffModeChangeDone )
1375 DALI_LOG_INFO( gWindowLogFilter, Debug::Verbose, "Window::SetScreenOffMode: Screen mode change is failed [%d, %d]\n", screenOffMode, mEventHandler->mScreenOffModeChangeState );
1378 else if( mEventHandler->mScreenOffModeChangeState == TIZEN_POLICY_ERROR_STATE_PERMISSION_DENIED )
1380 DALI_LOG_INFO( gWindowLogFilter, Debug::Verbose, "Window::SetScreenOffMode: Permission denied! [%d]\n", screenOffMode );
1384 DALI_LOG_INFO( gWindowLogFilter, Debug::Verbose, "Window::SetScreenOffMode: Screen mode is changed [%d]\n", mEventHandler->mScreenOffMode );
1389 Dali::Window::ScreenOffMode::Type Window::GetScreenOffMode() const
1391 while( !mEventHandler->mTizenPolicy )
1393 wl_display_dispatch_queue( mEventHandler->mDisplay, mEventHandler->mEventQueue );
1398 while( !mEventHandler->mScreenOffModeChangeDone && count < 3 )
1401 wl_display_dispatch_queue( mEventHandler->mDisplay, mEventHandler->mEventQueue );
1405 if( !mEventHandler->mScreenOffModeChangeDone )
1407 DALI_LOG_INFO( gWindowLogFilter, Debug::Verbose, "Window::GetScreenOffMode: Error! [%d]\n", mEventHandler->mScreenOffModeChangeState );
1408 return Dali::Window::ScreenOffMode::TIMEOUT;
1411 Dali::Window::ScreenOffMode::Type screenMode = Dali::Window::ScreenOffMode::TIMEOUT;
1413 switch( mEventHandler->mScreenOffMode )
1417 screenMode = Dali::Window::ScreenOffMode::TIMEOUT;
1422 screenMode = Dali::Window::ScreenOffMode::NEVER;
1427 DALI_LOG_INFO( gWindowLogFilter, Debug::Verbose, "Window::GetScreenOffMode: screen mode [%d]\n", mEventHandler->mScreenOffMode );
1432 bool Window::SetBrightness( int brightness )
1434 if( brightness < 0 || brightness > 100 )
1436 DALI_LOG_INFO( gWindowLogFilter, Debug::Verbose, "Window::SetBrightness: Invalid brightness value [%d]\n", brightness );
1440 while( !mEventHandler->mTizenDisplayPolicy )
1442 wl_display_dispatch_queue( mEventHandler->mDisplay, mEventHandler->mEventQueue );
1445 mEventHandler->mBrightnessChangeDone = false;
1446 mEventHandler->mBrightnessChangeState = TIZEN_POLICY_ERROR_STATE_NONE;
1448 tizen_display_policy_set_window_brightness( mEventHandler->mTizenDisplayPolicy, ecore_wl_window_surface_get( mEventHandler->mEcoreWindow ), brightness );
1452 while( !mEventHandler->mBrightnessChangeDone && count < 3 )
1455 wl_display_dispatch_queue( mEventHandler->mDisplay, mEventHandler->mEventQueue );
1459 if( !mEventHandler->mBrightnessChangeDone )
1461 DALI_LOG_INFO( gWindowLogFilter, Debug::Verbose, "Window::SetBrightness: Brightness change is failed [%d, %d]\n", brightness, mEventHandler->mBrightnessChangeState );
1464 else if( mEventHandler->mBrightnessChangeState == TIZEN_POLICY_ERROR_STATE_PERMISSION_DENIED )
1466 DALI_LOG_INFO( gWindowLogFilter, Debug::Verbose, "Window::SetBrightness: Permission denied! [%d]\n", brightness );
1470 DALI_LOG_INFO( gWindowLogFilter, Debug::Verbose, "Window::SetBrightness: Brightness is changed [%d]\n", mEventHandler->mBrightness );
1475 int Window::GetBrightness() const
1477 while( !mEventHandler->mTizenDisplayPolicy )
1479 wl_display_dispatch_queue( mEventHandler->mDisplay, mEventHandler->mEventQueue );
1484 while( !mEventHandler->mBrightnessChangeDone && count < 3 )
1487 wl_display_dispatch_queue( mEventHandler->mDisplay, mEventHandler->mEventQueue );
1491 if( !mEventHandler->mBrightnessChangeDone )
1493 DALI_LOG_INFO( gWindowLogFilter, Debug::Verbose, "Window::GetBrightness: Error! [%d]\n", mEventHandler->mBrightnessChangeState );
1497 DALI_LOG_INFO( gWindowLogFilter, Debug::Verbose, "Window::GetBrightness: Brightness [%d]\n", mEventHandler->mBrightness );
1499 return mEventHandler->mBrightness;
1502 void Window::SetSize( Dali::Window::WindowSize size )
1504 if( !mResizeEnabled )
1506 AddAuxiliaryHint( "wm.policy.win.user.geometry", "1" );
1507 mResizeEnabled = true;
1510 PositionSize positionSize = mSurface->GetPositionSize();
1512 if( positionSize.width != size.GetWidth() || positionSize.height != size.GetHeight() )
1514 positionSize.width = size.GetWidth();
1515 positionSize.height = size.GetHeight();
1517 mSurface->MoveResize( positionSize );
1519 mAdaptor->SurfaceResizePrepare( Adaptor::SurfaceSize( positionSize.width, positionSize.height ) );
1522 mResizedSignal.Emit( Dali::Window::WindowSize( positionSize.width, positionSize.height ) );
1524 mAdaptor->SurfaceResizeComplete( Adaptor::SurfaceSize( positionSize.width, positionSize.height ) );
1528 Dali::Window::WindowSize Window::GetSize() const
1530 PositionSize positionSize = mSurface->GetPositionSize();
1532 return Dali::Window::WindowSize( positionSize.width, positionSize.height );
1535 void Window::SetPosition( Dali::Window::WindowPosition position )
1537 if( !mResizeEnabled )
1539 AddAuxiliaryHint( "wm.policy.win.user.geometry", "1" );
1540 mResizeEnabled = true;
1543 PositionSize positionSize = mSurface->GetPositionSize();
1545 if( positionSize.x != position.GetX() || positionSize.y != position.GetY() )
1547 positionSize.x = position.GetX();
1548 positionSize.y = position.GetY();
1550 mSurface->MoveResize( positionSize );
1554 Dali::Window::WindowPosition Window::GetPosition() const
1556 PositionSize positionSize = mSurface->GetPositionSize();
1558 return Dali::Window::WindowPosition( positionSize.x, positionSize.y );
1561 void Window::SetTransparency( bool transparent )
1563 ECore::WindowRenderSurface* wlSurface( dynamic_cast< ECore::WindowRenderSurface * >( mSurface ) );
1566 wlSurface->SetTransparency( transparent );
1576 #pragma GCC diagnostic pop