void destroy_assession (ASSession * session) { register int i; if( AS_ASSERT(session) ) return; if (session->defaults) destroy_desk_session (session->defaults); if( session->ashome ) free( session->ashome ); if( session->asshare ) free( session->asshare ); if( session->overriding_file ) free( session->overriding_file ); if( session->overriding_look ) free( session->overriding_look ); if( session->overriding_feel ) free( session->overriding_feel ); if( session->overriding_theme ) free( session->overriding_theme ); if( session->overriding_colorscheme ) free( session->overriding_colorscheme ); if( session->workspace_state ) free( session->workspace_state ); if (session->webcache) free (session->webcache); i = session->desks_used ; while (--i >= 0) destroy_desk_session (session->desks[i]); free( session->desks ); free( session ); }
void change_desk_session_look (ASSession * session, int desk, struct MyLook *look) { #ifdef MYLOOK_HEADER_FILE_INCLUDED if (session && look ) { ASDeskSession *d = NULL; MyLook *old_look ; #ifdef DIFFERENTLOOKNFEELFOREACHDESKTOP if( IsValidDesk(desk) && session->overriding_look == NULL ) { d = get_desk_session (session, desk); if( d->feel_file == NULL ) d = session->defaults ; } #endif if( d == NULL ) d = session->defaults ; old_look = d->look ; d->look = look ; LOCAL_DEBUG_OUT( "new look = %p, desk_session = %p (default is %p ), scr is %p ", look, d, session->defaults, session->scr ); if( !AS_ASSERT(session->scr) ) { ScreenInfo *scr = session->scr ; if( d == session->defaults || scr->DefaultLook == old_look ) { MyLook *old_default_look = scr->DefaultLook ; scr->DefaultLook = look ; if( scr->OnDefaultLookChanged_hook ) scr->OnDefaultLookChanged_hook( scr, old_default_look ); /* There is a possibility for contention here, if DefaultLook was * taken from session other then default one */ if( old_default_look && old_default_look != old_look ) mylook_destroy(&(old_default_look)); } } if( session->on_look_changed_func ) { session->on_look_changed_func( session->scr, desk, old_look ); if( d->desk != desk ) session->on_look_changed_func( session->scr, d->desk, old_look ); } if ( old_look ) mylook_destroy(&(old_look)); } #endif }
ASGridLine * add_gridline( ASGrid *grid, short band, short start, short end, short gravity_above, short gravity_below, unsigned long flags) { ASGridLine **list; ASGridLine *l; ASGridLine new_l = {NULL, flags, band, start, end, gravity_above, gravity_below, 0}; if (AS_ASSERT(grid)) return NULL; list = get_flags(flags, ASGL_Vertical)? &(grid->v_lines) : &(grid->h_lines); /* eliminating duplicates and sorting in ascending order : */ for( l = *list ; l != NULL ; l = l->next ) { int l_band, l_start, l_end; int n_band, n_start, n_end; grid_coords2real (grid, l, &l_band, &l_start, &l_end); grid_coords2real (grid, &new_l, &n_band, &n_start, &n_end); if( l_band <= n_band ) list = &(l->next); if( l_band == n_band && get_flags(l->flags, ASGL_Absolute) == get_flags(flags, ASGL_Absolute)) { if( l_start < n_end && l_end > n_start ) { /* at least intersecting : */ if( l->gravity_above == gravity_above && l->gravity_below == gravity_below ) { /* TODO*/ l->start = MIN( l->start, start ); l->end = MAX( l->end, end ); return NULL; } if( l_start == n_start && l_end == n_end ) { l->gravity_above = ( l->gravity_above < 0 )? MIN(l->gravity_above, gravity_above): ((gravity_above < 0 )? gravity_above: MAX(l->gravity_above, gravity_above)); l->gravity_below = ( l->gravity_below < 0 )? MIN(l->gravity_below, gravity_below): ((gravity_below < 0 )? gravity_below: MAX(l->gravity_below, gravity_below)); return NULL; } } }else if( l_band > n_band ) break; } l = safecalloc( 1, sizeof(ASGridLine)); *l = new_l; l->next = *list ; *list = l ; return l; }
void change_desk_session_feel (ASSession * session, int desk, struct ASFeel *feel) { #ifdef ASFEEL_HEADER_FILE_INCLUDED if (session && feel ) { ASDeskSession *d = NULL; struct ASFeel *old_feel ; #ifdef DIFFERENTLOOKNFEELFOREACHDESKTOP if( IsValidDesk(desk) && session->overriding_feel == NULL ) { d = get_desk_session (session, desk); if( d->feel_file == NULL ) d = session->defaults ; } #endif if( d == NULL ) d = session->defaults ; old_feel = d->feel ; d->feel = feel ; if( !AS_ASSERT(session->scr) ) { } if( session->on_feel_changed_func ) { session->on_feel_changed_func( session->scr, desk, old_feel ); if( d->desk != desk ) session->on_feel_changed_func( session->scr, d->desk, old_feel ); } if ( old_feel ) destroy_asfeel(old_feel, False); } #endif }