@ -95,7 +95,6 @@ struct desktop_shell {
struct shell_surface * lock_surface ;
struct shell_surface * lock_surface ;
struct wl_listener lock_surface_listener ;
struct wl_listener lock_surface_listener ;
struct wl_list backgrounds ;
struct wl_list panels ;
struct wl_list panels ;
struct {
struct {
@ -133,7 +132,6 @@ enum shell_surface_type {
SHELL_SURFACE_NONE ,
SHELL_SURFACE_NONE ,
SHELL_SURFACE_PANEL ,
SHELL_SURFACE_PANEL ,
SHELL_SURFACE_BACKGROUND ,
SHELL_SURFACE_LOCK ,
SHELL_SURFACE_LOCK ,
SHELL_SURFACE_SCREENSAVER ,
SHELL_SURFACE_SCREENSAVER ,
SHELL_SURFACE_INPUT_PANEL ,
SHELL_SURFACE_INPUT_PANEL ,
@ -1229,7 +1227,6 @@ reset_shell_surface_type(struct shell_surface *surface)
surface - > saved_y ) ;
surface - > saved_y ) ;
break ;
break ;
case SHELL_SURFACE_PANEL :
case SHELL_SURFACE_PANEL :
case SHELL_SURFACE_BACKGROUND :
case SHELL_SURFACE_INPUT_PANEL :
case SHELL_SURFACE_INPUT_PANEL :
wl_list_remove ( & surface - > link ) ;
wl_list_remove ( & surface - > link ) ;
wl_list_init ( & surface - > link ) ;
wl_list_init ( & surface - > link ) ;
@ -1294,22 +1291,6 @@ set_surface_type(struct shell_surface *shsurf)
}
}
break ;
break ;
case SHELL_SURFACE_BACKGROUND :
wl_list_for_each ( priv , & shell - > backgrounds , link ) {
if ( priv - > output = = shsurf - > output ) {
priv - > surface - > output = NULL ;
wl_list_remove ( & priv - > surface - > layer_link ) ;
wl_list_remove ( & priv - > link ) ;
break ;
}
}
wl_list_insert ( & shell - > backgrounds , & shsurf - > link ) ;
weston_surface_set_position ( surface , shsurf - > output - > x ,
shsurf - > output - > y ) ;
break ;
case SHELL_SURFACE_PANEL :
case SHELL_SURFACE_PANEL :
wl_list_for_each ( priv , & shell - > panels , link ) {
wl_list_for_each ( priv , & shell - > panels , link ) {
if ( priv - > output = = shsurf - > output ) {
if ( priv - > output = = shsurf - > output ) {
@ -1943,21 +1924,54 @@ hide_input_panel(struct desktop_shell *shell, struct shell_surface *surface)
weston_compositor_schedule_repaint ( surface - > surface - > compositor ) ;
weston_compositor_schedule_repaint ( surface - > surface - > compositor ) ;
}
}
static void
background_configure ( struct weston_surface * es , int32_t sx , int32_t sy )
{
struct desktop_shell * shell = es - > private ;
struct weston_surface * s ;
wl_list_for_each ( s , & shell - > background_layer . surface_list , layer_link ) {
if ( s - > output = = es - > output ) {
s - > output = NULL ;
wl_list_remove ( & s - > layer_link ) ;
s - > configure = NULL ;
break ;
}
}
weston_surface_configure ( es , es - > output - > x , es - > output - > y ,
es - > buffer - > width , es - > buffer - > height ) ;
if ( wl_list_empty ( & es - > layer_link ) ) {
wl_list_insert ( & shell - > background_layer . surface_list ,
& es - > layer_link ) ;
weston_surface_assign_output ( es ) ;
}
}
static void
static void
desktop_shell_set_background ( struct wl_client * client ,
desktop_shell_set_background ( struct wl_client * client ,
struct wl_resource * resource ,
struct wl_resource * resource ,
struct wl_resource * output_resource ,
struct wl_resource * output_resource ,
struct wl_resource * surface_resource )
struct wl_resource * surface_resource )
{
{
struct shell_surface * shsurf = surface_resource - > data ;
struct desktop_shell * shell = resource - > data ;
struct weston_surface * surface = surface_resource - > data ;
shsurf - > next_type = SHELL_SURFACE_BACKGROUND ;
if ( surface - > configure ) {
shsurf - > output = output_resource - > data ;
wl_resource_post_error ( surface_resource ,
WL_DISPLAY_ERROR_INVALID_OBJECT ,
" surface role already assigned " ) ;
return ;
}
surface - > configure = background_configure ;
surface - > private = shell ;
surface - > output = output_resource - > data ;
desktop_shell_send_configure ( resource , 0 ,
desktop_shell_send_configure ( resource , 0 ,
surface_resource ,
surface_resource ,
shsurf - > output - > current - > width ,
surface - > output - > current - > width ,
shsurf - > output - > current - > height ) ;
surface - > output - > current - > height ) ;
}
}
static void
static void
@ -1972,7 +1986,7 @@ desktop_shell_set_panel(struct wl_client *client,
shsurf - > output = output_resource - > data ;
shsurf - > output = output_resource - > data ;
desktop_shell_send_configure ( resource , 0 ,
desktop_shell_send_configure ( resource , 0 ,
surface_ resource,
& shsurf - > surface - > surface . resource ,
shsurf - > output - > current - > width ,
shsurf - > output - > current - > width ,
shsurf - > output - > current - > height ) ;
shsurf - > output - > current - > height ) ;
}
}
@ -2092,7 +2106,6 @@ move_binding(struct wl_seat *seat, uint32_t time, uint32_t button, void *data)
switch ( shsurf - > type ) {
switch ( shsurf - > type ) {
case SHELL_SURFACE_PANEL :
case SHELL_SURFACE_PANEL :
case SHELL_SURFACE_BACKGROUND :
case SHELL_SURFACE_FULLSCREEN :
case SHELL_SURFACE_FULLSCREEN :
case SHELL_SURFACE_SCREENSAVER :
case SHELL_SURFACE_SCREENSAVER :
case SHELL_SURFACE_INPUT_PANEL :
case SHELL_SURFACE_INPUT_PANEL :
@ -2122,7 +2135,6 @@ resize_binding(struct wl_seat *seat, uint32_t time, uint32_t button, void *data)
switch ( shsurf - > type ) {
switch ( shsurf - > type ) {
case SHELL_SURFACE_PANEL :
case SHELL_SURFACE_PANEL :
case SHELL_SURFACE_BACKGROUND :
case SHELL_SURFACE_FULLSCREEN :
case SHELL_SURFACE_FULLSCREEN :
case SHELL_SURFACE_SCREENSAVER :
case SHELL_SURFACE_SCREENSAVER :
case SHELL_SURFACE_INPUT_PANEL :
case SHELL_SURFACE_INPUT_PANEL :
@ -2170,7 +2182,6 @@ surface_opacity_binding(struct wl_seat *seat, uint32_t time, uint32_t axis,
return ;
return ;
switch ( shsurf - > type ) {
switch ( shsurf - > type ) {
case SHELL_SURFACE_BACKGROUND :
case SHELL_SURFACE_SCREENSAVER :
case SHELL_SURFACE_SCREENSAVER :
return ;
return ;
default :
default :
@ -2367,7 +2378,6 @@ rotate_binding(struct wl_seat *seat, uint32_t time, uint32_t button,
switch ( surface - > type ) {
switch ( surface - > type ) {
case SHELL_SURFACE_PANEL :
case SHELL_SURFACE_PANEL :
case SHELL_SURFACE_BACKGROUND :
case SHELL_SURFACE_FULLSCREEN :
case SHELL_SURFACE_FULLSCREEN :
case SHELL_SURFACE_SCREENSAVER :
case SHELL_SURFACE_SCREENSAVER :
case SHELL_SURFACE_INPUT_PANEL :
case SHELL_SURFACE_INPUT_PANEL :
@ -2439,7 +2449,6 @@ activate(struct desktop_shell *shell, struct weston_surface *es,
weston_surface_activate ( es , seat ) ;
weston_surface_activate ( es , seat ) ;
switch ( get_shell_surface_type ( es ) ) {
switch ( get_shell_surface_type ( es ) ) {
case SHELL_SURFACE_BACKGROUND :
case SHELL_SURFACE_PANEL :
case SHELL_SURFACE_PANEL :
case SHELL_SURFACE_LOCK :
case SHELL_SURFACE_LOCK :
case SHELL_SURFACE_INPUT_PANEL :
case SHELL_SURFACE_INPUT_PANEL :
@ -2498,7 +2507,6 @@ click_to_activate_binding(struct wl_seat *seat, uint32_t time, uint32_t button,
focus = upper ;
focus = upper ;
switch ( get_shell_surface_type ( focus ) ) {
switch ( get_shell_surface_type ( focus ) ) {
case SHELL_SURFACE_BACKGROUND :
case SHELL_SURFACE_SCREENSAVER :
case SHELL_SURFACE_SCREENSAVER :
case SHELL_SURFACE_INPUT_PANEL :
case SHELL_SURFACE_INPUT_PANEL :
return ;
return ;
@ -2685,11 +2693,6 @@ map(struct desktop_shell *shell, struct weston_surface *surface,
/* surface stacking order, see also activate() */
/* surface stacking order, see also activate() */
switch ( surface_type ) {
switch ( surface_type ) {
case SHELL_SURFACE_BACKGROUND :
/* background always visible, at the bottom */
wl_list_insert ( & shell - > background_layer . surface_list ,
& surface - > layer_link ) ;
break ;
case SHELL_SURFACE_PANEL :
case SHELL_SURFACE_PANEL :
/* panel always on top, hidden while locked */
/* panel always on top, hidden while locked */
wl_list_insert ( & shell - > panel_layer . surface_list ,
wl_list_insert ( & shell - > panel_layer . surface_list ,
@ -3418,7 +3421,6 @@ shell_init(struct weston_compositor *ec)
ec - > shell_interface . move = surface_move ;
ec - > shell_interface . move = surface_move ;
ec - > shell_interface . resize = surface_resize ;
ec - > shell_interface . resize = surface_resize ;
wl_list_init ( & shell - > backgrounds ) ;
wl_list_init ( & shell - > panels ) ;
wl_list_init ( & shell - > panels ) ;
wl_list_init ( & shell - > screensaver . surfaces ) ;
wl_list_init ( & shell - > screensaver . surfaces ) ;
wl_list_init ( & shell - > input_panel . surfaces ) ;
wl_list_init ( & shell - > input_panel . surfaces ) ;