| 27 #include "prpl.h" |
27 #include "prpl.h" |
| 28 |
28 |
| 29 /****************************************************************************** |
29 /****************************************************************************** |
| 30 * Globals |
30 * Globals |
| 31 *****************************************************************************/ |
31 *****************************************************************************/ |
| 32 static GaimWhiteboardUiOps *whiteboard_ui_ops = NULL; |
32 static GaimWhiteboardUiOps *whiteboard_ui_ops = NULL; |
| 33 /* static GaimWhiteboardPrplOps *whiteboard_prpl_ops = NULL; */ |
33 /* static GaimWhiteboardPrplOps *whiteboard_prpl_ops = NULL; */ |
| 34 |
34 |
| 35 static GList *wbList = NULL; |
35 static GList *wbList = NULL; |
| 36 |
36 |
| 37 /*static gboolean auto_accept = TRUE; */ |
37 /*static gboolean auto_accept = TRUE; */ |
| 38 |
38 |
| 39 /****************************************************************************** |
39 /****************************************************************************** |
| 40 * API |
40 * API |
| 41 *****************************************************************************/ |
41 *****************************************************************************/ |
| 42 void gaim_whiteboard_set_ui_ops( GaimWhiteboardUiOps *ops ) |
42 void gaim_whiteboard_set_ui_ops(GaimWhiteboardUiOps *ops) |
| 43 { |
43 { |
| 44 whiteboard_ui_ops = ops; |
44 whiteboard_ui_ops = ops; |
| 45 } |
45 } |
| 46 |
46 |
| 47 void gaim_whiteboard_set_prpl_ops( GaimWhiteboard *wb, GaimWhiteboardPrplOps *ops ) |
47 void gaim_whiteboard_set_prpl_ops(GaimWhiteboard *wb, GaimWhiteboardPrplOps *ops) |
| 48 { |
48 { |
| 49 wb->prpl_ops = ops; |
49 wb->prpl_ops = ops; |
| 50 } |
50 } |
| 51 |
51 |
| 52 GaimWhiteboard *gaim_whiteboard_create( GaimAccount *account, char *who, int state ) |
52 GaimWhiteboard *gaim_whiteboard_create(GaimAccount *account, const char *who, int state) |
| 53 { |
53 { |
| 54 GaimPluginProtocolInfo *prpl_info; |
54 GaimPluginProtocolInfo *prpl_info; |
| 55 GaimWhiteboard *wb = g_new0( GaimWhiteboard, 1 ); |
55 GaimWhiteboard *wb = g_new0(GaimWhiteboard, 1); |
| 56 |
56 |
| 57 wb->account = account; |
57 wb->account = account; |
| 58 wb->state = state; |
58 wb->state = state; |
| 59 wb->who = g_strdup( who ); |
59 wb->who = g_strdup(who); |
| 60 |
60 |
| 61 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO( account->gc->prpl ); |
61 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(account->gc->prpl); |
| 62 gaim_whiteboard_set_prpl_ops( wb, prpl_info->whiteboard_prpl_ops ); |
62 gaim_whiteboard_set_prpl_ops(wb, prpl_info->whiteboard_prpl_ops); |
| 63 |
63 |
| 64 /* Start up protocol specifics */ |
64 /* Start up protocol specifics */ |
| 65 if( wb->prpl_ops && wb->prpl_ops->start ) |
65 if(wb->prpl_ops && wb->prpl_ops->start) |
| 66 wb->prpl_ops->start( wb ); |
66 wb->prpl_ops->start(wb); |
| 67 |
67 |
| 68 wbList = g_list_append( wbList, ( gpointer )( wb ) ); |
68 wbList = g_list_append(wbList, wb); |
| 69 |
69 |
| 70 return( wb ); |
70 return wb; |
| 71 } |
71 } |
| 72 |
72 |
| 73 void gaim_whiteboard_destroy( GaimWhiteboard *wb ) |
73 void gaim_whiteboard_destroy(GaimWhiteboard *wb) |
| 74 { |
74 { |
| 75 if( wb->ui_data ) |
75 if(wb->ui_data) |
| 76 { |
76 { |
| 77 /* Destroy frontend */ |
77 /* Destroy frontend */ |
| 78 if( whiteboard_ui_ops && whiteboard_ui_ops->destroy ) |
78 if(whiteboard_ui_ops && whiteboard_ui_ops->destroy) |
| 79 whiteboard_ui_ops->destroy( wb ); |
79 whiteboard_ui_ops->destroy(wb); |
| 80 } |
80 } |
| 81 |
81 |
| 82 /* Do protocol specific session ending procedures */ |
82 /* Do protocol specific session ending procedures */ |
| 83 if( wb->prpl_ops && wb->prpl_ops->end ) |
83 if(wb->prpl_ops && wb->prpl_ops->end) |
| 84 wb->prpl_ops->end( wb ); |
84 wb->prpl_ops->end(wb); |
| 85 |
85 |
| 86 if( wb ) |
86 if(wb) |
| 87 { |
87 { |
| 88 wb->account = NULL; |
88 if(wb->who) |
| 89 wb->state = 0; |
89 g_free(wb->who); |
| 90 |
90 |
| 91 if( wb->who ) |
91 wbList = g_list_remove(wbList, wb); |
| 92 g_free( wb->who ); |
|
| 93 |
92 |
| 94 wbList = g_list_remove( wbList, wb ); |
93 g_free(wb); |
| 95 |
|
| 96 g_free( wb ); |
|
| 97 wb = NULL; |
|
| 98 } |
94 } |
| 99 } |
95 } |
| 100 |
96 |
| 101 void gaim_whiteboard_start( GaimWhiteboard *wb ) |
97 void gaim_whiteboard_start(GaimWhiteboard *wb) |
| 102 { |
98 { |
| 103 /* Create frontend for whiteboard */ |
99 /* Create frontend for whiteboard */ |
| 104 if( whiteboard_ui_ops && whiteboard_ui_ops->create ) |
100 if(whiteboard_ui_ops && whiteboard_ui_ops->create) |
| 105 whiteboard_ui_ops->create( wb ); |
101 whiteboard_ui_ops->create(wb); |
| 106 } |
102 } |
| 107 |
103 |
| 108 /* Looks through the list of whiteboard sessions for one that is between |
104 /* Looks through the list of whiteboard sessions for one that is between |
| 109 * usernames 'me' and 'who'. Returns a pointer to a matching whiteboard |
105 * usernames 'me' and 'who'. Returns a pointer to a matching whiteboard |
| 110 * session; if none match, it returns NULL. |
106 * session; if none match, it returns NULL. |
| 111 */ |
107 */ |
| 112 GaimWhiteboard *gaim_whiteboard_get_session( GaimAccount *account, char *who ) |
108 GaimWhiteboard *gaim_whiteboard_get_session(GaimAccount *account, const char *who) |
| 113 { |
109 { |
| 114 GaimWhiteboard *wb = NULL; |
110 GaimWhiteboard *wb = NULL; |
| 115 |
111 |
| 116 GList *l = wbList; |
112 GList *l = wbList; |
| 117 |
113 |
| 118 /* Look for a whiteboard session between the local user and the remote |
114 /* Look for a whiteboard session between the local user and the remote user |
| 119 * user |
|
| 120 */ |
115 */ |
| 121 while( l ) |
116 while(l != NULL) |
| 122 { |
117 { |
| 123 wb = l->data; |
118 wb = l->data; |
| 124 |
119 |
| 125 if( !strcmp( gaim_account_get_username( wb->account ), |
120 if(wb->account == account && !strcmp(wb->who, who)) |
| 126 gaim_account_get_username( account ) ) && |
121 return wb; |
| 127 !strcmp( wb->who, who ) ) |
|
| 128 return( wb ); |
|
| 129 |
122 |
| 130 l = l->next; |
123 l = l->next; |
| 131 } |
124 } |
| 132 |
125 |
| 133 return( NULL ); |
126 return NULL; |
| 134 } |
127 } |
| 135 |
128 |
| 136 GList *gaim_whiteboard_draw_list_destroy( GList *draw_list ) |
129 void gaim_whiteboard_draw_list_destroy(GList *draw_list) |
| 137 { |
|
| 138 if( draw_list == NULL ) |
|
| 139 return( NULL ); |
|
| 140 else |
|
| 141 { |
|
| 142 /* Destroy the contents of this list */ |
|
| 143 int *n = NULL; |
|
| 144 GList *l = draw_list; |
|
| 145 while( l ) |
|
| 146 { |
130 { |
| 147 n = l->data; |
131 if (draw_list) |
| 148 |
132 g_list_free(draw_list); |
| 149 if( n ) |
|
| 150 g_free( n ); |
|
| 151 |
|
| 152 l = l->next; |
|
| 153 } |
|
| 154 |
|
| 155 g_list_free( draw_list ); |
|
| 156 draw_list = NULL; |
|
| 157 } |
|
| 158 |
|
| 159 return( draw_list ); |
|
| 160 } |
133 } |
| 161 |
134 |
| 162 void gaim_whiteboard_set_dimensions( GaimWhiteboard *wb, int width, int height ) |
135 void gaim_whiteboard_set_dimensions(GaimWhiteboard *wb, int width, int height) |
| 163 { |
136 { |
| 164 if( whiteboard_ui_ops && whiteboard_ui_ops->set_dimensions ) |
137 if(whiteboard_ui_ops && whiteboard_ui_ops->set_dimensions) |
| 165 whiteboard_ui_ops->set_dimensions( wb, width, height ); |
138 whiteboard_ui_ops->set_dimensions(wb, width, height); |
| 166 } |
139 } |
| 167 |
140 |
| 168 void gaim_whiteboard_draw_point( GaimWhiteboard *wb, int x, int y, int color, int size ) |
141 void gaim_whiteboard_draw_point(GaimWhiteboard *wb, int x, int y, int color, int size) |
| 169 { |
142 { |
| 170 if( whiteboard_ui_ops && whiteboard_ui_ops->draw_point ) |
143 if(whiteboard_ui_ops && whiteboard_ui_ops->draw_point) |
| 171 whiteboard_ui_ops->draw_point( wb, x, y, color, size ); |
144 whiteboard_ui_ops->draw_point(wb, x, y, color, size); |
| 172 } |
145 } |
| 173 |
146 |
| 174 void gaim_whiteboard_draw_line( GaimWhiteboard *wb, int x1, int y1, int x2, int y2, int color, int size ) |
147 void gaim_whiteboard_draw_line(GaimWhiteboard *wb, int x1, int y1, int x2, int y2, int color, int size) |
| 175 { |
148 { |
| 176 if( whiteboard_ui_ops && whiteboard_ui_ops->draw_line ) |
149 if(whiteboard_ui_ops && whiteboard_ui_ops->draw_line) |
| 177 whiteboard_ui_ops->draw_line( wb, x1, y1, x2, y2, color, size ); |
150 whiteboard_ui_ops->draw_line(wb, x1, y1, x2, y2, color, size); |
| 178 } |
151 } |
| 179 |
152 |
| 180 void gaim_whiteboard_clear( GaimWhiteboard *wb ) |
153 void gaim_whiteboard_clear(GaimWhiteboard *wb) |
| 181 { |
154 { |
| 182 if( whiteboard_ui_ops && whiteboard_ui_ops->clear ) |
155 if(whiteboard_ui_ops && whiteboard_ui_ops->clear) |
| 183 whiteboard_ui_ops->clear( wb ); |
156 whiteboard_ui_ops->clear(wb); |
| 184 } |
157 } |
| 185 |
158 |