src/buddy.c

Fri, 14 Mar 2003 16:01:08 +0000

author
Mark Doliner <markdoliner@pidgin.im>
date
Fri, 14 Mar 2003 16:01:08 +0000
changeset 4773
1cc75c5e16b0
parent 4770
be590660a9c2
child 4776
2683f9313083
permissions
-rw-r--r--

[gaim-migrate @ 5092]
This fixes the crash from signing on then signing off again in less
than 10 seconds. It also fixes the "you have signed on too many
times, wait 10 minutes then try again" crash.

It's like butter.

1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1 /*
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2 * gaim
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3 *
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4 * Copyright (C) 1998-1999, Mark Spencer <markster@marko.net>
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
5 *
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
6 * This program is free software; you can redistribute it and/or modify
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
7 * it under the terms of the GNU General Public License as published by
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
9 * (at your option) any later version.
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
10 *
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
11 * This program is distributed in the hope that it will be useful,
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
14 * GNU General Public License for more details.
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
15 *
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
16 * You should have received a copy of the GNU General Public License
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
17 * along with this program; if not, write to the Free Software
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
19 *
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
20 */
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
21
349
6f7d28b0f98d [gaim-migrate @ 359]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 342
diff changeset
22 #ifdef HAVE_CONFIG_H
2090
bab8b7e309db [gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2048
diff changeset
23 #include <config.h>
349
6f7d28b0f98d [gaim-migrate @ 359]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 342
diff changeset
24 #endif
391
677e4414a83f [gaim-migrate @ 401]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 350
diff changeset
25 #ifdef GAIM_PLUGINS
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3570
diff changeset
26 #ifndef _WIN32
391
677e4414a83f [gaim-migrate @ 401]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 350
diff changeset
27 #include <dlfcn.h>
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3570
diff changeset
28 #endif
391
677e4414a83f [gaim-migrate @ 401]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 350
diff changeset
29 #endif /* GAIM_PLUGINS */
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
30 #include <string.h>
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
31 #include <stdio.h>
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
32 #include <stdlib.h>
3159
15816c95c61c [gaim-migrate @ 3175]
Sean Egan <seanegan@pidgin.im>
parents: 3154
diff changeset
33 #include <ctype.h>
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
34 #include <math.h>
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
35 #include <time.h>
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3570
diff changeset
36 #include <ctype.h>
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3570
diff changeset
37
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3570
diff changeset
38 #ifdef _WIN32
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3570
diff changeset
39 #include <gdk/gdkwin32.h>
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3570
diff changeset
40 #else
1233
e73eeec6323c [gaim-migrate @ 1243]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1230
diff changeset
41 #include <unistd.h>
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3570
diff changeset
42 #include <gdk/gdkx.h>
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3570
diff changeset
43 #endif
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
44
1634
73a6ef5d2677 [gaim-migrate @ 1644]
baldnik
parents: 1625
diff changeset
45 #include <gdk/gdkkeysyms.h>
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
46 #include <gtk/gtk.h>
1030
b9fa9eadc0a4 [gaim-migrate @ 1040]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
47 #include "prpl.h"
4561
2a82628d7345 [gaim-migrate @ 4842]
Nathan Walp <nwalp@pidgin.im>
parents: 4553
diff changeset
48 #include "sound.h"
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
49 #include "gaim.h"
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
50 #include "gtklist.h"
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
51 #include "gtkft.h"
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3570
diff changeset
52
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3570
diff changeset
53 #ifdef _WIN32
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3570
diff changeset
54 #include "win32dep.h"
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3570
diff changeset
55 #endif
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3570
diff changeset
56
4695
82df59fb9931 [gaim-migrate @ 5006]
Christian Hammond <chipx86@chipx86.com>
parents: 4694
diff changeset
57 static struct gaim_gtk_buddy_list *gtkblist = NULL;
82df59fb9931 [gaim-migrate @ 5006]
Christian Hammond <chipx86@chipx86.com>
parents: 4694
diff changeset
58
4698
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
59 /* Docklet nonsense */
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
60 static gboolean gaim_gtk_blist_obscured = FALSE;
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
61
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
62 static void gaim_gtk_blist_update(struct gaim_buddy_list *list, GaimBlistNode *node);
4724
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
63 static char *gaim_get_tooltip_text(struct buddy *b);
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
64 static GdkPixbuf *gaim_gtk_blist_get_status_icon(struct buddy *b, GaimStatusIconSize size);
2372
c24942700dfd [gaim-migrate @ 2385]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2334
diff changeset
65
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
66 /***************************************************
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
67 * Callbacks *
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
68 ***************************************************/
3869
f4899f8b6371 [gaim-migrate @ 4021]
Rob Flynn <gaim@robflynn.com>
parents: 3859
diff changeset
69
4698
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
70 static void gaim_gtk_blist_destroy_cb()
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
71 {
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
72 if (docklet_count)
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
73 gaim_blist_set_visible(FALSE);
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
74 else
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
75 do_quit();
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
76 }
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
77
4732
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
78 static void gtk_blist_menu_info_cb(GtkWidget *w, struct buddy *b)
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
79 {
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
80 serv_get_info(b->account->gc, b->name);
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
81 }
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
82
4697
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
83 static void gtk_blist_menu_im_cb(GtkWidget *w, struct buddy *b)
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
84 {
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
85 gaim_conversation_new(GAIM_CONV_IM, b->account, b->name);
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
86 }
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
87
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
88 static void gtk_blist_menu_alias_cb(GtkWidget *w, struct buddy *b)
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
89 {
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
90 alias_dialog_bud(b);
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
91 }
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
92
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
93 static void gtk_blist_menu_bp_cb(GtkWidget *w, struct buddy *b)
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
94 {
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
95 show_new_bp(b->name, b->account->gc, b->idle,
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
96 b->uc & UC_UNAVAILABLE, NULL);
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
97 }
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
98
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
99 static void gtk_blist_menu_showlog_cb(GtkWidget *w, struct buddy *b)
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
100 {
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
101 show_log(b->name);
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
102 }
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
103
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
104 static void gtk_blist_show_systemlog_cb()
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
105 {
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
106 show_log(NULL);
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
107 }
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
108
4692
788406bcb759 [gaim-migrate @ 5003]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4691
diff changeset
109 static void gtk_blist_button_im_cb(GtkWidget *w, GtkTreeView *tv)
788406bcb759 [gaim-migrate @ 5003]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4691
diff changeset
110 {
788406bcb759 [gaim-migrate @ 5003]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4691
diff changeset
111 GtkTreeIter iter;
788406bcb759 [gaim-migrate @ 5003]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4691
diff changeset
112 GtkTreeModel *model = gtk_tree_view_get_model(tv);
788406bcb759 [gaim-migrate @ 5003]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4691
diff changeset
113 GtkTreeSelection *sel = gtk_tree_view_get_selection(tv);
788406bcb759 [gaim-migrate @ 5003]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4691
diff changeset
114
788406bcb759 [gaim-migrate @ 5003]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4691
diff changeset
115 if(gtk_tree_selection_get_selected(sel, &model, &iter)){
788406bcb759 [gaim-migrate @ 5003]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4691
diff changeset
116 GaimBlistNode *node;
788406bcb759 [gaim-migrate @ 5003]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4691
diff changeset
117
788406bcb759 [gaim-migrate @ 5003]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4691
diff changeset
118 gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &node, -1);
788406bcb759 [gaim-migrate @ 5003]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4691
diff changeset
119 if (GAIM_BLIST_NODE_IS_BUDDY(node))
788406bcb759 [gaim-migrate @ 5003]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4691
diff changeset
120 gaim_conversation_new(GAIM_CONV_IM, ((struct buddy*)node)->account, ((struct buddy*)node)->name);
788406bcb759 [gaim-migrate @ 5003]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4691
diff changeset
121 }
4694
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
122 }
4692
788406bcb759 [gaim-migrate @ 5003]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4691
diff changeset
123
4694
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
124 static void gtk_blist_button_info_cb(GtkWidget *w, GtkTreeView *tv)
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
125 {
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
126 GtkTreeIter iter;
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
127 GtkTreeModel *model = gtk_tree_view_get_model(tv);
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
128 GtkTreeSelection *sel = gtk_tree_view_get_selection(tv);
4692
788406bcb759 [gaim-migrate @ 5003]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4691
diff changeset
129
4694
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
130 if(gtk_tree_selection_get_selected(sel, &model, &iter)){
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
131 GaimBlistNode *node;
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
132
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
133 gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &node, -1);
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
134 if (GAIM_BLIST_NODE_IS_BUDDY(node)) {
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
135 serv_get_info(((struct buddy*)node)->account->gc, ((struct buddy*)node)->name);
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
136 return;
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
137 }
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
138 }
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
139 show_info_dialog();
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
140 }
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
141
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
142 static void gtk_blist_button_chat_cb(GtkWidget *w, gpointer data)
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
143 {
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
144 /* FIXME: someday, we can check to see if we've selected a chat node */
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
145 join_chat();
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
146 }
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
147
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
148 static void gtk_blist_button_away_cb(GtkWidget *w, gpointer data)
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
149 {
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
150 gtk_menu_popup(GTK_MENU(awaymenu), NULL, NULL, NULL, NULL, 1, GDK_CURRENT_TIME);
4692
788406bcb759 [gaim-migrate @ 5003]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4691
diff changeset
151 }
788406bcb759 [gaim-migrate @ 5003]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4691
diff changeset
152
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
153 static void gtk_blist_row_activated_cb(GtkTreeView *tv, GtkTreePath *path, GtkTreeViewColumn *col, gpointer data) {
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
154 GaimBlistNode *node;
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
155 GtkTreeIter iter;
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
156 GValue val = { 0, };
3154
79a95c2f99e6 [gaim-migrate @ 3170]
Jason Willis
parents: 3152
diff changeset
157
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
158 gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), &iter, path);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
159
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
160 gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &val);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
161 node = g_value_get_pointer(&val);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
162
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
163 if (GAIM_BLIST_NODE_IS_BUDDY(node)) {
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
164 gaim_conversation_new(GAIM_CONV_IM, ((struct buddy*)node)->account, ((struct buddy*)node)->name);
4697
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
165 } else if (GAIM_BLIST_NODE_IS_GROUP(node)) {
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
166 if (gtk_tree_view_row_expanded(tv, path))
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
167 gtk_tree_view_collapse_row(tv, path);
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
168 else
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
169 gtk_tree_view_expand_row(tv,path,FALSE);
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
170 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
171 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
172
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
173 static void gaim_proto_menu_cb(GtkMenuItem *item, struct buddy *b)
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
174 {
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
175 struct proto_buddy_menu *pbm = g_object_get_data(G_OBJECT(item), "gaimcallback");
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
176 if (pbm->callback)
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
177 pbm->callback(pbm->gc, b->name);
1396
c038bcdcc1e9 [gaim-migrate @ 1406]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1392
diff changeset
178 }
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
179
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
180 static gboolean gtk_blist_button_press_cb(GtkWidget *tv, GdkEventButton *event, gpointer null)
1391
e6e7f3bf1e81 [gaim-migrate @ 1401]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1376
diff changeset
181 {
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
182 GtkTreePath *path;
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
183 GaimBlistNode *node;
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
184 GValue val = { 0, };
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
185 GtkTreeIter iter;
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
186 GtkWidget *menu, *menuitem;
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
187 GtkWidget *image;
4702
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
188 GtkTreeSelection *sel;
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
189 GList *list;
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
190 struct prpl *prpl;
1391
e6e7f3bf1e81 [gaim-migrate @ 1401]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1376
diff changeset
191
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
192 if (event->button != 3)
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
193 return FALSE;
4718
688c861c8b63 [gaim-migrate @ 5030]
Nathan Walp <nwalp@pidgin.im>
parents: 4716
diff changeset
194
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
195 /* Here we figure out which node was clicked */
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
196 if (!gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(tv), event->x, event->y, &path, NULL, NULL, NULL))
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
197 return FALSE;
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
198 gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), &iter, path);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
199 gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &val);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
200 node = g_value_get_pointer(&val);
4718
688c861c8b63 [gaim-migrate @ 5030]
Nathan Walp <nwalp@pidgin.im>
parents: 4716
diff changeset
201
4721
6c6442bbd00c [gaim-migrate @ 5033]
Nathan Walp <nwalp@pidgin.im>
parents: 4718
diff changeset
202 if (!GAIM_BLIST_NODE_IS_BUDDY(node)) {
6c6442bbd00c [gaim-migrate @ 5033]
Nathan Walp <nwalp@pidgin.im>
parents: 4718
diff changeset
203 gtk_tree_path_free(path);
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
204 return FALSE;
4721
6c6442bbd00c [gaim-migrate @ 5033]
Nathan Walp <nwalp@pidgin.im>
parents: 4718
diff changeset
205 }
4718
688c861c8b63 [gaim-migrate @ 5030]
Nathan Walp <nwalp@pidgin.im>
parents: 4716
diff changeset
206
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
207 menu = gtk_menu_new();
3251
360fb695996d [gaim-migrate @ 3269]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3204
diff changeset
208
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
209 /* Protocol specific options */
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
210 prpl = find_prpl(((struct buddy*)node)->account->protocol);
4732
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
211
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
212 if(prpl && prpl->get_info) {
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
213 menuitem = gtk_image_menu_item_new_with_mnemonic("_Get Info");
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
214 g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(gtk_blist_menu_info_cb), node);
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
215 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
216 }
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
217
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
218 menuitem = gtk_image_menu_item_new_with_mnemonic("_IM");
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
219 g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(gtk_blist_menu_im_cb), node);
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
220 image = gtk_image_new_from_stock(GAIM_STOCK_IM, GTK_ICON_SIZE_MENU);
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
221 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuitem), image);
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
222 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
223
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
224 menuitem = gtk_image_menu_item_new_with_mnemonic("_Alias");
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
225 g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(gtk_blist_menu_alias_cb), node);
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
226 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
227
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
228 menuitem = gtk_image_menu_item_new_with_mnemonic("Add Buddy _Pounce");
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
229 g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(gtk_blist_menu_bp_cb), node);
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
230 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
231
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
232 menuitem = gtk_image_menu_item_new_with_mnemonic("View _Log");
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
233 g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(gtk_blist_menu_showlog_cb), node);
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
234 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
235
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
236 if (prpl) {
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
237 list = prpl->buddy_menu(((struct buddy*)node)->account->gc, ((struct buddy*)node)->name);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
238 while (list) {
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
239 struct proto_buddy_menu *pbm = list->data;
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
240 menuitem = gtk_menu_item_new_with_mnemonic(pbm->label);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
241 g_object_set_data(G_OBJECT(menuitem), "gaimcallback", pbm);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
242 g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(gaim_proto_menu_cb), node);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
243 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
244 list = list->next;
3313
a2e08cbb143a [gaim-migrate @ 3331]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3279
diff changeset
245 }
3251
360fb695996d [gaim-migrate @ 3269]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3204
diff changeset
246 }
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
247
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
248 gtk_widget_show_all(menu);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
249
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
250 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 3, event->time);
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
251
4702
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
252 #if (1) /* This code only exists because GTK doesn't work. If we return FALSE here, as would be normal
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
253 * the event propoagates down and somehow gets interpreted as the start of a drag event. */
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
254 sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tv));
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
255 gtk_tree_selection_select_path(sel, path);
4721
6c6442bbd00c [gaim-migrate @ 5033]
Nathan Walp <nwalp@pidgin.im>
parents: 4718
diff changeset
256 gtk_tree_path_free(path);
4702
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
257 return TRUE;
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
258 #endif
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
259 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
260
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
261 static void gaim_gtk_blist_reordered_cb(GtkTreeModel *model,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
262 GtkTreePath *path,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
263 GtkTreeIter *iter,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
264 gint *neworder,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
265 gpointer null)
3111
4e5c19f42fbe [gaim-migrate @ 3125]
Christian Hammond <chipx86@chipx86.com>
parents: 3104
diff changeset
266 {
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
267 debug_printf("This doesn't work because GTK is broken\n");
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
268
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
269 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
270
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
271 /* This is called 10 seconds after the buddy logs in. It removes the "logged in" icon and replaces it with
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
272 * the normal status icon */
1072
44ae81f8ea2e [gaim-migrate @ 1082]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1070
diff changeset
273
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
274 static gboolean gaim_reset_present_icon(GaimBlistNode *b)
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
275 {
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
276 ((struct buddy*)b)->present = 1;
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
277 gaim_gtk_blist_update(NULL, b);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
278 return FALSE;
577
0e317d0cfc2c [gaim-migrate @ 587]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 544
diff changeset
279 }
0e317d0cfc2c [gaim-migrate @ 587]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 544
diff changeset
280
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
281 static void gaim_gtk_blist_add_buddy_cb()
935
d772a17fe057 [gaim-migrate @ 945]
Ben Miller <millebe@cs.earlham.edu>
parents: 921
diff changeset
282 {
4690
e30dbd5b361f [gaim-migrate @ 5001]
Nathan Walp <nwalp@pidgin.im>
parents: 4687
diff changeset
283 GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(gtkblist->treeview));
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
284 GtkTreeIter iter;
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
285 GaimBlistNode *node;
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents: 4349
diff changeset
286
4692
788406bcb759 [gaim-migrate @ 5003]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4691
diff changeset
287 if(gtk_tree_selection_get_selected(sel, NULL, &iter)){
788406bcb759 [gaim-migrate @ 5003]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4691
diff changeset
288 gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &node, -1);
4691
72487b69d7ef [gaim-migrate @ 5002]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4690
diff changeset
289 if (GAIM_BLIST_NODE_IS_BUDDY(node))
72487b69d7ef [gaim-migrate @ 5002]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4690
diff changeset
290 show_add_buddy(NULL, NULL, ((struct group*)node->parent)->name, NULL);
72487b69d7ef [gaim-migrate @ 5002]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4690
diff changeset
291 else if (GAIM_BLIST_NODE_IS_GROUP(node))
72487b69d7ef [gaim-migrate @ 5002]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4690
diff changeset
292 show_add_buddy(NULL, NULL, ((struct group*)node)->name, NULL);
72487b69d7ef [gaim-migrate @ 5002]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4690
diff changeset
293 }
4697
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
294 else {
4692
788406bcb759 [gaim-migrate @ 5003]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4691
diff changeset
295 show_add_buddy(NULL, NULL, NULL, NULL);
788406bcb759 [gaim-migrate @ 5003]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4691
diff changeset
296 }
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
297 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
298
4697
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
299 static void gaim_gtk_blist_update_toolbar_icons (GtkWidget *widget, gpointer data) {
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
300 if (GTK_IS_IMAGE(widget)) {
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
301 if (blist_options & OPT_BLIST_SHOW_BUTTON_XPM)
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
302 gtk_widget_show(widget);
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
303 else
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
304 gtk_widget_hide(widget);
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
305 } else if (GTK_IS_CONTAINER(widget)) {
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
306 gtk_container_foreach(GTK_CONTAINER(widget), gaim_gtk_blist_update_toolbar_icons, NULL);
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
307 }
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
308 }
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
309
4702
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
310 static void gaim_gtk_blist_drag_data_get_cb (GtkWidget *widget,
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
311 GdkDragContext *dc,
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
312 GtkSelectionData *data,
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
313 guint info,
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
314 guint time,
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
315 gpointer *null)
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
316 {
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
317 if (data->target == gdk_atom_intern("GAIM_BUDDY", FALSE)) {
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
318 GtkTreeRowReference *ref = g_object_get_data(G_OBJECT(dc), "gtk-tree-view-source-row");
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
319 GtkTreePath *sourcerow = gtk_tree_row_reference_get_path(ref);
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
320 GtkTreeIter iter;
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
321 GaimBlistNode *node = NULL;
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
322 GValue val = {0};
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
323 gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), &iter, sourcerow);
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
324 gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &val);
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
325 node = g_value_get_pointer(&val);
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
326 if (GAIM_BLIST_NODE_IS_BUDDY(node))
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
327 gtk_selection_data_set (data,
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
328 gdk_atom_intern ("GAIM_BUDDY", FALSE),
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
329 8, /* bits */
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
330 (void*)&node,
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
331 sizeof (node));
4721
6c6442bbd00c [gaim-migrate @ 5033]
Nathan Walp <nwalp@pidgin.im>
parents: 4718
diff changeset
332
6c6442bbd00c [gaim-migrate @ 5033]
Nathan Walp <nwalp@pidgin.im>
parents: 4718
diff changeset
333 gtk_tree_path_free(sourcerow);
4702
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
334 }
4721
6c6442bbd00c [gaim-migrate @ 5033]
Nathan Walp <nwalp@pidgin.im>
parents: 4718
diff changeset
335
4702
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
336 }
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
337
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
338 static void gaim_gtk_blist_drag_data_rcv_cb(GtkWidget *widget, GdkDragContext *dc, guint x, guint y,
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
339 GtkSelectionData *sd, guint info, guint t)
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
340 {
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
341 if (sd->target == gdk_atom_intern("GAIM_BUDDY", FALSE)) {
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
342 struct buddy *b = NULL;
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
343 GtkTreePath *path = NULL;
4704
283bd3d31796 [gaim-migrate @ 5015]
Nathan Walp <nwalp@pidgin.im>
parents: 4702
diff changeset
344 GtkTreeViewDropPosition position;
4702
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
345 memcpy(&b, sd->data, sizeof(b));
4704
283bd3d31796 [gaim-migrate @ 5015]
Nathan Walp <nwalp@pidgin.im>
parents: 4702
diff changeset
346 if(gtk_tree_view_get_dest_row_at_pos(GTK_TREE_VIEW(widget), x, y, &path, &position)) {
283bd3d31796 [gaim-migrate @ 5015]
Nathan Walp <nwalp@pidgin.im>
parents: 4702
diff changeset
347 /* if we're here, I think it means the drop is ok */
4770
be590660a9c2 [gaim-migrate @ 5088]
Sean Egan <seanegan@pidgin.im>
parents: 4767
diff changeset
348 GtkTreeIter iter;
be590660a9c2 [gaim-migrate @ 5088]
Sean Egan <seanegan@pidgin.im>
parents: 4767
diff changeset
349 GaimBlistNode *node;
be590660a9c2 [gaim-migrate @ 5088]
Sean Egan <seanegan@pidgin.im>
parents: 4767
diff changeset
350 GValue val = {0};
be590660a9c2 [gaim-migrate @ 5088]
Sean Egan <seanegan@pidgin.im>
parents: 4767
diff changeset
351 gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), &iter, path);
be590660a9c2 [gaim-migrate @ 5088]
Sean Egan <seanegan@pidgin.im>
parents: 4767
diff changeset
352 gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &val);
be590660a9c2 [gaim-migrate @ 5088]
Sean Egan <seanegan@pidgin.im>
parents: 4767
diff changeset
353 node = g_value_get_pointer(&val);
be590660a9c2 [gaim-migrate @ 5088]
Sean Egan <seanegan@pidgin.im>
parents: 4767
diff changeset
354 if (GAIM_BLIST_NODE_IS_BUDDY(node)) {
be590660a9c2 [gaim-migrate @ 5088]
Sean Egan <seanegan@pidgin.im>
parents: 4767
diff changeset
355 if (position == GTK_TREE_VIEW_DROP_AFTER) {
be590660a9c2 [gaim-migrate @ 5088]
Sean Egan <seanegan@pidgin.im>
parents: 4767
diff changeset
356 gaim_blist_add_buddy(b, node->parent, node);
be590660a9c2 [gaim-migrate @ 5088]
Sean Egan <seanegan@pidgin.im>
parents: 4767
diff changeset
357 } else if (position == GTK_TREE_VIEW_DROP_BEFORE) {
be590660a9c2 [gaim-migrate @ 5088]
Sean Egan <seanegan@pidgin.im>
parents: 4767
diff changeset
358 gaim_blist_add_buddy(b, node->parent, node->prev);
be590660a9c2 [gaim-migrate @ 5088]
Sean Egan <seanegan@pidgin.im>
parents: 4767
diff changeset
359 }
be590660a9c2 [gaim-migrate @ 5088]
Sean Egan <seanegan@pidgin.im>
parents: 4767
diff changeset
360 } else if (GAIM_BLIST_NODE_IS_GROUP(node)) {
be590660a9c2 [gaim-migrate @ 5088]
Sean Egan <seanegan@pidgin.im>
parents: 4767
diff changeset
361 gaim_blist_add_buddy(b, node, NULL);
be590660a9c2 [gaim-migrate @ 5088]
Sean Egan <seanegan@pidgin.im>
parents: 4767
diff changeset
362 }
4721
6c6442bbd00c [gaim-migrate @ 5033]
Nathan Walp <nwalp@pidgin.im>
parents: 4718
diff changeset
363 gtk_tree_path_free(path);
4704
283bd3d31796 [gaim-migrate @ 5015]
Nathan Walp <nwalp@pidgin.im>
parents: 4702
diff changeset
364 }
4702
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
365 }
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
366 }
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
367
4724
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
368 static void gaim_gtk_blist_paint_tip(GtkWidget *widget, GdkEventExpose *event, struct buddy *b)
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
369 {
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
370 GtkStyle *style;
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
371 GdkPixbuf *pixbuf = gaim_gtk_blist_get_status_icon(b, GAIM_STATUS_ICON_LARGE);
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
372 PangoLayout *layout;
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
373 char *tooltiptext = gaim_get_tooltip_text(b);
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
374
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
375 layout = gtk_widget_create_pango_layout (gtkblist->tipwindow, NULL);
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
376 pango_layout_set_markup(layout, tooltiptext, strlen(tooltiptext));
4732
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
377 pango_layout_set_wrap(layout, PANGO_WRAP_WORD);
4733
8cad70d97e54 [gaim-migrate @ 5048]
Sean Egan <seanegan@pidgin.im>
parents: 4732
diff changeset
378 pango_layout_set_width(layout, 300000);
4724
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
379 style = gtkblist->tipwindow->style;
4732
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
380
4724
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
381 gtk_paint_flat_box (style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, GTK_SHADOW_OUT,
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
382 NULL, gtkblist->tipwindow, "tooltip", 0, 0, -1, -1);
4729
7521e221beb7 [gaim-migrate @ 5042]
Nathan Walp <nwalp@pidgin.im>
parents: 4725
diff changeset
383
7521e221beb7 [gaim-migrate @ 5042]
Nathan Walp <nwalp@pidgin.im>
parents: 4725
diff changeset
384 #if GTK_CHECK_VERSION(2,2,0)
4724
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
385 gdk_draw_pixbuf(GDK_DRAWABLE(gtkblist->tipwindow->window), NULL, pixbuf,
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
386 0, 0, 4, 4, -1 , -1, GDK_RGB_DITHER_NONE, 0, 0);
4729
7521e221beb7 [gaim-migrate @ 5042]
Nathan Walp <nwalp@pidgin.im>
parents: 4725
diff changeset
387 #else
4758
669aa3d57680 [gaim-migrate @ 5075]
Nathan Walp <nwalp@pidgin.im>
parents: 4757
diff changeset
388 gdk_pixbuf_render_to_drawable(pixbuf, GDK_DRAWABLE(gtkblist->tipwindow->window), NULL, 0, 0, 4, 4, -1, -1, GDK_RGB_DITHER_NONE, 0, 0);
4729
7521e221beb7 [gaim-migrate @ 5042]
Nathan Walp <nwalp@pidgin.im>
parents: 4725
diff changeset
389 #endif
4724
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
390
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
391 gtk_paint_layout (style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, TRUE,
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
392 NULL, gtkblist->tipwindow, "tooltip", 38, 4, layout);
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
393
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
394 g_object_unref (pixbuf);
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
395 g_object_unref (layout);
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
396 g_free(tooltiptext);
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
397 return;
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
398 }
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
399
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
400 static gboolean gaim_gtk_blist_tooltip_timeout(GtkWidget *tv)
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
401 {
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
402 GtkTreePath *path;
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
403 GtkTreeIter iter;
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
404 GaimBlistNode *node;
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
405 GValue val = {0};
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
406
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
407 if (!gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(tv), gtkblist->rect.x, gtkblist->rect.y, &path, NULL, NULL, NULL))
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
408 return FALSE;
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
409 gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), &iter, path);
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
410 gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &val);
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
411 node = g_value_get_pointer(&val);
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
412
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
413 if (GAIM_BLIST_NODE_IS_BUDDY(node)) {
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
414 int scr_w,scr_h, w, h, x, y;
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
415 PangoLayout *layout;
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
416 struct buddy *buddy = (struct buddy*)node;
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
417 char *tooltiptext = gaim_get_tooltip_text(buddy);
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
418 gtkblist->tipwindow = gtk_window_new(GTK_WINDOW_POPUP);
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
419 gtk_widget_set_app_paintable(gtkblist->tipwindow, TRUE);
4729
7521e221beb7 [gaim-migrate @ 5042]
Nathan Walp <nwalp@pidgin.im>
parents: 4725
diff changeset
420 gtk_window_set_resizable(GTK_WINDOW(gtkblist->tipwindow), FALSE);
4724
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
421 gtk_widget_set_name(gtkblist->tipwindow, "gtk-tooltips");
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
422 g_signal_connect(G_OBJECT(gtkblist->tipwindow), "expose_event",
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
423 G_CALLBACK(gaim_gtk_blist_paint_tip), buddy);
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
424 gtk_widget_ensure_style (gtkblist->tipwindow);
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
425
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
426 layout = gtk_widget_create_pango_layout (gtkblist->tipwindow, NULL);
4733
8cad70d97e54 [gaim-migrate @ 5048]
Sean Egan <seanegan@pidgin.im>
parents: 4732
diff changeset
427 pango_layout_set_wrap(layout, PANGO_WRAP_WORD);
8cad70d97e54 [gaim-migrate @ 5048]
Sean Egan <seanegan@pidgin.im>
parents: 4732
diff changeset
428 pango_layout_set_width(layout, 300000);
4724
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
429 pango_layout_set_markup(layout, tooltiptext, strlen(tooltiptext));
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
430 scr_w = gdk_screen_width();
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
431 scr_h = gdk_screen_height();
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
432 pango_layout_get_size (layout, &w, &h);
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
433 w = PANGO_PIXELS(w) + 8;
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
434 h = PANGO_PIXELS(h) + 8;
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
435
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
436 /* 38 is the size of a large status icon plus 4 pixels padding on each side.
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
437 I should #define this or something */
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
438 w = w + 38;
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
439 h = MAX(h, 38);
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
440
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
441 gdk_window_get_pointer(NULL, &x, &y, NULL);
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
442 if (GTK_WIDGET_NO_WINDOW(gtkblist->window))
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
443 y+=gtkblist->window->allocation.y;
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
444
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
445 x -= ((w >> 1) + 4);
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
446
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
447 if ((x + w) > scr_w)
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
448 x -= (x + w) - scr_w;
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
449 else if (x < 0)
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
450 x = 0;
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
451
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
452 if ((y + h + 4) > scr_h)
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
453 y = y - h;
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
454 else
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
455 y = y + 6;
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
456 g_object_unref (layout);
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
457 g_free(tooltiptext);
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
458 gtk_widget_set_size_request(gtkblist->tipwindow, w, h);
4729
7521e221beb7 [gaim-migrate @ 5042]
Nathan Walp <nwalp@pidgin.im>
parents: 4725
diff changeset
459 gtk_window_move(GTK_WINDOW(gtkblist->tipwindow), x, y);
4724
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
460 gtk_widget_show(gtkblist->tipwindow);
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
461 }
4729
7521e221beb7 [gaim-migrate @ 5042]
Nathan Walp <nwalp@pidgin.im>
parents: 4725
diff changeset
462
4724
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
463 gtk_tree_path_free(path);
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
464 return FALSE;
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
465 }
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
466
4730
f6ae5bf30171 [gaim-migrate @ 5043]
Sean Egan <seanegan@pidgin.im>
parents: 4729
diff changeset
467 static gboolean gaim_gtk_blist_motion_cb (GtkWidget *tv, GdkEventMotion *event, gpointer null)
4724
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
468 {
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
469 GtkTreePath *path;
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
470
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
471 if (gtkblist->timeout) {
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
472 if ((event->y > gtkblist->rect.y) && ((event->y - gtkblist->rect.height) < gtkblist->rect.y))
4732
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
473 return FALSE;
4724
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
474 /* We've left the cell. Remove the timeout and create a new one below */
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
475 if (gtkblist->tipwindow) {
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
476 gtk_widget_destroy(gtkblist->tipwindow);
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
477 gtkblist->tipwindow = NULL;
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
478 }
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
479
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
480 g_source_remove(gtkblist->timeout);
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
481 }
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
482
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
483 gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(tv), event->x, event->y, &path, NULL, NULL, NULL);
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
484 gtk_tree_view_get_cell_area(GTK_TREE_VIEW(tv), path, NULL, &gtkblist->rect);
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
485 if (path)
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
486 gtk_tree_path_free(path);
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
487 gtkblist->timeout = g_timeout_add(500, (GSourceFunc)gaim_gtk_blist_tooltip_timeout, tv);
4730
f6ae5bf30171 [gaim-migrate @ 5043]
Sean Egan <seanegan@pidgin.im>
parents: 4729
diff changeset
488 return FALSE;
4724
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
489 }
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
490
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
491 static void gaim_gtk_blist_leave_cb (GtkWidget *w, GdkEventCrossing *e, gpointer n)
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
492 {
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
493 if (gtkblist->timeout == 0)
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
494 return;
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
495 if (gtkblist->tipwindow) {
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
496 gtk_widget_destroy(gtkblist->tipwindow);
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
497 gtkblist->tipwindow = NULL;
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
498 }
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
499 g_source_remove(gtkblist->timeout);
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
500 gtkblist->timeout = 0;
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
501 }
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
502
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
503 /***************************************************
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
504 * Crap *
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
505 ***************************************************/
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
506 static GtkItemFactoryEntry blist_menu[] =
1929
0b18211e20a6 [gaim-migrate @ 1939]
Stephan Dittmann
parents: 1918
diff changeset
507 {
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
508 /* Buddies menu */
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
509 { N_("/_Buddies"), NULL, NULL, 0, "<Branch>" },
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
510 { N_("/Buddies/_Add A Buddy..."), "<CTL>B", gaim_gtk_blist_add_buddy_cb, 0,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
511 "<StockItem>", GTK_STOCK_ADD },
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
512 { N_("/Buddies/New _Instant Message..."), "<CTL>I", show_im_dialog, 0,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
513 "<StockItem>", GAIM_STOCK_IM },
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
514 { N_("/Buddies/Join a _Chat..."), "<CTL>C", join_chat, 0,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
515 "<StockItem>", GAIM_STOCK_CHAT },
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
516 { N_("/Buddies/sep1"), NULL, NULL, 0, "<Separator>" },
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
517 { N_("/Buddies/Get _User Info..."), "<CTL>J", show_info_dialog, 0,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
518 "<StockItem>", GAIM_STOCK_INFO },
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
519 { N_("/Buddies/sep2"), NULL, NULL, 0, "<Separator>" },
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
520 { N_("/Buddies/_Signoff"), "<CTL>D", signoff_all, 0, NULL },
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
521 { N_("/Buddies/_Quit"), "<CTL>Q", do_quit, 0,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
522 "<StockItem>", GTK_STOCK_QUIT },
1929
0b18211e20a6 [gaim-migrate @ 1939]
Stephan Dittmann
parents: 1918
diff changeset
523
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
524 /* Tools */
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
525 { N_("/_Tools"), NULL, NULL, 0, "<Branch>" },
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
526 { N_("/Tools/_Away"), NULL, NULL, 0, "<Branch>" },
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
527 { N_("/Tools/Buddy _Pounce"), NULL, NULL, 0, "<Branch>" },
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
528 { N_("/Tools/sep1"), NULL, NULL, 0, "<Separator>" },
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
529 { N_("/Tools/A_ccounts"), "<CTL>A", account_editor, 0, NULL },
4694
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
530 { N_("/Tools/Preferences"), "<CTL>P", show_prefs, 0,
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
531 "<StockItem>", GTK_STOCK_PREFERENCES },
4698
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
532 { N_("/Tools/_File Transfers"), NULL, gaim_show_xfer_dialog, 0,
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
533 "<StockItem>", GTK_STOCK_REVERT_TO_SAVED },
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
534 { N_("/Tools/sep2"), NULL, NULL, 0, "<Separator>" },
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
535 { N_("/Tools/P_rotocol Actions"), NULL, NULL, 0, "<Branch>" },
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
536 { N_("/Tools/Pr_ivacy"), NULL, show_privacy_options, 0, NULL },
4697
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
537 { N_("/Tools/View System _Log"), NULL, gtk_blist_show_systemlog_cb, 0, NULL },
3251
360fb695996d [gaim-migrate @ 3269]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3204
diff changeset
538
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
539 /* Help */
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
540 { N_("/_Help"), NULL, NULL, 0, "<Branch>" },
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
541 { N_("/Help/Online _Help"), "F1", NULL, 0,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
542 "<StockItem>", GTK_STOCK_HELP },
4755
64ee7fb9cdba [gaim-migrate @ 5072]
Mark Doliner <markdoliner@pidgin.im>
parents: 4745
diff changeset
543 { N_("/Help/_Debug Window"), NULL, toggle_debug, 0, NULL },
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
544 { N_("/Help/_About"), NULL, show_about, 0, NULL },
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
545
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
546 };
1929
0b18211e20a6 [gaim-migrate @ 1939]
Stephan Dittmann
parents: 1918
diff changeset
547
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
548 /*********************************************************
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
549 * Private Utility functions *
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
550 *********************************************************/
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
551
4724
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
552 static char *gaim_get_tooltip_text(struct buddy *b)
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
553 {
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
554 char *text = NULL;
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
555 struct prpl* prpl = find_prpl(b->account->protocol);
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
556 char *statustext = NULL;
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
557 char *warning = NULL, *idletime = NULL;
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
558
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
559 if (prpl->tooltip_text) {
4732
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
560 statustext = prpl->tooltip_text(b);
4724
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
561 }
4732
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
562
4724
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
563 if (b->idle) {
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
564 int ihrs, imin;
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
565 time_t t;
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
566 time(&t);
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
567 ihrs = (t - b->idle) / 3600;
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
568 imin = ((t - b->idle) / 60) % 60;
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
569 if (ihrs)
4744
c3a5a15c01f7 [gaim-migrate @ 5059]
Sean Egan <seanegan@pidgin.im>
parents: 4741
diff changeset
570 idletime = g_strdup_printf(_("%dh%02dm"), ihrs, imin);
4724
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
571 else
4744
c3a5a15c01f7 [gaim-migrate @ 5059]
Sean Egan <seanegan@pidgin.im>
parents: 4741
diff changeset
572 idletime = g_strdup_printf(_("%dm"), imin);
4724
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
573 }
4732
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
574
4724
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
575 if (b->evil > 0)
4744
c3a5a15c01f7 [gaim-migrate @ 5059]
Sean Egan <seanegan@pidgin.im>
parents: 4741
diff changeset
576 warning = g_strdup_printf(_("%d%%"), b->evil);
4732
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
577
4724
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
578 text = g_strdup_printf("<span size='larger' weight='bold'>%s</span>"
4744
c3a5a15c01f7 [gaim-migrate @ 5059]
Sean Egan <seanegan@pidgin.im>
parents: 4741
diff changeset
579 "%s %s" /* Alias */
c3a5a15c01f7 [gaim-migrate @ 5059]
Sean Egan <seanegan@pidgin.im>
parents: 4741
diff changeset
580 "%s %s" /* Nickname */
c3a5a15c01f7 [gaim-migrate @ 5059]
Sean Egan <seanegan@pidgin.im>
parents: 4741
diff changeset
581 "%s %s" /* Idle */
c3a5a15c01f7 [gaim-migrate @ 5059]
Sean Egan <seanegan@pidgin.im>
parents: 4741
diff changeset
582 "%s %s" /* Warning */
4741
3d1bdc028a7c [gaim-migrate @ 5056]
Sean Egan <seanegan@pidgin.im>
parents: 4737
diff changeset
583 "%s%s", /* Status */
4724
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
584 b->name,
4744
c3a5a15c01f7 [gaim-migrate @ 5059]
Sean Egan <seanegan@pidgin.im>
parents: 4741
diff changeset
585 b->alias && b->alias[0] ? _("\n<b>Alias:</b>") : "", b->alias ? b->alias : "",
c3a5a15c01f7 [gaim-migrate @ 5059]
Sean Egan <seanegan@pidgin.im>
parents: 4741
diff changeset
586 b->server_alias ? _("\n<b>Nickname:</b>") : "", b->server_alias ? b->server_alias : "",
c3a5a15c01f7 [gaim-migrate @ 5059]
Sean Egan <seanegan@pidgin.im>
parents: 4741
diff changeset
587 b->idle ? _("\n<b>Idle:</b>") : "", b->idle ? idletime : "",
c3a5a15c01f7 [gaim-migrate @ 5059]
Sean Egan <seanegan@pidgin.im>
parents: 4741
diff changeset
588 b->evil ? _("\n<b>Warned:</b>") : "", b->evil ? warning : "",
4724
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
589 statustext ? "\n" : "", statustext ? statustext : "");
4737
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
590 if(warning)
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
591 g_free(warning);
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
592 if(idletime)
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
593 g_free(idletime);
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
594 if(statustext)
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
595 g_free(statustext);
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
596
4724
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
597 return text;
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
598
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
599 }
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
600
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
601 static GdkPixbuf *gaim_gtk_blist_get_status_icon(struct buddy *b, GaimStatusIconSize size)
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
602 {
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
603 GdkPixbuf *status = NULL;
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
604 GdkPixbuf *scale = NULL;
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
605 GdkPixbuf *emblem = NULL;
4737
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
606 gchar *filename = NULL;
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
607 const char *protoname = NULL;
1929
0b18211e20a6 [gaim-migrate @ 1939]
Stephan Dittmann
parents: 1918
diff changeset
608
4691
72487b69d7ef [gaim-migrate @ 5002]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4690
diff changeset
609 char *se = NULL, *sw = NULL ,*nw = NULL ,*ne = NULL;
4737
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
610
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
611 int scalesize = 30;
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
612
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
613 struct prpl* prpl = find_prpl(b->account->protocol);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
614 if (prpl->list_icon)
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
615 protoname = prpl->list_icon(b->account, b);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
616 if (prpl->list_emblems)
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
617 prpl->list_emblems(b, &se, &sw, &nw, &ne);
4737
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
618
4724
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
619 if (size == GAIM_STATUS_ICON_SMALL) {
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
620 scalesize = 15;
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
621 sw = nw = ne = NULL; /* So that only the se icon will composite */
1929
0b18211e20a6 [gaim-migrate @ 1939]
Stephan Dittmann
parents: 1918
diff changeset
622 }
0b18211e20a6 [gaim-migrate @ 1939]
Stephan Dittmann
parents: 1918
diff changeset
623
4701
2a792cd7f0f7 [gaim-migrate @ 5012]
Nathan Walp <nwalp@pidgin.im>
parents: 4699
diff changeset
624
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
625 if (b->present == 2) {
4701
2a792cd7f0f7 [gaim-migrate @ 5012]
Nathan Walp <nwalp@pidgin.im>
parents: 4699
diff changeset
626 struct gaim_gtk_blist_node *gtknode;
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
627 /* If b->present is 2, that means this buddy has just signed on. We use the "login" icon for the
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
628 * status, and we set a timeout to change it to a normal icon after 10 seconds. */
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
629 filename = g_build_filename(DATADIR, "pixmaps", "gaim", "status", "default", "login.png", NULL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
630 status = gdk_pixbuf_new_from_file(filename,NULL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
631 g_free(filename);
4701
2a792cd7f0f7 [gaim-migrate @ 5012]
Nathan Walp <nwalp@pidgin.im>
parents: 4699
diff changeset
632
2a792cd7f0f7 [gaim-migrate @ 5012]
Nathan Walp <nwalp@pidgin.im>
parents: 4699
diff changeset
633 gtknode = GAIM_GTK_BLIST_NODE((GaimBlistNode*)b);
4773
1cc75c5e16b0 [gaim-migrate @ 5092]
Mark Doliner <markdoliner@pidgin.im>
parents: 4770
diff changeset
634 if (gtknode->timer > 0)
1cc75c5e16b0 [gaim-migrate @ 5092]
Mark Doliner <markdoliner@pidgin.im>
parents: 4770
diff changeset
635 g_source_remove(gtknode->timer);
4701
2a792cd7f0f7 [gaim-migrate @ 5012]
Nathan Walp <nwalp@pidgin.im>
parents: 4699
diff changeset
636 gtknode->timer = g_timeout_add(10000, (GSourceFunc)gaim_reset_present_icon, b);
2a792cd7f0f7 [gaim-migrate @ 5012]
Nathan Walp <nwalp@pidgin.im>
parents: 4699
diff changeset
637
4737
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
638 /* "Hey, what's all this crap?" you ask. Status icons will be themeable too, and
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
639 then it will look up protoname from the theme */
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
640 } else {
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
641 char *image = g_strdup_printf("%s.png", protoname);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
642 filename = g_build_filename(DATADIR, "pixmaps", "gaim", "status", "default", image, NULL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
643 status = gdk_pixbuf_new_from_file(filename,NULL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
644 g_free(image);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
645 g_free(filename);
1929
0b18211e20a6 [gaim-migrate @ 1939]
Stephan Dittmann
parents: 1918
diff changeset
646
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
647 }
4737
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
648
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
649 if (!status)
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
650 return NULL;
4737
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
651
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
652 scale = gdk_pixbuf_scale_simple(status, scalesize, scalesize, GDK_INTERP_BILINEAR);
4737
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
653
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
654 g_object_unref(G_OBJECT(status));
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
655
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
656 /* Emblems */
4737
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
657
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
658 /* Each protocol can specify up to four "emblems" to composite over the base icon. "away", "busy", "mobile user"
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
659 * are all examples of states represented by emblems. I'm not even really sure I like this yet. */
4737
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
660
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
661 /* XXX Clean this crap up, yo. */
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
662 if (se) {
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
663 char *image = g_strdup_printf("%s.png", se);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
664 filename = g_build_filename(DATADIR, "pixmaps", "gaim", "status", "default", image, NULL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
665 g_free(image);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
666 emblem = gdk_pixbuf_new_from_file(filename,NULL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
667 g_free(filename);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
668 if (emblem) {
4724
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
669 if (size == GAIM_STATUS_ICON_LARGE)
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
670 gdk_pixbuf_composite (emblem,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
671 scale, 15, 15,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
672 15, 15,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
673 15, 15,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
674 1, 1,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
675 GDK_INTERP_BILINEAR,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
676 255);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
677 else
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
678 gdk_pixbuf_composite (emblem,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
679 scale, 0, 0,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
680 15, 15,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
681 0, 0,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
682 1, 1,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
683 GDK_INTERP_BILINEAR,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
684 255);
4737
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
685 g_object_unref(G_OBJECT(emblem));
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
686 }
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
687 }
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
688 if (sw) {
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
689 char *image = g_strdup_printf("%s.png", sw);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
690 filename = g_build_filename(DATADIR, "pixmaps", "gaim", "status", "default", image, NULL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
691 g_free(image);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
692 emblem = gdk_pixbuf_new_from_file(filename,NULL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
693 g_free(filename);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
694 if (emblem) {
4737
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
695 gdk_pixbuf_composite (emblem,
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
696 scale, 0, 15,
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
697 15, 15,
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
698 0, 15,
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
699 1, 1,
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
700 GDK_INTERP_BILINEAR,
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
701 255);
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
702 g_object_unref(G_OBJECT(emblem));
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
703 }
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
704 }
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
705 if (nw) {
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
706 char *image = g_strdup_printf("%s.png", nw);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
707 filename = g_build_filename(DATADIR, "pixmaps", "gaim", "status", "default", image, NULL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
708 g_free(image);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
709 emblem = gdk_pixbuf_new_from_file(filename,NULL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
710 g_free(filename);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
711 if (emblem) {
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
712 gdk_pixbuf_composite (emblem,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
713 scale, 0, 0,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
714 15, 15,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
715 0, 0,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
716 1, 1,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
717 GDK_INTERP_BILINEAR,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
718 255);
4737
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
719 g_object_unref(G_OBJECT(emblem));
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
720 }
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
721 }
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
722 if (ne) {
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
723 char *image = g_strdup_printf("%s.png", ne);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
724 filename = g_build_filename(DATADIR, "pixmaps", "gaim", "status", "default", image, NULL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
725 g_free(image);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
726 emblem = gdk_pixbuf_new_from_file(filename,NULL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
727 g_free(filename);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
728 if (emblem) {
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
729 gdk_pixbuf_composite (emblem,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
730 scale, 15, 0,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
731 15, 15,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
732 15, 0,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
733 1, 1,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
734 GDK_INTERP_BILINEAR,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
735 255);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
736 }
4737
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
737 }
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
738
4737
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
739
4718
688c861c8b63 [gaim-migrate @ 5030]
Nathan Walp <nwalp@pidgin.im>
parents: 4716
diff changeset
740 /* Idle grey buddies affects the whole row. This converts the status icon to greyscale. */
4699
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
741 if (b->idle && blist_options & OPT_BLIST_GREY_IDLERS)
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
742 gdk_pixbuf_saturate_and_pixelate(scale, scale, 0, FALSE);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
743 return scale;
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
744 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
745
4737
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
746 static GdkPixbuf *gaim_gtk_blist_get_buddy_icon(struct buddy *b)
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
747 {
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
748 /* This just opens a file from ~/.gaim/icons/screenname. This needs to change to be more gooder. */
4737
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
749 char *file;
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
750 GdkPixbuf *buf, *ret;
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
751
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
752 if (!(blist_options & OPT_BLIST_SHOW_ICONS))
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
753 return NULL;
4737
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
754
4757
bca72d722ec0 [gaim-migrate @ 5074]
Nathan Walp <nwalp@pidgin.im>
parents: 4755
diff changeset
755 if ((file = gaim_buddy_get_setting(b, "buddy_icon")) == NULL)
bca72d722ec0 [gaim-migrate @ 5074]
Nathan Walp <nwalp@pidgin.im>
parents: 4755
diff changeset
756 return NULL;
bca72d722ec0 [gaim-migrate @ 5074]
Nathan Walp <nwalp@pidgin.im>
parents: 4755
diff changeset
757
4737
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
758 buf = gdk_pixbuf_new_from_file(file, NULL);
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
759 g_free(file);
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
760
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
761
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
762 if (buf) {
4699
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
763 if (b->idle && blist_options & OPT_BLIST_GREY_IDLERS) {
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
764 gdk_pixbuf_saturate_and_pixelate(buf, buf, 0, FALSE);
2372
c24942700dfd [gaim-migrate @ 2385]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2334
diff changeset
765 }
4737
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
766 ret = gdk_pixbuf_scale_simple(buf,30,30, GDK_INTERP_BILINEAR);
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
767 g_object_unref(G_OBJECT(buf));
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
768 return ret;
2372
c24942700dfd [gaim-migrate @ 2385]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2334
diff changeset
769 }
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
770 return NULL;
2986
d5cb5d01e2a0 [gaim-migrate @ 2999]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
771 }
d5cb5d01e2a0 [gaim-migrate @ 2999]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
772
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
773 static gchar *gaim_gtk_blist_get_name_markup(struct buddy *b)
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
774 {
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
775 char *name = gaim_get_buddy_alias(b);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
776 char *esc = g_markup_escape_text(name, strlen(name)), *text = NULL;
4722
f834a9a217c4 [gaim-migrate @ 5034]
Sean Egan <seanegan@pidgin.im>
parents: 4721
diff changeset
777 struct prpl* prpl = find_prpl(b->account->protocol);
f834a9a217c4 [gaim-migrate @ 5034]
Sean Egan <seanegan@pidgin.im>
parents: 4721
diff changeset
778
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
779 /* XXX Clean up this crap */
4699
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
780
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
781 int ihrs, imin;
4724
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
782 char *idletime = NULL, *warning = NULL, *statustext = NULL;
4732
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
783 time_t t;
2372
c24942700dfd [gaim-migrate @ 2385]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2334
diff changeset
784
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
785 if (!(blist_options & OPT_BLIST_SHOW_ICONS)) {
4699
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
786 if (b->idle > 0 && blist_options & OPT_BLIST_GREY_IDLERS) {
4718
688c861c8b63 [gaim-migrate @ 5030]
Nathan Walp <nwalp@pidgin.im>
parents: 4716
diff changeset
787 text = g_strdup_printf("<span color='dim grey'>%s</span>",
4699
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
788 esc);
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
789 g_free(esc);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
790 return text;
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
791 } else {
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
792 return esc;
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
793 }
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
794 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
795
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
796 time(&t);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
797 ihrs = (t - b->idle) / 3600;
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
798 imin = ((t - b->idle) / 60) % 60;
4699
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
799
4722
f834a9a217c4 [gaim-migrate @ 5034]
Sean Egan <seanegan@pidgin.im>
parents: 4721
diff changeset
800 if (prpl->status_text) {
4732
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
801 char *tmp = prpl->status_text(b);
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
802
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
803 if(tmp) {
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
804 if(strlen(tmp) > 20)
4757
bca72d722ec0 [gaim-migrate @ 5074]
Nathan Walp <nwalp@pidgin.im>
parents: 4755
diff changeset
805 statustext = g_strdup_printf("%.20s... ", tmp);
4732
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
806 else
4757
bca72d722ec0 [gaim-migrate @ 5074]
Nathan Walp <nwalp@pidgin.im>
parents: 4755
diff changeset
807 statustext = g_strdup_printf("%s ", tmp);
4732
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
808 g_free(tmp);
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
809 }
4722
f834a9a217c4 [gaim-migrate @ 5034]
Sean Egan <seanegan@pidgin.im>
parents: 4721
diff changeset
810 }
4732
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
811
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
812 if (b->idle) {
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
813 if (ihrs)
4757
bca72d722ec0 [gaim-migrate @ 5074]
Nathan Walp <nwalp@pidgin.im>
parents: 4755
diff changeset
814 idletime = g_strdup_printf(_("Idle (%dh%02dm) "), ihrs, imin);
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
815 else
4757
bca72d722ec0 [gaim-migrate @ 5074]
Nathan Walp <nwalp@pidgin.im>
parents: 4755
diff changeset
816 idletime = g_strdup_printf(_("Idle (%dm) "), imin);
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
817 }
4757
bca72d722ec0 [gaim-migrate @ 5074]
Nathan Walp <nwalp@pidgin.im>
parents: 4755
diff changeset
818
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
819 if (b->evil > 0)
4757
bca72d722ec0 [gaim-migrate @ 5074]
Nathan Walp <nwalp@pidgin.im>
parents: 4755
diff changeset
820 warning = g_strdup_printf(_("Warned (%d%%) "), b->evil);
bca72d722ec0 [gaim-migrate @ 5074]
Nathan Walp <nwalp@pidgin.im>
parents: 4755
diff changeset
821
4699
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
822 if (b->idle && blist_options & OPT_BLIST_GREY_IDLERS)
4757
bca72d722ec0 [gaim-migrate @ 5074]
Nathan Walp <nwalp@pidgin.im>
parents: 4755
diff changeset
823 text = g_strdup_printf("<span color='dim grey'>%s</span>\n<span color='dim grey' size='smaller'>%s%s%s</span>",
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
824 esc,
4722
f834a9a217c4 [gaim-migrate @ 5034]
Sean Egan <seanegan@pidgin.im>
parents: 4721
diff changeset
825 statustext != NULL ? statustext : "",
f834a9a217c4 [gaim-migrate @ 5034]
Sean Egan <seanegan@pidgin.im>
parents: 4721
diff changeset
826 idletime != NULL ? idletime : "",
f834a9a217c4 [gaim-migrate @ 5034]
Sean Egan <seanegan@pidgin.im>
parents: 4721
diff changeset
827 warning != NULL ? warning : "");
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
828 else
4757
bca72d722ec0 [gaim-migrate @ 5074]
Nathan Walp <nwalp@pidgin.im>
parents: 4755
diff changeset
829 text = g_strdup_printf("%s\n<span color='dim grey' size='smaller'>%s%s%s</span>", esc,
4722
f834a9a217c4 [gaim-migrate @ 5034]
Sean Egan <seanegan@pidgin.im>
parents: 4721
diff changeset
830 statustext != NULL ? statustext : "",
f834a9a217c4 [gaim-migrate @ 5034]
Sean Egan <seanegan@pidgin.im>
parents: 4721
diff changeset
831 idletime != NULL ? idletime : "",
f834a9a217c4 [gaim-migrate @ 5034]
Sean Egan <seanegan@pidgin.im>
parents: 4721
diff changeset
832 warning != NULL ? warning : "");
f834a9a217c4 [gaim-migrate @ 5034]
Sean Egan <seanegan@pidgin.im>
parents: 4721
diff changeset
833 if (idletime)
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
834 g_free(idletime);
4722
f834a9a217c4 [gaim-migrate @ 5034]
Sean Egan <seanegan@pidgin.im>
parents: 4721
diff changeset
835 if (warning)
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
836 g_free(warning);
4722
f834a9a217c4 [gaim-migrate @ 5034]
Sean Egan <seanegan@pidgin.im>
parents: 4721
diff changeset
837 if (statustext)
f834a9a217c4 [gaim-migrate @ 5034]
Sean Egan <seanegan@pidgin.im>
parents: 4721
diff changeset
838 g_free(statustext);
4737
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
839 if (esc)
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
840 g_free(esc);
4699
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
841
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
842 return text;
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
843 }
2372
c24942700dfd [gaim-migrate @ 2385]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2334
diff changeset
844
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
845 /**********************************************************************************
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
846 * Public API Functions *
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
847 **********************************************************************************/
4695
82df59fb9931 [gaim-migrate @ 5006]
Christian Hammond <chipx86@chipx86.com>
parents: 4694
diff changeset
848 static void gaim_gtk_blist_new_list(struct gaim_buddy_list *blist)
82df59fb9931 [gaim-migrate @ 5006]
Christian Hammond <chipx86@chipx86.com>
parents: 4694
diff changeset
849 {
82df59fb9931 [gaim-migrate @ 5006]
Christian Hammond <chipx86@chipx86.com>
parents: 4694
diff changeset
850 blist->ui_data = g_new0(struct gaim_gtk_buddy_list, 1);
82df59fb9931 [gaim-migrate @ 5006]
Christian Hammond <chipx86@chipx86.com>
parents: 4694
diff changeset
851 }
82df59fb9931 [gaim-migrate @ 5006]
Christian Hammond <chipx86@chipx86.com>
parents: 4694
diff changeset
852
82df59fb9931 [gaim-migrate @ 5006]
Christian Hammond <chipx86@chipx86.com>
parents: 4694
diff changeset
853 static void gaim_gtk_blist_new_node(GaimBlistNode *node)
82df59fb9931 [gaim-migrate @ 5006]
Christian Hammond <chipx86@chipx86.com>
parents: 4694
diff changeset
854 {
82df59fb9931 [gaim-migrate @ 5006]
Christian Hammond <chipx86@chipx86.com>
parents: 4694
diff changeset
855 node->ui_data = g_new0(struct gaim_gtk_blist_node, 1);
82df59fb9931 [gaim-migrate @ 5006]
Christian Hammond <chipx86@chipx86.com>
parents: 4694
diff changeset
856 }
82df59fb9931 [gaim-migrate @ 5006]
Christian Hammond <chipx86@chipx86.com>
parents: 4694
diff changeset
857
4729
7521e221beb7 [gaim-migrate @ 5042]
Nathan Walp <nwalp@pidgin.im>
parents: 4725
diff changeset
858 void gaim_gtk_blist_update_columns()
7521e221beb7 [gaim-migrate @ 5042]
Nathan Walp <nwalp@pidgin.im>
parents: 4725
diff changeset
859 {
7521e221beb7 [gaim-migrate @ 5042]
Nathan Walp <nwalp@pidgin.im>
parents: 4725
diff changeset
860 if (blist_options & OPT_BLIST_SHOW_ICONS) {
7521e221beb7 [gaim-migrate @ 5042]
Nathan Walp <nwalp@pidgin.im>
parents: 4725
diff changeset
861 gtk_tree_view_column_set_visible(gtkblist->buddy_icon_column, TRUE);
7521e221beb7 [gaim-migrate @ 5042]
Nathan Walp <nwalp@pidgin.im>
parents: 4725
diff changeset
862 gtk_tree_view_column_set_visible(gtkblist->idle_column, FALSE);
7521e221beb7 [gaim-migrate @ 5042]
Nathan Walp <nwalp@pidgin.im>
parents: 4725
diff changeset
863 gtk_tree_view_column_set_visible(gtkblist->warning_column, FALSE);
7521e221beb7 [gaim-migrate @ 5042]
Nathan Walp <nwalp@pidgin.im>
parents: 4725
diff changeset
864 } else {
7521e221beb7 [gaim-migrate @ 5042]
Nathan Walp <nwalp@pidgin.im>
parents: 4725
diff changeset
865 gtk_tree_view_column_set_visible(gtkblist->idle_column, blist_options & OPT_BLIST_SHOW_IDLETIME);
7521e221beb7 [gaim-migrate @ 5042]
Nathan Walp <nwalp@pidgin.im>
parents: 4725
diff changeset
866 gtk_tree_view_column_set_visible(gtkblist->warning_column, blist_options & OPT_BLIST_SHOW_WARN);
7521e221beb7 [gaim-migrate @ 5042]
Nathan Walp <nwalp@pidgin.im>
parents: 4725
diff changeset
867 gtk_tree_view_column_set_visible(gtkblist->buddy_icon_column, FALSE);
7521e221beb7 [gaim-migrate @ 5042]
Nathan Walp <nwalp@pidgin.im>
parents: 4725
diff changeset
868 }
7521e221beb7 [gaim-migrate @ 5042]
Nathan Walp <nwalp@pidgin.im>
parents: 4725
diff changeset
869 }
7521e221beb7 [gaim-migrate @ 5042]
Nathan Walp <nwalp@pidgin.im>
parents: 4725
diff changeset
870
4702
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
871 enum {DRAG_BUDDY, DRAG_ROW};
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
872
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
873 static void gaim_gtk_blist_show(struct gaim_buddy_list *list)
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
874 {
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
875 GtkItemFactory *ift;
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
876 GtkCellRenderer *rend;
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
877 GtkTreeViewColumn *column;
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
878 GtkWidget *sw;
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
879 GtkWidget *button;
4694
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
880 GtkSizeGroup *sg;
4729
7521e221beb7 [gaim-migrate @ 5042]
Nathan Walp <nwalp@pidgin.im>
parents: 4725
diff changeset
881 GtkTargetEntry gte[] = {{"GAIM_BUDDY", GTK_TARGET_SAME_APP, DRAG_ROW},
4702
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
882 {"application/x-im-contact", 0, DRAG_BUDDY}};
4690
e30dbd5b361f [gaim-migrate @ 5001]
Nathan Walp <nwalp@pidgin.im>
parents: 4687
diff changeset
883
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
884 if (gtkblist && gtkblist->window) {
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
885 gtk_widget_show(gtkblist->window);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
886 return;
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
887 }
4690
e30dbd5b361f [gaim-migrate @ 5001]
Nathan Walp <nwalp@pidgin.im>
parents: 4687
diff changeset
888
4695
82df59fb9931 [gaim-migrate @ 5006]
Christian Hammond <chipx86@chipx86.com>
parents: 4694
diff changeset
889 gtkblist = GAIM_GTK_BLIST(list);
82df59fb9931 [gaim-migrate @ 5006]
Christian Hammond <chipx86@chipx86.com>
parents: 4694
diff changeset
890
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
891 gtkblist->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
892 gtk_window_set_title(GTK_WINDOW(gtkblist->window), _("Buddy List"));
4690
e30dbd5b361f [gaim-migrate @ 5001]
Nathan Walp <nwalp@pidgin.im>
parents: 4687
diff changeset
893
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
894 gtkblist->vbox = gtk_vbox_new(FALSE, 6);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
895 gtk_container_add(GTK_CONTAINER(gtkblist->window), gtkblist->vbox);
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
896
4698
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
897 g_signal_connect(G_OBJECT(gtkblist->window), "delete_event", G_CALLBACK(gaim_gtk_blist_destroy_cb), NULL);
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
898
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
899 /******************************* Menu bar *************************************/
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
900 ift = gtk_item_factory_new(GTK_TYPE_MENU_BAR, "<GaimMain>", NULL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
901 gtk_item_factory_create_items(ift, sizeof(blist_menu) / sizeof(*blist_menu),
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
902 blist_menu, NULL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
903 gtk_box_pack_start(GTK_BOX(gtkblist->vbox), gtk_item_factory_get_widget(ift, "<GaimMain>"), FALSE, FALSE, 0);
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
904
4694
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
905 awaymenu = gtk_item_factory_get_widget(ift, "/Tools/Away");
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
906 do_away_menu();
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
907
4696
19ae2b8a44c7 [gaim-migrate @ 5007]
Nathan Walp <nwalp@pidgin.im>
parents: 4695
diff changeset
908 bpmenu = gtk_item_factory_get_widget(ift, "/Tools/Buddy Pounce");
19ae2b8a44c7 [gaim-migrate @ 5007]
Nathan Walp <nwalp@pidgin.im>
parents: 4695
diff changeset
909 do_bp_menu();
19ae2b8a44c7 [gaim-migrate @ 5007]
Nathan Walp <nwalp@pidgin.im>
parents: 4695
diff changeset
910
19ae2b8a44c7 [gaim-migrate @ 5007]
Nathan Walp <nwalp@pidgin.im>
parents: 4695
diff changeset
911 protomenu = gtk_item_factory_get_widget(ift, "/Tools/Protocol Actions");
19ae2b8a44c7 [gaim-migrate @ 5007]
Nathan Walp <nwalp@pidgin.im>
parents: 4695
diff changeset
912 do_proto_menu();
19ae2b8a44c7 [gaim-migrate @ 5007]
Nathan Walp <nwalp@pidgin.im>
parents: 4695
diff changeset
913
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
914 /****************************** GtkTreeView **********************************/
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
915 sw = gtk_scrolled_window_new(NULL,NULL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
916 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_IN);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
917 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
4690
e30dbd5b361f [gaim-migrate @ 5001]
Nathan Walp <nwalp@pidgin.im>
parents: 4687
diff changeset
918 gtk_widget_set_size_request(sw, 200, 200);
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
919
4729
7521e221beb7 [gaim-migrate @ 5042]
Nathan Walp <nwalp@pidgin.im>
parents: 4725
diff changeset
920 gtkblist->treemodel = gtk_tree_store_new(BLIST_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_STRING,
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
921 G_TYPE_STRING, G_TYPE_STRING, GDK_TYPE_PIXBUF, G_TYPE_POINTER);
4702
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
922
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
923 gtkblist->treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(gtkblist->treemodel));
4704
283bd3d31796 [gaim-migrate @ 5015]
Nathan Walp <nwalp@pidgin.im>
parents: 4702
diff changeset
924
4702
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
925 /* Set up dnd */
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
926 gtk_tree_view_enable_model_drag_source(GTK_TREE_VIEW(gtkblist->treeview), GDK_BUTTON1_MASK, gte,
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
927 2, GDK_ACTION_COPY);
4704
283bd3d31796 [gaim-migrate @ 5015]
Nathan Walp <nwalp@pidgin.im>
parents: 4702
diff changeset
928 gtk_tree_view_enable_model_drag_dest(GTK_TREE_VIEW(gtkblist->treeview), gte, 2,
4702
49006c93f70c [gaim-migrate @ 5013]
Sean Egan <seanegan@pidgin.im>
parents: 4701
diff changeset
929 GDK_ACTION_COPY | GDK_ACTION_MOVE);
4704
283bd3d31796 [gaim-migrate @ 5015]
Nathan Walp <nwalp@pidgin.im>
parents: 4702
diff changeset
930 g_signal_connect(G_OBJECT(gtkblist->treeview), "drag-data-received", G_CALLBACK(gaim_gtk_blist_drag_data_rcv_cb), NULL);
283bd3d31796 [gaim-migrate @ 5015]
Nathan Walp <nwalp@pidgin.im>
parents: 4702
diff changeset
931 g_signal_connect(G_OBJECT(gtkblist->treeview), "drag-data-get", G_CALLBACK(gaim_gtk_blist_drag_data_get_cb), NULL);
283bd3d31796 [gaim-migrate @ 5015]
Nathan Walp <nwalp@pidgin.im>
parents: 4702
diff changeset
932
4724
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
933 /* Tooltips */
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
934 g_signal_connect(G_OBJECT(gtkblist->treeview), "motion-notify-event", G_CALLBACK(gaim_gtk_blist_motion_cb), NULL);
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
935 g_signal_connect(G_OBJECT(gtkblist->treeview), "leave-notify-event", G_CALLBACK(gaim_gtk_blist_leave_cb), NULL);
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
936
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
937 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(gtkblist->treeview), FALSE);
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
938
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
939 rend = gtk_cell_renderer_pixbuf_new();
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
940 column = gtk_tree_view_column_new_with_attributes("Status", rend, "pixbuf", STATUS_ICON_COLUMN, NULL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
941 gtk_tree_view_append_column(GTK_TREE_VIEW(gtkblist->treeview), column);
4716
c82f15f2525a [gaim-migrate @ 5027]
Sean Egan <seanegan@pidgin.im>
parents: 4711
diff changeset
942 g_object_set(rend, "ypad", 0.0, NULL);
4706
303bf506ab4c [gaim-migrate @ 5017]
Sean Egan <seanegan@pidgin.im>
parents: 4704
diff changeset
943
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
944 rend = gtk_cell_renderer_text_new();
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
945 column = gtk_tree_view_column_new_with_attributes("Name", rend, "markup", NAME_COLUMN, NULL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
946 gtk_tree_view_append_column(GTK_TREE_VIEW(gtkblist->treeview), column);
4706
303bf506ab4c [gaim-migrate @ 5017]
Sean Egan <seanegan@pidgin.im>
parents: 4704
diff changeset
947 g_object_set(rend, "ypad", 0.0, NULL);
303bf506ab4c [gaim-migrate @ 5017]
Sean Egan <seanegan@pidgin.im>
parents: 4704
diff changeset
948
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
949 rend = gtk_cell_renderer_text_new();
4725
2811a6dd9397 [gaim-migrate @ 5038]
Sean Egan <seanegan@pidgin.im>
parents: 4724
diff changeset
950 gtkblist->warning_column = gtk_tree_view_column_new_with_attributes("Warning", rend, "markup", WARNING_COLUMN, NULL);
2811a6dd9397 [gaim-migrate @ 5038]
Sean Egan <seanegan@pidgin.im>
parents: 4724
diff changeset
951 gtk_tree_view_append_column(GTK_TREE_VIEW(gtkblist->treeview), gtkblist->warning_column);
4716
c82f15f2525a [gaim-migrate @ 5027]
Sean Egan <seanegan@pidgin.im>
parents: 4711
diff changeset
952 g_object_set(rend, "xalign", 1.0, "ypad", 0.0, NULL);
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
953
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
954 rend = gtk_cell_renderer_text_new();
4725
2811a6dd9397 [gaim-migrate @ 5038]
Sean Egan <seanegan@pidgin.im>
parents: 4724
diff changeset
955 gtkblist->idle_column = gtk_tree_view_column_new_with_attributes("Idle", rend, "markup", IDLE_COLUMN, NULL);
2811a6dd9397 [gaim-migrate @ 5038]
Sean Egan <seanegan@pidgin.im>
parents: 4724
diff changeset
956 gtk_tree_view_append_column(GTK_TREE_VIEW(gtkblist->treeview), gtkblist->idle_column);
4716
c82f15f2525a [gaim-migrate @ 5027]
Sean Egan <seanegan@pidgin.im>
parents: 4711
diff changeset
957 g_object_set(rend, "xalign", 1.0, "ypad", 0.0, NULL);
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
958
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
959 rend = gtk_cell_renderer_pixbuf_new();
4725
2811a6dd9397 [gaim-migrate @ 5038]
Sean Egan <seanegan@pidgin.im>
parents: 4724
diff changeset
960 gtkblist->buddy_icon_column = gtk_tree_view_column_new_with_attributes("Buddy Icon", rend, "pixbuf", BUDDY_ICON_COLUMN, NULL);
4706
303bf506ab4c [gaim-migrate @ 5017]
Sean Egan <seanegan@pidgin.im>
parents: 4704
diff changeset
961 g_object_set(rend, "xalign", 1.0, "ypad", 0.0, NULL);
4725
2811a6dd9397 [gaim-migrate @ 5038]
Sean Egan <seanegan@pidgin.im>
parents: 4724
diff changeset
962 gtk_tree_view_append_column(GTK_TREE_VIEW(gtkblist->treeview), gtkblist->buddy_icon_column);
4718
688c861c8b63 [gaim-migrate @ 5030]
Nathan Walp <nwalp@pidgin.im>
parents: 4716
diff changeset
963
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
964 g_signal_connect(G_OBJECT(gtkblist->treeview), "row-activated", G_CALLBACK(gtk_blist_row_activated_cb), NULL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
965 g_signal_connect(G_OBJECT(gtkblist->treeview), "button-press-event", G_CALLBACK(gtk_blist_button_press_cb), NULL);
2372
c24942700dfd [gaim-migrate @ 2385]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2334
diff changeset
966
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
967 gtk_box_pack_start(GTK_BOX(gtkblist->vbox), sw, TRUE, TRUE, 0);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
968 gtk_container_add(GTK_CONTAINER(sw), gtkblist->treeview);
4725
2811a6dd9397 [gaim-migrate @ 5038]
Sean Egan <seanegan@pidgin.im>
parents: 4724
diff changeset
969 gaim_gtk_blist_update_columns();
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
970 /**************************** Button Box **************************************/
4694
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
971
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
972 sg = gtk_size_group_new(GTK_SIZE_GROUP_BOTH);
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
973 gtkblist->bbox = gtk_hbox_new(TRUE, 0);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
974 gtk_box_pack_start(GTK_BOX(gtkblist->vbox), gtkblist->bbox, FALSE, FALSE, 0);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
975 button = gaim_pixbuf_button_from_stock(_("IM"), GAIM_STOCK_IM, GAIM_BUTTON_VERTICAL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
976 gtk_box_pack_start(GTK_BOX(gtkblist->bbox), button, FALSE, FALSE, 0);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
977 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
4694
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
978 gtk_size_group_add_widget(sg, button);
4692
788406bcb759 [gaim-migrate @ 5003]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4691
diff changeset
979 g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(gtk_blist_button_im_cb),
4697
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
980 gtkblist->treeview);
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
981
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
982 button = gaim_pixbuf_button_from_stock(_("Get Info"), GAIM_STOCK_INFO, GAIM_BUTTON_VERTICAL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
983 gtk_box_pack_start(GTK_BOX(gtkblist->bbox), button, FALSE, FALSE, 0);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
984 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
4694
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
985 gtk_size_group_add_widget(sg, button);
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
986 g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(gtk_blist_button_info_cb),
4697
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
987 gtkblist->treeview);
4729
7521e221beb7 [gaim-migrate @ 5042]
Nathan Walp <nwalp@pidgin.im>
parents: 4725
diff changeset
988
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
989 button = gaim_pixbuf_button_from_stock(_("Chat"), GAIM_STOCK_CHAT, GAIM_BUTTON_VERTICAL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
990 gtk_box_pack_start(GTK_BOX(gtkblist->bbox), button, FALSE, FALSE, 0);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
991 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
4694
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
992 gtk_size_group_add_widget(sg, button);
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
993 g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(gtk_blist_button_chat_cb), NULL);
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
994
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
995 button = gaim_pixbuf_button_from_stock(_("Away"), GAIM_STOCK_AWAY, GAIM_BUTTON_VERTICAL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
996 gtk_box_pack_start(GTK_BOX(gtkblist->bbox), button, FALSE, FALSE, 0);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
997 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
4694
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
998 gtk_size_group_add_widget(sg, button);
1236aebbbe94 [gaim-migrate @ 5005]
Nathan Walp <nwalp@pidgin.im>
parents: 4692
diff changeset
999 g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(gtk_blist_button_away_cb), NULL);
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1000
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1001 /* OK... let's show this bad boy. */
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1002 gaim_gtk_blist_refresh(list);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1003 gtk_widget_show_all(gtkblist->window);
4729
7521e221beb7 [gaim-migrate @ 5042]
Nathan Walp <nwalp@pidgin.im>
parents: 4725
diff changeset
1004
4697
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
1005 gaim_gtk_blist_update_toolbar();
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
1006
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1007 }
2372
c24942700dfd [gaim-migrate @ 2385]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2334
diff changeset
1008
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1009 void gaim_gtk_blist_refresh(struct gaim_buddy_list *list)
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1010 {
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1011 GaimBlistNode *group = list->root;
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1012 GaimBlistNode *buddy;
4690
e30dbd5b361f [gaim-migrate @ 5001]
Nathan Walp <nwalp@pidgin.im>
parents: 4687
diff changeset
1013
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1014 while (group) {
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1015 gaim_gtk_blist_update(list, group);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1016 buddy = group->child;
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1017 while (buddy) {
4699
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1018 gaim_gtk_blist_update(list, buddy);
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1019 buddy = buddy->next;
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1020 }
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1021 group = group->next;
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1022 }
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1023 }
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1024
4699
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1025 static gboolean get_iter_from_node_helper(GaimBlistNode *node, GtkTreeIter *iter, GtkTreeIter *root) {
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1026 do {
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1027 GaimBlistNode *n;
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1028 GtkTreeIter child;
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1029
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1030 gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel), root, NODE_COLUMN, &n, -1);
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1031 if(n == node) {
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1032 *iter = *root;
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1033 return TRUE;
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1034 }
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1035
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1036 if(gtk_tree_model_iter_children(GTK_TREE_MODEL(gtkblist->treemodel), &child, root)) {
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1037 if(get_iter_from_node_helper(node,iter,&child))
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1038 return TRUE;
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1039 }
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1040 } while(gtk_tree_model_iter_next(GTK_TREE_MODEL(gtkblist->treemodel), root));
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1041
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1042 return FALSE;
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1043 }
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1044
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1045 static gboolean get_iter_from_node(GaimBlistNode *node, GtkTreeIter *iter) {
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1046 GtkTreeIter root;
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1047
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1048 if (!gtkblist)
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1049 return FALSE;
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1050
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1051 if(!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(gtkblist->treemodel), &root))
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1052 return FALSE;
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1053
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1054 return get_iter_from_node_helper(node, iter, &root);
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1055 }
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1056
4697
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
1057 void gaim_gtk_blist_update_toolbar() {
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
1058 if (!gtkblist)
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
1059 return;
4699
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1060
4697
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
1061 gtk_container_foreach(GTK_CONTAINER(gtkblist->bbox), gaim_gtk_blist_update_toolbar_icons, NULL);
4699
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1062
4697
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
1063 if (blist_options & OPT_BLIST_NO_BUTTONS)
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
1064 gtk_widget_hide(gtkblist->bbox);
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
1065 else
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
1066 gtk_widget_show_all(gtkblist->bbox);
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
1067 }
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
1068
4701
2a792cd7f0f7 [gaim-migrate @ 5012]
Nathan Walp <nwalp@pidgin.im>
parents: 4699
diff changeset
1069 static void gaim_gtk_blist_remove(struct gaim_buddy_list *list, GaimBlistNode *node)
2a792cd7f0f7 [gaim-migrate @ 5012]
Nathan Walp <nwalp@pidgin.im>
parents: 4699
diff changeset
1070 {
2a792cd7f0f7 [gaim-migrate @ 5012]
Nathan Walp <nwalp@pidgin.im>
parents: 4699
diff changeset
1071 struct gaim_gtk_blist_node *gtknode;
2a792cd7f0f7 [gaim-migrate @ 5012]
Nathan Walp <nwalp@pidgin.im>
parents: 4699
diff changeset
1072 GtkTreeIter iter;
2a792cd7f0f7 [gaim-migrate @ 5012]
Nathan Walp <nwalp@pidgin.im>
parents: 4699
diff changeset
1073
2a792cd7f0f7 [gaim-migrate @ 5012]
Nathan Walp <nwalp@pidgin.im>
parents: 4699
diff changeset
1074 if (!node->ui_data)
2a792cd7f0f7 [gaim-migrate @ 5012]
Nathan Walp <nwalp@pidgin.im>
parents: 4699
diff changeset
1075 return;
2a792cd7f0f7 [gaim-migrate @ 5012]
Nathan Walp <nwalp@pidgin.im>
parents: 4699
diff changeset
1076
2a792cd7f0f7 [gaim-migrate @ 5012]
Nathan Walp <nwalp@pidgin.im>
parents: 4699
diff changeset
1077 gtknode = (struct gaim_gtk_blist_node *)node->ui_data;
2a792cd7f0f7 [gaim-migrate @ 5012]
Nathan Walp <nwalp@pidgin.im>
parents: 4699
diff changeset
1078
2a792cd7f0f7 [gaim-migrate @ 5012]
Nathan Walp <nwalp@pidgin.im>
parents: 4699
diff changeset
1079 if (gtknode->timer > 0) {
2a792cd7f0f7 [gaim-migrate @ 5012]
Nathan Walp <nwalp@pidgin.im>
parents: 4699
diff changeset
1080 g_source_remove(gtknode->timer);
2a792cd7f0f7 [gaim-migrate @ 5012]
Nathan Walp <nwalp@pidgin.im>
parents: 4699
diff changeset
1081 gtknode->timer = 0;
2a792cd7f0f7 [gaim-migrate @ 5012]
Nathan Walp <nwalp@pidgin.im>
parents: 4699
diff changeset
1082 }
2a792cd7f0f7 [gaim-migrate @ 5012]
Nathan Walp <nwalp@pidgin.im>
parents: 4699
diff changeset
1083
2a792cd7f0f7 [gaim-migrate @ 5012]
Nathan Walp <nwalp@pidgin.im>
parents: 4699
diff changeset
1084 if (get_iter_from_node(node, &iter)) {
2a792cd7f0f7 [gaim-migrate @ 5012]
Nathan Walp <nwalp@pidgin.im>
parents: 4699
diff changeset
1085 gtk_tree_store_remove(gtkblist->treemodel, &iter);
2a792cd7f0f7 [gaim-migrate @ 5012]
Nathan Walp <nwalp@pidgin.im>
parents: 4699
diff changeset
1086 if(GAIM_BLIST_NODE_IS_BUDDY(node) && gaim_blist_get_group_online_count((struct group *)node->parent) == 0) {
2a792cd7f0f7 [gaim-migrate @ 5012]
Nathan Walp <nwalp@pidgin.im>
parents: 4699
diff changeset
1087 GtkTreeIter groupiter;
2a792cd7f0f7 [gaim-migrate @ 5012]
Nathan Walp <nwalp@pidgin.im>
parents: 4699
diff changeset
1088 if(get_iter_from_node(node->parent, &groupiter))
2a792cd7f0f7 [gaim-migrate @ 5012]
Nathan Walp <nwalp@pidgin.im>
parents: 4699
diff changeset
1089 gtk_tree_store_remove(gtkblist->treemodel, &groupiter);
2a792cd7f0f7 [gaim-migrate @ 5012]
Nathan Walp <nwalp@pidgin.im>
parents: 4699
diff changeset
1090 }
2a792cd7f0f7 [gaim-migrate @ 5012]
Nathan Walp <nwalp@pidgin.im>
parents: 4699
diff changeset
1091 }
2a792cd7f0f7 [gaim-migrate @ 5012]
Nathan Walp <nwalp@pidgin.im>
parents: 4699
diff changeset
1092 }
2a792cd7f0f7 [gaim-migrate @ 5012]
Nathan Walp <nwalp@pidgin.im>
parents: 4699
diff changeset
1093
2a792cd7f0f7 [gaim-migrate @ 5012]
Nathan Walp <nwalp@pidgin.im>
parents: 4699
diff changeset
1094
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1095 static void gaim_gtk_blist_update(struct gaim_buddy_list *list, GaimBlistNode *node)
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1096 {
4695
82df59fb9931 [gaim-migrate @ 5006]
Christian Hammond <chipx86@chipx86.com>
parents: 4694
diff changeset
1097 struct gaim_gtk_blist_node *gtknode;
4699
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1098 GtkTreeIter iter;
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1099 gboolean expand = FALSE;
4699
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1100 gboolean new_entry = FALSE;
2372
c24942700dfd [gaim-migrate @ 2385]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2334
diff changeset
1101
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1102 if (!gtkblist)
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1103 return;
4699
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1104
4695
82df59fb9931 [gaim-migrate @ 5006]
Christian Hammond <chipx86@chipx86.com>
parents: 4694
diff changeset
1105 gtknode = GAIM_GTK_BLIST_NODE(node);
82df59fb9931 [gaim-migrate @ 5006]
Christian Hammond <chipx86@chipx86.com>
parents: 4694
diff changeset
1106
4690
e30dbd5b361f [gaim-migrate @ 5001]
Nathan Walp <nwalp@pidgin.im>
parents: 4687
diff changeset
1107
4699
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1108 if (!get_iter_from_node(node, &iter)) { /* This is a newly added node */
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1109 new_entry = TRUE;
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1110 if (GAIM_BLIST_NODE_IS_BUDDY(node)) {
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1111 if (((struct buddy*)node)->present) {
4699
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1112 GtkTreeIter groupiter;
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1113 GaimBlistNode *oldersibling;
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1114 GtkTreeIter oldersiblingiter;
4690
e30dbd5b361f [gaim-migrate @ 5001]
Nathan Walp <nwalp@pidgin.im>
parents: 4687
diff changeset
1115
4699
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1116 if(node->parent && !get_iter_from_node(node->parent, &groupiter)) {
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1117 /* This buddy's group has not yet been added. We do that here */
4757
bca72d722ec0 [gaim-migrate @ 5074]
Nathan Walp <nwalp@pidgin.im>
parents: 4755
diff changeset
1118 GdkPixbuf *groupicon = gtk_widget_render_icon(gtkblist->treeview,
bca72d722ec0 [gaim-migrate @ 5074]
Nathan Walp <nwalp@pidgin.im>
parents: 4755
diff changeset
1119 GTK_STOCK_OPEN, GTK_ICON_SIZE_SMALL_TOOLBAR, NULL);
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1120 char *mark = g_strdup_printf("<span weight='bold'>%s</span>", ((struct group*)node->parent)->name);
4699
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1121 oldersibling = node->parent->prev;
2372
c24942700dfd [gaim-migrate @ 2385]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2334
diff changeset
1122
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1123 /* We traverse backwards through the buddy list to find the node in the tree to insert it after */
4699
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1124 while (oldersibling && !get_iter_from_node(oldersibling, &oldersiblingiter))
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1125 oldersibling = oldersibling->prev;
4690
e30dbd5b361f [gaim-migrate @ 5001]
Nathan Walp <nwalp@pidgin.im>
parents: 4687
diff changeset
1126
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1127 /* This is where we create the node and add it. */
4699
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1128 gtk_tree_store_insert_after(gtkblist->treemodel, &groupiter, NULL, oldersibling ? &oldersiblingiter : NULL);
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1129 gtk_tree_store_set(gtkblist->treemodel, &groupiter,
4757
bca72d722ec0 [gaim-migrate @ 5074]
Nathan Walp <nwalp@pidgin.im>
parents: 4755
diff changeset
1130 STATUS_ICON_COLUMN, groupicon,
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1131 NAME_COLUMN, mark,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1132 NODE_COLUMN, node->parent,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1133 -1);
4695
82df59fb9931 [gaim-migrate @ 5006]
Christian Hammond <chipx86@chipx86.com>
parents: 4694
diff changeset
1134
4737
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
1135 g_free(mark);
4757
bca72d722ec0 [gaim-migrate @ 5074]
Nathan Walp <nwalp@pidgin.im>
parents: 4755
diff changeset
1136 g_object_unref(G_OBJECT(groupicon));
4737
97bcee8f5d43 [gaim-migrate @ 5052]
Nathan Walp <nwalp@pidgin.im>
parents: 4733
diff changeset
1137
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1138 expand = TRUE;
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1139 }
4767
c212c2738d77 [gaim-migrate @ 5085]
Sean Egan <seanegan@pidgin.im>
parents: 4758
diff changeset
1140
4699
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1141 oldersibling = node->prev;
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1142 while (oldersibling && !get_iter_from_node(oldersibling, &oldersiblingiter))
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1143 oldersibling = oldersibling->prev;
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1144
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1145 gtk_tree_store_insert_after(gtkblist->treemodel, &iter, &groupiter, oldersibling ? &oldersiblingiter : NULL);
4767
c212c2738d77 [gaim-migrate @ 5085]
Sean Egan <seanegan@pidgin.im>
parents: 4758
diff changeset
1146
c212c2738d77 [gaim-migrate @ 5085]
Sean Egan <seanegan@pidgin.im>
parents: 4758
diff changeset
1147 if (blist_options & OPT_BLIST_POPUP)
c212c2738d77 [gaim-migrate @ 5085]
Sean Egan <seanegan@pidgin.im>
parents: 4758
diff changeset
1148 gtk_window_present(GTK_WINDOW(gtkblist->window));
4699
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1149
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1150 if (expand) { /* expand was set to true if this is the first element added to a group. In such case
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1151 * we expand the group node */
4699
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1152 GtkTreePath *path = gtk_tree_model_get_path(GTK_TREE_MODEL(gtkblist->treemodel), &groupiter);
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1153 gtk_tree_view_expand_row(GTK_TREE_VIEW(gtkblist->treeview), path, TRUE);
4721
6c6442bbd00c [gaim-migrate @ 5033]
Nathan Walp <nwalp@pidgin.im>
parents: 4718
diff changeset
1154 gtk_tree_path_free(path);
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1155 }
4699
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1156 }
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1157 }
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1158 }
4695
82df59fb9931 [gaim-migrate @ 5006]
Christian Hammond <chipx86@chipx86.com>
parents: 4694
diff changeset
1159
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1160 if (GAIM_BLIST_NODE_IS_BUDDY(node) && ((struct buddy*)node)->present) {
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1161 GdkPixbuf *status, *avatar;
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1162 char *mark;
4697
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
1163 char *warning = NULL, *idle = NULL;
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
1164
4724
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
1165 status = gaim_gtk_blist_get_status_icon((struct buddy*)node,
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
1166 blist_options & OPT_BLIST_SHOW_ICONS ? GAIM_STATUS_ICON_LARGE : GAIM_STATUS_ICON_SMALL);
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1167 avatar = gaim_gtk_blist_get_buddy_icon((struct buddy*)node);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1168 mark = gaim_gtk_blist_get_name_markup((struct buddy*)node);
4697
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
1169
4725
2811a6dd9397 [gaim-migrate @ 5038]
Sean Egan <seanegan@pidgin.im>
parents: 4724
diff changeset
1170 if (((struct buddy*)node)->idle > 0) {
4697
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
1171 time_t t;
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
1172 int ihrs, imin;
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
1173 time(&t);
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
1174 ihrs = (t - ((struct buddy *)node)->idle) / 3600;
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
1175 imin = ((t - ((struct buddy*)node)->idle) / 60) % 60;
4718
688c861c8b63 [gaim-migrate @ 5030]
Nathan Walp <nwalp@pidgin.im>
parents: 4716
diff changeset
1176 if(ihrs > 0)
688c861c8b63 [gaim-migrate @ 5030]
Nathan Walp <nwalp@pidgin.im>
parents: 4716
diff changeset
1177 idle = g_strdup_printf("(%d:%02d)", ihrs, imin);
688c861c8b63 [gaim-migrate @ 5030]
Nathan Walp <nwalp@pidgin.im>
parents: 4716
diff changeset
1178 else
688c861c8b63 [gaim-migrate @ 5030]
Nathan Walp <nwalp@pidgin.im>
parents: 4716
diff changeset
1179 idle = g_strdup_printf("(%d)", imin);
4697
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
1180 }
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
1181
4725
2811a6dd9397 [gaim-migrate @ 5038]
Sean Egan <seanegan@pidgin.im>
parents: 4724
diff changeset
1182 if (((struct buddy*)node)->evil > 0)
4699
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1183 warning = g_strdup_printf("%d%%", ((struct buddy*)node)->evil);
4725
2811a6dd9397 [gaim-migrate @ 5038]
Sean Egan <seanegan@pidgin.im>
parents: 4724
diff changeset
1184
4697
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
1185
4718
688c861c8b63 [gaim-migrate @ 5030]
Nathan Walp <nwalp@pidgin.im>
parents: 4716
diff changeset
1186 if((blist_options & OPT_BLIST_GREY_IDLERS)
688c861c8b63 [gaim-migrate @ 5030]
Nathan Walp <nwalp@pidgin.im>
parents: 4716
diff changeset
1187 && ((struct buddy *)node)->idle) {
688c861c8b63 [gaim-migrate @ 5030]
Nathan Walp <nwalp@pidgin.im>
parents: 4716
diff changeset
1188 if(warning) {
688c861c8b63 [gaim-migrate @ 5030]
Nathan Walp <nwalp@pidgin.im>
parents: 4716
diff changeset
1189 char *w2 = g_strdup_printf("<span color='dim grey'>%s</span>",
688c861c8b63 [gaim-migrate @ 5030]
Nathan Walp <nwalp@pidgin.im>
parents: 4716
diff changeset
1190 warning);
688c861c8b63 [gaim-migrate @ 5030]
Nathan Walp <nwalp@pidgin.im>
parents: 4716
diff changeset
1191 g_free(warning);
688c861c8b63 [gaim-migrate @ 5030]
Nathan Walp <nwalp@pidgin.im>
parents: 4716
diff changeset
1192 warning = w2;
688c861c8b63 [gaim-migrate @ 5030]
Nathan Walp <nwalp@pidgin.im>
parents: 4716
diff changeset
1193 }
688c861c8b63 [gaim-migrate @ 5030]
Nathan Walp <nwalp@pidgin.im>
parents: 4716
diff changeset
1194
688c861c8b63 [gaim-migrate @ 5030]
Nathan Walp <nwalp@pidgin.im>
parents: 4716
diff changeset
1195 if(idle) {
688c861c8b63 [gaim-migrate @ 5030]
Nathan Walp <nwalp@pidgin.im>
parents: 4716
diff changeset
1196 char *i2 = g_strdup_printf("<span color='dim grey'>%s</span>",
688c861c8b63 [gaim-migrate @ 5030]
Nathan Walp <nwalp@pidgin.im>
parents: 4716
diff changeset
1197 idle);
688c861c8b63 [gaim-migrate @ 5030]
Nathan Walp <nwalp@pidgin.im>
parents: 4716
diff changeset
1198 g_free(idle);
688c861c8b63 [gaim-migrate @ 5030]
Nathan Walp <nwalp@pidgin.im>
parents: 4716
diff changeset
1199 idle = i2;
688c861c8b63 [gaim-migrate @ 5030]
Nathan Walp <nwalp@pidgin.im>
parents: 4716
diff changeset
1200 }
688c861c8b63 [gaim-migrate @ 5030]
Nathan Walp <nwalp@pidgin.im>
parents: 4716
diff changeset
1201 }
688c861c8b63 [gaim-migrate @ 5030]
Nathan Walp <nwalp@pidgin.im>
parents: 4716
diff changeset
1202
688c861c8b63 [gaim-migrate @ 5030]
Nathan Walp <nwalp@pidgin.im>
parents: 4716
diff changeset
1203
4699
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1204 gtk_tree_store_set(gtkblist->treemodel, &iter,
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1205 STATUS_ICON_COLUMN, status,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1206 NAME_COLUMN, mark,
4697
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
1207 WARNING_COLUMN, warning,
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
1208 IDLE_COLUMN, idle,
4699
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1209 BUDDY_ICON_COLUMN, avatar,
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1210 NODE_COLUMN, node,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1211 -1);
4699
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1212
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1213 g_free(mark);
4697
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
1214 if (idle)
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
1215 g_free(idle);
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
1216 if (warning)
61a7b2a1f2e6 [gaim-migrate @ 5008]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4696
diff changeset
1217 g_free(warning);
4695
82df59fb9931 [gaim-migrate @ 5006]
Christian Hammond <chipx86@chipx86.com>
parents: 4694
diff changeset
1218
82df59fb9931 [gaim-migrate @ 5006]
Christian Hammond <chipx86@chipx86.com>
parents: 4694
diff changeset
1219 if (status != NULL)
82df59fb9931 [gaim-migrate @ 5006]
Christian Hammond <chipx86@chipx86.com>
parents: 4694
diff changeset
1220 g_object_unref(status);
82df59fb9931 [gaim-migrate @ 5006]
Christian Hammond <chipx86@chipx86.com>
parents: 4694
diff changeset
1221
82df59fb9931 [gaim-migrate @ 5006]
Christian Hammond <chipx86@chipx86.com>
parents: 4694
diff changeset
1222 if (avatar != NULL)
82df59fb9931 [gaim-migrate @ 5006]
Christian Hammond <chipx86@chipx86.com>
parents: 4694
diff changeset
1223 g_object_unref(avatar);
82df59fb9931 [gaim-migrate @ 5006]
Christian Hammond <chipx86@chipx86.com>
parents: 4694
diff changeset
1224
4701
2a792cd7f0f7 [gaim-migrate @ 5012]
Nathan Walp <nwalp@pidgin.im>
parents: 4699
diff changeset
1225 } else if (GAIM_BLIST_NODE_IS_BUDDY(node) && !new_entry) {
2a792cd7f0f7 [gaim-migrate @ 5012]
Nathan Walp <nwalp@pidgin.im>
parents: 4699
diff changeset
1226 gaim_gtk_blist_remove(list, node);
4767
c212c2738d77 [gaim-migrate @ 5085]
Sean Egan <seanegan@pidgin.im>
parents: 4758
diff changeset
1227 if (blist_options & OPT_BLIST_POPUP)
c212c2738d77 [gaim-migrate @ 5085]
Sean Egan <seanegan@pidgin.im>
parents: 4758
diff changeset
1228 gtk_window_present(GTK_WINDOW(gtkblist->window));
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1229 }
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1230 }
2372
c24942700dfd [gaim-migrate @ 2385]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2334
diff changeset
1231
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1232 static void gaim_gtk_blist_destroy(struct gaim_buddy_list *list)
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1233 {
4770
be590660a9c2 [gaim-migrate @ 5088]
Sean Egan <seanegan@pidgin.im>
parents: 4767
diff changeset
1234 if (!gtkblist)
be590660a9c2 [gaim-migrate @ 5088]
Sean Egan <seanegan@pidgin.im>
parents: 4767
diff changeset
1235 return;
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1236 gtk_widget_destroy(gtkblist->window);
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
1237
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
1238 gtkblist->window = gtkblist->vbox = gtkblist->treeview = NULL;
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
1239 gtkblist->treemodel = NULL;
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
1240 gtkblist->idle_column = NULL;
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
1241 gtkblist->warning_column = gtkblist->buddy_icon_column = NULL;
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
1242 gtkblist->bbox = gtkblist->tipwindow = NULL;
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
1243 protomenu = NULL;
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
1244 awaymenu = NULL;
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
1245 bpmenu = NULL;
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
1246
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
1247 gtkblist->timeout = 0;
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1248 }
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1249
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1250 static void gaim_gtk_blist_set_visible(struct gaim_buddy_list *list, gboolean show)
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1251 {
4698
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1252 if (show) {
4699
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1253 gtk_window_present(GTK_WINDOW(gtkblist->window));
4698
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1254 } else {
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1255 if (!connections || docklet_count) {
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1256 #ifdef _WIN32
4711
27aa515e4246 [gaim-migrate @ 5022]
Herman Bloggs <herman@bluedigits.com>
parents: 4706
diff changeset
1257 wgaim_systray_minimize(gtkblist->window);
4698
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1258 #endif
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1259 gtk_widget_hide(gtkblist->window);
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1260 } else {
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1261 gtk_window_iconify(GTK_WINDOW(gtkblist->window));
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1262 }
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1263 }
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1264 }
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1265
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1266 void gaim_gtk_blist_docklet_toggle() {
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1267 /* Useful for the docklet plugin and also for the win32 tray icon*/
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1268 /* This is called when one of those is clicked--it will show/hide the
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1269 buddy list/login window--depending on which is active */
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1270 if (connections && gtkblist) {
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1271 if (GTK_WIDGET_VISIBLE(gtkblist->window)) {
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1272 gaim_blist_set_visible(GAIM_WINDOW_ICONIFIED(gtkblist->window) || gaim_gtk_blist_obscured);
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1273 } else {
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1274 #if _WIN32
4711
27aa515e4246 [gaim-migrate @ 5022]
Herman Bloggs <herman@bluedigits.com>
parents: 4706
diff changeset
1275 wgaim_systray_maximize(gtkblist->window);
4698
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1276 #endif
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1277 gaim_blist_set_visible(TRUE);
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1278 }
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1279 } else if (connections) {
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1280 /* we're logging in or something... do nothing */
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1281 debug_printf("docklet_toggle called with connections but no blist!\n");
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1282 } else {
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1283 if (GTK_WIDGET_VISIBLE(mainwindow)) {
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1284 if (GAIM_WINDOW_ICONIFIED(mainwindow)) {
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1285 gtk_window_present(GTK_WINDOW(mainwindow));
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1286 } else {
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1287 #if _WIN32
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1288 wgaim_systray_minimize(mainwindow);
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1289 #endif
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1290 gtk_widget_hide(mainwindow);
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1291 }
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1292 } else {
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1293 #if _WIN32
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1294 wgaim_systray_maximize(mainwindow);
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1295 #endif
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1296 gtk_window_present(GTK_WINDOW(mainwindow));
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1297 }
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1298 }
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1299 }
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1300
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1301 void gaim_gtk_blist_docklet_add()
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1302 {
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1303 docklet_count++;
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1304 }
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1305
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1306 void gaim_gtk_blist_docklet_remove()
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1307 {
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1308 docklet_count--;
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1309 if (!docklet_count) {
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1310 if (connections) {
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1311 gaim_blist_set_visible(TRUE);
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
1312 } else if(gtkblist && gtkblist->window) {
4698
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1313 gtk_window_present(GTK_WINDOW(gtkblist->window));
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1314 }
da492b4191c1 [gaim-migrate @ 5009]
Sean Egan <seanegan@pidgin.im>
parents: 4697
diff changeset
1315 }
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1316 }
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1317
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1318 static struct gaim_blist_ui_ops blist_ui_ops =
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1319 {
4695
82df59fb9931 [gaim-migrate @ 5006]
Christian Hammond <chipx86@chipx86.com>
parents: 4694
diff changeset
1320 gaim_gtk_blist_new_list,
82df59fb9931 [gaim-migrate @ 5006]
Christian Hammond <chipx86@chipx86.com>
parents: 4694
diff changeset
1321 gaim_gtk_blist_new_node,
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1322 gaim_gtk_blist_show,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1323 gaim_gtk_blist_update,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1324 gaim_gtk_blist_remove,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1325 gaim_gtk_blist_destroy,
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1326 gaim_gtk_blist_set_visible
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1327 };
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1328
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1329
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1330 struct gaim_blist_ui_ops *gaim_get_gtk_blist_ui_ops()
2372
c24942700dfd [gaim-migrate @ 2385]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2334
diff changeset
1331 {
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1332 return &blist_ui_ops;
1037
b73eadf592b1 [gaim-migrate @ 1047]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1036
diff changeset
1333 }
b73eadf592b1 [gaim-migrate @ 1047]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1036
diff changeset
1334
3131
d277a9a2e7d5 [gaim-migrate @ 3146]
Rob Flynn <gaim@robflynn.com>
parents: 3111
diff changeset
1335
d277a9a2e7d5 [gaim-migrate @ 3146]
Rob Flynn <gaim@robflynn.com>
parents: 3111
diff changeset
1336
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1337 /*********************************************************************
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1338 * Public utility functions *
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1339 *********************************************************************/
1058
e878d758cff6 [gaim-migrate @ 1068]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1057
diff changeset
1340
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1341 GdkPixbuf *
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1342 create_prpl_icon(struct gaim_account *account)
4553
3c1735b36327 [gaim-migrate @ 4833]
Christian Hammond <chipx86@chipx86.com>
parents: 4525
diff changeset
1343 {
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1344 struct prpl *prpl = find_prpl(account->protocol);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1345 GdkPixbuf *status = NULL;
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1346 char *filename = NULL;
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1347 const char *protoname = prpl->list_icon(account, NULL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1348 /* "Hey, what's all this crap?" you ask. Status icons will be themeable too, and
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1349 then it will look up protoname from the theme */
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1350 if (!strcmp(protoname, "aim")) {
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1351 filename = g_build_filename(DATADIR, "pixmaps", "gaim", "status", "default", "aim.png", NULL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1352 status = gdk_pixbuf_new_from_file(filename,NULL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1353 g_free(filename);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1354 } else if (!strcmp(protoname, "yahoo")) {
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1355 filename = g_build_filename(DATADIR, "pixmaps", "gaim", "status", "default", "yahoo.png", NULL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1356 status = gdk_pixbuf_new_from_file(filename,NULL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1357 g_free(filename);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1358 } else if (!strcmp(protoname, "msn")) {
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1359 filename = g_build_filename(DATADIR, "pixmaps", "gaim", "status", "default", "msn.png", NULL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1360 status = gdk_pixbuf_new_from_file(filename,NULL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1361 g_free(filename);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1362 } else if (!strcmp(protoname, "jabber")) {
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1363 filename = g_build_filename(DATADIR, "pixmaps", "gaim", "status", "default", "jabber.png", NULL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1364 status = gdk_pixbuf_new_from_file(filename,NULL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1365 g_free(filename);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1366 } else if (!strcmp(protoname, "icq")) {
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1367 filename = g_build_filename(DATADIR, "pixmaps", "gaim", "status", "default", "icq.png", NULL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1368 status = gdk_pixbuf_new_from_file(filename,NULL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1369 g_free(filename);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1370 } else if (!strcmp(protoname, "gadu-gadu")) {
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1371 filename = g_build_filename(DATADIR, "pixmaps", "gaim", "status", "default", "gadugadu.png", NULL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1372 status = gdk_pixbuf_new_from_file(filename,NULL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1373 g_free(filename);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1374 } else if (!strcmp(protoname, "napster")) {
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1375 filename = g_build_filename(DATADIR, "pixmaps", "gaim", "status", "default", "napster.png", NULL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1376 status = gdk_pixbuf_new_from_file(filename,NULL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1377 g_free(filename);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1378 } else if (!strcmp(protoname, "irc")) {
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1379 filename = g_build_filename(DATADIR, "pixmaps", "gaim", "status", "default", "irc.png", NULL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1380 status = gdk_pixbuf_new_from_file(filename,NULL);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1381 g_free(filename);
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 945
diff changeset
1382 }
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4635
diff changeset
1383 return status;
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1384 }
4699
8917880b605e [gaim-migrate @ 5010]
Nathan Walp <nwalp@pidgin.im>
parents: 4698
diff changeset
1385

mercurial