@ -277,6 +277,26 @@ frame_touch_destroy(struct frame_touch *touch)
free ( touch ) ;
free ( touch ) ;
}
}
void
frame_destroy ( struct frame * frame )
{
struct frame_button * button , * next ;
struct frame_touch * touch , * next_touch ;
struct frame_pointer * pointer , * next_pointer ;
wl_list_for_each_safe ( button , next , & frame - > buttons , link )
frame_button_destroy ( button ) ;
wl_list_for_each_safe ( touch , next_touch , & frame - > touches , link )
frame_touch_destroy ( touch ) ;
wl_list_for_each_safe ( pointer , next_pointer , & frame - > pointers , link )
frame_pointer_destroy ( pointer ) ;
free ( frame - > title ) ;
free ( frame ) ;
}
struct frame *
struct frame *
frame_create ( struct theme * t , int32_t width , int32_t height , uint32_t buttons ,
frame_create ( struct theme * t , int32_t width , int32_t height , uint32_t buttons ,
const char * title )
const char * title )
@ -295,16 +315,16 @@ frame_create(struct theme *t, int32_t width, int32_t height, uint32_t buttons,
frame - > status = FRAME_STATUS_REPAINT ;
frame - > status = FRAME_STATUS_REPAINT ;
frame - > geometry_dirty = 1 ;
frame - > geometry_dirty = 1 ;
wl_list_init ( & frame - > buttons ) ;
wl_list_init ( & frame - > pointers ) ;
wl_list_init ( & frame - > touches ) ;
if ( title ) {
if ( title ) {
frame - > title = strdup ( title ) ;
frame - > title = strdup ( title ) ;
if ( ! frame - > title )
if ( ! frame - > title )
goto free_frame ;
goto free_frame ;
}
}
wl_list_init ( & frame - > buttons ) ;
wl_list_init ( & frame - > pointers ) ;
wl_list_init ( & frame - > touches ) ;
if ( title ) {
if ( title ) {
button = frame_button_create ( frame ,
button = frame_button_create ( frame ,
DATADIR " /weston/icon_window.png " ,
DATADIR " /weston/icon_window.png " ,
@ -347,23 +367,10 @@ frame_create(struct theme *t, int32_t width, int32_t height, uint32_t buttons,
return frame ;
return frame ;
free_frame :
free_frame :
free ( frame - > title ) ;
frame_destroy ( frame ) ;
free ( frame ) ;
return NULL ;
return NULL ;
}
}
void
frame_destroy ( struct frame * frame )
{
struct frame_button * button , * next ;
wl_list_for_each_safe ( button , next , & frame - > buttons , link )
frame_button_destroy ( button ) ;
free ( frame - > title ) ;
free ( frame ) ;
}
int
int
frame_set_title ( struct frame * frame , const char * title )
frame_set_title ( struct frame * frame , const char * title )
{
{