Mercurial > pidgin
diff src/whiteboard.c @ 11914:2219f4bf4a57
[gaim-migrate @ 14205]
SF Patch #1342017 from sadrul
"This patch allows a user to change brush color during
the doodle-session.
This patch is mostly a rough one to get an idea whether
the approach is correct. To make things simple, I have
kept brush_size and brush_color in GaimGtkWhiteboard,
although it's there in doodle_session. It could be in
either place, although I would think it's best to be in
GaimGtkWhiteboard because any/most implementations of
doodle-ing would have these attributes. So keeping them
within the prpl may not be the best option?
Anyway, considering the brush-size and color stay at
the prpl for now, I have introduced two functions in
GaimWhiteboardPrplOps to get/set the size and color of
the brush from the prpl.
rekkanoryo (using Y! 7) and I (using gaim) have tested
this, and it seemed to work OK."
Plus, I cleaned up a whole bunch of code.
My apologies for this all being committed together, but it was a case of "Oh, this will be quick." that lead into hours of making intertwined changes.
committer: Tailor Script <tailor@pidgin.im>
author | Richard Laager <rlaager@wiktel.com> |
---|---|
date | Mon, 31 Oct 2005 02:19:51 +0000 |
parents | 2e3a6dcebaf3 |
children | 9d562dde0a3a |
line wrap: on
line diff
--- a/src/whiteboard.c Mon Oct 31 01:58:26 2005 +0000 +++ b/src/whiteboard.c Mon Oct 31 02:19:51 2005 +0000 @@ -29,157 +29,130 @@ /****************************************************************************** * Globals *****************************************************************************/ -static GaimWhiteboardUiOps *whiteboard_ui_ops = NULL; -/* static GaimWhiteboardPrplOps *whiteboard_prpl_ops = NULL; */ +static GaimWhiteboardUiOps *whiteboard_ui_ops = NULL; +/* static GaimWhiteboardPrplOps *whiteboard_prpl_ops = NULL; */ -static GList *wbList = NULL; +static GList *wbList = NULL; -/*static gboolean auto_accept = TRUE; */ +/*static gboolean auto_accept = TRUE; */ /****************************************************************************** * API *****************************************************************************/ -void gaim_whiteboard_set_ui_ops( GaimWhiteboardUiOps *ops ) +void gaim_whiteboard_set_ui_ops(GaimWhiteboardUiOps *ops) { whiteboard_ui_ops = ops; } -void gaim_whiteboard_set_prpl_ops( GaimWhiteboard *wb, GaimWhiteboardPrplOps *ops ) +void gaim_whiteboard_set_prpl_ops(GaimWhiteboard *wb, GaimWhiteboardPrplOps *ops) { wb->prpl_ops = ops; } -GaimWhiteboard *gaim_whiteboard_create( GaimAccount *account, char *who, int state ) +GaimWhiteboard *gaim_whiteboard_create(GaimAccount *account, const char *who, int state) { GaimPluginProtocolInfo *prpl_info; - GaimWhiteboard *wb = g_new0( GaimWhiteboard, 1 ); + GaimWhiteboard *wb = g_new0(GaimWhiteboard, 1); - wb->account = account; - wb->state = state; - wb->who = g_strdup( who ); + wb->account = account; + wb->state = state; + wb->who = g_strdup(who); - prpl_info = GAIM_PLUGIN_PROTOCOL_INFO( account->gc->prpl ); - gaim_whiteboard_set_prpl_ops( wb, prpl_info->whiteboard_prpl_ops ); + prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(account->gc->prpl); + gaim_whiteboard_set_prpl_ops(wb, prpl_info->whiteboard_prpl_ops); /* Start up protocol specifics */ - if( wb->prpl_ops && wb->prpl_ops->start ) - wb->prpl_ops->start( wb ); + if(wb->prpl_ops && wb->prpl_ops->start) + wb->prpl_ops->start(wb); - wbList = g_list_append( wbList, ( gpointer )( wb ) ); + wbList = g_list_append(wbList, wb); - return( wb ); + return wb; } -void gaim_whiteboard_destroy( GaimWhiteboard *wb ) +void gaim_whiteboard_destroy(GaimWhiteboard *wb) { - if( wb->ui_data ) + if(wb->ui_data) { /* Destroy frontend */ - if( whiteboard_ui_ops && whiteboard_ui_ops->destroy ) - whiteboard_ui_ops->destroy( wb ); + if(whiteboard_ui_ops && whiteboard_ui_ops->destroy) + whiteboard_ui_ops->destroy(wb); } /* Do protocol specific session ending procedures */ - if( wb->prpl_ops && wb->prpl_ops->end ) - wb->prpl_ops->end( wb ); - - if( wb ) - { - wb->account = NULL; - wb->state = 0; + if(wb->prpl_ops && wb->prpl_ops->end) + wb->prpl_ops->end(wb); - if( wb->who ) - g_free( wb->who ); + if(wb) + { + if(wb->who) + g_free(wb->who); - wbList = g_list_remove( wbList, wb ); + wbList = g_list_remove(wbList, wb); - g_free( wb ); - wb = NULL; + g_free(wb); } } -void gaim_whiteboard_start( GaimWhiteboard *wb ) +void gaim_whiteboard_start(GaimWhiteboard *wb) { /* Create frontend for whiteboard */ - if( whiteboard_ui_ops && whiteboard_ui_ops->create ) - whiteboard_ui_ops->create( wb ); + if(whiteboard_ui_ops && whiteboard_ui_ops->create) + whiteboard_ui_ops->create(wb); } /* Looks through the list of whiteboard sessions for one that is between * usernames 'me' and 'who'. Returns a pointer to a matching whiteboard * session; if none match, it returns NULL. */ -GaimWhiteboard *gaim_whiteboard_get_session( GaimAccount *account, char *who ) +GaimWhiteboard *gaim_whiteboard_get_session(GaimAccount *account, const char *who) { - GaimWhiteboard *wb = NULL; + GaimWhiteboard *wb = NULL; - GList *l = wbList; + GList *l = wbList; - /* Look for a whiteboard session between the local user and the remote - * user + /* Look for a whiteboard session between the local user and the remote user */ - while( l ) + while(l != NULL) { wb = l->data; - if( !strcmp( gaim_account_get_username( wb->account ), - gaim_account_get_username( account ) ) && - !strcmp( wb->who, who ) ) - return( wb ); + if(wb->account == account && !strcmp(wb->who, who)) + return wb; l = l->next; } - return( NULL ); + return NULL; +} + +void gaim_whiteboard_draw_list_destroy(GList *draw_list) + { + if (draw_list) + g_list_free(draw_list); +} + +void gaim_whiteboard_set_dimensions(GaimWhiteboard *wb, int width, int height) +{ + if(whiteboard_ui_ops && whiteboard_ui_ops->set_dimensions) + whiteboard_ui_ops->set_dimensions(wb, width, height); } -GList *gaim_whiteboard_draw_list_destroy( GList *draw_list ) +void gaim_whiteboard_draw_point(GaimWhiteboard *wb, int x, int y, int color, int size) { - if( draw_list == NULL ) - return( NULL ); - else - { - /* Destroy the contents of this list */ - int *n = NULL; - GList *l = draw_list; - while( l ) - { - n = l->data; - - if( n ) - g_free( n ); - - l = l->next; - } - - g_list_free( draw_list ); - draw_list = NULL; - } - - return( draw_list ); + if(whiteboard_ui_ops && whiteboard_ui_ops->draw_point) + whiteboard_ui_ops->draw_point(wb, x, y, color, size); } -void gaim_whiteboard_set_dimensions( GaimWhiteboard *wb, int width, int height ) +void gaim_whiteboard_draw_line(GaimWhiteboard *wb, int x1, int y1, int x2, int y2, int color, int size) { - if( whiteboard_ui_ops && whiteboard_ui_ops->set_dimensions ) - whiteboard_ui_ops->set_dimensions( wb, width, height ); -} - -void gaim_whiteboard_draw_point( GaimWhiteboard *wb, int x, int y, int color, int size ) -{ - if( whiteboard_ui_ops && whiteboard_ui_ops->draw_point ) - whiteboard_ui_ops->draw_point( wb, x, y, color, size ); + if(whiteboard_ui_ops && whiteboard_ui_ops->draw_line) + whiteboard_ui_ops->draw_line(wb, x1, y1, x2, y2, color, size); } -void gaim_whiteboard_draw_line( GaimWhiteboard *wb, int x1, int y1, int x2, int y2, int color, int size ) +void gaim_whiteboard_clear(GaimWhiteboard *wb) { - if( whiteboard_ui_ops && whiteboard_ui_ops->draw_line ) - whiteboard_ui_ops->draw_line( wb, x1, y1, x2, y2, color, size ); + if(whiteboard_ui_ops && whiteboard_ui_ops->clear) + whiteboard_ui_ops->clear(wb); } -void gaim_whiteboard_clear( GaimWhiteboard *wb ) -{ - if( whiteboard_ui_ops && whiteboard_ui_ops->clear ) - whiteboard_ui_ops->clear( wb ); -} -