@ -131,9 +131,9 @@ struct hmi_controller {
struct weston_compositor * compositor ;
struct weston_compositor * compositor ;
struct wl_listener destroy_listener ;
struct wl_listener destroy_listener ;
struct wl_listener surface_created ;
struct wl_listener surface_removed ;
struct wl_listener surface_removed ;
struct wl_listener surface_configured ;
struct wl_listener surface_configured ;
struct wl_listener desktop_surface_configured ;
struct wl_client * user_interface ;
struct wl_client * user_interface ;
struct ui_setting ui_setting ;
struct ui_setting ui_setting ;
@ -578,28 +578,6 @@ create_layer(struct weston_output *output,
/**
/**
* Internal set notification
* Internal set notification
*/
*/
static void
set_notification_create_surface ( struct wl_listener * listener , void * data )
{
struct hmi_controller * hmi_ctrl =
wl_container_of ( listener , hmi_ctrl ,
surface_created ) ;
struct ivi_layout_surface * ivisurf = data ;
struct hmi_controller_layer * layer_link =
wl_container_of ( hmi_ctrl - > application_layer_list . prev ,
layer_link ,
link ) ;
struct ivi_layout_layer * application_layer = layer_link - > ivilayer ;
int32_t ret = 0 ;
/* skip ui widgets */
if ( is_surf_in_ui_widget ( hmi_ctrl , ivisurf ) )
return ;
ret = hmi_ctrl - > interface - > layer_add_surface ( application_layer , ivisurf ) ;
assert ( ! ret ) ;
}
static void
static void
set_notification_remove_surface ( struct wl_listener * listener , void * data )
set_notification_remove_surface ( struct wl_listener * listener , void * data )
{
{
@ -667,6 +645,42 @@ set_notification_configure_surface(struct wl_listener *listener, void *data)
switch_mode ( hmi_ctrl , hmi_ctrl - > layout_mode ) ;
switch_mode ( hmi_ctrl , hmi_ctrl - > layout_mode ) ;
}
}
static void
set_notification_configure_desktop_surface ( struct wl_listener * listener , void * data )
{
struct hmi_controller * hmi_ctrl =
wl_container_of ( listener , hmi_ctrl ,
desktop_surface_configured ) ;
struct ivi_layout_surface * ivisurf = data ;
struct hmi_controller_layer * layer_link =
wl_container_of ( hmi_ctrl - > application_layer_list . prev ,
layer_link ,
link ) ;
struct ivi_layout_layer * application_layer = layer_link - > ivilayer ;
struct weston_surface * surface ;
int32_t ret = 0 ;
/* skip ui widgets */
if ( is_surf_in_ui_widget ( hmi_ctrl , ivisurf ) )
return ;
ret = hmi_ctrl - > interface - > layer_add_surface ( application_layer , ivisurf ) ;
assert ( ! ret ) ;
/*
* if application changes size of wl_buffer . The source rectangle shall be
* fit to the size .
*/
surface = hmi_ctrl - > interface - > surface_get_weston_surface ( ivisurf ) ;
if ( surface ) {
hmi_ctrl - > interface - > surface_set_source_rectangle ( ivisurf , 0 ,
0 , surface - > width , surface - > height ) ;
}
hmi_ctrl - > interface - > commit_changes ( ) ;
switch_mode ( hmi_ctrl , hmi_ctrl - > layout_mode ) ;
}
/**
/**
* A hmi_controller used 4 ivi_layers to manage ivi_surfaces . The IDs of
* A hmi_controller used 4 ivi_layers to manage ivi_surfaces . The IDs of
* corresponding ivi_layer are defined in weston . ini . Default scene graph
* corresponding ivi_layer are defined in weston . ini . Default scene graph
@ -870,6 +884,9 @@ hmi_controller_create(struct weston_compositor *ec)
hmi_ctrl - > surface_configured . notify = set_notification_configure_surface ;
hmi_ctrl - > surface_configured . notify = set_notification_configure_surface ;
hmi_ctrl - > interface - > add_listener_configure_surface ( & hmi_ctrl - > surface_configured ) ;
hmi_ctrl - > interface - > add_listener_configure_surface ( & hmi_ctrl - > surface_configured ) ;
hmi_ctrl - > desktop_surface_configured . notify = set_notification_configure_desktop_surface ;
hmi_ctrl - > interface - > add_listener_configure_desktop_surface ( & hmi_ctrl - > desktop_surface_configured ) ;
hmi_ctrl - > destroy_listener . notify = hmi_controller_destroy ;
hmi_ctrl - > destroy_listener . notify = hmi_controller_destroy ;
wl_signal_add ( & hmi_ctrl - > compositor - > destroy_signal ,
wl_signal_add ( & hmi_ctrl - > compositor - > destroy_signal ,
& hmi_ctrl - > destroy_listener ) ;
& hmi_ctrl - > destroy_listener ) ;
@ -1290,13 +1307,6 @@ ivi_hmi_controller_UI_ready(struct wl_client *client,
hmi_ctrl - > interface - > commit_changes ( ) ;
hmi_ctrl - > interface - > commit_changes ( ) ;
ivi_hmi_controller_add_launchers ( hmi_ctrl , 256 ) ;
ivi_hmi_controller_add_launchers ( hmi_ctrl , 256 ) ;
/* Add surface_created listener after the initialization of launchers.
* Otherwise , surfaces of the launchers will be added to application
* layer too . */
hmi_ctrl - > surface_created . notify = set_notification_create_surface ;
hmi_ctrl - > interface - > add_listener_create_surface ( & hmi_ctrl - > surface_created ) ;
hmi_ctrl - > is_initialized = 1 ;
hmi_ctrl - > is_initialized = 1 ;
}
}