Mercurial > audlegacy-plugins
diff src/aosd/aosd_osd.c @ 883:e6d51d079a46 trunk
[svn] - aosd: use a single ghosd object for all of the osd showups; this will be a lot gentler to XLib and should definitely help with stability
author | giacomo |
---|---|
date | Tue, 20 Mar 2007 18:55:57 -0700 |
parents | 623eca8326e5 |
children | 16e51fb5908e |
line wrap: on
line diff
--- a/src/aosd/aosd_osd.c Tue Mar 20 14:01:54 2007 -0700 +++ b/src/aosd/aosd_osd.c Tue Mar 20 18:55:57 2007 -0700 @@ -99,9 +99,7 @@ { if ( osd_data->fade_data.surface != NULL ) { - /* by using XCloseDisplay in ghosd_destroy, this free is not needed - anymore (doing it will result in double free and segfault) - cairo_surface_destroy( osd_data->fade_data.surface ); */ + cairo_surface_destroy( osd_data->fade_data.surface ); osd_data->fade_data.surface = NULL; } @@ -134,14 +132,12 @@ static void -aosd_osd_hideanddestroy ( void ) +aosd_osd_hide ( void ) { if ( osd != NULL ) { ghosd_hide( osd ); ghosd_main_iterations( osd ); - ghosd_destroy( osd ); - osd = NULL; } return; } @@ -233,8 +229,6 @@ pango_layout_set_width( osd_data->pango_layout , PANGO_SCALE * max_width ); pango_layout_get_pixel_size( osd_data->pango_layout , &layout_width , &layout_height ); - osd = ghosd_new(); - /* osd position */ switch ( osd_data->cfg_osd->position.placement ) { @@ -370,7 +364,7 @@ case AOSD_STATUS_DESTROY: { - aosd_osd_hideanddestroy(); + aosd_osd_hide(); aosd_osd_data_free(); osd_status = AOSD_STATUS_HIDDEN; /* reset status */ @@ -384,7 +378,7 @@ gint -aosd_display ( gchar * markup_string , aosd_cfg_osd_t * cfg_osd , gboolean copy_cfg ) +aosd_osd_display ( gchar * markup_string , aosd_cfg_osd_t * cfg_osd , gboolean copy_cfg ) { if ( osd_status == AOSD_STATUS_HIDDEN ) { @@ -398,7 +392,7 @@ { g_source_remove( osd_source_id ); /* remove timer */ osd_source_id = 0; - aosd_osd_hideanddestroy(); + aosd_osd_hide(); aosd_osd_data_free(); osd_status = AOSD_STATUS_HIDDEN; /* now display new OSD */ @@ -413,15 +407,40 @@ void -aosd_shutdown ( void ) +aosd_osd_shutdown ( void ) { if ( osd_status != AOSD_STATUS_HIDDEN ) /* osd is being displayed */ { g_source_remove( osd_source_id ); /* remove timer */ osd_source_id = 0; - aosd_osd_hideanddestroy(); + aosd_osd_hide(); aosd_osd_data_free(); osd_status = AOSD_STATUS_HIDDEN; } return; } + + +void +aosd_osd_init ( void ) +{ + if ( osd == NULL ) + { + /* create Ghosd object */ + osd = ghosd_new(); + } + return; +} + + +void +aosd_osd_cleanup ( void ) +{ + if ( osd != NULL ) + { + /* destroy Ghosd object */ + ghosd_destroy( osd ); + osd = NULL; + } + return; +}