* fix totblock error when quiting blender with sessions open

* add "Disconnect"-menu when RMB on verse server that is connected in
outliner
This commit is contained in:
Nathan Letwory 2006-10-16 15:28:57 +00:00
parent 6468b1705b
commit 282b0d528d
6 changed files with 42 additions and 37 deletions

@ -323,12 +323,6 @@ typedef struct VNode {
void (*post_node_name_set)(struct VNode *vnode);
} VNode;
typedef struct VerseServer {
struct VerseServer *next, *prev;
char *name; /* human-readable server name */
char *ip; /* string containing IP/domain name of verse server and number of port */
short flag; /* flag: VERSE_CONNECTING, VERSE_CONNECTED */
} VerseServer;
/*
* Verse Session: verse client can be connected to several verse servers
@ -353,6 +347,13 @@ typedef struct VerseSession {
void (*post_connect_update)(struct VerseSession *session);
} VerseSession;
typedef struct VerseServer {
struct VerseServer *next, *prev;
char *name; /* human-readable server name */
char *ip; /* string containing IP/domain name of verse server and number of port */
short flag; /* flag: VERSE_CONNECTING, VERSE_CONNECTED */
struct VerseSession *session; /* pointer to related session */
} VerseServer;
/*
* list of post callback functions
*/
@ -448,7 +449,7 @@ void free_verse_session(struct VerseSession *session);
void b_verse_update(void);
void b_vers_ms_get(void);
void b_verse_connect(char *address);
void end_verse_session(struct VerseSession *session, char free);
void end_verse_session(struct VerseSession *session);
void end_all_verse_sessions(void);
/* functions from verse_node.c */

@ -169,11 +169,13 @@ static void cb_connect_accept(
if(strcmp(session->address, server->ip)==0) {
server->flag |= VERSE_CONNECTED;
server->flag &= ~VERSE_CONNECTING;
server->session = session;
break;
}
server = server->next;
}
printf("\tBlender was connected to verse server: %s\n", (char*)address);
printf("\tBlender is connected to verse server: %s\n", (char*)address);
printf("\tVerseSession->counter: %d\n", session->counter);
session->avatar = avatar;
@ -369,7 +371,7 @@ VerseSession *create_verse_session(
/*
* end verse session and free all session data
*/
void end_verse_session(VerseSession *session, char free)
void end_verse_session(VerseSession *session)
{
/* send terminate command to verse server */
verse_send_connect_terminate(session->address, "blender: bye bye");
@ -381,10 +383,8 @@ void end_verse_session(VerseSession *session, char free)
session->flag &= ~VERSE_CONNECTED;
/* do post connect operations */
session->post_connect_terminated(session);
/* free session data */
free_verse_session_data(session);
/* free structure of verse session */
if(free) free_verse_session(session);
free_verse_session(session);
}
void free_all_servers(void)
@ -411,14 +411,15 @@ void free_all_servers(void)
*/
void end_all_verse_sessions(void)
{
VerseSession *session;
VerseSession *session,*nextsession;
session = session_list.first;
while(session) {
end_verse_session(session, 0);
nextsession= session->next;
end_verse_session(session);
/* end next session */
session = session->next;
session = nextsession;
}
BLI_freelistN(&session_list);

@ -766,7 +766,7 @@ static void do_verse_filemenu(void *arg, int event)
session = session_menu();
if(session) {
printf("Disconnecting session: %s!\n", session->address);
end_verse_session(session, 1);
end_verse_session(session);
}
break;
case 3:

@ -1632,7 +1632,7 @@ static int do_outliner_mouse_event(SpaceOops *soops, TreeElement *te, short even
}
switch(event) {
case 1:
end_verse_session(session, 1);
end_verse_session(session);
break;
case 2:
vnode = session->nodes.lb.first;
@ -1677,9 +1677,9 @@ static int do_outliner_mouse_event(SpaceOops *soops, TreeElement *te, short even
if(!(vserver->flag & VERSE_CONNECTING) && !(vserver->flag & VERSE_CONNECTED)) {
event = pupmenu("VerseServer %t| Connect %x1");
} else if((vserver->flag & VERSE_CONNECTING) && !(vserver->flag & VERSE_CONNECTED)) {
event = pupmenu("VerseServer %t| Connecting... %x2");
event = pupmenu("VerseServer %t| Connecting %x2");
} else if(!(vserver->flag & VERSE_CONNECTING) && (vserver->flag & VERSE_CONNECTED)) {
event = pupmenu("VerseServer %t| Connected %x3");
event = pupmenu("VerseServer %t| Disconnect %x3");
}
switch(event) {
case 1:
@ -1687,7 +1687,9 @@ static int do_outliner_mouse_event(SpaceOops *soops, TreeElement *te, short even
vserver->flag |= VERSE_CONNECTING;
break;
case 2:
break;
case 3:
end_verse_session(vserver->session);
break;
}
}

@ -853,6 +853,9 @@ void exit_usiblender(void)
tf= tf->next;
}
BLI_freelistN(&G.ttfdata);
#ifdef WITH_VERSE
end_all_verse_sessions();
#endif
free_openrecent();
freeAllRad();
@ -900,9 +903,6 @@ void exit_usiblender(void)
sound_exit_audio();
if(G.listener) MEM_freeN(G.listener);
#ifdef WITH_VERSE
end_all_verse_sessions();
#endif
libtiff_exit();

@ -255,6 +255,7 @@ void post_connect_terminated(VerseSession *session)
while(server) {
if(strcmp(server->ip, session->address)==0) {
server->flag = 0;
server->session=NULL;
break;
}
server = server->next;