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"
28 #include <dali/integration-api/core.h>
29 #include <dali/integration-api/system-overlay.h>
30 #include <dali/public-api/render-tasks/render-task.h>
31 #include <dali/public-api/render-tasks/render-task-list.h>
34 #include <window-render-surface.h>
35 #include <drag-and-drop-detector-impl.h>
36 #include <ecore-indicator-impl.h>
37 #include <window-visibility-observer.h>
38 #include <orientation.h>
39 #include <orientation-impl.h>
43 const float INDICATOR_ANIMATION_DURATION( 0.18f ); // 180 milli seconds
44 const float INDICATOR_SHOW_Y_POSITION( 0.0f );
45 const float INDICATOR_HIDE_Y_POSITION( -52.0f );
54 #if defined(DEBUG_ENABLED)
55 Debug::Filter* gWindowLogFilter = Debug::Filter::New(Debug::Concise, false, "LOG_WINDOW");
59 * TODO: Abstract Window class out and move this into a window implementation for Ecore
61 struct Window::EventHandler
65 * @param[in] window A pointer to the window class.
67 EventHandler( Window* window )
69 mWindowPropertyHandler( NULL ),
70 mClientMessagehandler( NULL ),
71 mWindowDeleteRequestHandler( NULL ),
74 // store ecore window handle
75 ECore::WindowRenderSurface* x11Window( dynamic_cast< ECore::WindowRenderSurface * >( mWindow->mSurface ) );
78 mEcoreWindow = x11Window->GetXWindow();
80 DALI_ASSERT_ALWAYS( mEcoreWindow != 0 && "There is no ecore x window");
82 #ifndef DALI_PROFILE_UBUNTU
83 // set property on window to get deiconify approve client message
85 ecore_x_window_prop_card32_set(mEcoreWindow,
86 ECORE_X_ATOM_E_DEICONIFY_APPROVE,
88 #endif // DALI_PROFILE_UBUNTU
90 if( mWindow->mEcoreEventHander )
92 ecore_x_input_multi_select( mEcoreWindow );
94 // This ensures that we catch the window close (or delete) request
95 ecore_x_icccm_protocol_set( mEcoreWindow, ECORE_X_WM_PROTOCOL_DELETE_REQUEST, EINA_TRUE );
97 mWindowPropertyHandler= ecore_event_handler_add( ECORE_X_EVENT_WINDOW_PROPERTY, EcoreEventWindowPropertyChanged, this );
98 mClientMessagehandler = ecore_event_handler_add( ECORE_X_EVENT_CLIENT_MESSAGE, EcoreEventClientMessage, this );
99 mWindowDeleteRequestHandler = ecore_event_handler_add( ECORE_X_EVENT_WINDOW_DELETE_REQUEST, EcoreEventWindowDeleteRequest, this );
108 if ( mWindowPropertyHandler )
110 ecore_event_handler_del( mWindowPropertyHandler );
112 if ( mClientMessagehandler )
114 ecore_event_handler_del( mClientMessagehandler );
116 if ( mWindowDeleteRequestHandler )
118 ecore_event_handler_del( mWindowDeleteRequestHandler );
124 /// Called when the window properties are changed.
125 static Eina_Bool EcoreEventWindowPropertyChanged( void* data, int type, void* event )
127 Ecore_X_Event_Window_Property* propertyChangedEvent( (Ecore_X_Event_Window_Property*)event );
128 EventHandler* handler( (EventHandler*)data );
129 Eina_Bool handled( ECORE_CALLBACK_PASS_ON );
131 if ( handler && handler->mWindow )
133 WindowVisibilityObserver* observer( handler->mWindow->mAdaptor );
134 if ( observer && ( propertyChangedEvent->win == handler->mEcoreWindow ) )
136 Ecore_X_Window_State_Hint state( ecore_x_icccm_state_get( propertyChangedEvent->win ) );
140 case ECORE_X_WINDOW_STATE_HINT_WITHDRAWN:
142 // Window was hidden.
143 observer->OnWindowHidden();
144 DALI_LOG_INFO( gWindowLogFilter, Debug::General, "Window (%d) Withdrawn\n", handler->mEcoreWindow );
145 handled = ECORE_CALLBACK_DONE;
149 case ECORE_X_WINDOW_STATE_HINT_ICONIC:
151 // Window was iconified (minimised).
152 observer->OnWindowHidden();
153 DALI_LOG_INFO( gWindowLogFilter, Debug::General, "Window (%d) Iconfied\n", handler->mEcoreWindow );
154 handled = ECORE_CALLBACK_DONE;
158 case ECORE_X_WINDOW_STATE_HINT_NORMAL:
161 observer->OnWindowShown();
162 DALI_LOG_INFO( gWindowLogFilter, Debug::General, "Window (%d) Shown\n", handler->mEcoreWindow );
163 handled = ECORE_CALLBACK_DONE;
177 /// Called when the window properties are changed.
178 static Eina_Bool EcoreEventClientMessage( void* data, int type, void* event )
180 Eina_Bool handled( ECORE_CALLBACK_PASS_ON );
181 #ifndef DALI_PROFILE_UBUNTU
182 Ecore_X_Event_Client_Message* clientMessageEvent( (Ecore_X_Event_Client_Message*)event );
183 EventHandler* handler( (EventHandler*)data );
185 if (clientMessageEvent->message_type == ECORE_X_ATOM_E_DEICONIFY_APPROVE)
187 ECore::WindowRenderSurface* x11Window( dynamic_cast< ECore::WindowRenderSurface * >( handler->mWindow->mSurface ) );
188 WindowVisibilityObserver* observer( handler->mWindow->mAdaptor );
190 if ( observer && ( (unsigned int)clientMessageEvent->data.l[0] == handler->mEcoreWindow ) )
192 if (clientMessageEvent->data.l[1] == 0) //wm sends request message using value 0
194 observer->OnWindowShown();
196 // request to approve the deiconify. render-surface should send proper event after real rendering
199 x11Window->RequestToApproveDeiconify();
202 handled = ECORE_CALLBACK_DONE;
206 #endif // DALI_PROFILE_UBUNTU
211 /// Called when the window receives a delete request
212 static Eina_Bool EcoreEventWindowDeleteRequest( void* data, int type, void* event )
214 EventHandler* handler( (EventHandler*)data );
215 handler->mWindow->mDeleteRequestSignal.Emit();
216 return ECORE_CALLBACK_DONE;
221 Ecore_Event_Handler* mWindowPropertyHandler;
222 Ecore_Event_Handler* mClientMessagehandler;
223 Ecore_Event_Handler* mWindowDeleteRequestHandler;
224 Ecore_X_Window mEcoreWindow;
228 Window* Window::New(const PositionSize& posSize, const std::string& name, const std::string& className, bool isTransparent)
230 Window* window = new Window();
231 window->mIsTransparent = isTransparent;
232 window->Initialize(posSize, name, className);
236 void Window::SetAdaptor(Dali::Adaptor& adaptor)
238 DALI_ASSERT_ALWAYS( !mStarted && "Adaptor already started" );
241 // Only create one overlay per window
242 Internal::Adaptor::Adaptor& adaptorImpl = Internal::Adaptor::Adaptor::GetImplementation(adaptor);
243 Integration::Core& core = adaptorImpl.GetCore();
244 mOverlay = &core.GetSystemOverlay();
246 Dali::RenderTaskList taskList = mOverlay->GetOverlayRenderTasks();
247 taskList.CreateTask();
249 mAdaptor = &adaptorImpl;
250 mAdaptor->AddObserver( *this );
252 // Can only create the detector when we know the Core has been instantiated.
253 mDragAndDropDetector = DragAndDropDetector::New();
254 mAdaptor->SetDragAndDropDetector( &GetImplementation( mDragAndDropDetector ) );
258 mOrientation->SetAdaptor(adaptor);
261 if( mIndicator != NULL )
263 mIndicator->SetAdaptor(mAdaptor);
267 RenderSurface* Window::GetSurface()
272 void Window::ShowIndicator( Dali::Window::IndicatorVisibleMode visibleMode )
274 DALI_LOG_TRACE_METHOD_FMT( gWindowLogFilter, "visible : %d\n", visibleMode );
275 DALI_ASSERT_DEBUG(mOverlay);
277 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
278 DALI_ASSERT_DEBUG(x11Window);
279 Ecore_X_Window xWinId = x11Window->GetXWindow();
281 mIndicatorVisible = visibleMode;
283 if ( mIndicatorVisible == Dali::Window::VISIBLE )
285 // when the indicator is visible, set proper mode for indicator server according to bg mode
286 if ( mIndicatorOpacityMode == Dali::Window::OPAQUE )
288 ecore_x_e_illume_indicator_opacity_set(xWinId, ECORE_X_ILLUME_INDICATOR_OPAQUE);
290 else if ( mIndicatorOpacityMode == Dali::Window::TRANSLUCENT )
292 ecore_x_e_illume_indicator_opacity_set(xWinId, ECORE_X_ILLUME_INDICATOR_TRANSLUCENT);
294 #if defined(DALI_PROFILE_MOBILE)
295 else if ( mIndicatorOpacityMode == Dali::Window::TRANSPARENT )
297 ecore_x_e_illume_indicator_opacity_set(xWinId, ECORE_X_ILLUME_INDICATOR_OPAQUE);
303 // when the indicator is not visible, set TRANSPARENT mode for indicator server
304 ecore_x_e_illume_indicator_opacity_set(xWinId, ECORE_X_ILLUME_INDICATOR_TRANSPARENT); // it means hidden indicator
307 DoShowIndicator( mIndicatorOrientation );
310 void Window::RotateIndicator(Dali::Window::WindowOrientation orientation)
312 DALI_LOG_TRACE_METHOD_FMT( gWindowLogFilter, "Orientation: %d\n", orientation );
314 DoRotateIndicator( orientation );
317 void Window::SetIndicatorBgOpacity( Dali::Window::IndicatorBgOpacity opacityMode )
319 mIndicatorOpacityMode = opacityMode;
321 if( mIndicator != NULL )
323 mIndicator->SetOpacityMode( opacityMode );
327 void Window::SetClass(std::string name, std::string klass)
329 // Get render surface's x11 window
332 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
335 ecore_x_icccm_name_class_set( x11Window->GetXWindow(), name.c_str(), klass.c_str() );
342 mIndicatorVisible( Dali::Window::INVISIBLE ),
343 mIndicatorIsShown( false ),
344 mShowRotatedIndicatorOnClose( false ),
346 mIsTransparent( false ),
347 mWMRotationAppSet( false ),
348 mEcoreEventHander( true ),
349 mIsFocusAcceptable( true ),
351 mOpaqueState( false ),
353 mIndicatorOrientation( Dali::Window::PORTRAIT ),
354 mNextIndicatorOrientation( Dali::Window::PORTRAIT ),
355 mIndicatorOpacityMode( Dali::Window::OPAQUE ),
358 mType( Dali::DevelWindow::NORMAL ),
359 mEventHandler( NULL ),
360 mPreferredOrientation( Dali::Window::PORTRAIT ),
361 mSupportedAuxiliaryHints(),
363 mIndicatorVisibilityChangedSignal(),
364 mFocusChangedSignal(),
366 mDeleteRequestSignal()
369 // Detect if we're not running in a ecore main loop (e.g. libuv).
370 // Typically ecore_x_init is called by app_efl_main->elm_init
371 // but if we're not using app_efl_main then we have to call it ourselves
372 // This is a hack until we create a pure X Window class
373 if( ecore_x_display_get() == NULL )
375 mEcoreEventHander = false;
376 ecore_x_init (NULL); // internally calls _ecore_x_input_init
383 delete mEventHandler;
387 mOverlay->Remove( mIndicator->GetActor() );
388 Dali::RenderTaskList taskList = mOverlay->GetOverlayRenderTasks();
389 Dali::RenderTask indicatorTask = taskList.GetTask(0);
390 mOverlay->GetOverlayRenderTasks().RemoveTask(indicatorTask);
397 mAdaptor->RemoveObserver( *this );
398 mAdaptor->SetDragAndDropDetector( NULL );
405 void Window::Initialize(const PositionSize& windowPosition, const std::string& name, const std::string& className)
407 // create an X11 window by default
409 ECore::WindowRenderSurface* windowSurface = new ECore::WindowRenderSurface( windowPosition, surface, name, className, mIsTransparent );
410 windowSurface->Map();
412 mSurface = windowSurface;
414 mOrientation = Orientation::New(this);
416 // create event handler for X11 window
417 mEventHandler = new EventHandler( this );
420 void Window::DoShowIndicator( Dali::Window::WindowOrientation lastOrientation )
422 if( mIndicator == NULL )
424 if( mIndicatorVisible != Dali::Window::INVISIBLE )
426 mIndicator = new Indicator( mAdaptor, mIndicatorOrientation, this );
427 mIndicator->SetOpacityMode( mIndicatorOpacityMode );
428 Dali::Actor actor = mIndicator->GetActor();
429 SetIndicatorActorRotation();
430 mOverlay->Add(actor);
432 // else don't create a hidden indicator
434 else // Already have indicator
436 if( mIndicatorVisible == Dali::Window::VISIBLE )
438 // If we are resuming, and rotation has changed,
439 if( mIndicatorIsShown == false && mIndicatorOrientation != mNextIndicatorOrientation )
441 // then close current indicator and open new one
442 mShowRotatedIndicatorOnClose = true;
443 mIndicator->Close(); // May synchronously call IndicatorClosed() callback & 1 level of recursion
444 // Don't show actor - will contain indicator for old orientation.
449 // set indicator visible mode
450 if( mIndicator != NULL )
452 mIndicator->SetVisible( mIndicatorVisible );
455 bool show = (mIndicatorVisible != Dali::Window::INVISIBLE );
456 SetIndicatorProperties( show, lastOrientation );
457 mIndicatorIsShown = show;
460 void Window::DoRotateIndicator( Dali::Window::WindowOrientation orientation )
462 if( mIndicatorIsShown )
464 mShowRotatedIndicatorOnClose = true;
465 mNextIndicatorOrientation = orientation;
466 mIndicator->Close(); // May synchronously call IndicatorClosed() callback
470 // Save orientation for when the indicator is next shown
471 mShowRotatedIndicatorOnClose = false;
472 mNextIndicatorOrientation = orientation;
476 void Window::SetIndicatorProperties( bool isShow, Dali::Window::WindowOrientation lastOrientation )
478 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
481 Ecore_X_Window win = x11Window->GetXWindow();
483 int show_state = static_cast<int>( isShow );
484 ecore_x_window_prop_property_set( win,
485 ECORE_X_ATOM_E_ILLUME_INDICATOR_STATE,
486 ECORE_X_ATOM_CARDINAL, 32, &show_state, 1);
490 ecore_x_e_illume_indicator_state_set(win, ECORE_X_ILLUME_INDICATOR_STATE_ON);
494 ecore_x_e_illume_indicator_state_set(win, ECORE_X_ILLUME_INDICATOR_STATE_OFF);
499 void Window::IndicatorTypeChanged(Indicator::Type type)
501 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
504 #ifndef DALI_PROFILE_UBUNTU
505 Ecore_X_Window win = x11Window->GetXWindow();
508 case Indicator::INDICATOR_TYPE_1:
509 ecore_x_e_illume_indicator_type_set( win, ECORE_X_ILLUME_INDICATOR_TYPE_1 );
512 case Indicator::INDICATOR_TYPE_2:
513 ecore_x_e_illume_indicator_type_set( win, ECORE_X_ILLUME_INDICATOR_TYPE_2 );
516 case Indicator::INDICATOR_TYPE_UNKNOWN:
520 #endif // DALI_PROFILE_UBUNTU
524 void Window::IndicatorClosed( IndicatorInterface* indicator )
526 DALI_LOG_TRACE_METHOD( gWindowLogFilter );
528 if( mShowRotatedIndicatorOnClose )
530 Dali::Window::WindowOrientation currentOrientation = mIndicatorOrientation;
531 mIndicator->Open(mNextIndicatorOrientation);
532 mIndicatorOrientation = mNextIndicatorOrientation;
533 SetIndicatorActorRotation();
534 DoShowIndicator(currentOrientation);
538 void Window::IndicatorVisibilityChanged(bool isVisible)
540 mIndicatorVisibilityChangedSignal.Emit(isVisible);
543 void Window::SetIndicatorActorRotation()
545 DALI_LOG_TRACE_METHOD( gWindowLogFilter );
546 DALI_ASSERT_DEBUG( mIndicator != NULL );
548 Dali::Actor actor = mIndicator->GetActor();
549 switch( mIndicatorOrientation )
551 case Dali::Window::PORTRAIT:
552 actor.SetParentOrigin( ParentOrigin::TOP_CENTER );
553 actor.SetAnchorPoint( AnchorPoint::TOP_CENTER );
554 actor.SetOrientation( Degree(0), Vector3::ZAXIS );
556 case Dali::Window::PORTRAIT_INVERSE:
557 actor.SetParentOrigin( ParentOrigin::BOTTOM_CENTER );
558 actor.SetAnchorPoint( AnchorPoint::TOP_CENTER );
559 actor.SetOrientation( Degree(180), Vector3::ZAXIS );
561 case Dali::Window::LANDSCAPE:
562 actor.SetParentOrigin( ParentOrigin::CENTER_LEFT );
563 actor.SetAnchorPoint( AnchorPoint::TOP_CENTER );
564 actor.SetOrientation( Degree(270), Vector3::ZAXIS );
566 case Dali::Window::LANDSCAPE_INVERSE:
567 actor.SetParentOrigin( ParentOrigin::CENTER_RIGHT );
568 actor.SetAnchorPoint( AnchorPoint::TOP_CENTER );
569 actor.SetOrientation( Degree(90), Vector3::ZAXIS );
576 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
579 Ecore_X_Window win = x11Window->GetXWindow();
580 ecore_x_window_raise(win);
586 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
589 Ecore_X_Window win = x11Window->GetXWindow();
590 ecore_x_window_lower(win);
594 void Window::Activate()
596 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
599 Ecore_X_Window win = x11Window->GetXWindow();
600 ecore_x_netwm_client_active_request(ecore_x_window_root_get(win), win, 1 /* request type, 1:application, 2:pager */, 0);
604 Dali::DragAndDropDetector Window::GetDragAndDropDetector() const
606 return mDragAndDropDetector;
609 Dali::Any Window::GetNativeHandle() const
613 return mEventHandler->mEcoreWindow;
621 void Window::OnStart()
623 ShowIndicator( mIndicatorVisible );
626 void Window::OnPause()
630 void Window::OnResume()
632 // resume indicator status
633 if( mIndicator != NULL )
635 // Restore own indicator opacity
636 // Send opacity mode to indicator service when app resumed
637 mIndicator->SetOpacityMode( mIndicatorOpacityMode );
641 void Window::OnStop()
652 void Window::OnDestroy()
657 void Window::AddAvailableOrientation(Dali::Window::WindowOrientation orientation)
661 for( std::size_t i=0; i<mAvailableOrientations.size(); i++ )
663 if(mAvailableOrientations[i] == orientation)
672 mAvailableOrientations.push_back(orientation);
673 SetAvailableOrientations( mAvailableOrientations );
677 void Window::RemoveAvailableOrientation(Dali::Window::WindowOrientation orientation)
679 for( std::vector<Dali::Window::WindowOrientation>::iterator iter = mAvailableOrientations.begin();
680 iter != mAvailableOrientations.end(); ++iter )
682 if( *iter == orientation )
684 mAvailableOrientations.erase( iter );
688 SetAvailableOrientations( mAvailableOrientations );
691 void Window::SetAvailableOrientations(const std::vector<Dali::Window::WindowOrientation>& orientations)
693 DALI_ASSERT_ALWAYS( mAvailableOrientations.size() <= 4 && "Incorrect number of available orientations" );
695 mAvailableOrientations = orientations;
696 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
699 #ifndef DALI_PROFILE_UBUNTU
700 Ecore_X_Window ecoreWindow = x11Window->GetXWindow();
701 if( ! mWMRotationAppSet )
703 mWMRotationAppSet = true;
704 ecore_x_e_window_rotation_app_set(ecoreWindow, EINA_TRUE);
708 for( std::size_t i=0; i<mAvailableOrientations.size(); i++ )
710 rotations[i] = static_cast<int>(mAvailableOrientations[i]);
712 ecore_x_e_window_rotation_available_rotations_set(ecoreWindow, rotations, mAvailableOrientations.size() );
713 #endif // DALI_PROFILE_UBUNTU
717 const std::vector<Dali::Window::WindowOrientation>& Window::GetAvailableOrientations()
719 return mAvailableOrientations;
722 void Window::SetPreferredOrientation(Dali::Window::WindowOrientation orientation)
724 mPreferredOrientation = orientation;
726 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
729 #ifndef DALI_PROFILE_UBUNTU
730 Ecore_X_Window ecoreWindow = x11Window->GetXWindow();
732 if( ! mWMRotationAppSet )
734 mWMRotationAppSet = true;
735 ecore_x_e_window_rotation_app_set(ecoreWindow, EINA_TRUE);
738 ecore_x_e_window_rotation_preferred_rotation_set(ecoreWindow, orientation);
739 #endif // DALI_PROFILE_UBUNTU
743 Dali::Window::WindowOrientation Window::GetPreferredOrientation()
745 return mPreferredOrientation;
748 void Window::SetAcceptFocus( bool accept )
750 mIsFocusAcceptable = accept;
753 bool Window::IsFocusAcceptable()
755 return mIsFocusAcceptable;
760 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
763 Ecore_X_Window win = x11Window->GetXWindow();
764 ecore_x_window_show( win );
766 // Need an update request
769 mAdaptor->RequestUpdateOnce();
776 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
779 Ecore_X_Window win = x11Window->GetXWindow();
780 ecore_x_window_hide( win );
784 bool Window::IsVisible() const
786 bool visible = false;
788 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
791 Ecore_X_Window win = x11Window->GetXWindow();
792 visible = static_cast< bool >( ecore_x_window_visible_get( win ) );
797 void Window::RotationDone( int orientation, int width, int height )
799 // Tell window manager we're done
800 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
803 #ifndef DALI_PROFILE_UBUNTU
804 Ecore_X_Window ecoreWindow = x11Window->GetXWindow();
805 Ecore_X_Window root = ecore_x_window_root_get(ecoreWindow);
808 * send rotation done message to wm, even if window is already rotated.
809 * that's why wm must be wait for comming rotation done message
810 * after sending rotation request.
812 ecore_x_e_window_rotation_change_done_send(root, ecoreWindow, orientation, width, height);
815 * set rotate window property
817 int angles[2] = { orientation, orientation };
818 ecore_x_window_prop_property_set( ecoreWindow,
819 ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_ANGLE,
820 ECORE_X_ATOM_CARDINAL, 32, &angles, 2 );
821 #endif // DALI_PROFILE_UBUNTU
825 unsigned int Window::GetSupportedAuxiliaryHintCount()
830 std::string Window::GetSupportedAuxiliaryHint( unsigned int index )
832 return std::string();
835 unsigned int Window::AddAuxiliaryHint( const std::string& hint, const std::string& value )
840 bool Window::RemoveAuxiliaryHint( unsigned int id )
845 bool Window::SetAuxiliaryHintValue( unsigned int id, const std::string& value )
850 std::string Window::GetAuxiliaryHintValue( unsigned int id ) const
852 return std::string();
855 unsigned int Window::GetAuxiliaryHintId( const std::string& hint ) const
860 void Window::SetInputRegion( const Rect< int >& inputRegion )
864 void Window::SetType( Dali::DevelWindow::Type type )
869 Dali::DevelWindow::Type Window::GetType() const
874 bool Window::SetNotificationLevel( Dali::DevelWindow::NotificationLevel::Type level )
879 Dali::DevelWindow::NotificationLevel::Type Window::GetNotificationLevel()
881 return Dali::DevelWindow::NotificationLevel::NONE;
884 void Window::SetOpaqueState( bool opaque )
886 mOpaqueState = opaque;
889 bool Window::IsOpaqueState()
894 bool Window::SetScreenMode( Dali::DevelWindow::ScreenMode::Type screenMode )
899 Dali::DevelWindow::ScreenMode::Type Window::GetScreenMode()
901 return Dali::DevelWindow::ScreenMode::DEFAULT;
904 bool Window::SetBrightness( int brightness )
909 int Window::GetBrightness()
920 #pragma GCC diagnostic pop