Mercurial > pidgin
annotate src/gnome_applet_mgr.c @ 372:8c3b075d7aba
[gaim-migrate @ 382]
:)
committer: Tailor Script <tailor@pidgin.im>
author | Eric Warmenhoven <eric@warmenhoven.org> |
---|---|
date | Fri, 09 Jun 2000 10:32:33 +0000 |
parents | fd3cc0a28d5d |
children | 7493af3a4ce2 |
rev | line source |
---|---|
1 | 1 /************************************************************** |
2 ** | |
3 ** GaimGnomeAppletMgr | |
4 ** Author - Quinticent (John Palmieri: johnp@martianrock.com) | |
5 ** | |
6 ** Purpose - Takes over the task of managing the GNOME applet | |
7 ** code and provides a centralized codebase for | |
8 ** GNOME integration for Gaim. | |
9 ** | |
10 ** | |
11 ** gaim | |
12 ** | |
13 ** Copyright (C) 1998-1999, Mark Spencer <markster@marko.net> | |
14 ** | |
15 ** This program is free software; you can redistribute it and/or modify | |
16 ** it under the terms of the GNU General Public License as published by | |
17 ** the Free Software Foundation; either version 2 of the License, or | |
18 ** (at your option) any later version. | |
19 ** | |
20 ** This program is distributed in the hope that it will be useful, | |
21 ** but WITHOUT ANY WARRANTY; without even the implied warranty of | |
22 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
23 ** GNU General Public License for more details. | |
24 ** | |
25 ** You should have received a copy of the GNU General Public License | |
26 ** along with this program; if not, write to the Free Software | |
27 ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
28 */ | |
29 | |
349
b402a23f35df
[gaim-migrate @ 359]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
342
diff
changeset
|
30 #ifdef HAVE_CONFIG_H |
b402a23f35df
[gaim-migrate @ 359]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
342
diff
changeset
|
31 #include "../config.h" |
b402a23f35df
[gaim-migrate @ 359]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
342
diff
changeset
|
32 #endif |
1 | 33 #ifdef USE_APPLET |
34 #include <string.h> | |
35 #include <gdk_imlib.h> | |
36 #include "gaim.h" | |
37 #include "gnome_applet_mgr.h" | |
38 | |
39 enum gaim_user_states MRI_user_status; | |
40 | |
41 gboolean buddy_created = FALSE; | |
42 gboolean applet_draw_open = FALSE; | |
43 GtkWidget *applet_popup = NULL; | |
44 | |
82 | 45 gchar GAIM_GNOME_OFFLINE_ICON[255] = GAIM_GNOME_PENGUIN_OFFLINE; |
46 gchar GAIM_GNOME_CONNECT_ICON[255] = GAIM_GNOME_PENGUIN_CONNECT; | |
47 gchar GAIM_GNOME_ONLINE_ICON[255] = GAIM_GNOME_PENGUIN_ONLINE; | |
48 | |
1 | 49 GtkWidget *applet; |
338
9d258a0aa560
[gaim-migrate @ 348]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
246
diff
changeset
|
50 GtkWidget *appletframe; |
1 | 51 GtkWidget *status_label; |
52 | |
53 GtkWidget *icon; | |
54 GdkPixmap *icon_offline_pm=NULL; | |
55 GdkPixmap *icon_offline_bm=NULL; | |
56 | |
57 GdkPixmap *icon_online_pm=NULL; | |
58 GdkPixmap *icon_online_bm=NULL; | |
59 | |
60 GdkPixmap *icon_connect_pm=NULL; | |
61 GdkPixmap *icon_connect_bm=NULL; | |
62 | |
63 GdkPixmap *icon_msg_pending_pm=NULL; | |
64 GdkPixmap *icon_msg_pending_bm=NULL; | |
65 | |
66 GdkPixmap *icon_away_pm=NULL; | |
67 GdkPixmap *icon_away_bm=NULL; | |
68 | |
340
0d9cfc3579a5
[gaim-migrate @ 350]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
69 static GtkAllocation get_applet_pos(gboolean); |
0d9cfc3579a5
[gaim-migrate @ 350]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
70 |
1 | 71 /*************************************************************** |
72 ** | |
73 ** function load_applet_icon | |
74 ** visibility - private | |
75 ** | |
76 ** input: | |
77 ** name - the name of the file to load | |
78 ** height, width - the height and width | |
79 ** that the icon should be | |
80 ** scaled to. | |
81 ** | |
82 ** output: | |
83 ** TRUE - success | |
84 ** FALSE - failure | |
85 ** pm - a GdkPixmap structure that the icon is loaded into | |
86 ** bm - a GdkBitmap structure that the icon's transparancy | |
87 ** mask is loaded into | |
88 ** | |
89 ** description - loads an icon from | |
90 ** /usr/share/pixmap/gaim/gnome/ | |
91 ** and scales it using imlib | |
92 ** | |
93 ****************************************************************/ | |
94 | |
95 gboolean load_applet_icon( const char *name, int height, int width, GdkPixmap **pm, GdkBitmap **bm ){ | |
96 gboolean result = TRUE; | |
82 | 97 char *path; |
1 | 98 GdkImlibImage *im; |
82 | 99 |
100 path = gnome_pixmap_file(name); | |
101 | |
1 | 102 im=gdk_imlib_load_image( path ); |
103 | |
104 if ((*pm)!=NULL) | |
105 gdk_imlib_free_pixmap((*pm)); | |
106 | |
107 if( im!= NULL ){ | |
108 gdk_imlib_render(im,width,height); | |
109 | |
110 (*pm) = gdk_imlib_move_image(im); | |
111 (*bm) = gdk_imlib_move_mask(im); | |
112 | |
113 } else { | |
114 result = FALSE; | |
350
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
115 sprintf(debug_buff,_("file not found: %s\n"),path); |
1 | 116 debug_print(debug_buff); |
117 } | |
118 | |
82 | 119 free(path); |
1 | 120 return result; |
121 } | |
122 | |
123 /*************************************************************** | |
124 ** | |
125 ** function update_applet | |
126 ** visibility - private | |
127 ** | |
128 ** input: | |
82 | 129 ** ap - if not NULL, was called from update_pixmaps, and |
130 ** should update them | |
1 | 131 ** |
132 ** description - takes care of swapping status icons and | |
133 ** updating the status label | |
134 ** | |
135 ****************************************************************/ | |
136 | |
137 gboolean update_applet( gpointer *ap ){ | |
138 static enum gaim_user_states old_user_status = offline; | |
139 | |
82 | 140 if( MRI_user_status != old_user_status || ap){ |
1 | 141 |
142 switch( MRI_user_status ){ | |
143 case offline: | |
144 gtk_pixmap_set( GTK_PIXMAP(icon), | |
145 icon_offline_pm, | |
146 icon_offline_bm ); | |
147 gtk_label_set( GTK_LABEL(status_label), _MSG_OFFLINE_ ); | |
350
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
148 applet_set_tooltips(_("Offilne. Click to bring up login box.")); |
1 | 149 break; |
150 case signing_on: | |
151 gtk_pixmap_set( GTK_PIXMAP(icon), | |
152 icon_connect_pm, | |
153 icon_connect_bm ); | |
154 gtk_label_set( GTK_LABEL(status_label), _MSG_CONNECT_ ); | |
350
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
155 applet_set_tooltips(_("Attempting to sign on....")); |
1 | 156 break; |
157 case online: | |
158 gtk_pixmap_set( GTK_PIXMAP(icon), | |
159 icon_online_pm, | |
160 icon_online_bm ); | |
161 | |
162 gtk_label_set( GTK_LABEL(status_label), _MSG_ONLINE_ ); | |
163 break; | |
164 | |
165 case unread_message_pending: | |
166 gtk_pixmap_set( GTK_PIXMAP(icon), | |
167 icon_msg_pending_pm, | |
168 icon_msg_pending_bm ); | |
169 gtk_label_set( GTK_LABEL(status_label), "msg" ); | |
170 break; | |
171 case away: | |
172 gtk_pixmap_set( GTK_PIXMAP(icon), | |
82 | 173 icon_online_pm, |
174 icon_online_bm ); | |
350
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
175 gtk_label_set( GTK_LABEL(status_label), _("Away") ); |
1 | 176 break; |
177 } | |
178 old_user_status = MRI_user_status; | |
179 } | |
180 return TRUE; | |
181 | |
182 } | |
183 | |
82 | 184 void update_pixmaps() { |
185 if (display_options & OPT_DISP_DEVIL_PIXMAPS) { | |
186 sprintf(GAIM_GNOME_OFFLINE_ICON, "%s", GAIM_GNOME_DEVIL_OFFLINE); | |
187 sprintf(GAIM_GNOME_CONNECT_ICON, "%s", GAIM_GNOME_DEVIL_CONNECT); | |
188 sprintf(GAIM_GNOME_ONLINE_ICON, "%s", GAIM_GNOME_DEVIL_ONLINE); | |
189 } else { | |
190 sprintf(GAIM_GNOME_OFFLINE_ICON, "%s", GAIM_GNOME_PENGUIN_OFFLINE); | |
191 sprintf(GAIM_GNOME_CONNECT_ICON, "%s", GAIM_GNOME_PENGUIN_CONNECT); | |
192 sprintf(GAIM_GNOME_ONLINE_ICON, "%s", GAIM_GNOME_PENGUIN_ONLINE); | |
193 } | |
194 load_applet_icon( GAIM_GNOME_OFFLINE_ICON, 32, 34, | |
195 &icon_offline_pm, &icon_offline_bm ); | |
196 load_applet_icon( GAIM_GNOME_CONNECT_ICON, 32, 34, | |
197 &icon_connect_pm, &icon_connect_bm ); | |
198 load_applet_icon( GAIM_GNOME_ONLINE_ICON, 32, 34, | |
199 &icon_online_pm, &icon_online_bm ); | |
200 update_applet((gpointer *)applet); | |
201 } | |
202 | |
1 | 203 |
204 /*************************************************************** | |
205 ** | |
206 ** function make_buddy | |
207 ** visibility - private | |
208 ** | |
209 ** description - If buddylist is not created create it | |
210 ** else show the buddy list | |
211 ** | |
212 ****************************************************************/ | |
213 void make_buddy(void) { | |
214 set_applet_draw_open(); | |
215 if( !buddy_created ){ | |
216 show_buddy_list(); | |
217 buddy_created = TRUE; | |
218 } else { | |
219 gnome_buddy_show(); | |
220 } | |
16 | 221 build_edit_tree(); |
246
2c5713cd9d8c
[gaim-migrate @ 256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
200
diff
changeset
|
222 build_permit_tree(); |
1 | 223 |
224 } | |
225 | |
226 /*************************************************************** | |
227 ** | |
228 ** function applet_show_login | |
229 ** visibility - private | |
230 ** | |
231 ** input: | |
232 ** | |
233 ** | |
234 ** description - I guess it shows the login dialog | |
235 ** | |
236 ****************************************************************/ | |
340
0d9cfc3579a5
[gaim-migrate @ 350]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
237 extern GtkWidget *mainwindow; |
1 | 238 void applet_show_login(AppletWidget *widget, gpointer data) { |
239 show_login(); | |
340
0d9cfc3579a5
[gaim-migrate @ 350]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
240 if (general_options & OPT_GEN_NEAR_APPLET) { |
0d9cfc3579a5
[gaim-migrate @ 350]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
241 GtkAllocation a = get_applet_pos(FALSE); |
0d9cfc3579a5
[gaim-migrate @ 350]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
242 gtk_widget_set_uposition(mainwindow, a.x, a.y); |
0d9cfc3579a5
[gaim-migrate @ 350]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
243 } |
1 | 244 } |
245 | |
342
f4fba304b236
[gaim-migrate @ 352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
340
diff
changeset
|
246 void applet_do_signon(AppletWidget *widget, gpointer data) { |
f4fba304b236
[gaim-migrate @ 352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
340
diff
changeset
|
247 show_login(); |
f4fba304b236
[gaim-migrate @ 352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
340
diff
changeset
|
248 if (general_options & OPT_GEN_REMEMBER_PASS) |
f4fba304b236
[gaim-migrate @ 352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
340
diff
changeset
|
249 dologin(); |
f4fba304b236
[gaim-migrate @ 352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
340
diff
changeset
|
250 } |
f4fba304b236
[gaim-migrate @ 352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
340
diff
changeset
|
251 |
18 | 252 void insert_applet_away() { |
253 GList *awy = away_messages; | |
254 struct away_message *a; | |
255 char *awayname; | |
256 | |
257 applet_widget_register_callback_dir(APPLET_WIDGET(applet), | |
46 | 258 "away/", |
18 | 259 _("Away")); |
260 applet_widget_register_callback(APPLET_WIDGET(applet), | |
261 "away/new", | |
262 _("New Away Message"), | |
263 (AppletCallbackFunc)create_away_mess, | |
264 NULL); | |
265 | |
266 while(awy) { | |
267 a = (struct away_message *)awy->data; | |
268 | |
79 | 269 awayname = g_malloc(sizeof *awayname * (6 + strlen(a->name))); |
18 | 270 awayname[0] = '\0'; |
271 strcat(awayname, "away/"); | |
272 strcat(awayname, a->name); | |
273 applet_widget_register_callback(APPLET_WIDGET(applet), | |
274 awayname, | |
275 a->name, | |
276 (AppletCallbackFunc)do_away_message, | |
277 a); | |
278 | |
279 awy = awy->next; | |
23 | 280 free(awayname); |
18 | 281 } |
282 } | |
283 | |
284 void remove_applet_away() { | |
285 GList *awy = away_messages; | |
286 struct away_message *a; | |
287 char *awayname; | |
288 | |
289 applet_widget_unregister_callback(APPLET_WIDGET(applet), "away/new"); | |
290 | |
291 while (awy) { | |
292 a = (struct away_message *)awy->data; | |
293 | |
79 | 294 awayname = g_malloc(sizeof *awayname * (6 + strlen(a->name))); |
18 | 295 awayname[0] = '\0'; |
296 strcat(awayname, "away/"); | |
297 strcat(awayname, a->name); | |
298 applet_widget_unregister_callback(APPLET_WIDGET(applet), awayname); | |
299 | |
300 awy = awy->next; | |
23 | 301 free(awayname); |
18 | 302 } |
46 | 303 applet_widget_unregister_callback_dir(APPLET_WIDGET(applet), "away/"); |
18 | 304 applet_widget_unregister_callback(APPLET_WIDGET(applet), "away"); |
305 } | |
306 | |
1 | 307 /*************************************************************** |
308 ** | |
309 ** function applet_show_about | |
310 ** visibility - public | |
311 ** | |
312 ** | |
313 ** description - takes care of creating and | |
314 ** displaying the about box | |
315 ** | |
316 ****************************************************************/ | |
317 void applet_show_about(AppletWidget *widget, gpointer data) { | |
318 | |
319 const gchar *authors[] = {"Mark Spencer <markster@marko.net>", | |
320 "Jim Duchek <jimduchek@ou.edu>", | |
321 "Rob Flynn <rflynn@blueridge.net>", | |
82 | 322 "Eric Warmenhoven <warmenhoven@yahoo.com>", |
178
5d62a5d50c89
[gaim-migrate @ 188]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
107
diff
changeset
|
323 "Syd Logan", |
1 | 324 NULL}; |
325 | |
326 GtkWidget *about=gnome_about_new(_("GAIM"), | |
327 _(VERSION), | |
328 _(""), | |
329 authors, | |
330 "", | |
331 NULL); | |
332 gtk_widget_show(about); | |
333 } | |
334 | |
335 /*************************************************************** | |
336 ** | |
337 ** function AppletCancelLogin (name should be changed to | |
338 ** applet_cancel_login) | |
339 ** visibility - public | |
340 ** | |
341 ** description - called when user cancels login | |
342 ** | |
343 ****************************************************************/ | |
344 void AppletCancelLogon(){ | |
345 applet_widget_unregister_callback(APPLET_WIDGET(applet),"signoff"); | |
346 applet_widget_register_callback(APPLET_WIDGET(applet), | |
347 "signon", | |
348 _("Signon"), | |
342
f4fba304b236
[gaim-migrate @ 352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
340
diff
changeset
|
349 applet_do_signon, |
1 | 350 NULL); |
351 } | |
352 | |
353 /*************************************************************** | |
354 ** | |
355 ** function get_applet_pos | |
356 ** visibility - private | |
357 ** | |
358 ** output: | |
359 ** GtKAllocation - a Gtk struct that holds the | |
360 ** position of the dialog | |
361 ** | |
362 ** description - returns the x,y position the buddy list should | |
363 ** should be placed based on the position | |
364 ** of the applet and the orientation | |
365 ** of the Gnome panel. | |
366 ** | |
367 ****************************************************************/ | |
340
0d9cfc3579a5
[gaim-migrate @ 350]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
368 GtkAllocation get_applet_pos(gboolean for_blist) { |
1 | 369 gint x,y,pad; |
370 GtkRequisition buddy_req, applet_req; | |
371 GtkAllocation result; | |
372 GNOME_Panel_OrientType orient = applet_widget_get_panel_orient( APPLET_WIDGET(applet) ); | |
373 pad = 5; | |
338
9d258a0aa560
[gaim-migrate @ 348]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
246
diff
changeset
|
374 gdk_window_get_position(gtk_widget_get_parent_window(appletframe), &x, &y); |
340
0d9cfc3579a5
[gaim-migrate @ 350]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
375 if (for_blist) |
0d9cfc3579a5
[gaim-migrate @ 350]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
376 buddy_req = gnome_buddy_get_dimentions(); |
0d9cfc3579a5
[gaim-migrate @ 350]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
377 else |
0d9cfc3579a5
[gaim-migrate @ 350]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
378 buddy_req = mainwindow->requisition; |
338
9d258a0aa560
[gaim-migrate @ 348]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
246
diff
changeset
|
379 applet_req = appletframe->requisition; |
1 | 380 switch( orient ){ |
381 case ORIENT_UP: | |
382 result.x=x; | |
383 result.y=y-(buddy_req.height+pad); | |
384 break; | |
385 case ORIENT_DOWN: | |
386 result.x=x; | |
387 result.y=y+applet_req.height+pad; | |
388 | |
389 break; | |
390 case ORIENT_LEFT: | |
391 result.x=x-(buddy_req.width + pad ); | |
392 result.y=y; | |
393 break; | |
394 case ORIENT_RIGHT: | |
395 result.x=x+applet_req.width+pad; | |
396 result.y=y; | |
397 break; | |
398 } | |
399 | |
400 | |
401 return result; | |
402 } | |
403 | |
404 | |
405 | |
406 void createOfflinePopup(){ | |
407 applet_show_login( APPLET_WIDGET(applet), NULL ); | |
408 } | |
409 | |
410 | |
411 void createSignonPopup(){ | |
412 applet_draw_open = FALSE; | |
413 } | |
414 | |
415 | |
416 void createOnlinePopup(){ | |
417 GtkAllocation al; | |
418 make_buddy(); | |
340
0d9cfc3579a5
[gaim-migrate @ 350]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
419 al = get_applet_pos(TRUE); |
1 | 420 gnome_buddy_set_pos( al.x, al.y ); |
421 } | |
422 | |
423 | |
424 void createPendingPopup(){ | |
425 applet_draw_open = FALSE; | |
426 } | |
427 | |
428 | |
429 void createAwayPopup(){ | |
83 | 430 createOnlinePopup(); |
1 | 431 } |
432 | |
433 | |
434 void closeOfflinePopup(){ | |
435 cancel_logon(); | |
436 set_applet_draw_closed(); | |
437 } | |
438 | |
439 | |
440 void closeSignonPopup(){ | |
441 | |
442 } | |
443 | |
444 | |
445 void closeOnlinePopup(){ | |
446 set_applet_draw_closed(); | |
447 applet_destroy_buddy(); | |
448 } | |
449 | |
450 | |
451 void closePendingPopup(){ | |
452 applet_draw_open = FALSE; | |
453 } | |
454 | |
455 | |
456 void closeAwayPopup(){ | |
83 | 457 closeOnlinePopup(); |
1 | 458 } |
459 | |
338
9d258a0aa560
[gaim-migrate @ 348]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
246
diff
changeset
|
460 void AppletClicked( GtkWidget *sender, GdkEventButton *ev, gpointer data ){ |
9d258a0aa560
[gaim-migrate @ 348]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
246
diff
changeset
|
461 if (!ev || ev->button != 1 || ev->type != GDK_BUTTON_PRESS) |
9d258a0aa560
[gaim-migrate @ 348]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
246
diff
changeset
|
462 return; |
1 | 463 |
464 if( applet_draw_open ){ | |
465 switch( MRI_user_status ){ | |
466 case offline: | |
467 closeOfflinePopup(); | |
468 break; | |
469 case signing_on: | |
470 closeSignonPopup(); | |
471 break; | |
472 case online: | |
473 closeOnlinePopup(); | |
474 | |
475 break; | |
476 case unread_message_pending: | |
477 closePendingPopup(); | |
478 break; | |
479 case away: | |
480 closeAwayPopup(); | |
481 break; | |
482 } | |
483 } else { | |
484 set_applet_draw_open(); | |
485 switch( MRI_user_status ){ | |
486 case offline: | |
487 createOfflinePopup(); | |
488 break; | |
489 case signing_on: | |
490 createSignonPopup(); | |
491 break; | |
492 case online: | |
493 createOnlinePopup(); | |
494 break; | |
495 case unread_message_pending: | |
496 createPendingPopup(); | |
497 break; | |
498 case away: | |
499 createAwayPopup(); | |
500 break; | |
501 } | |
502 | |
503 | |
504 } | |
505 } | |
506 | |
507 | |
508 /*************************************************************** | |
509 ** | |
510 ** Initialize GNOME stuff | |
511 ** | |
512 ****************************************************************/ | |
513 | |
338
9d258a0aa560
[gaim-migrate @ 348]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
246
diff
changeset
|
514 gint init_applet_mgr(int argc, char *argv[]) { |
1 | 515 GtkWidget *vbox; |
516 | |
517 GtkStyle *label_style; | |
518 GdkFont *label_font = NULL; | |
519 | |
520 applet_widget_init("GAIM",VERSION,argc,argv,NULL,0,NULL); | |
521 | |
522 /*init imlib for graphics*/ | |
523 gdk_imlib_init(); | |
524 gtk_widget_push_visual(gdk_imlib_get_visual()); | |
525 gtk_widget_push_colormap(gdk_imlib_get_colormap()); | |
342
f4fba304b236
[gaim-migrate @ 352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
340
diff
changeset
|
526 |
1 | 527 applet=applet_widget_new("gaim_applet"); |
528 if(!applet) g_error(_("Can't create GAIM applet!")); | |
338
9d258a0aa560
[gaim-migrate @ 348]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
246
diff
changeset
|
529 gtk_widget_set_events(applet, gtk_widget_get_events(applet) | |
9d258a0aa560
[gaim-migrate @ 348]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
246
diff
changeset
|
530 GDK_BUTTON_PRESS_MASK); |
9d258a0aa560
[gaim-migrate @ 348]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
246
diff
changeset
|
531 |
9d258a0aa560
[gaim-migrate @ 348]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
246
diff
changeset
|
532 appletframe = gtk_frame_new(NULL); |
1 | 533 |
338
9d258a0aa560
[gaim-migrate @ 348]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
246
diff
changeset
|
534 gtk_widget_set_usize(appletframe, 48, 48); |
1 | 535 |
536 | |
537 /*load offline icon*/ | |
338
9d258a0aa560
[gaim-migrate @ 348]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
246
diff
changeset
|
538 load_applet_icon( GAIM_GNOME_OFFLINE_ICON, 32, 32, |
9d258a0aa560
[gaim-migrate @ 348]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
246
diff
changeset
|
539 &icon_offline_pm, &icon_offline_bm ); |
1 | 540 |
541 /*load connecting icon*/ | |
338
9d258a0aa560
[gaim-migrate @ 348]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
246
diff
changeset
|
542 load_applet_icon( GAIM_GNOME_CONNECT_ICON, 32, 32, |
9d258a0aa560
[gaim-migrate @ 348]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
246
diff
changeset
|
543 &icon_connect_pm, &icon_connect_bm ); |
1 | 544 |
545 /*load online icon*/ | |
338
9d258a0aa560
[gaim-migrate @ 348]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
246
diff
changeset
|
546 load_applet_icon( GAIM_GNOME_ONLINE_ICON, 32, 32, |
9d258a0aa560
[gaim-migrate @ 348]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
246
diff
changeset
|
547 &icon_online_pm, &icon_online_bm ); |
1 | 548 |
549 /*icon_away and icon_msg_pennding need to be implemented*/ | |
550 | |
551 icon=gtk_pixmap_new(icon_offline_pm,icon_offline_bm); | |
552 | |
342
f4fba304b236
[gaim-migrate @ 352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
340
diff
changeset
|
553 update_applet(NULL); |
1 | 554 gtk_timeout_add( 1500, (GtkFunction)update_applet, NULL ); |
555 | |
556 vbox = gtk_vbox_new(FALSE,0); | |
557 | |
558 gtk_box_pack_start(GTK_BOX(vbox), icon, FALSE, TRUE, 0); | |
559 | |
350
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
560 status_label = gtk_label_new(_("Offline")); |
1 | 561 /*set this label's font*/ |
562 label_style = gtk_widget_get_style( status_label ); | |
563 | |
564 label_font = gdk_font_load( _MSG_FONT_ ); | |
565 | |
566 | |
567 if( label_font != NULL ){ | |
568 label_style->font = label_font; | |
569 gtk_widget_set_style( status_label, label_style ); | |
570 } else { | |
350
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
571 sprintf(debug_buff, _("Font does not exist") ); |
1 | 572 debug_print(debug_buff); |
573 } | |
574 | |
575 gtk_box_pack_start(GTK_BOX(vbox), status_label, FALSE, TRUE, 0); | |
576 | |
338
9d258a0aa560
[gaim-migrate @ 348]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
246
diff
changeset
|
577 gtk_container_add( GTK_CONTAINER(appletframe), vbox ); |
9d258a0aa560
[gaim-migrate @ 348]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
246
diff
changeset
|
578 applet_widget_add(APPLET_WIDGET(applet), appletframe); |
1 | 579 |
580 gtk_widget_show( status_label ); | |
581 gtk_widget_show( vbox ); | |
338
9d258a0aa560
[gaim-migrate @ 348]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
246
diff
changeset
|
582 gtk_widget_show( appletframe ); |
1 | 583 |
584 applet_widget_register_stock_callback(APPLET_WIDGET(applet), | |
585 "about", | |
586 GNOME_STOCK_MENU_ABOUT, | |
587 _("About..."), | |
588 applet_show_about, | |
589 NULL); | |
590 | |
338
9d258a0aa560
[gaim-migrate @ 348]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
246
diff
changeset
|
591 gtk_signal_connect( GTK_OBJECT(applet), "button_press_event", GTK_SIGNAL_FUNC( AppletClicked), NULL); |
1 | 592 |
593 gtk_widget_show(icon); | |
594 gtk_widget_show(applet); | |
595 return 0; | |
596 } | |
597 | |
598 void setUserState( enum gaim_user_states state ){ | |
599 MRI_user_status = state; | |
82 | 600 update_applet(NULL); |
1 | 601 } |
602 | |
603 enum gaim_user_states getUserState(){ | |
604 return MRI_user_status; | |
605 } | |
606 | |
607 void set_applet_draw_open(){ | |
608 applet_draw_open = TRUE; | |
609 } | |
610 | |
611 void set_applet_draw_closed(){ | |
612 applet_draw_open = FALSE; | |
613 } | |
614 | |
342
f4fba304b236
[gaim-migrate @ 352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
340
diff
changeset
|
615 void applet_set_tooltips(char *msg) { |
f4fba304b236
[gaim-migrate @ 352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
340
diff
changeset
|
616 applet_widget_set_tooltip(APPLET_WIDGET(applet), msg); |
f4fba304b236
[gaim-migrate @ 352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
340
diff
changeset
|
617 } |
f4fba304b236
[gaim-migrate @ 352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
340
diff
changeset
|
618 |
1 | 619 #endif /*USE_APPLET*/ |