Пример #1
0
int32 QueryMenu::QueryThread( void )
{
	BAutolock	lock( fQueryLock );
	
	if( !lock.IsLocked() )
		return B_ERROR;
	fCancelQuery = false;
	
	// Begin resolving query
	fQuery->Fetch();
	
	entry_ref 		ref;
	node_ref		node;
	
	// Build Menu
	// The leash it a work-around for when the something in the query breaks and prevents
	// GetNextRef() from ever returning B_ENTRY_NOT_FOUND
	for( int32 leash=0; (fQuery->GetNextRef( &ref ) != B_ENTRY_NOT_FOUND)&&(!fCancelQuery)&&(leash < 128); leash++ )
	{
		BEntry entry( &ref );
		entry.GetNodeRef( &node );
		EntryCreated( ref, node.node );
	}
	
	return B_OK;
}
Пример #2
0
int32 QueryMenu::QueryThread()
{
	BAutolock lock(fQueryLock);

	if (!lock.IsLocked())
		return B_ERROR;

	// Begin resolving query
	fCancelQuery = false;
	fQuery->Fetch();

	// Build Menu
	entry_ref ref;
	node_ref node;
	while (fQuery->GetNextRef(&ref) == B_OK && !fCancelQuery)
	{
		BEntry entry(&ref);
		entry.GetNodeRef(&node);
		EntryCreated(ref, node.node);
	}

	// Remove the group separator if there are no groups or no items without groups
	BMenuItem *item;
	if (dynamic_cast<BSeparatorItem *>(item = ItemAt(0)) != NULL)
		RemoveItem(item);
	else if (dynamic_cast<BSeparatorItem *>(item = ItemAt(CountItems() - 1)) != NULL)
		RemoveItem(item);

	return B_OK;
}
Пример #3
0
void QueryMenu::DoQueryMessage( BMessage *msg )
{
	int32		opcode;
	int64		directory;
	int32		device;
	int64		node;
	const char 	*name;
	
	if( (msg->FindInt32( "opcode", &opcode ) == B_OK)&&
		(msg->FindInt64( "directory", &directory ) == B_OK)&&
		(msg->FindInt32( "device", &device ) == B_OK)&&
		(msg->FindInt64( "node", &node ) == B_OK) )
	{
		if( (opcode == B_ENTRY_CREATED)&&(msg->FindString( "name", &name ) == B_OK) )
		{
			entry_ref ref( device, directory, name );
			EntryCreated( ref, node );
			return;
		}
		else if( opcode == B_ENTRY_REMOVED )
		{
			BAutolock lock( fQueryLock );
			if( !lock.IsLocked() )
				return;
			EntryRemoved( node );
		}
	}
}
	void
	AttrChanged(WatchedFile* file)
	{
		EntryRemoved(file);
		EntryCreated(file);
	}