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
}
Exemple #3
0
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
}