Thu, 29 Jan 2009 03:53:12 +0000
merge of 'b2208020cd189baf2070903b0cf1580571d7ac1b'
and 'e3faf9f4a46f03ed95913c4e8dec38383a5da910'
|
6122
9fbbcb229460
[gaim-migrate @ 6596]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
1 | /* |
| 15884 | 2 | * Purple Ticker Plugin |
|
6122
9fbbcb229460
[gaim-migrate @ 6596]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
3 | * The line below doesn't apply at all, does it? It should be Syd, Sean, and |
|
9fbbcb229460
[gaim-migrate @ 6596]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
4 | * maybe Nathan, I believe. |
| 3391 | 5 | * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald |
| 6 | * | |
| 7 | * This library is free software; you can redistribute it and/or | |
| 8 | * modify it under the terms of the GNU Library General Public | |
| 9 | * License as published by the Free Software Foundation; either | |
| 10 | * version 2 of the License, or (at your option) any later version. | |
| 11 | * | |
| 12 | * This library is distributed in the hope that it will be useful, | |
| 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 15 | * Library General Public License for more details. | |
| 16 | * | |
| 17 | * You should have received a copy of the GNU Library General Public | |
| 18 | * License along with this library; if not, write to the | |
|
19859
71d37b57eff2
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
17241
diff
changeset
|
19 | * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
|
71d37b57eff2
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
17241
diff
changeset
|
20 | * Boston, MA 02111-1301, USA. |
| 3391 | 21 | */ |
| 22 | ||
| 23 | /* | |
| 24 | * ticker.c -- Syd Logan, Summer 2000 | |
| 25 | * pluginized- Sean Egan, Summer 2002 | |
| 26 | */ | |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5607
diff
changeset
|
27 | #include "internal.h" |
| 15577 | 28 | #include "pidgin.h" |
| 3391 | 29 | |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5607
diff
changeset
|
30 | #include "blist.h" |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5607
diff
changeset
|
31 | #include "conversation.h" |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5607
diff
changeset
|
32 | #include "debug.h" |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5607
diff
changeset
|
33 | #include "prpl.h" |
|
6485
3c7ba18e32f1
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
34 | #include "signals.h" |
| 9943 | 35 | #include "version.h" |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5607
diff
changeset
|
36 | |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5607
diff
changeset
|
37 | #include "gtkblist.h" |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5607
diff
changeset
|
38 | #include "gtkplugin.h" |
| 17241 | 39 | #include "gtkutils.h" |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5607
diff
changeset
|
40 | |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5607
diff
changeset
|
41 | #include "gtkticker.h" |
| 3391 | 42 | |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
43 | #define TICKER_PLUGIN_ID "gtk-ticker" |
| 3867 | 44 | |
| 3391 | 45 | static GtkWidget *tickerwindow = NULL; |
| 46 | static GtkWidget *ticker; | |
| 47 | ||
| 48 | typedef struct { | |
| 15884 | 49 | PurpleContact *contact; |
| 3391 | 50 | GtkWidget *ebox; |
| 51 | GtkWidget *label; | |
| 5170 | 52 | GtkWidget *icon; |
|
6122
9fbbcb229460
[gaim-migrate @ 6596]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
53 | guint timeout; |
| 3391 | 54 | } TickerData; |
| 55 | ||
| 5170 | 56 | GList *tickerbuds = NULL; |
| 3391 | 57 | |
| 15884 | 58 | static void buddy_ticker_update_contact(PurpleContact *contact); |
|
13151
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
59 | |
| 5172 | 60 | static gboolean buddy_ticker_destroy_window(GtkWidget *window, |
| 61 | GdkEventAny *event, gpointer data) { | |
| 62 | if(window) | |
| 63 | gtk_widget_hide(window); | |
| 64 | ||
| 65 | return TRUE; /* don't actually destroy the window */ | |
| 3391 | 66 | } |
| 67 | ||
|
22104
56970903b8e9
Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@pidgin.im>
parents:
20288
diff
changeset
|
68 | static void buddy_ticker_create_window(void) { |
| 5170 | 69 | if(tickerwindow) { |
| 70 | gtk_widget_show(tickerwindow); | |
| 71 | return; | |
| 72 | } | |
| 3391 | 73 | |
| 17213 | 74 | tickerwindow = pidgin_create_window(_("Buddy Ticker"), 0, "ticker", TRUE); |
|
5286
a35f037e7841
[gaim-migrate @ 5658]
David J. Brigada <brigada@prism.net>
parents:
5234
diff
changeset
|
75 | gtk_window_set_default_size(GTK_WINDOW(tickerwindow), 500, -1); |
| 5172 | 76 | g_signal_connect(G_OBJECT(tickerwindow), "delete_event", |
| 5170 | 77 | G_CALLBACK (buddy_ticker_destroy_window), NULL); |
| 3391 | 78 | |
|
4850
ca9d06f1bb54
[gaim-migrate @ 5175]
Mark Doliner <markdoliner@pidgin.im>
parents:
4770
diff
changeset
|
79 | ticker = gtk_ticker_new(); |
| 5170 | 80 | gtk_ticker_set_spacing(GTK_TICKER(ticker), 20); |
| 81 | gtk_container_add(GTK_CONTAINER(tickerwindow), ticker); | |
| 82 | gtk_ticker_set_interval(GTK_TICKER(ticker), 500); | |
| 83 | gtk_ticker_set_scootch(GTK_TICKER(ticker), 10); | |
| 84 | gtk_ticker_start_scroll(GTK_TICKER(ticker)); | |
|
5286
a35f037e7841
[gaim-migrate @ 5658]
David J. Brigada <brigada@prism.net>
parents:
5234
diff
changeset
|
85 | gtk_widget_set_size_request(ticker, 1, -1); |
| 3391 | 86 | |
| 5170 | 87 | gtk_widget_show_all(tickerwindow); |
| 3391 | 88 | } |
| 89 | ||
| 5170 | 90 | static gboolean buddy_click_cb(GtkWidget *widget, GdkEventButton *event, gpointer user_data) { |
| 15884 | 91 | PurpleContact *contact = user_data; |
| 92 | PurpleBuddy *b = purple_contact_get_priority_buddy(contact); | |
|
4850
ca9d06f1bb54
[gaim-migrate @ 5175]
Mark Doliner <markdoliner@pidgin.im>
parents:
4770
diff
changeset
|
93 | |
| 15884 | 94 | purple_conversation_new(PURPLE_CONV_TYPE_IM, b->account, b->name); |
| 3391 | 95 | return TRUE; |
| 96 | } | |
| 97 | ||
| 15884 | 98 | static TickerData *buddy_ticker_find_contact(PurpleContact *c) { |
| 5170 | 99 | GList *tb; |
| 100 | for(tb = tickerbuds; tb; tb = tb->next) { | |
| 101 | TickerData *td = tb->data; | |
|
13151
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
102 | if(td->contact == c) |
| 5170 | 103 | return td; |
| 104 | } | |
| 105 | return NULL; | |
| 106 | } | |
| 107 | ||
| 15884 | 108 | static void buddy_ticker_set_pixmap(PurpleContact *c) { |
|
13151
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
109 | TickerData *td = buddy_ticker_find_contact(c); |
| 5170 | 110 | GdkPixbuf *pixbuf; |
| 3391 | 111 | |
| 5170 | 112 | if(!td) |
| 3391 | 113 | return; |
| 5170 | 114 | |
| 115 | if(!td->icon) | |
| 116 | td->icon = gtk_image_new(); | |
| 3391 | 117 | |
| 15884 | 118 | pixbuf = pidgin_blist_get_status_icon((PurpleBlistNode*)c, |
|
15569
e85adc8d3b5c
gtkblist changes to pidgin
Sean Egan <seanegan@pidgin.im>
parents:
15562
diff
changeset
|
119 | PIDGIN_STATUS_ICON_SMALL); |
| 5170 | 120 | gtk_image_set_from_pixbuf(GTK_IMAGE(td->icon), pixbuf); |
| 121 | g_object_unref(G_OBJECT(pixbuf)); | |
| 122 | } | |
| 123 | ||
|
6122
9fbbcb229460
[gaim-migrate @ 6596]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
124 | static gboolean buddy_ticker_set_pixmap_cb(gpointer data) { |
|
9fbbcb229460
[gaim-migrate @ 6596]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
125 | TickerData *td = data; |
|
9fbbcb229460
[gaim-migrate @ 6596]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
126 | |
|
20206
a121040d571b
applied changes from 0573c84391460ff90a7de830442aad5ffb6a0c5f
Luke Schierer <lschiere@pidgin.im>
parents:
19859
diff
changeset
|
127 | if (g_list_find(tickerbuds, td) != NULL) { |
|
a121040d571b
applied changes from 0573c84391460ff90a7de830442aad5ffb6a0c5f
Luke Schierer <lschiere@pidgin.im>
parents:
19859
diff
changeset
|
128 | buddy_ticker_update_contact(td->contact); |
|
a121040d571b
applied changes from 0573c84391460ff90a7de830442aad5ffb6a0c5f
Luke Schierer <lschiere@pidgin.im>
parents:
19859
diff
changeset
|
129 | td->timeout = 0; |
|
a121040d571b
applied changes from 0573c84391460ff90a7de830442aad5ffb6a0c5f
Luke Schierer <lschiere@pidgin.im>
parents:
19859
diff
changeset
|
130 | } |
|
6122
9fbbcb229460
[gaim-migrate @ 6596]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
131 | |
|
9fbbcb229460
[gaim-migrate @ 6596]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
132 | return FALSE; |
|
9fbbcb229460
[gaim-migrate @ 6596]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
133 | } |
|
9fbbcb229460
[gaim-migrate @ 6596]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
134 | |
| 15884 | 135 | static void buddy_ticker_add_buddy(PurpleBuddy *b) { |
| 5170 | 136 | GtkWidget *hbox; |
| 137 | TickerData *td; | |
| 15884 | 138 | PurpleContact *contact; |
|
13151
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
139 | |
| 15884 | 140 | contact = purple_buddy_get_contact(b); |
| 5170 | 141 | |
| 142 | buddy_ticker_create_window(); | |
| 5172 | 143 | |
| 3391 | 144 | if (!ticker) |
| 145 | return; | |
| 146 | ||
|
13151
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
147 | if (buddy_ticker_find_contact(contact)) |
|
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
148 | { |
|
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
149 | buddy_ticker_update_contact(contact); |
| 3391 | 150 | return; |
|
13151
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
151 | } |
| 3391 | 152 | |
| 5170 | 153 | td = g_new0(TickerData, 1); |
|
13151
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
154 | td->contact = contact; |
| 5170 | 155 | tickerbuds = g_list_append(tickerbuds, td); |
| 3391 | 156 | |
| 5170 | 157 | td->ebox = gtk_event_box_new(); |
| 158 | gtk_ticker_add(GTK_TICKER(ticker), td->ebox); | |
| 159 | hbox = gtk_hbox_new(FALSE, 0); | |
| 160 | gtk_container_add(GTK_CONTAINER(td->ebox), hbox); | |
|
13151
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
161 | buddy_ticker_set_pixmap(contact); |
|
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
162 | gtk_box_pack_start(GTK_BOX(hbox), td->icon, FALSE, FALSE, 0); |
| 3391 | 163 | |
| 5170 | 164 | g_signal_connect(G_OBJECT(td->ebox), "button-press-event", |
|
13151
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
165 | G_CALLBACK(buddy_click_cb), contact); |
| 3391 | 166 | |
| 15884 | 167 | td->label = gtk_label_new(purple_contact_get_alias(contact)); |
|
13151
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
168 | gtk_box_pack_start(GTK_BOX(hbox), td->label, FALSE, FALSE, 2); |
| 5170 | 169 | |
| 170 | gtk_widget_show_all(td->ebox); | |
| 171 | gtk_widget_show(tickerwindow); | |
|
6122
9fbbcb229460
[gaim-migrate @ 6596]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
172 | |
|
9fbbcb229460
[gaim-migrate @ 6596]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
173 | /* |
|
9fbbcb229460
[gaim-migrate @ 6596]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
174 | * Update the icon in a few seconds (after the open door icon has |
|
9fbbcb229460
[gaim-migrate @ 6596]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
175 | * changed). This is somewhat ugly. |
|
9fbbcb229460
[gaim-migrate @ 6596]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
176 | */ |
|
9fbbcb229460
[gaim-migrate @ 6596]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
177 | td->timeout = g_timeout_add(11000, buddy_ticker_set_pixmap_cb, td); |
| 3391 | 178 | } |
| 179 | ||
|
13151
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
180 | static void buddy_ticker_remove(TickerData *td) { |
|
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
181 | gtk_ticker_remove(GTK_TICKER(ticker), td->ebox); |
|
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
182 | tickerbuds = g_list_remove(tickerbuds, td); |
|
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
183 | if (td->timeout != 0) |
|
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
184 | g_source_remove(td->timeout); |
|
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
185 | g_free(td); |
|
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
186 | } |
|
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
187 | |
| 15884 | 188 | static void buddy_ticker_update_contact(PurpleContact *contact) { |
|
13151
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
189 | TickerData *td = buddy_ticker_find_contact(contact); |
| 3391 | 190 | |
| 5170 | 191 | if (!td) |
| 192 | return; | |
| 3391 | 193 | |
| 5172 | 194 | /* pop up the ticker window again */ |
| 195 | buddy_ticker_create_window(); | |
| 15884 | 196 | if (purple_contact_get_priority_buddy(contact) == NULL) |
|
13151
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
197 | buddy_ticker_remove(td); |
|
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
198 | else { |
|
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
199 | buddy_ticker_set_pixmap(contact); |
| 15884 | 200 | gtk_label_set_text(GTK_LABEL(td->label), purple_contact_get_alias(contact)); |
|
13151
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
201 | } |
|
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
202 | } |
| 5172 | 203 | |
| 15884 | 204 | static void buddy_ticker_remove_buddy(PurpleBuddy *b) { |
| 205 | PurpleContact *c = purple_buddy_get_contact(b); | |
|
13151
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
206 | TickerData *td = buddy_ticker_find_contact(c); |
|
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
207 | |
|
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
208 | if (!td) |
|
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
209 | return; |
|
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
210 | |
| 15884 | 211 | purple_contact_invalidate_priority_buddy(c); |
|
13151
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
212 | |
|
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
213 | /* pop up the ticker window again */ |
|
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
214 | buddy_ticker_create_window(); |
|
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
215 | buddy_ticker_update_contact(c); |
| 3391 | 216 | } |
| 217 | ||
|
22104
56970903b8e9
Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@pidgin.im>
parents:
20288
diff
changeset
|
218 | static void buddy_ticker_show(void) |
| 3391 | 219 | { |
| 15884 | 220 | PurpleBuddyList *list = purple_get_blist(); |
| 221 | PurpleBlistNode *gnode, *cnode, *bnode; | |
| 222 | PurpleBuddy *b; | |
| 3391 | 223 | |
| 5170 | 224 | if(!list) |
| 225 | return; | |
| 3391 | 226 | |
| 5170 | 227 | for(gnode = list->root; gnode; gnode = gnode->next) { |
| 15884 | 228 | if(!PURPLE_BLIST_NODE_IS_GROUP(gnode)) |
| 5170 | 229 | continue; |
| 6695 | 230 | for(cnode = gnode->child; cnode; cnode = cnode->next) { |
| 15884 | 231 | if(!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) |
| 5170 | 232 | continue; |
| 6695 | 233 | for(bnode = cnode->child; bnode; bnode = bnode->next) { |
| 15884 | 234 | if(!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) |
| 6695 | 235 | continue; |
| 15884 | 236 | b = (PurpleBuddy *)bnode; |
| 237 | if(PURPLE_BUDDY_IS_ONLINE(b)) | |
| 6695 | 238 | buddy_ticker_add_buddy(b); |
| 239 | } | |
| 3391 | 240 | } |
| 241 | } | |
| 242 | } | |
| 243 | ||
|
6485
3c7ba18e32f1
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
244 | static void |
| 15884 | 245 | buddy_signon_cb(PurpleBuddy *b) |
|
6485
3c7ba18e32f1
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
246 | { |
| 15884 | 247 | PurpleContact *c = purple_buddy_get_contact(b); |
| 248 | purple_contact_invalidate_priority_buddy(c); | |
|
13151
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
249 | if(buddy_ticker_find_contact(c)) |
|
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
250 | buddy_ticker_update_contact(c); |
| 5170 | 251 | else |
| 252 | buddy_ticker_add_buddy(b); | |
| 3391 | 253 | } |
| 254 | ||
|
6485
3c7ba18e32f1
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
255 | static void |
| 15884 | 256 | buddy_signoff_cb(PurpleBuddy *b) |
|
6485
3c7ba18e32f1
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
257 | { |
| 5170 | 258 | buddy_ticker_remove_buddy(b); |
| 5185 | 259 | if(!tickerbuds) |
| 260 | gtk_widget_hide(tickerwindow); | |
| 3391 | 261 | } |
| 262 | ||
|
6485
3c7ba18e32f1
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
263 | static void |
| 15884 | 264 | status_changed_cb(PurpleBuddy *b, PurpleStatus *os, PurpleStatus *s) |
|
6485
3c7ba18e32f1
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
265 | { |
| 15884 | 266 | PurpleContact *c = purple_buddy_get_contact(b); |
|
13151
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
267 | if(buddy_ticker_find_contact(c)) |
|
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
268 | buddy_ticker_set_pixmap(c); |
| 5170 | 269 | else |
| 270 | buddy_ticker_add_buddy(b); | |
| 3391 | 271 | } |
| 272 | ||
| 8213 | 273 | static void |
| 15884 | 274 | signoff_cb(PurpleConnection *gc) |
| 8213 | 275 | { |
| 276 | TickerData *td; | |
| 15884 | 277 | if (!purple_connections_get_all()) { |
| 8213 | 278 | while (tickerbuds) { |
| 279 | td = tickerbuds->data; | |
| 280 | tickerbuds = g_list_delete_link(tickerbuds, tickerbuds); | |
| 281 | if (td->timeout != 0) | |
| 282 | g_source_remove(td->timeout); | |
| 283 | g_free(td); | |
| 284 | } | |
| 285 | gtk_widget_destroy(tickerwindow); | |
| 286 | tickerwindow = NULL; | |
| 287 | ticker = NULL; | |
| 288 | } else { | |
| 289 | GList *t = tickerbuds; | |
| 290 | while (t) { | |
| 291 | td = t->data; | |
| 292 | t = t->next; | |
|
13151
e6f06eacea11
[gaim-migrate @ 15513]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11935
diff
changeset
|
293 | buddy_ticker_update_contact(td->contact); |
| 8213 | 294 | } |
| 295 | } | |
| 296 | } | |
| 297 | ||
| 298 | ||
| 3630 | 299 | /* |
| 300 | * EXPORTED FUNCTIONS | |
| 301 | */ | |
| 302 | ||
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
303 | static gboolean |
| 15884 | 304 | plugin_load(PurplePlugin *plugin) |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
305 | { |
| 15884 | 306 | void *blist_handle = purple_blist_get_handle(); |
|
6485
3c7ba18e32f1
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
307 | |
| 15884 | 308 | purple_signal_connect(purple_connections_get_handle(), "signed-off", |
| 309 | plugin, PURPLE_CALLBACK(signoff_cb), NULL); | |
| 310 | purple_signal_connect(blist_handle, "buddy-signed-on", | |
| 311 | plugin, PURPLE_CALLBACK(buddy_signon_cb), NULL); | |
| 312 | purple_signal_connect(blist_handle, "buddy-signed-off", | |
| 313 | plugin, PURPLE_CALLBACK(buddy_signoff_cb), NULL); | |
| 314 | purple_signal_connect(blist_handle, "buddy-status-changed", | |
| 315 | plugin, PURPLE_CALLBACK(status_changed_cb), NULL); | |
| 3391 | 316 | |
| 15884 | 317 | if (purple_connections_get_all()) |
| 5170 | 318 | buddy_ticker_show(); |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
319 | |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
320 | return TRUE; |
| 3391 | 321 | } |
| 322 | ||
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
323 | static gboolean |
| 15884 | 324 | plugin_unload(PurplePlugin *plugin) |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
325 | { |
|
6122
9fbbcb229460
[gaim-migrate @ 6596]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
326 | TickerData *td; |
|
9fbbcb229460
[gaim-migrate @ 6596]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
327 | |
|
9fbbcb229460
[gaim-migrate @ 6596]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
328 | while (tickerbuds) { |
|
9fbbcb229460
[gaim-migrate @ 6596]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
329 | td = tickerbuds->data; |
| 5186 | 330 | tickerbuds = g_list_delete_link(tickerbuds, tickerbuds); |
|
6122
9fbbcb229460
[gaim-migrate @ 6596]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
331 | if (td->timeout != 0) |
|
9fbbcb229460
[gaim-migrate @ 6596]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
332 | g_source_remove(td->timeout); |
|
9fbbcb229460
[gaim-migrate @ 6596]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
333 | g_free(td); |
| 5185 | 334 | } |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
335 | |
|
5984
a5b22eb728ef
[gaim-migrate @ 6432]
Christian Hammond <chipx86@chipx86.com>
parents:
5983
diff
changeset
|
336 | if (tickerwindow != NULL) { |
|
5983
435a19acf12a
[gaim-migrate @ 6431]
Christian Hammond <chipx86@chipx86.com>
parents:
5920
diff
changeset
|
337 | gtk_widget_destroy(tickerwindow); |
|
5984
a5b22eb728ef
[gaim-migrate @ 6432]
Christian Hammond <chipx86@chipx86.com>
parents:
5983
diff
changeset
|
338 | tickerwindow = NULL; |
|
a5b22eb728ef
[gaim-migrate @ 6432]
Christian Hammond <chipx86@chipx86.com>
parents:
5983
diff
changeset
|
339 | } |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
340 | |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
341 | return TRUE; |
| 3391 | 342 | } |
| 5170 | 343 | |
| 15884 | 344 | static PurplePluginInfo info = |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
345 | { |
| 15884 | 346 | PURPLE_PLUGIN_MAGIC, |
| 347 | PURPLE_MAJOR_VERSION, | |
| 348 | PURPLE_MINOR_VERSION, | |
| 349 | PURPLE_PLUGIN_STANDARD, /**< type */ | |
|
15562
8c8249fe5e3c
gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
350 | PIDGIN_PLUGIN_TYPE, /**< ui_requirement */ |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
351 | 0, /**< flags */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
352 | NULL, /**< dependencies */ |
| 15884 | 353 | PURPLE_PRIORITY_DEFAULT, /**< priority */ |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
354 | |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
355 | TICKER_PLUGIN_ID, /**< id */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
356 | N_("Buddy Ticker"), /**< name */ |
|
20288
5ca925a094e2
applied changes from 03b709ec2a153e7e82719df0ba4635108bb1d3c6
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
20206
diff
changeset
|
357 | DISPLAY_VERSION, /**< version */ |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
358 | /** summary */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
359 | N_("A horizontal scrolling version of the buddy list."), |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
360 | /** description */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
361 | N_("A horizontal scrolling version of the buddy list."), |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
362 | "Syd Logan", /**< author */ |
| 15884 | 363 | PURPLE_WEBSITE, /**< homepage */ |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
364 | |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
365 | plugin_load, /**< load */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
366 | plugin_unload, /**< unload */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
367 | NULL, /**< destroy */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
368 | |
|
11318
13fa1d5134f3
[gaim-migrate @ 13521]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9943
diff
changeset
|
369 | NULL, /**< ui_info */ |
| 8993 | 370 | NULL, /**< extra_info */ |
| 371 | NULL, | |
|
16749
14a3fdc0aed7
Default plugins are done, for the release i'm not that concerned about plugins that do _NOT_ compile by default
Gary Kramlich <grim@reaperworld.com>
parents:
15884
diff
changeset
|
372 | NULL, |
|
14a3fdc0aed7
Default plugins are done, for the release i'm not that concerned about plugins that do _NOT_ compile by default
Gary Kramlich <grim@reaperworld.com>
parents:
15884
diff
changeset
|
373 | |
|
14a3fdc0aed7
Default plugins are done, for the release i'm not that concerned about plugins that do _NOT_ compile by default
Gary Kramlich <grim@reaperworld.com>
parents:
15884
diff
changeset
|
374 | /* padding */ |
|
14a3fdc0aed7
Default plugins are done, for the release i'm not that concerned about plugins that do _NOT_ compile by default
Gary Kramlich <grim@reaperworld.com>
parents:
15884
diff
changeset
|
375 | NULL, |
|
14a3fdc0aed7
Default plugins are done, for the release i'm not that concerned about plugins that do _NOT_ compile by default
Gary Kramlich <grim@reaperworld.com>
parents:
15884
diff
changeset
|
376 | NULL, |
|
14a3fdc0aed7
Default plugins are done, for the release i'm not that concerned about plugins that do _NOT_ compile by default
Gary Kramlich <grim@reaperworld.com>
parents:
15884
diff
changeset
|
377 | NULL, |
| 8993 | 378 | NULL |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
379 | }; |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
380 | |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
381 | static void |
| 15884 | 382 | init_plugin(PurplePlugin *plugin) |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
383 | { |
| 3551 | 384 | } |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
385 | |
| 15884 | 386 | PURPLE_INIT_PLUGIN(ticker, init_plugin, info) |