@ -2236,19 +2236,61 @@ frame_get_pointer_image_for_location(struct window_frame *frame,
}
}
static void
frame_menu_func ( void * data , struct input * input , int index )
{
struct window * window = data ;
struct display * display ;
switch ( index ) {
case 0 : /* close */
window_close ( window ) ;
break ;
case 1 : /* move to workspace above */
display = window - > display ;
if ( display - > workspace > 0 )
workspace_manager_move_surface (
display - > workspace_manager ,
window - > main_surface - > surface ,
display - > workspace - 1 ) ;
break ;
case 2 : /* move to workspace below */
display = window - > display ;
if ( display - > workspace < display - > workspace_count - 1 )
workspace_manager_move_surface (
display - > workspace_manager ,
window - > main_surface - > surface ,
display - > workspace + 1 ) ;
break ;
case 3 : /* fullscreen */
/* we don't have a way to get out of fullscreen for now */
if ( window - > fullscreen_handler )
window - > fullscreen_handler ( window , window - > user_data ) ;
break ;
}
}
void
window_show_frame_menu ( struct window * window ,
struct input * input , uint32_t time )
{
int32_t x , y ;
int count ;
if ( window - > xdg_surface ) {
input_get_position ( input , & x , & y ) ;
xdg_surface_show_window_menu ( window - > xdg_surface ,
input_get_seat ( input ) ,
window - > display - > serial ,
x - 10 , y - 10 ) ;
}
static const char * entries [ ] = {
" Close " ,
" Move to workspace above " , " Move to workspace below " ,
" Fullscreen "
} ;
if ( window - > fullscreen_handler )
count = ARRAY_LENGTH ( entries ) ;
else
count = ARRAY_LENGTH ( entries ) - 1 ;
input_get_position ( input , & x , & y ) ;
window_show_menu ( window - > display , input , time , window ,
x - 10 , y - 10 , frame_menu_func , entries , count ) ;
}
static int