@ -589,19 +589,28 @@ static const struct desktop_shell_interface desktop_shell_implementation = {
desktop_shell_unlock
} ;
static enum shell_surface_type
get_shell_surface_type ( struct wlsc_surface * surface )
{
struct shell_surface * shsurf ;
shsurf = get_shell_surface ( surface ) ;
if ( ! shsurf )
return SHELL_SURFACE_NORMAL ;
return shsurf - > type ;
}
static void
move_binding ( struct wl_input_device * device , uint32_t time ,
uint32_t key , uint32_t button , uint32_t state , void * data )
{
struct wlsc_surface * surface =
( struct wlsc_surface * ) device - > pointer_focus ;
struct shell_surface * shsurf ;
if ( surface = = NULL )
return ;
shsurf = get_shell_surface ( surface ) ;
switch ( shsurf - > type ) {
switch ( get_shell_surface_type ( surface ) ) {
case SHELL_SURFACE_PANEL :
case SHELL_SURFACE_BACKGROUND :
case SHELL_SURFACE_FULLSCREEN :
@ -625,8 +634,11 @@ resize_binding(struct wl_input_device *device, uint32_t time,
if ( surface = = NULL )
return ;
shsurf = get_shell_surface ( surface ) ;
if ( ! shsurf )
return ;
switch ( shsurf - > type ) {
case SHELL_SURFACE_PANEL :
case SHELL_SURFACE_BACKGROUND :
@ -663,16 +675,13 @@ activate(struct wlsc_shell *base, struct wlsc_surface *es,
{
struct wl_shell * shell = container_of ( base , struct wl_shell , shell ) ;
struct wlsc_compositor * compositor = shell - > compositor ;
struct shell_surface * priv ;
priv = get_shell_surface ( es ) ;
wlsc_surface_activate ( es , device , time ) ;
if ( compositor - > wxs )
wlsc_xserver_surface_activate ( es ) ;
switch ( priv - > type ) {
switch ( get_shell_surface_type ( es ) ) {
case SHELL_SURFACE_BACKGROUND :
/* put background back to bottom */
wl_list_remove ( & es - > link ) ;
@ -701,7 +710,6 @@ lock(struct wlsc_shell *base)
struct wl_list * surface_list = & shell - > compositor - > surface_list ;
struct wlsc_surface * cur ;
struct wlsc_surface * tmp ;
struct shell_surface * priv ;
struct wlsc_input_device * device ;
uint32_t time ;
@ -725,8 +733,7 @@ lock(struct wlsc_shell *base)
if ( cur - > surface . resource . client = = NULL )
continue ;
priv = get_shell_surface ( cur ) ;
if ( priv - > type = = SHELL_SURFACE_BACKGROUND )
if ( get_shell_surface_type ( cur ) = = SHELL_SURFACE_BACKGROUND )
continue ;
cur - > output = NULL ;
@ -780,9 +787,9 @@ map(struct wlsc_shell *base,
struct wl_shell * shell = container_of ( base , struct wl_shell , shell ) ;
struct wlsc_compositor * compositor = shell - > compositor ;
struct wl_list * list ;
struct shell_surface * priv ;
enum shell_surface_type surface_type ;
priv = get_shell_surface ( surface ) ;
surface_type = get_shell_surface_typ e ( surface ) ;
if ( shell - > locked )
list = & shell - > hidden_surface_list ;
@ -790,7 +797,7 @@ map(struct wlsc_shell *base,
list = & compositor - > surface_list ;
/* surface stacking order, see also activate() */
switch ( priv - > type ) {
switch ( surface_ type) {
case SHELL_SURFACE_BACKGROUND :
/* background always visible, at the bottom */
wl_list_insert ( compositor - > surface_list . prev , & surface - > link ) ;
@ -818,14 +825,14 @@ map(struct wlsc_shell *base,
}
}
if ( priv - > type = = SHELL_SURFACE_TOPLEVEL ) {
if ( surface_ type = = SHELL_SURFACE_TOPLEVEL ) {
surface - > x = 10 + random ( ) % 400 ;
surface - > y = 10 + random ( ) % 400 ;
}
surface - > width = width ;
surface - > height = height ;
if ( ! shell - > locked | | priv - > type = = SHELL_SURFACE_LOCK )
if ( ! shell - > locked | | surface_ type = = SHELL_SURFACE_LOCK )
wlsc_surface_configure ( surface ,
surface - > x , surface - > y , width , height ) ;
}
@ -835,10 +842,8 @@ configure(struct wlsc_shell *shell, struct wlsc_surface *surface,
int32_t x , int32_t y , int32_t width , int32_t height )
{
struct wlsc_mode * current ;
struct shell_surface * priv ;
priv = get_shell_surface ( surface ) ;
switch ( priv - > type ) {
switch ( get_shell_surface_type ( surface ) ) {
case SHELL_SURFACE_FULLSCREEN :
current = surface - > fullscreen_output - > current ;
x = ( current - > width - surface - > width ) / 2 ;