DFBResult dfb_x11_destroy_window_handler( DFBX11 *x11, DestroyData *destroy ) { DFBX11Shared *shared = x11->shared; XWindow *xw; D_DEBUG_AT( X11_Layer, "%s()\n", __FUNCTION__ ); XLockDisplay( x11->display ); xw = *(destroy->xw); if (xw) { *(destroy->xw) = NULL; dfb_x11_close_window( x11, xw ); shared->window_count--; } XSync( x11->display, False ); XUnlockDisplay( x11->display ); return DFB_OK; }
static DFBResult system_shutdown( bool emergency ) { DFBX11 *x11 = dfb_system_data(); DFBX11Shared *shared = x11->shared; int i; D_DEBUG_AT( X11_Core, "%s()\n", __FUNCTION__ ); //dfb_x11_eglimpl_unregister(); /* * Master deinit */ if (shared->x11_pool_bridge) dfb_surface_pool_bridge_destroy( shared->x11_pool_bridge ); if (shared->vpsmem_pool) dfb_surface_pool_destroy( shared->vpsmem_pool ); if (shared->glx_pool) dfb_surface_pool_destroy( shared->glx_pool ); if (shared->x11window_pool) dfb_surface_pool_destroy( shared->x11window_pool ); if (shared->x11image_pool) dfb_surface_pool_destroy( shared->x11image_pool ); /* * Shared deinit (master only) */ fusion_call_destroy( &shared->call ); /* close remaining windows */ for( i=0; i<shared->outputs; i++ ) { dfb_x11_close_window( x11, shared->output[i].xw ); } SHFREE( dfb_core_shmpool( x11->core ), shared ); /* * Local deinit (master and slave) */ if (x11->display) XCloseDisplay( x11->display ); D_FREE( x11 ); return DFB_OK; }
static DFBResult system_shutdown( bool emergency ) { DFBX11 *x11 = dfb_system_data(); DFBX11Shared *shared = x11->shared; /* * Master deinit */ if (shared->x11_pool_bridge) dfb_surface_pool_bridge_destroy( shared->x11_pool_bridge ); if (shared->vpsmem_pool) dfb_surface_pool_destroy( shared->vpsmem_pool ); if (shared->glx_pool) dfb_surface_pool_destroy( shared->glx_pool ); if (shared->x11image_pool) dfb_surface_pool_destroy( shared->x11image_pool ); /* * Shared deinit (master only) */ fusion_call_destroy( &shared->call ); fusion_skirmish_prevail( &shared->lock ); if (shared->xw) dfb_x11_close_window( x11, shared->xw ); fusion_skirmish_destroy( &shared->lock ); SHFREE( dfb_core_shmpool( x11->core ), shared ); /* * Local deinit (master and slave) */ if (x11->display) XCloseDisplay( x11->display ); D_FREE( x11 ); return DFB_OK; }
DFBResult dfb_x11_create_window_handler( DFBX11 *x11, SetModeData *setmode ) { XWindow *xw; DFBX11Shared *shared = x11->shared; CoreLayerRegionConfig *config; config = &setmode->config; xw = *(setmode->xw); D_DEBUG_AT( X11_Layer, "%s( %p )\n", __FUNCTION__, config ); D_DEBUG_AT( X11_Layer, " -> %4dx%4d %s\n", config->width, config->height, dfb_pixelformat_name(config->format) ); XLockDisplay( x11->display ); if (xw != NULL) { if (xw->width == config->width && xw->height == config->height) { XUnlockDisplay( x11->display ); return DFB_OK; } *(setmode->xw) = NULL; dfb_x11_close_window( x11, xw ); shared->window_count--; } bool bSucces = dfb_x11_open_window( x11, &xw, 0, 0, config->width, config->height, config->format ); /* Set video mode */ if ( !bSucces ) { D_ERROR( "DirectFB/X11: Couldn't open %dx%d window!\n", config->width, config->height ); XUnlockDisplay( x11->display ); return DFB_FAILURE; } else { *(setmode->xw) = xw; shared->window_count++; } XUnlockDisplay( x11->display ); return DFB_OK; }
DFBResult dfb_x11_destroy_window_handler( DFBX11 *x11 ) { DFBX11Shared *shared = x11->shared; D_DEBUG_AT( X11_Window, "%s()\n", __FUNCTION__ ); XLockDisplay( x11->display ); if (shared->xw) { XWindow *xw = shared->xw; shared->xw = NULL; dfb_x11_close_window( x11, xw ); } XSync( x11->display, False ); XUnlockDisplay( x11->display ); return DFB_OK; }
static DFBResult system_shutdown( bool emergency ) { D_ASSERT( dfb_x11 != NULL ); dfb_surface_pool_destroy( dfb_x11->surface_pool ); fusion_call_destroy( &dfb_x11->call ); fusion_skirmish_prevail( &dfb_x11->lock ); if (dfb_x11->xw) dfb_x11_close_window( dfb_x11->xw ); if (dfb_x11->display) XCloseDisplay( dfb_x11->display ); fusion_skirmish_destroy( &dfb_x11->lock ); SHFREE( dfb_core_shmpool(dfb_x11_core), dfb_x11 ); dfb_x11 = NULL; dfb_x11_core = NULL; return DFB_OK; }
static DFBResult system_shutdown( bool emergency ) { DFBX11 *x11 = dfb_system_data(); DFBX11Shared *shared = x11->shared; int i; D_DEBUG_AT( X11_Core, "%s()\n", __FUNCTION__ ); /* * Master deinit */ if (shared->x11_pool_bridge) dfb_surface_pool_bridge_destroy( shared->x11_pool_bridge ); if (shared->vpsmem_pool) dfb_surface_pool_destroy( shared->vpsmem_pool ); if (shared->glx_pool) dfb_surface_pool_destroy( shared->glx_pool ); if (shared->x11image_pool) dfb_surface_pool_destroy( shared->x11image_pool ); /* * Shared deinit (master only) */ fusion_call_destroy( &shared->call ); fusion_skirmish_prevail( &shared->lock ); /* close remaining windows */ for( i=0; i<dfb_layer_num(); i++ ) { CoreLayer *layer; X11LayerData *lds; layer = dfb_layer_at( i ); lds = layer->layer_data; if( lds->xw ) { dfb_x11_close_window( x11, lds->xw ); lds->xw = 0; shared->window_count--; } } fusion_skirmish_destroy( &shared->lock ); SHFREE( dfb_core_shmpool( x11->core ), shared ); /* * Local deinit (master and slave) */ if (x11->display) XCloseDisplay( x11->display ); D_FREE( x11 ); return DFB_OK; }