@ -124,6 +124,9 @@ struct hmi_controller {
struct wl_client * user_interface ;
struct ui_setting ui_setting ;
int32_t screen_num ;
struct ivi_layout_screen * * pp_screen ;
} ;
struct launcher_info {
@ -461,6 +464,39 @@ switch_mode(struct hmi_controller *hmi_ctrl,
free ( pp_surface ) ;
}
/**
* Internal method to get screens from weston core
* TODO : shall support hotplug of screens
*/
static int32_t
get_screens ( struct hmi_controller * hmi_ctrl )
{
hmi_ctrl - > pp_screen = NULL ;
hmi_ctrl - > screen_num = 0 ;
ivi_layout_interface - > get_screens ( & hmi_ctrl - > screen_num , & hmi_ctrl - > pp_screen ) ;
if ( hmi_ctrl - > pp_screen = = NULL )
return - 1 ;
else
return 0 ;
}
/**
* Internal method to get ivi_layout_screen
*/
static struct ivi_layout_screen *
get_screen ( int32_t screen_idx , struct hmi_controller * hmi_ctrl )
{
struct ivi_layout_screen * iviscrn = NULL ;
if ( screen_idx > hmi_ctrl - > screen_num - 1 )
weston_log ( " Invalid index. Return NULL \n " ) ;
else
iviscrn = hmi_ctrl - > pp_screen [ screen_idx ] ;
return iviscrn ;
}
/**
* Internal method for transition
*/
@ -646,6 +682,7 @@ hmi_controller_destroy(struct wl_listener *listener, void *data)
wl_array_release ( & hmi_ctrl - > ui_widgets ) ;
free ( hmi_ctrl - > hmi_setting ) ;
free ( hmi_ctrl - > pp_screen ) ;
free ( hmi_ctrl ) ;
}
@ -667,9 +704,7 @@ hmi_controller_destroy(struct wl_listener *listener, void *data)
static struct hmi_controller *
hmi_controller_create ( struct weston_compositor * ec )
{
struct ivi_layout_screen * * pp_screen = NULL ;
struct ivi_layout_screen * iviscrn = NULL ;
int32_t screen_length = 0 ;
int32_t screen_width = 0 ;
int32_t screen_height = 0 ;
struct link_layer * tmp_link_layer = NULL ;
@ -681,10 +716,14 @@ hmi_controller_create(struct weston_compositor *ec)
hmi_ctrl - > hmi_setting = hmi_server_setting_create ( ec ) ;
hmi_ctrl - > compositor = ec ;
ivi_layout_interface - > get_screens ( & screen_length , & pp_screen ) ;
iviscrn = pp_screen [ 0 ] ;
/* TODO: shall support hotplug of screens */
if ( get_screens ( hmi_ctrl ) < 0 ) {
weston_log ( " ivi-shell: Failed to get screens \n " ) ;
hmi_ctrl = NULL ;
return hmi_ctrl ;
}
iviscrn = get_screen ( 0 , hmi_ctrl ) ;
ivi_layout_interface - > get_screen_resolution ( iviscrn , & screen_width ,
& screen_height ) ;
@ -744,9 +783,6 @@ hmi_controller_create(struct weston_compositor *ec)
wl_signal_add ( & hmi_ctrl - > compositor - > destroy_signal ,
& hmi_ctrl - > destroy_listener ) ;
free ( pp_screen ) ;
pp_screen = NULL ;
return hmi_ctrl ;
}
@ -998,8 +1034,6 @@ ivi_hmi_controller_add_launchers(struct hmi_controller *hmi_ctrl,
struct ivi_layout_screen * iviscrn = NULL ;
struct link_layer * tmp_link_layer = NULL ;
struct ivi_layout_screen * * pp_screen = NULL ;
int32_t screen_length = 0 ;
if ( 0 = = x_count )
x_count = 1 ;
@ -1099,9 +1133,7 @@ ivi_hmi_controller_add_launchers(struct hmi_controller *hmi_ctrl,
hmi_ctrl - > workspace_layer . id_layer =
hmi_ctrl - > hmi_setting - > workspace_layer_id ;
ivi_layout_interface - > get_screens ( & screen_length , & pp_screen ) ;
iviscrn = pp_screen [ 0 ] ;
free ( pp_screen ) ;
iviscrn = get_screen ( 0 , hmi_ctrl ) ;
create_layer ( iviscrn , & hmi_ctrl - > workspace_layer ) ;
ivi_layout_interface - > layer_set_opacity ( hmi_ctrl - > workspace_layer . ivilayer , 0 ) ;
ivi_layout_interface - > layer_set_visibility ( hmi_ctrl - > workspace_layer . ivilayer ,
@ -1797,6 +1829,8 @@ controller_module_init(struct weston_compositor *ec,
ivi_layout_interface = interface ;
hmi_ctrl = hmi_controller_create ( ec ) ;
if ( hmi_ctrl = = NULL )
return - 1 ;
if ( ! initialize ( hmi_ctrl ) ) {
return - 1 ;