static void dfb_core_deinit_check( void *ctx ) { if (core_dfb && core_dfb->refs) { D_WARN( "Application exited without deinitialization of DirectFB!" ); dfb_core_destroy( core_dfb, true ); } }
static DirectSignalHandlerResult dfb_core_signal_handler( int num, void *addr, void *ctx ) { CoreDFB *core = ctx; D_ASSERT( core == core_dfb ); dfb_core_destroy( core, true ); return DSHR_OK; }
int main( int argc, char *argv[] ) { DFBResult ret; CoreDFB *core; /* Initialize DirectFB including command line parsing. */ ret = DirectFBInit( &argc, &argv ); if (ret) { DirectFBError( "DirectFBInit() failed", ret ); return -1; } /* Parse the command line. */ if (!parse_command_line( argc, argv )) return -2; /* Create the super interface. */ ret = dfb_core_create( &core ); if (ret) { DirectFBError( "dfb_core_create() failed", ret ); return -3; } if (!unique_wm_running()) { D_ERROR( "UniQuE/Dump: This session doesn't run UniQuE!\n" ); dfb_core_destroy( core, false ); return EXIT_FAILURE; } unique_wm_enum_contexts( context_callback, NULL ); /* Release the super interface. */ dfb_core_destroy( core, false ); return EXIT_SUCCESS; }
/* * Programs have to call this to get the super interface * which is needed to access other functions */ DFBResult DirectFBCreate( IDirectFB **interface ) { DFBResult ret; IDirectFB *dfb; CoreDFB *core_dfb; if (!dfb_config) { /* don't use D_ERROR() here, it uses dfb_config */ direct_log_printf( NULL, "(!) DirectFBCreate: DirectFBInit " "has to be called before DirectFBCreate!\n" ); return DFB_INIT; } if (!interface) return DFB_INVARG; if (idirectfb_singleton) { idirectfb_singleton->AddRef( idirectfb_singleton ); *interface = idirectfb_singleton; return DFB_OK; } direct_initialize(); if ( !(direct_config->quiet & DMT_BANNER) && dfb_config->banner) { direct_log_printf( NULL, "\n" " ~~~~~~~~~~~~~~~~~~~~~~~~~~| DirectFB " DIRECTFB_VERSION " |~~~~~~~~~~~~~~~~~~~~~~~~~~\n" " (c) 2001-2009 The world wide DirectFB Open Source Community\n" " (c) 2000-2004 Convergence (integrated media) GmbH\n" " ----------------------------------------------------------------\n" "\n" ); } if (dfb_config->remote.host) return CreateRemote( dfb_config->remote.host, dfb_config->remote.session, interface ); ret = dfb_core_create( &core_dfb ); if (ret) return ret; DIRECT_ALLOCATE_INTERFACE( dfb, IDirectFB ); ret = IDirectFB_Construct( dfb, core_dfb ); if (ret) { dfb_core_destroy( core_dfb, false ); return ret; } if (dfb_core_is_master( core_dfb )) { /* not fatal */ ret = dfb_wm_post_init( core_dfb ); if (ret) D_DERROR( ret, "DirectFBCreate: Post initialization of WM failed!\n" ); dfb_core_activate( core_dfb ); } *interface = idirectfb_singleton = dfb; return DFB_OK; }